Spaces:
Sleeping
Sleeping
File size: 2,720 Bytes
71b4454 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | from sqlalchemy import Column, Integer, String, DateTime, Text, JSON, Boolean, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from datetime import datetime
Base = declarative_base()
class APIKey(Base):
__tablename__ = "api_keys"
id = Column(Integer, primary_key=True)
key_id = Column(String(64), unique=True, nullable=False)
name = Column(String(128), nullable=False)
key_hash = Column(String(128), nullable=False) # hashed key
user_id = Column(String(64), nullable=True)
roles = Column(JSON, default=[]) # list of roles
permissions = Column(JSON, default=[]) # list of permissions
expires_at = Column(DateTime, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
last_used_at = Column(DateTime, nullable=True)
is_active = Column(Boolean, default=True)
class Secret(Base):
__tablename__ = "secrets"
id = Column(Integer, primary_key=True)
secret_id = Column(String(64), unique=True, nullable=False)
name = Column(String(128), nullable=False)
value_encrypted = Column(Text, nullable=False) # store encrypted
user_id = Column(String(64), nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
expires_at = Column(DateTime, nullable=True)
class Role(Base):
__tablename__ = "roles"
id = Column(Integer, primary_key=True)
role_id = Column(String(64), unique=True, nullable=False)
name = Column(String(64), nullable=False)
permissions = Column(JSON, default=[]) # list of permission strings
class RateLimitRule(Base):
__tablename__ = "rate_limit_rules"
id = Column(Integer, primary_key=True)
rule_id = Column(String(64), unique=True, nullable=False)
path = Column(String(256), nullable=False) # e.g., "/v1/models/generate"
method = Column(String(16), nullable=False) # GET, POST, etc.
limit = Column(Integer, default=100) # max requests
window_seconds = Column(Integer, default=60) # time window
user_id = Column(String(64), nullable=True) # optional per-user override
class JWTToken(Base):
__tablename__ = "jwt_tokens"
id = Column(Integer, primary_key=True)
token_id = Column(String(64), unique=True, nullable=False)
user_id = Column(String(64), nullable=False)
jti = Column(String(64), nullable=False) # JWT ID
expires_at = Column(DateTime, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow)
revoked = Column(Boolean, default=False)
|