| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- import os
 - 
 - from flask import session
 - from flask_restx import Resource, fields, reqparse
 - from sqlalchemy import select
 - from sqlalchemy.orm import Session
 - 
 - from configs import dify_config
 - from extensions.ext_database import db
 - from libs.helper import StrLen
 - from models.model import DifySetup
 - from services.account_service import TenantService
 - 
 - from . import api, console_ns
 - from .error import AlreadySetupError, InitValidateFailedError
 - from .wraps import only_edition_self_hosted
 - 
 - 
 - @console_ns.route("/init")
 - class InitValidateAPI(Resource):
 -     @api.doc("get_init_status")
 -     @api.doc(description="Get initialization validation status")
 -     @api.response(
 -         200,
 -         "Success",
 -         model=api.model(
 -             "InitStatusResponse",
 -             {"status": fields.String(description="Initialization status", enum=["finished", "not_started"])},
 -         ),
 -     )
 -     def get(self):
 -         """Get initialization validation status"""
 -         init_status = get_init_validate_status()
 -         if init_status:
 -             return {"status": "finished"}
 -         return {"status": "not_started"}
 - 
 -     @api.doc("validate_init_password")
 -     @api.doc(description="Validate initialization password for self-hosted edition")
 -     @api.expect(
 -         api.model(
 -             "InitValidateRequest",
 -             {"password": fields.String(required=True, description="Initialization password", max_length=30)},
 -         )
 -     )
 -     @api.response(
 -         201,
 -         "Success",
 -         model=api.model("InitValidateResponse", {"result": fields.String(description="Operation result")}),
 -     )
 -     @api.response(400, "Already setup or validation failed")
 -     @only_edition_self_hosted
 -     def post(self):
 -         """Validate initialization password"""
 -         # is tenant created
 -         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"):
 -             if session.get("is_init_validated"):
 -                 return True
 - 
 -             with Session(db.engine) as db_session:
 -                 return db_session.execute(select(DifySetup)).scalar_one_or_none()
 - 
 -     return True
 
 
  |