Skip to content

Commit 2c0a291

Browse files
committed
docs (Tornado): move TokenManager docs to #5644
1 parent 84e136a commit 2c0a291

File tree

1 file changed

+16
-42
lines changed

1 file changed

+16
-42
lines changed

src/DIRAC/FrameworkSystem/DB/TokenDB.py

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
""" Token class is a front-end to the TokenDB Database.
2-
3-
Long-term user tokens are stored here, which can be used to obtain new tokens.
1+
""" Auth class is a front-end to the Auth Database
42
"""
53
from __future__ import absolute_import
64
from __future__ import division
@@ -28,21 +26,19 @@
2826

2927

3028
class Token(Model, OAuth2TokenMixin):
31-
"""This class describe token fields"""
32-
3329
__tablename__ = "Token"
3430
__table_args__ = {"mysql_engine": "InnoDB", "mysql_charset": "utf8"}
3531
# access_token too large for varchar(255)
3632
# 767 bytes is the stated prefix limitation for InnoDB tables in MySQL version 5.6
3733
# https://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length
38-
id = Column(Integer, autoincrement=True, primary_key=True) # Unique token ID
39-
kid = Column(String(255)) # Unique secret key ID for token encryption
40-
user_id = Column(String(255)) # User identificator that registred in an identity provider, token owner
41-
provider = Column(String(255)) # Provider name registred in DIRAC
42-
expires_at = Column(Integer, nullable=False, default=0) # When the access token is expired
34+
id = Column(Integer, autoincrement=True, primary_key=True)
35+
kid = Column(String(255))
36+
user_id = Column(String(255))
37+
provider = Column(String(255))
38+
expires_at = Column(Integer, nullable=False, default=0)
4339
access_token = Column(Text, nullable=False)
4440
refresh_token = Column(Text, nullable=False)
45-
rt_expires_at = Column(Integer, nullable=False, default=0) # When the refresh token is expired
41+
rt_expires_at = Column(Integer, nullable=False, default=0)
4642

4743

4844
class TokenDB(SQLAlchemyDB):
@@ -58,10 +54,7 @@ def __init__(self):
5854
self.session = scoped_session(self.sessionMaker_o)
5955

6056
def __initializeDB(self):
61-
"""Create the tables
62-
63-
:return: S_OK()/S_ERROR()
64-
"""
57+
"""Create the tables"""
6558
tablesInDB = self.inspector.get_table_names()
6659

6760
# Token
@@ -79,7 +72,7 @@ def getTokenForUserProvider(self, userID, provider):
7972
:param str userID: user ID
8073
:param str provider: provider
8174
82-
:return: S_OK(OAuth2Token)/S_ERROR() -- return an OAuth2Token object, which is also a dict
75+
:return: S_OK(dict)/S_ERROR()
8376
"""
8477
session = self.session()
8578
try:
@@ -95,40 +88,34 @@ def getTokenForUserProvider(self, userID, provider):
9588
return self.__result(session, S_OK(OAuth2Token(self.__rowToDict(token)) if token else None))
9689

9790
def updateToken(self, token, userID, provider, rt_expired_in):
98-
"""Update tokens for user and identity provider
91+
"""Update tokens
9992
10093
:param dict token: token info
101-
:param str userID: user ID that comes from identity provider
102-
:param str provider: provider name
94+
:param str userID: user ID
95+
:param str provider: provider
10396
:param int rt_expired_in: refresh token lifetime
10497
105-
:return: S_OK(list)/S_ERROR() -- return old tokens that should be revoked.
98+
:return: S_OK(list)/S_ERROR()
10699
"""
107-
# Prepare a token to write to the database
108100
token["user_id"] = userID
109101
token["provider"] = provider
110-
# If the token expiration date is not specified, we will try to determine it
111102
if not token.get("rt_expires_at"):
112103
try:
113-
# This value can be contained in the token itself if it is a JWT
114104
token["rt_expires_at"] = int(
115105
jwt.decode(token["refresh_token"], options=dict(verify_signature=False, verify_aud=False))["exp"]
116106
)
117107
except Exception as e:
118108
self.log.debug("Cannot get refresh token expires time: %s" % repr(e))
119-
# Otherwise, we set this value
109+
120110
token["rt_expires_at"] = int(token.get("rt_expires_at", rt_expired_in + int(time.time())))
121-
# We ignore expired tokens
122111
if token["rt_expires_at"] < time.time():
123112
return S_ERROR("Cannot store expired refresh token.")
124113

125114
attrts = dict((k, v) for k, v in dict(token).items() if k in list(Token.__dict__.keys()))
126115
self.log.debug("Store token:", pprint.pformat(attrts))
127116
session = self.session()
128117
try:
129-
# Remove expired tokens
130118
session.query(Token).filter(Token.expires_at < time.time()).delete()
131-
# When we update existing tokens, the old tokens should be revoked
132119
oldTokens = session.query(Token).filter(Token.user_id == userID).filter(Token.provider == provider).all()
133120
session.add(Token(**attrts))
134121
session.query(Token).filter(Token.user_id == userID).filter(Token.provider == provider).filter(
@@ -141,12 +128,12 @@ def updateToken(self, token, userID, provider, rt_expired_in):
141128
return self.__result(session, S_OK([self.__rowToDict(t) for t in oldTokens] if oldTokens else []))
142129

143130
def removeToken(self, access_token=None, refresh_token=None, user_id=None):
144-
"""Remove token from DB
131+
"""Remove token
145132
146133
:param str access_token: access token
147134
:param str refresh_token: refresh token
148135
149-
:return: S_OK(str)/S_ERROR()
136+
:return: S_OK(object)/S_ERROR()
150137
"""
151138
session = self.session()
152139
try:
@@ -161,12 +148,6 @@ def removeToken(self, access_token=None, refresh_token=None, user_id=None):
161148
return self.__result(session, S_OK("Token successfully removed"))
162149

163150
def getTokensByUserID(self, userID):
164-
"""Return tokens for user ID
165-
166-
:param str userID: user ID that return identity provider
167-
168-
:return: S_OK(list)/S_ERROR() -- tokens as OAuth2Token objects
169-
"""
170151
session = self.session()
171152
try:
172153
tokens = session.query(Token).filter(Token.user_id == userID).all()
@@ -177,13 +158,6 @@ def getTokensByUserID(self, userID):
177158
return self.__result(session, S_OK([OAuth2Token(self.__rowToDict(t)) for t in tokens]))
178159

179160
def __result(self, session, result=None):
180-
"""Helper method
181-
182-
:param session: session instance
183-
:param result: DIRAC result
184-
185-
:return: S_OK()/S_ERROR()
186-
"""
187161
try:
188162
if not result["OK"]:
189163
session.rollback()

0 commit comments

Comments
 (0)