| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | 
							- import uuid
 - 
 - from flask import request
 - from flask_restful import Resource
 - from werkzeug.exceptions import NotFound, Unauthorized
 - 
 - from controllers.web import api
 - from extensions.ext_database import db
 - from libs.passport import PassportService
 - from models.model import App, EndUser, Site
 - 
 - 
 - class 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
 
 
  |