\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv8/DatabaseBackupMaster/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv8/DatabaseBackupMaster/forms.py


from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SelectField, PasswordField, BooleanField, RadioField, EmailField, SubmitField
from wtforms.validators import DataRequired, NumberRange, Optional, Length, Email, ValidationError, EqualTo
from models import User

class DatabaseConnectionForm(FlaskForm):
    """Form for database connection configuration."""
    name = StringField('Bağlantı Adı', validators=[DataRequired(), Length(max=64)])
    db_type = SelectField('Veritabanı Tipi', choices=[
        ('mysql', 'MySQL'),
        ('mariadb', 'MariaDB'),
        ('postgresql', 'PostgreSQL'),
        ('mssql', 'Microsoft SQL Server')
    ], validators=[DataRequired()])
    host = StringField('Sunucu', validators=[DataRequired(), Length(max=128)])
    port = IntegerField('Port', validators=[DataRequired(), NumberRange(min=1, max=65535)])
    username = StringField('Kullanıcı Adı', validators=[DataRequired(), Length(max=64)])
    password = PasswordField('Şifre', validators=[DataRequired(), Length(max=128)])
    database = StringField('Veritabanı Adı', validators=[DataRequired(), Length(max=64)])
    pg_version = SelectField('PostgreSQL Sürümü', choices=[
        ('', 'Otomatik Algıla'),
        ('13', 'PostgreSQL 13'),
        ('14', 'PostgreSQL 14'),
        ('15', 'PostgreSQL 15'),
        ('16', 'PostgreSQL 16'),
        ('17', 'PostgreSQL 17')
    ], validators=[Optional()])

class StorageTargetForm(FlaskForm):
    """Form for storage target configuration."""
    name = StringField('Depolama Adı', validators=[DataRequired(), Length(max=64)])
    storage_type = SelectField('Depolama Tipi', choices=[
        ('smb', 'SMB/CIFS (Windows Paylaşımı)'),
        ('nfs', 'NFS'),
        ('ftp', 'FTP'),
        ('sftp', 'SFTP (SSH File Transfer)')
    ], validators=[DataRequired()])
    host = StringField('Sunucu', validators=[DataRequired(), Length(max=128)])
    port = IntegerField('Port', validators=[Optional(), NumberRange(min=1, max=65535)])
    username = StringField('Kullanıcı Adı', validators=[Optional(), Length(max=64)])
    password = PasswordField('Şifre', validators=[Optional(), Length(max=128)])
    path = StringField('Yol/Paylaşım', validators=[DataRequired(), Length(max=256)])

class BackupJobForm(FlaskForm):
    """Form for backup job configuration."""
    name = StringField('Görev Adı', validators=[DataRequired(), Length(max=64)])
    database_id = SelectField('Veritabanı Bağlantısı', coerce=int, validators=[DataRequired()])
    storage_id = SelectField('Depolama Hedefi', coerce=int, validators=[DataRequired()])
    schedule_type = SelectField('Zamanlama Türü', choices=[
        ('daily', 'Günlük'),
        ('weekly', 'Haftalık'),
        ('monthly', 'Aylık'),
        ('custom', 'Özel Cron İfadesi')
    ], validators=[DataRequired()])
    schedule_value = StringField('Zamanlama Değeri', validators=[DataRequired()])
    retention_days = IntegerField('Saklama Süresi (Gün)', validators=[DataRequired(), NumberRange(min=1)])
    enabled = BooleanField('Etkinleştirildi', default=True)
    
    # Şifreleme seçenekleri
    encrypt_backup = BooleanField('Yedekleri Şifrele', default=False,
                                 description="GPG şifreleme kullanarak yedekleri güvenli bir şekilde şifreleyin")
    encryption_type = SelectField('Şifreleme Türü', choices=[
        ('', 'Şifreleme Yok'),
        ('symmetric', 'Simetrik (Şifre ile)'),
        ('asymmetric', 'Asimetrik (GPG Anahtarı ile)')
    ], default='', validators=[Optional()])
    encryption_key_id = SelectField('Şifreleme Anahtarı', coerce=int, validators=[Optional()])
    encryption_passphrase = PasswordField('Şifreleme Şifresi', validators=[Optional(), Length(min=8, max=128)],
                                      description="Simetrik şifreleme için güçlü bir şifre girin")
    
    # Sıkıştırma Seçenekleri
    compress_backup = BooleanField('Yedekleri Sıkıştır', default=True,
                                description="Disk alanından tasarruf etmek için yedekleri sıkıştırın")
    compression_type = SelectField('Sıkıştırma Formatı', choices=[
        ('zip', 'ZIP (.zip)'),
        ('gzip', 'GZIP (.gz)'),
        ('tar.gz', 'TAR.GZ (.tar.gz)')
    ], default='zip', validators=[Optional()])
    
    # Yedekleme Yöntemi Seçenekleri
    backup_method = SelectField('Yedekleme Yöntemi', choices=[
        ('full', 'Tam Yedekleme (Full Backup)'),
        ('incremental', 'Artırımlı Yedekleme (Incremental Backup)'),
        ('differential', 'Fark Yedekleme (Differential Backup)')
    ], default='full', description="Artırımlı yedekleme sadece MySQL/MariaDB için desteklenmektedir.")
    
    xtrabackup_options = StringField('Yedekleme Aracı Ek Parametreleri', 
                                  validators=[Optional(), Length(max=1024)],
                                  description="Percona XtraBackup veya MariaBackup için ek parametre ve seçenekler")


