Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
passport.py77 linesDownload Raw Back to web
1import uuid2 3from flask import request4from flask_restful import Resource5from werkzeug.exceptions import NotFound, Unauthorized6 7from controllers.web import api8from controllers.web.error import WebSSOAuthRequiredError9from extensions.ext_database import db10from libs.passport import PassportService11from models.model import App, EndUser, Site12from services.enterprise.enterprise_service import EnterpriseService13from services.feature_service import FeatureService14 15 16class PassportResource(Resource):17    """Base resource for passport."""18 19    def get(self):20        system_features = FeatureService.get_system_features()21        app_code = request.headers.get("X-App-Code")22        if app_code is None:23            raise Unauthorized("X-App-Code header is missing.")24 25        if system_features.sso_enforced_for_web:26            app_web_sso_enabled = EnterpriseService.get_app_web_sso_enabled(app_code).get("enabled", False)27            if app_web_sso_enabled:28                raise WebSSOAuthRequiredError()29 30        # get site from db and check if it is normal31        site = db.session.query(Site).filter(Site.code == app_code, Site.status == "normal").first()32        if not site:33            raise NotFound()34        # get app from db and check if it is normal and enable_site35        app_model = db.session.query(App).filter(App.id == site.app_id).first()36        if not app_model or app_model.status != "normal" or not app_model.enable_site:37            raise NotFound()38 39        end_user = EndUser(40            tenant_id=app_model.tenant_id,41            app_id=app_model.id,42            type="browser",43            is_anonymous=True,44            session_id=generate_session_id(),45        )46 47        db.session.add(end_user)48        db.session.commit()49 50        payload = {51            "iss": site.app_id,52            "sub": "Web API Passport",53            "app_id": site.app_id,54            "app_code": app_code,55            "end_user_id": end_user.id,56        }57 58        tk = PassportService().issue(payload)59 60        return {61            "access_token": tk,62        }63 64 65api.add_resource(PassportResource, "/passport")66 67 68def generate_session_id():69    """70    Generate a unique session ID.71    """72    while True:73        session_id = str(uuid.uuid4())74        existing_count = db.session.query(EndUser).filter(EndUser.session_id == session_id).count()75        if existing_count == 0:76            return session_id77