| from flask import request |
| from flask_restful import Resource, reqparse |
|
|
| from configs import dify_config |
| from libs.helper import StrLen, email, extract_remote_ip |
| from libs.password import valid_password |
| from models.model import DifySetup |
| from services.account_service import RegisterService, TenantService |
|
|
| from . import api |
| from .error import AlreadySetupError, NotInitValidateError |
| from .init_validate import get_init_validate_status |
| from .wraps import only_edition_self_hosted |
|
|
|
|
| class SetupApi(Resource): |
| def get(self): |
| if dify_config.EDITION == "SELF_HOSTED": |
| setup_status = get_setup_status() |
| if setup_status: |
| return {"step": "finished", "setup_at": setup_status.setup_at.isoformat()} |
| return {"step": "not_started"} |
| return {"step": "finished"} |
|
|
| @only_edition_self_hosted |
| def post(self): |
| |
| if get_setup_status(): |
| raise AlreadySetupError() |
|
|
| |
| tenant_count = TenantService.get_tenant_count() |
| if tenant_count > 0: |
| raise AlreadySetupError() |
|
|
| if not get_init_validate_status(): |
| raise NotInitValidateError() |
|
|
| parser = reqparse.RequestParser() |
| parser.add_argument("email", type=email, required=True, location="json") |
| parser.add_argument("name", type=StrLen(30), required=True, location="json") |
| parser.add_argument("password", type=valid_password, required=True, location="json") |
| args = parser.parse_args() |
|
|
| |
| RegisterService.setup( |
| email=args["email"], name=args["name"], password=args["password"], ip_address=extract_remote_ip(request) |
| ) |
|
|
| return {"result": "success"}, 201 |
|
|
|
|
| def get_setup_status(): |
| if dify_config.EDITION == "SELF_HOSTED": |
| return DifySetup.query.first() |
| return True |
|
|
|
|
| api.add_resource(SetupApi, "/setup") |
|
|