enterprise_sso.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from flask import current_app, redirect
  2. from flask_restful import Resource, reqparse
  3. from controllers.console import api
  4. from controllers.console.setup import setup_required
  5. from services.enterprise.enterprise_sso_service import EnterpriseSSOService
  6. class EnterpriseSSOSamlLogin(Resource):
  7. @setup_required
  8. def get(self):
  9. return EnterpriseSSOService.get_sso_saml_login()
  10. class EnterpriseSSOSamlAcs(Resource):
  11. @setup_required
  12. def post(self):
  13. parser = reqparse.RequestParser()
  14. parser.add_argument('SAMLResponse', type=str, required=True, location='form')
  15. args = parser.parse_args()
  16. saml_response = args['SAMLResponse']
  17. try:
  18. token = EnterpriseSSOService.post_sso_saml_acs(saml_response)
  19. return redirect(f'{current_app.config.get("CONSOLE_WEB_URL")}/signin?console_token={token}')
  20. except Exception as e:
  21. return redirect(f'{current_app.config.get("CONSOLE_WEB_URL")}/signin?message={str(e)}')
  22. class EnterpriseSSOOidcLogin(Resource):
  23. @setup_required
  24. def get(self):
  25. return EnterpriseSSOService.get_sso_oidc_login()
  26. class EnterpriseSSOOidcCallback(Resource):
  27. @setup_required
  28. def get(self):
  29. parser = reqparse.RequestParser()
  30. parser.add_argument('state', type=str, required=True, location='args')
  31. parser.add_argument('code', type=str, required=True, location='args')
  32. parser.add_argument('oidc-state', type=str, required=True, location='cookies')
  33. args = parser.parse_args()
  34. try:
  35. token = EnterpriseSSOService.get_sso_oidc_callback(args)
  36. return redirect(f'{current_app.config.get("CONSOLE_WEB_URL")}/signin?console_token={token}')
  37. except Exception as e:
  38. return redirect(f'{current_app.config.get("CONSOLE_WEB_URL")}/signin?message={str(e)}')
  39. api.add_resource(EnterpriseSSOSamlLogin, '/enterprise/sso/saml/login')
  40. api.add_resource(EnterpriseSSOSamlAcs, '/enterprise/sso/saml/acs')
  41. api.add_resource(EnterpriseSSOOidcLogin, '/enterprise/sso/oidc/login')
  42. api.add_resource(EnterpriseSSOOidcCallback, '/enterprise/sso/oidc/callback')