| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | import osfrom flask import current_app, sessionfrom flask_restful import Resource, reqparsefrom libs.helper import str_lenfrom 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=str_len(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 current_app.config['EDITION'] == 'SELF_HOSTED':        if os.environ.get('INIT_PASSWORD'):            return session.get('is_init_validated') or DifySetup.query.first()        return Trueapi.add_resource(InitValidateAPI, '/init')
 |