kiwi-vpn/api/kiwi_vpn_api/db/models.py

77 lines
1.9 KiB
Python
Raw Normal View History

2022-03-19 23:56:11 +00:00
from __future__ import annotations
2022-03-17 17:06:00 +00:00
import datetime
from sqlalchemy import (Boolean, Column, DateTime, ForeignKey, Integer, String,
UniqueConstraint)
2022-03-17 22:47:31 +00:00
from sqlalchemy.ext.declarative import declarative_base
2022-03-19 23:56:11 +00:00
from sqlalchemy.orm import Session, relationship
2022-03-17 17:06:00 +00:00
2022-03-17 22:47:31 +00:00
ORMBaseModel = declarative_base()
2022-03-17 17:06:00 +00:00
class User(ORMBaseModel):
__tablename__ = "users"
name = Column(String, primary_key=True, index=True)
password = Column(String)
2022-03-18 19:15:45 +00:00
capabilities = relationship("UserCapability", lazy="joined")
certificates = relationship("Certificate", lazy="joined")
2022-03-17 17:06:00 +00:00
2022-03-19 23:56:11 +00:00
@classmethod
def load(cls, db: Session, name: str) -> User | None:
return (db
.query(User)
.filter(User.name == name)
.first())
2022-03-17 17:06:00 +00:00
class UserCapability(ORMBaseModel):
__tablename__ = "user_capabilities"
user_name = Column(
String,
ForeignKey("users.name"),
primary_key=True,
index=True,
)
capability = Column(String, primary_key=True)
class DistinguishedName(ORMBaseModel):
__tablename__ = "distinguished_names"
id = Column(Integer, primary_key=True, autoincrement=True)
cn_only = Column(Boolean, default=True)
country = Column(String(2))
state = Column(String)
city = Column(String)
organization = Column(String)
organizational_unit = Column(String)
email = Column(String)
common_name = Column(String)
2022-03-18 19:15:45 +00:00
certificates = relationship("Certificate", lazy="joined")
2022-03-17 17:06:00 +00:00
UniqueConstraint(
country,
state,
city,
organization,
organizational_unit,
email,
common_name,
)
class Certificate(ORMBaseModel):
__tablename__ = "certificates"
id = Column(Integer, primary_key=True, autoincrement=True)
owner_name = Column(String, ForeignKey("users.name"))
dn_id = Column(Integer, ForeignKey("distinguished_names.id"))
expiry = Column(DateTime, default=datetime.datetime.now)