| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | import uuidfrom flask import requestfrom flask_restful import Resourcefrom werkzeug.exceptions import NotFound, Unauthorizedfrom controllers.web import apifrom extensions.ext_database import dbfrom libs.passport import PassportServicefrom models.model import App, EndUser, Siteclass PassportResource(Resource):    """Base resource for passport."""    def get(self):        app_code = request.headers.get('X-App-Code')        if app_code is None:            raise Unauthorized('X-App-Code header is missing.')        # get site from db and check if it is normal        site = db.session.query(Site).filter(            Site.code == app_code,            Site.status == 'normal'        ).first()        if not site:            raise NotFound()        # get app from db and check if it is normal and enable_site        app_model = db.session.query(App).filter(App.id == site.app_id).first()        if not app_model or app_model.status != 'normal' or not app_model.enable_site:            raise NotFound()                end_user = EndUser(            tenant_id=app_model.tenant_id,            app_id=app_model.id,            type='browser',            is_anonymous=True,            session_id=generate_session_id(),        )        db.session.add(end_user)        db.session.commit()        payload = {            "iss": site.app_id,            'sub': 'Web API Passport',            'app_id': site.app_id,            'app_code': app_code,            'end_user_id': end_user.id,        }        tk = PassportService().issue(payload)        return {            'access_token': tk,        }api.add_resource(PassportResource, '/passport')def generate_session_id():    """    Generate a unique session ID.    """    while True:        session_id = str(uuid.uuid4())        existing_count = db.session.query(EndUser) \            .filter(EndUser.session_id == session_id).count()        if existing_count == 0:            return session_id
 |