Source code for sni.uac.models

"""
Models
"""

from enum import Enum

import mongoengine as me

from sni.user.models import Corporation, User
from sni.utils import DAY
import sni.utils as utils


[docs]class Token(me.Document): """ Represents a token issued by SNI. """
[docs] class TokenType(str, Enum): """ Enumeration containing the various token types. """ dyn = "dyn" # Dynamic app token per = "per" # Permanent app token use = "use" # User token
callback = me.URLField(default=None, null=True) """Callback URL of the application. When a new user token is issued, the corresponding application is notified at this URL.""" comments = me.StringField(default=str) """Comments""" created_on = me.DateTimeField(default=utils.now, required=True) """Timestamp of the creation of this document""" expires_on = me.DateTimeField(default=None, null=True) """Self explanatory""" owner = me.ReferenceField( User, required=True, reverse_delete_rule=me.CASCADE ) """Reference to the owner of this token""" parent = me.ReferenceField( "self", default=None, null=True, reverse_delete_rule=me.CASCADE ) """Optional reference to the token that has been used to create this one""" token_type = me.StringField(choices=TokenType, required=True) """Token type, see :class:`sni.uac.models.Token.TokenType`""" uuid = me.UUIDField(binary=False, unique=True) """ UUID of this token Todo: Use the document's ``_id`` field instead. """ meta = { "indexes": [{"fields": ["expires_on"], "expireAfterSeconds": 0,},], } def __repr__(self) -> str: return f"<Token: {repr(self.owner)} {self.token_type}>"
[docs]class StateCode(me.Document): """ Represents a state code and related metadatas. A state code is issued when a new user token is issued from a dynamic app token, and is a way for SNI to remeber about the authentication while the end user logs in to EVE SSO. """ SCHEMA_VERSION = 3 """Latest schema version for this collection""" _version = me.IntField(default=SCHEMA_VERSION) """Schema version of this document""" app_token = me.ReferenceField(Token, null=True) """The app token that created this state code""" created_on = me.DateTimeField(default=utils.now, required=True) """Timestamp of the creation of this document""" inviting_corporation = me.ReferenceField( Corporation, default=None, null=True, required=False ) """Corporation inviting the user of that state code, if any""" uuid = me.StringField(null=False, required=True) """ The state code. It's not really an UUID4 but i'm too lazy to change the field name and write migration code... """ meta = { "indexes": [ {"fields": ["created_on"], "expireAfterSeconds": 1 * DAY,}, ], } def __repr__(self) -> str: return f"<StateCode: {self.uuid} {self.created_on}>"