dify/api/controllers/console/setup.py

78 lines
2.2 KiB
Python
Raw Normal View History

2023-05-15 08:51:32 +08:00
from functools import wraps
from flask import request
from flask_restful import Resource, reqparse
from configs import dify_config
from libs.helper import email, get_remote_ip, str_len
2023-05-15 08:51:32 +08:00
from libs.password import valid_password
from models.model import DifySetup
from services.account_service import RegisterService, TenantService
2023-05-15 08:51:32 +08:00
from . import api
2024-02-01 18:11:57 +08:00
from .error import AlreadySetupError, NotInitValidateError, NotSetupError
from .init_validate import get_init_validate_status
2023-05-15 08:51:32 +08:00
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"}
2023-05-15 08:51:32 +08:00
@only_edition_self_hosted
def post(self):
# is set up
if get_setup_status():
raise AlreadySetupError()
# is tenant created
tenant_count = TenantService.get_tenant_count()
if tenant_count > 0:
raise AlreadySetupError()
if not get_init_validate_status():
raise NotInitValidateError()
2023-05-15 08:51:32 +08:00
parser = reqparse.RequestParser()
parser.add_argument("email", type=email, required=True, location="json")
parser.add_argument("name", type=str_len(30), required=True, location="json")
parser.add_argument("password", type=valid_password, required=True, location="json")
2023-05-15 08:51:32 +08:00
args = parser.parse_args()
# setup
RegisterService.setup(
email=args["email"], name=args["name"], password=args["password"], ip_address=get_remote_ip(request)
2023-05-15 08:51:32 +08:00
)
return {"result": "success"}, 201
2023-05-15 08:51:32 +08:00
def setup_required(view):
@wraps(view)
def decorated(*args, **kwargs):
# check setup
if not get_init_validate_status():
raise NotInitValidateError()
elif not get_setup_status():
2023-05-15 08:51:32 +08:00
raise NotSetupError()
return view(*args, **kwargs)
return decorated
def get_setup_status():
if dify_config.EDITION == "SELF_HOSTED":
2023-05-15 08:51:32 +08:00
return DifySetup.query.first()
else:
return True
api.add_resource(SetupApi, "/setup")