| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | from flask import requestfrom flask_restful import Resource, reqparse  # type: ignorefrom configs import dify_configfrom libs.helper import StrLen, email, extract_remote_ipfrom libs.password import valid_passwordfrom models.model import DifySetup, dbfrom services.account_service import RegisterService, TenantServicefrom . import apifrom .error import AlreadySetupError, NotInitValidateErrorfrom .init_validate import get_init_validate_statusfrom .wraps import only_edition_self_hostedclass SetupApi(Resource):    def get(self):        if dify_config.EDITION == "SELF_HOSTED":            setup_status = get_setup_status()            if setup_status:                return {"step": "finished", "setup_at": setup_status.setup_at.isoformat()}            return {"step": "not_started"}        return {"step": "finished"}    @only_edition_self_hosted    def post(self):        # is set up        if get_setup_status():            raise AlreadySetupError()        # is tenant created        tenant_count = TenantService.get_tenant_count()        if tenant_count > 0:            raise AlreadySetupError()        if not get_init_validate_status():            raise NotInitValidateError()        parser = reqparse.RequestParser()        parser.add_argument("email", type=email, required=True, location="json")        parser.add_argument("name", type=StrLen(30), required=True, location="json")        parser.add_argument("password", type=valid_password, required=True, location="json")        args = parser.parse_args()        # setup        RegisterService.setup(            email=args["email"], name=args["name"], password=args["password"], ip_address=extract_remote_ip(request)        )        return {"result": "success"}, 201def get_setup_status():    if dify_config.EDITION == "SELF_HOSTED":        return db.session.query(DifySetup).first()    else:        return Trueapi.add_resource(SetupApi, "/setup")
 |