1+ import re
2+ from core .sso import secure_sso_user_data
3+ from core .sso import secure_sso_payload
4+ import time
5+
6+ from core .sso .helpers import create_verification_hash
7+ from core .sso .secure_sso_payload import SecureSSOPayload
8+ from core .sso .secure_sso_user_data import SecureSSOUserData
9+ from core .sso .simple_sso_user_data import SimpleSSOUserData
10+ from core .sso import simple_sso_user_data
11+
12+
13+ class FastCommentsSSO :
14+ def __init__ (self , secure_sso_payload , simple_sso_user_data , login_url : str | None = None , logout_url : str | None = None ):
15+ self .secure_sso_payload = secure_sso_payload
16+ self .simple_sso_user_data = simple_sso_user_data
17+ self .login_url = login_url
18+ self .logout_url = logout_url
19+
20+ @classmethod
21+ def new_secure (cls , api_key : str , secure_sso_user_data : SecureSSOUserData ):
22+ timestamp = int (time .time ())
23+
24+ user_data_str = secure_sso_user_data .as_json_base64 ()
25+ hash = create_verification_hash (api_key , timestamp , user_data_str )
26+
27+ payload = SecureSSOPayload (user_data_str , hash , timestamp )
28+ return cls (secure_sso_payload = payload , simple_sso_user_data = None )
29+
30+ @classmethod
31+ def new_simple (cls , simple_sso_user_data : SimpleSSOUserData ):
32+ return cls (secure_sso_payload = None , simple_sso_user_data = simple_sso_user_data )
33+
34+ @classmethod
35+ def new_secure_with_urls (
36+ cls , secure_sso_payload : SecureSSOPayload ,
37+ login_url : str ,
38+ logout_url : str ,
39+ ):
40+ return cls (secure_sso_payload , None , login_url , logout_url )
41+
42+ def create_token (self ):
43+ if self .secure_sso_payload :
44+ return self .secure_sso_payload .toJSON ()
45+ elif self .simple_sso_user_data :
46+ return self .simple_sso_user_data .toJSON ()
47+ else :
48+ raise ValueError ("No user data provided" )
49+
50+ def reset_token (self ):
51+ self .cached_token = None
52+
53+ def prepare_to_send (self ):
54+ if self .cached_token :
55+ return self .cached_token
56+
57+ self .cached_token = self .create_token ()
58+ return self .cached_token
59+
60+ def set_secure_sso_payload (self , secure_sso_payload : SecureSSOPayload ):
61+ self .secure_sso_payload = secure_sso_payload
62+ self .simple_sso_user_data = None
63+ self .reset_token ()
64+
65+ def set_simple_sso_user_data (self , simple_sso_user_data : SimpleSSOUserData ):
66+ self .simple_sso_user_data = simple_sso_user_data
67+ self .secure_sso_payload = None
68+ self .reset_token ()
0 commit comments