| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | import osfrom flask import sessionfrom flask_restful import Resource, reqparse  # type: ignorefrom sqlalchemy import selectfrom sqlalchemy.orm import Sessionfrom configs import dify_configfrom extensions.ext_database import dbfrom libs.helper import StrLenfrom models.model import DifySetupfrom services.account_service import TenantServicefrom . import apifrom .error import AlreadySetupError, InitValidateFailedErrorfrom .wraps import only_edition_self_hostedclass InitValidateAPI(Resource):    def get(self):        init_status = get_init_validate_status()        if init_status:            return {"status": "finished"}        return {"status": "not_started"}    @only_edition_self_hosted    def post(self):        # is tenant created        tenant_count = TenantService.get_tenant_count()        if tenant_count > 0:            raise AlreadySetupError()        parser = reqparse.RequestParser()        parser.add_argument("password", type=StrLen(30), required=True, location="json")        input_password = parser.parse_args()["password"]        if input_password != os.environ.get("INIT_PASSWORD"):            session["is_init_validated"] = False            raise InitValidateFailedError()        session["is_init_validated"] = True        return {"result": "success"}, 201def get_init_validate_status():    if dify_config.EDITION == "SELF_HOSTED":        if os.environ.get("INIT_PASSWORD"):            if session.get("is_init_validated"):                return True            with Session(db.engine) as db_session:                return db_session.execute(select(DifySetup)).scalar_one_or_none()    return Trueapi.add_resource(InitValidateAPI, "/init")
 |