Spaces:
Sleeping
Sleeping
| 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) | |