setup.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from flask import request
  2. from flask_restful import Resource, reqparse # type: ignore
  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, db
  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 db.session.query(DifySetup).first()
  44. else:
  45. return True
  46. api.add_resource(SetupApi, "/setup")