o
    �žŽjì  ã                   @   s´   d dl Z d dlZd dlmZ d dlZdadZdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd$dd„Zdd„ Zdd„ Zdd„ Zd$d d!„Zd"d#„ ZdS )%é    N)ÚFernetuA   âŒ¯ Ø§Ø³Ù� Ø­Ø¨ØŒ Ù‡Ø°Ø§ Ø§Ù„Ø¨ÙˆØª Ø®Ø§Øµ Ø¨Ø§Ù„Ù…Ø·ÙˆØ± Ù�Ù‚Ø·.c                   C   s   t d u rttj ¡ ƒa t S ©N)Ú_fernetr   ÚconfigÚ
FERNET_KEYÚencode© r   r   ú#/var/www/kodo/Anonymous/database.pyÚ_f   s   r
   c                 C   ó   t ƒ  |  ¡ ¡ ¡ S r   )r
   Úencryptr   Údecode©Úvaluer   r   r	   r      ó   r   c                 C   r   r   )r
   Údecryptr   r   r   r   r   r	   r      r   r   c               
   Ã   sØ   �t  tj¡4 I d H šT} |  d¡I d H  |  d¡I d H  |  d¡I d H  |  d¡I d H  tjD ]}|  d|d tt ¡ ƒf¡I d H  q/|  ddtf¡I d H  |  	¡ I d H  W d   ƒI d H  d S 1 I d H sew   Y  d S )NzPRAGMA journal_mode=WALzþCREATE TABLE IF NOT EXISTS accounts (
                user_id INTEGER PRIMARY KEY,
                phone TEXT,
                name TEXT,
                username TEXT,
                session TEXT NOT NULL,
                added_at INTEGER
            )zœCREATE TABLE IF NOT EXISTS devs (
                user_id INTEGER PRIMARY KEY,
                username TEXT,
                added_at INTEGER
            )ztCREATE TABLE IF NOT EXISTS settings (
                key TEXT PRIMARY KEY,
                value TEXT
            )zIINSERT OR IGNORE INTO devs (user_id, username, added_at) VALUES (?, ?, ?)z9INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)Ústart_message)
Ú	aiosqliteÚconnectr   ÚDB_PATHÚexecuteÚDEV_IDÚintÚtimeÚDEFAULT_STARTÚcommit)ÚconnÚdevr   r   r	   Úinit_db   s.   €
ÿ

ÿ
ÿ
þ
þ.Þr   c                 Ã   s€   �t  tj¡4 I d H š(}| d| |||t|ƒtt ¡ ƒf¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s9w   Y  d S )NaF  INSERT INTO accounts (user_id, phone, name, username, session, added_at)
               VALUES (?, ?, ?, ?, ?, ?)
               ON CONFLICT(user_id) DO UPDATE SET
                 phone=excluded.phone,
                 name=excluded.name,
                 username=excluded.username,
                 session=excluded.session)	r   r   r   r   r   r   r   r   r   )Úuser_idÚphoneÚnameÚusernameÚsession_stringr   r   r   r	   Úsave_accountB   s   €
ø
.õr$   c               	   Ã   óz   �t  tj¡4 I d H š%} t j| _|  d¡I d H }| ¡ I d H }dd„ |D ƒW  d   ƒI d H  S 1 I d H s6w   Y  d S )Nz,SELECT * FROM accounts ORDER BY added_at ASCc                 S   ó   g | ]}t |ƒ‘qS r   ©Údict©Ú.0Úrr   r   r	   Ú
<listcomp>V   ó    z get_accounts.<locals>.<listcomp>©r   r   r   r   ÚRowÚrow_factoryr   Úfetchall©r   ÚcurÚrowsr   r   r	   Úget_accountsQ   ó   €0ür5   c              	   Ã   s€   �t  tj¡4 I d H š(}t j|_| d| f¡I d H }| ¡ I d H }|r't|ƒnd W  d   ƒI d H  S 1 I d H s9w   Y  d S )Nz(SELECT * FROM accounts WHERE user_id = ?)	r   r   r   r   r/   r0   r   Úfetchoner(   )r   r   r3   Úrowr   r   r	   Úget_accountY   s   €0ür9   c                 Ã   s$   �t | ƒI d H }|rt|d ƒS d S )NÚsession)r9   r   )r   r8   r   r   r	   Úget_sessiona   s   €r;   c              	   Ã   ój   �t  tj¡4 I d H š}| d| f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s.w   Y  d S )Nz&DELETE FROM accounts WHERE user_id = ?©r   r   r   r   r   r   ©r   r   r   r   r	   Údelete_accountf   ó
   €.þr?   c               	   Ã   sl   �t  tj¡4 I d H š} |  d¡I d H }| ¡ I d H }|d W  d   ƒI d H  S 1 I d H s/w   Y  d S )NzSELECT COUNT(*) FROM accountsr   ©r   r   r   r   r   r7   )r   r3   r8   r   r   r	   Úcount_accountsl   s   €0ýrB   c              	   Ã   sv   �t  tj¡4 I d H š#}| d| |tt ¡ ƒf¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s4w   Y  d S )NzŒINSERT INTO devs (user_id, username, added_at) VALUES (?, ?, ?)
               ON CONFLICT(user_id) DO UPDATE SET username=excluded.username)r   r   r   r   r   r   r   r   )r   r"   r   r   r   r	   Úadd_devs   s   €
ý.úrC   c              	   Ã   r<   )Nz"DELETE FROM devs WHERE user_id = ?r=   r>   r   r   r	   Ú
delete_dev}   r@   rD   c               	   Ã   r%   )Nz(SELECT * FROM devs ORDER BY added_at ASCc                 S   r&   r   r'   r)   r   r   r	   r,   ˆ   r-   zget_devs.<locals>.<listcomp>r.   r2   r   r   r	   Úget_devsƒ   r6   rE   c              	   Ã   sl   �t  tj¡4 I d H š}| d| f¡I d H }| ¡ I d H d uW  d   ƒI d H  S 1 I d H s/w   Y  d S )Nz$SELECT 1 FROM devs WHERE user_id = ?rA   )r   r   r3   r   r   r	   Úis_dev‹   s
   €0þrF   c              	   Ã   sx   �t  tj¡4 I d H š$}| d| f¡I d H }| ¡ I d H }|r#|d n|W  d   ƒI d H  S 1 I d H s5w   Y  d S )Nz(SELECT value FROM settings WHERE key = ?r   rA   )ÚkeyÚdefaultr   r3   r8   r   r   r	   Úget_setting‘   s   €0ýrI   c              	   Ã   sl   �t  tj¡4 I d H š}| d| |f¡I d H  | ¡ I d H  W d   ƒI d H  d S 1 I d H s/w   Y  d S )NzrINSERT INTO settings (key, value) VALUES (?, ?)
               ON CONFLICT(key) DO UPDATE SET value=excluded.valuer=   )rG   r   r   r   r   r	   Úset_setting˜   s   €
ý.úrJ   r   )r   r   Úcryptography.fernetr   r   r   r   r
   r   r   r   r$   r5   r9   r;   r?   rB   rC   rD   rE   rF   rI   rJ   r   r   r   r	   Ú<module>   s,    &


