| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | from base64 import b64encodefrom functools import wrapsfrom hashlib import sha1from hmac import new as hmac_newfrom flask import abort, requestfrom configs import dify_configfrom extensions.ext_database import dbfrom models.model import EndUserdef enterprise_inner_api_only(view):    @wraps(view)    def decorated(*args, **kwargs):        if not dify_config.INNER_API:            abort(404)        # get header 'X-Inner-Api-Key'        inner_api_key = request.headers.get("X-Inner-Api-Key")        if not inner_api_key or inner_api_key != dify_config.INNER_API_KEY_FOR_PLUGIN:            abort(401)        return view(*args, **kwargs)    return decorateddef enterprise_inner_api_user_auth(view):    @wraps(view)    def decorated(*args, **kwargs):        if not dify_config.INNER_API:            return view(*args, **kwargs)        # get header 'X-Inner-Api-Key'        authorization = request.headers.get("Authorization")        if not authorization:            return view(*args, **kwargs)        parts = authorization.split(":")        if len(parts) != 2:            return view(*args, **kwargs)        user_id, token = parts        if " " in user_id:            user_id = user_id.split(" ")[1]        inner_api_key = request.headers.get("X-Inner-Api-Key", "")        data_to_sign = f"DIFY {user_id}"        signature = hmac_new(inner_api_key.encode("utf-8"), data_to_sign.encode("utf-8"), sha1)        signature_base64 = b64encode(signature.digest()).decode("utf-8")        if signature_base64 != token:            return view(*args, **kwargs)        kwargs["user"] = db.session.query(EndUser).filter(EndUser.id == user_id).first()        return view(*args, **kwargs)    return decorateddef plugin_inner_api_only(view):    @wraps(view)    def decorated(*args, **kwargs):        if not dify_config.PLUGIN_DAEMON_KEY:            abort(404)        # get header 'X-Inner-Api-Key'        inner_api_key = request.headers.get("X-Inner-Api-Key")        if not inner_api_key or inner_api_key != dify_config.INNER_API_KEY_FOR_PLUGIN:            abort(404)        return view(*args, **kwargs)    return decorated
 |