init_validate.py 1.5 KB

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