init_validate.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import os
  2. from flask import session
  3. from flask_restful import Resource, reqparse
  4. from configs import dify_config
  5. from libs.helper import str_len
  6. from models.model import DifySetup
  7. from services.account_service import TenantService
  8. from . import api
  9. from .error import AlreadySetupError, InitValidateFailedError
  10. from .wraps import only_edition_self_hosted
  11. class InitValidateAPI(Resource):
  12. def get(self):
  13. init_status = get_init_validate_status()
  14. if init_status:
  15. return { 'status': 'finished' }
  16. return {'status': 'not_started' }
  17. @only_edition_self_hosted
  18. def post(self):
  19. # is tenant created
  20. tenant_count = TenantService.get_tenant_count()
  21. if tenant_count > 0:
  22. raise AlreadySetupError()
  23. parser = reqparse.RequestParser()
  24. parser.add_argument('password', type=str_len(30),
  25. required=True, location='json')
  26. input_password = parser.parse_args()['password']
  27. if input_password != os.environ.get('INIT_PASSWORD'):
  28. session['is_init_validated'] = False
  29. raise InitValidateFailedError()
  30. session['is_init_validated'] = True
  31. return {'result': 'success'}, 201
  32. def get_init_validate_status():
  33. if dify_config.EDITION == 'SELF_HOSTED':
  34. if os.environ.get('INIT_PASSWORD'):
  35. return session.get('is_init_validated') or DifySetup.query.first()
  36. return True
  37. api.add_resource(InitValidateAPI, '/init')