U
    \j                     @   sx   d Z ddlZddlZddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ dd ZG d	d
 d
eZG dd deZdS )u   ORM 模型。

存储要点：
- users.password_hash: bcrypt 哈希，不存明文。
- api_keys.key_hash: API Key 明文只给用户看一次，库内存 SHA-256 哈希，
  索引建在 key_hash 上以便 O(1) 校验。
    N)ColumnIntegerStringDateTime
ForeignKeyBoolean)relationship   )Basec                   C   s
   t j S )N)dtdatetimeutcnow r   r    /root/pica-gateway/app/models.pyr      s    r   c                   @   sZ   e Zd ZdZeeddZeedddddZeedddZ	ee
ed	Zed
dddZdS )UserZusersTprimary_key@   Funiqueindexnullable   r   defaultApiKeyuserzall, delete-orphan)back_populatescascadeN)__name__
__module____qualname____tablename__r   r   idr   usernameZpassword_hashr   r   
created_atr   api_keysr   r   r   r   r      s     r   c                   @   s   e Zd ZdZeeddZeeeddddZee	dddddZ
ee	d	dd
Zee	dddZeeedZeedd
ZeedddZedddZeeedddZdS )r   r'   Tr   zusers.idF)r   r   r   r      r      r   r   )r   r   r   )r   )rawreturnc                 C   s   t | d S )u    对 API Key 明文做 SHA-256。zutf-8)hashlibsha256encode	hexdigest)r*   r   r   r   hash_key2   s    zApiKey.hash_keyN)r    r!   r"   r#   r   r   r$   r   user_idr   key_hashZ
key_prefixnamer   r   r&   last_used_atr   revokedr   r   staticmethodstrr0   r   r   r   r   r   "   s   r   )__doc__r   r   r,   
sqlalchemyr   r   r   r   r   r   sqlalchemy.ormr   databaser
   r   r   r   r   r   r   r   <module>   s    