class LoginForm(FlaskForm):
    """Form for user login."""
    username = StringField('Kullanıcı Adı', validators=[DataRequired()])
    password = PasswordField('Şifre', validators=[DataRequired()])
    remember_me = BooleanField('Beni Hatırla')
    submit = SubmitField('Giriş Yap')


class RegistrationForm(FlaskForm):
    """Form for user registration."""
    username = StringField('Kullanıcı Adı', validators=[DataRequired(), Length(min=3, max=64)])
    email = EmailField('Email', validators=[DataRequired(), Email(), Length(max=120)])
    password = PasswordField('Şifre', validators=[DataRequired(), Length(min=8)])
    password2 = PasswordField('Şifreyi Tekrarla', validators=[DataRequired(), EqualTo('password', message='Şifreler eşleşmiyor.')])
    is_admin = BooleanField('Admin Yetkisi', default=False)
    submit = SubmitField('Kayıt Ol')
    
    def validate_username(self, username):
        """Validate that username doesn't already exist."""
        user = User.query.filter_by(username=username.data).first()
        if user is not None:
            raise ValidationError('Bu kullanıcı adı zaten kullanılıyor. Lütfen farklı bir tane seçin.')
            
    def validate_email(self, email):
        """Validate that email doesn't already exist."""
        user = User.query.filter_by(email=email.data).first()
        if user is not None:
            raise ValidationError('Bu email adresi zaten kullanılıyor. Lütfen farklı bir tane girin.')


class SmtpSettingsForm(FlaskForm):
    """Form for configuring SMTP email settings."""
    mail_server = StringField('SMTP Server', validators=[DataRequired(), Length(max=128)])
    mail_username = StringField('SMTP Username', validators=[DataRequired(), Length(max=128)])
    mail_password = PasswordField('SMTP Password', validators=[DataRequired(), Length(max=128)])
    mail_default_sender = EmailField('Sender Email', validators=[DataRequired(), Email(), Length(max=128)])
    mail_connection_type = RadioField('Connection Type', choices=[
        ('tls', 'TLS (Port 587)'),
        ('ssl', 'SSL (Port 465)')
    ], default='tls', validators=[DataRequired()])
    notification_emails = StringField('Notification Recipients', 
                                     validators=[DataRequired(), Length(max=256)],
                                     description="Comma-separated list of email addresses to receive backup notifications")


class EncryptionKeyForm(FlaskForm):
    """Form for GPG encryption key management."""
    name = StringField('Anahtar Adı', validators=[DataRequired(), Length(max=64)])
    email = EmailField('Email', validators=[DataRequired(), Email(), Length(max=128)])
    key_type = SelectField('Anahtar Türü', choices=[
        ('RSA', 'RSA (Önerilen)'),
        ('DSA', 'DSA')
    ], default='RSA', validators=[DataRequired()])
    key_length = SelectField('Anahtar Uzunluğu', choices=[
        ('1024', '1024 bit (Hızlı, daha az güvenli)'),
        ('2048', '2048 bit (Önerilen)'),
        ('4096', '4096 bit (Daha güvenli, daha yavaş)')
    ], default='2048', coerce=int, validators=[DataRequired()])
    passphrase = PasswordField('Şifre (İsteğe Bağlı)', validators=[Optional(), Length(min=8, max=128)],
                             description="Özel anahtarı korumak için şifre (boş bırakılabilir)")
    store_private_key = BooleanField('Özel Anahtarı Sakla', default=True,
                                   description="GPG özel anahtarını sistemde sakla (asimetrik şifreleme için gereklidir)")
    submit = SubmitField('Anahtar Oluştur')

© KUJUNTI.ID