change column name from apptoken
This commit is contained in:
parent
52f1e84c43
commit
5bda9e8d83
|
@ -40,7 +40,7 @@ def upgrade():
|
||||||
)
|
)
|
||||||
op.create_table('app_token',
|
op.create_table('app_token',
|
||||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||||
sa.Column('service_name', sa.String(), nullable=False),
|
sa.Column('scopes', sa.String(), nullable=False),
|
||||||
sa.Column('user_id', sa.Uuid(), nullable=False),
|
sa.Column('user_id', sa.Uuid(), nullable=False),
|
||||||
sa.Column('token', sa.String(), nullable=False),
|
sa.Column('token', sa.String(), nullable=False),
|
||||||
sa.Column('name', sa.String(), nullable=False),
|
sa.Column('name', sa.String(), nullable=False),
|
||||||
|
|
|
@ -19,7 +19,7 @@ from flask_sqlalchemy.extension import _FSAModel
|
||||||
from flask_migrate import Migrate
|
from flask_migrate import Migrate
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import uuid
|
import uuid
|
||||||
from typing import Optional, List, Dict, Tuple, Any, Type, TYPE_CHECKING
|
from typing import Iterator, Optional, List, Dict, Tuple, Any, Type, TYPE_CHECKING
|
||||||
from cryptography.x509 import Certificate as CertificateObj
|
from cryptography.x509 import Certificate as CertificateObj
|
||||||
from sqlalchemy.ext.declarative import DeclarativeMeta
|
from sqlalchemy.ext.declarative import DeclarativeMeta
|
||||||
|
|
||||||
|
@ -201,16 +201,15 @@ class User(BaseModel, ModelUpdatedMixin):
|
||||||
def get_tokens_by_service(self, service: Service) -> list['AppToken']:
|
def get_tokens_by_service(self, service: Service) -> list['AppToken']:
|
||||||
return [ token for token in self.app_tokens if token.service_name == service.name ]
|
return [ token for token in self.app_tokens if token.service_name == service.name ]
|
||||||
|
|
||||||
def get_token(self, service: Service, name: str) -> Optional['AppToken']:
|
def get_token_by_scope(self, scope: str) -> Iterator['AppToken']:
|
||||||
for token in self.app_tokens:
|
for token in self.app_tokens:
|
||||||
if token.service_name == service.name and token.name == name:
|
if scope in token.scopes.split():
|
||||||
return token # type: ignore
|
yield token # type: ignore
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
class AppToken(BaseModel, ModelUpdatedMixin):
|
class AppToken(BaseModel, ModelUpdatedMixin):
|
||||||
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
||||||
service_name: Mapped[str] = mapped_column(nullable=False)
|
scopes: Mapped[str] = mapped_column(nullable=False) # string of a list seperated by `,`
|
||||||
user_id: Mapped[uuid.UUID] = mapped_column(
|
user_id: Mapped[uuid.UUID] = mapped_column(
|
||||||
db.Uuid,
|
db.Uuid,
|
||||||
db.ForeignKey(User.id), nullable=False)
|
db.ForeignKey(User.id), nullable=False)
|
||||||
|
@ -220,10 +219,10 @@ class AppToken(BaseModel, ModelUpdatedMixin):
|
||||||
last_used: Mapped[Optional[datetime]] = mapped_column(db.DateTime, nullable=True, default=None)
|
last_used: Mapped[Optional[datetime]] = mapped_column(db.DateTime, nullable=True, default=None)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def new(user: User, service: Service, name: str):
|
def new(user: User, scopes: str, name: str):
|
||||||
alphabet = string.ascii_letters + string.digits
|
alphabet = string.ascii_letters + string.digits
|
||||||
token = ''.join(secrets.choice(alphabet) for i in range(12))
|
token = ''.join(secrets.choice(alphabet) for i in range(12))
|
||||||
return AppToken(service_name=service.name, token=token, user=user, name=name)
|
return AppToken(scopes=scopes, token=token, user=user, name=name)
|
||||||
|
|
||||||
class Totp(BaseModel, ModelUpdatedMixin):
|
class Totp(BaseModel, ModelUpdatedMixin):
|
||||||
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
||||||
|
|
Loading…
Reference in a new issue