setup.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from flask import request
  2. from flask_restful import Resource, reqparse
  3. from configs import dify_config
  4. from libs.helper import StrLen, email, extract_remote_ip
  5. from libs.password import valid_password
  6. from models.model import DifySetup
  7. from services.account_service import RegisterService, TenantService
  8. from . import api
  9. from .error import AlreadySetupError, NotInitValidateError
  10. from .init_validate import get_init_validate_status
  11. from .wraps import only_edition_self_hosted
  12. class SetupApi(Resource):
  13. def get(self):
  14. if dify_config.EDITION == "SELF_HOSTED":
  15. setup_status = get_setup_status()
  16. if setup_status:
  17. return {"step": "finished", "setup_at": setup_status.setup_at.isoformat()}
  18. return {"step": "not_started"}
  19. return {"step": "finished"}
  20. @only_edition_self_hosted
  21. def post(self):
  22. # is set up
  23. if get_setup_status():
  24. raise AlreadySetupError()
  25. # is tenant created
  26. tenant_count = TenantService.get_tenant_count()
  27. if tenant_count > 0:
  28. raise AlreadySetupError()
  29. if not get_init_validate_status():
  30. raise NotInitValidateError()
  31. parser = reqparse.RequestParser()
  32. parser.add_argument("email", type=email, required=True, location="json")
  33. parser.add_argument("name", type=StrLen(30), required=True, location="json")
  34. parser.add_argument("password", type=valid_password, required=True, location="json")
  35. args = parser.parse_args()
  36. # setup
  37. RegisterService.setup(
  38. email=args["email"], name=args["name"], password=args["password"], ip_address=extract_remote_ip(request)
  39. )
  40. return {"result": "success"}, 201
  41. def get_setup_status():
  42. if dify_config.EDITION == "SELF_HOSTED":
  43. return DifySetup.query.first()
  44. return True
  45. api.add_resource(SetupApi, "/setup")