OIDC is ready? I think?

This commit is contained in:
Donald Zou
2025-06-29 16:11:05 +08:00
parent 380b9a73ab
commit a987d91ae1
51 changed files with 353 additions and 146 deletions

View File

@@ -23,7 +23,7 @@ def ResponseObject(status=True, message=None, data=None, status_code = 200) -> F
def login_required(f):
@wraps(f)
def func(*args, **kwargs):
if session.get("username") is None or session.get("totpVerified") is None or not session.get("totpVerified") or session.get("role") != "client":
if session.get("Email") is None or session.get("totpVerified") is None or not session.get("totpVerified") or session.get("role") != "client":
return ResponseObject(False, "Unauthorized access.", data=None, status_code=401)
return f(*args, **kwargs)
return func
@@ -33,7 +33,7 @@ def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration],
from modules.DashboardOIDC import DashboardOIDC
OIDC = DashboardOIDC()
DashboardClients = DashboardClients(wireguardConfigurations)
client = Blueprint('client', __name__, template_folder=os.path.abspath("./static/client/dist"))
prefix = f'{dashboardConfig.GetConfig("Server", "app_prefix")[1]}/client'
@@ -49,12 +49,22 @@ def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration],
data = request.json
status, msg = DashboardClients.SignUp(**data)
return ResponseObject(status, msg)
@client.get(f'{prefix}/api/signin/oidc/providers')
def ClientAPI_SignIn_OIDC_GetProviders():
return ResponseObject(data=DashboardClients.OIDC.GetProviders())
@client.post(f'{prefix}/api/signin/oidc/')
def ClientAPI_SignIn_OIDC_Google():
@client.post(f'{prefix}/api/signin/oidc')
def ClientAPI_SignIn_OIDC():
data = request.json
print(OIDC.VerifyToken(**data))
status, oidcData = DashboardClients.SignIn_OIDC(**data)
if not status:
return ResponseObject(status, oidcData)
session['Email'] = oidcData.get('email')
session['role'] = 'client'
session['totpVerified'] = True
return ResponseObject()
@client.post(f'{prefix}/api/signin')
@@ -62,14 +72,14 @@ def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration],
data = request.json
status, msg = DashboardClients.SignIn(**data)
if status:
session['username'] = data.get('Email')
session['Email'] = data.get('Email')
session['role'] = 'client'
session['totpVerified'] = False
return ResponseObject(status, msg)
@client.get(f'{prefix}/api/signout')
def ClientAPI_SignOut():
session['username'] = None
session['Email'] = None
session['role'] = None
session['totpVerified'] = None
return ResponseObject(True)
@@ -92,11 +102,11 @@ def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration],
return ResponseObject(False, "Please fill in all fields")
status, msg = DashboardClients.SignIn_GetTotp(token, userProvidedTotp)
if status:
if session.get('username') is None:
if session.get('Email') is None:
return ResponseObject(False, "Sign in status is invalid", status_code=401)
session['totpVerified'] = True
return ResponseObject(True, data={
"Email": session.get('username'),
"Email": session.get('Email'),
"Profile": DashboardClients.GetClientProfile(session.get("ClientID"))
})
return ResponseObject(status, msg)