
    i                        U d dl mZmZmZ d dlZd dlZdaeej                     ed<   dej                  fdZ	ddZ
deej                     deeeef      fdZd	ee   dee   fd
Zdedeeeef      fdZd	edeeeef      fdZded	ee   dee   deddf
dZdededefdZdedefdZ	 dded	ee   dee   deddf
dZdedeeeef      fdZy)    )AnyDictOptionalN_dbreturnc                     K   t         Vt        j                  j                  dd      } t	        j
                  |        d {   a t        j                  t         _        t         S 7 #w)NUSERS_DB_PATHzusers.db)r   osenvironget	aiosqliteconnectRowrow_factory)db_paths    
/app/db.pyget_dbr      sG     
{**..*=%%g..#--J /s   ?A'A%$A'c                     K   t                d {   } | j                  d       d {    | j                  d       d {    | j                          d {    y 7 O7 87 !7 w)Na  
        CREATE TABLE IF NOT EXISTS auth_users (
            id INTEGER PRIMARY KEY,
            username TEXT,
            full_name TEXT,
            allow INTEGER NOT NULL DEFAULT 0,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        );
        a  
        CREATE TABLE IF NOT EXISTS auth_admins (
            id INTEGER PRIMARY KEY,
            username TEXT,
            full_name TEXT,
            is_super INTEGER NOT NULL DEFAULT 0,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        );
        )r   executecommit)dbs    r   init_auth_dbr      so     xB
**	
 
 
 **	
 
 
 ))+/ 


 sC   A(A A(A"A(A$A(A&A("A($A(&A(rowc                 V    | y | j                         D ci c]  }|| |   
 c}S c c}w )N)keys)r   ks     r   _row_to_dictr   /   s0    
{"xxz*z!As1vIz***s   &usernamec                 n    | sy | j                         j                  d      j                         }|xs d S N@)striplstriplower)r   unames     r   normalize_usernamer&   5   s2    NN##C(..0E=D    user_idc                   K   t                d {   }|j                  d| f      4 d {   }|j                          d {   }d d d       d {    t        |      S 7 S7 97 #7 # 1 d {  7  sw Y   t              S xY ww)Nz%SELECT * FROM auth_users WHERE id = ?)r   r   fetchoner   r(   r   curr   s       r   get_userr-   <   sq     xBzzAG:NNRULLN" ON 
N" ONNNsf   BA$BA&BA,A(A,	BA*B&B(A,*B,B2A53B:Bc                 6  K   t        |       }|sy t                d {   }|j                  d|f      4 d {   }|j                          d {   }d d d       d {    t	        |      S 7 S7 97 #7 # 1 d {  7  sw Y   t	              S xY ww)Nz2SELECT * FROM auth_users WHERE LOWER(username) = ?)r&   r   r   r*   r   )r   normr   r,   r   s        r   get_user_by_usernamer0   C   s     h'DxBzz<tg 	LLN"   
 #    sf   BA2BA4BA:A6A:B"A8#B4B6A:8B:B BBB	full_nameallowc                    K   t        |      }t                d {   }|j                  d| |||rdndf       d {    |j                          d {    y 7 ?7 7 	w)Na  
        INSERT INTO auth_users (id, username, full_name, allow)
        VALUES (?, ?, ?, ?)
        ON CONFLICT(id) DO UPDATE SET
            username = excluded.username,
            full_name = excluded.full_name,
            allow = excluded.allow
           r   r&   r   r   r   )r(   r   r1   r2   r/   r   s         r   create_userr6   O   sj      h'DxB
**	 
$	115
 
 
 ))+ 

 1   A!A!A!AA!AA!A!A!c                   K   t                d {   }|j                  d|rdnd| f      4 d {   }|j                          d {    |j                  dkD  cd d d       d {    S 7 ]7 >7 (7 # 1 d {  7  sw Y   y xY ww)Nz,UPDATE auth_users SET allow = ? WHERE id = ?r4   r   )r   r   r   rowcount)r(   r2   r   r,   s       r   set_user_allowr:   e   s     xBzz6G$  
iik||a   
 		   sf   BA. BA0BA6	A2
A6B(A4)B0B2A64B6B<A?=BBc                    K   t                d {   }|j                  d| f      4 d {   }|j                          d {   }d d d       d {    |d uS 7 L7 27 7 # 1 d {  7  sw Y   d uS xY ww)Nz&SELECT 1 FROM auth_admins WHERE id = ?)r   r   r*   r+   s       r   is_adminr<   o   s     xBzz07* 	LLN"  d? 
 #    d?sf   A=AA=AA=A%A!A%	A=A#	A=A=!A%#A=%A:+A.,A:3
A=is_superc                    K   t        |      }t                d {   }|j                  d| |||rdndf       d {    |j                          d {    y 7 ?7 7 	w)Na  
        INSERT INTO auth_admins (id, username, full_name, is_super)
        VALUES (?, ?, ?, ?)
        ON CONFLICT(id) DO UPDATE SET
            username = excluded.username,
            full_name = excluded.full_name,
            is_super = excluded.is_super
        r4   r   r5   )r(   r   r1   r=   r/   r   s         r   upsert_adminr?   x   sj      h'DxB
**	 
$	1a8
 
 
 ))+ 

 r7   
identifierc                   K   | j                         }|sy |j                  d      rt        |       d {   S 	 t        |      }t	        |       d {   S 7 #7 # t
        $ r t        |       d {  7  cY S w xY wwr    )r"   
startswithr0   intr-   
ValueError)r@   identuids      r   	find_userrG      s{     E)%0001%jc]"" 1 # 1)%00001sP   3B AB A AA B A A=4A75A=:B <A==B )r   N)F)typingr   r   r   r
   r   r   
Connection__annotations__r   r   r   strr   r&   rC   r-   r0   boolr6   r:   r<   r?   rG    r'   r   <module>rN      s   & & 	  '+Xi""# *i** 6+hy}}- +(4S>2J +# 8C= C HT#s(^$< 	 	$sCx.1I 	sm } 	
 
, #  d  t  C D  	sm } 	
 
,1 1c3h(@ 1r'   