|
import os |
|
|
|
from flask import session |
|
from flask_restful import Resource, reqparse |
|
|
|
from configs import dify_config |
|
from libs.helper import StrLen |
|
from models.model import DifySetup |
|
from services.account_service import TenantService |
|
|
|
from . import api |
|
from .error import AlreadySetupError, InitValidateFailedError |
|
from .wraps import only_edition_self_hosted |
|
|
|
|
|
class InitValidateAPI(Resource): |
|
def get(self): |
|
init_status = get_init_validate_status() |
|
if init_status: |
|
return {"status": "finished"} |
|
return {"status": "not_started"} |
|
|
|
@only_edition_self_hosted |
|
def post(self): |
|
|
|
tenant_count = TenantService.get_tenant_count() |
|
if tenant_count > 0: |
|
raise AlreadySetupError() |
|
|
|
parser = reqparse.RequestParser() |
|
parser.add_argument("password", type=StrLen(30), required=True, location="json") |
|
input_password = parser.parse_args()["password"] |
|
|
|
if input_password != os.environ.get("INIT_PASSWORD"): |
|
session["is_init_validated"] = False |
|
raise InitValidateFailedError() |
|
|
|
session["is_init_validated"] = True |
|
return {"result": "success"}, 201 |
|
|
|
|
|
def get_init_validate_status(): |
|
if dify_config.EDITION == "SELF_HOSTED": |
|
if os.environ.get("INIT_PASSWORD"): |
|
return session.get("is_init_validated") or DifySetup.query.first() |
|
|
|
return True |
|
|
|
|
|
api.add_resource(InitValidateAPI, "/init") |
|
|