improvement of instance check
This commit is contained in:
+31
-11
@@ -3569,22 +3569,42 @@ def avv():
|
||||
return render_template("avv.html")
|
||||
|
||||
@app.route('/instance_request/check_subdomain', methods=['GET'])
|
||||
@login_required
|
||||
def check_subdomain():
|
||||
name = (request.values.get('school_name') or '').strip()
|
||||
slug = _slugify_subdomain(name)
|
||||
if not slug:
|
||||
return jsonify({"available": False, "slug": "", "message": "Ungültiger Name für Subdomain."})
|
||||
slug = request.args.get('slug', '').lower().strip()
|
||||
|
||||
if not slug or len(slug) < 3:
|
||||
return jsonify({"available": False, "message": "Ungültiger oder zu kurzer Name"}), 400
|
||||
|
||||
# 1. Prüfen, ob die Subdomain bereits in den aktiven Instanzen existiert
|
||||
inst_client, inst_col = _get_collection("instances")
|
||||
try:
|
||||
existing = steering.instace.list() or []
|
||||
except Exception:
|
||||
existing = []
|
||||
existing_instance = inst_col.find_one({"subdomain": slug})
|
||||
finally:
|
||||
inst_client.close()
|
||||
|
||||
if slug in existing:
|
||||
return jsonify({"available": False, "slug": slug, "message": "Subdomain bereits vergeben."})
|
||||
return jsonify({"available": True, "slug": slug, "message": "Subdomain verfügbar."})
|
||||
if existing_instance:
|
||||
return jsonify({"available": False}), 200
|
||||
|
||||
# 2. Prüfen, ob bereits eine Anfrage (Instance Request) dafür läuft
|
||||
req_client, req_col = _get_collection("instance_requests")
|
||||
try:
|
||||
existing_request = req_col.find_one({
|
||||
"tenant_slug": slug,
|
||||
"provision_status": {"$in": ["pending", "in_progress"]}
|
||||
})
|
||||
finally:
|
||||
req_client.close()
|
||||
|
||||
if existing_request:
|
||||
return jsonify({"available": False}), 200
|
||||
|
||||
# 3. Optional: Gegen reservierte System-Subdomains prüfen (z.B. www, admin, api, mail)
|
||||
reserved_slugs = {"www", "admin", "api", "mail", "auth", "dashboard", "support"}
|
||||
if slug in reserved_slugs:
|
||||
return jsonify({"available": False}), 200
|
||||
|
||||
# Wenn alles frei ist:
|
||||
return jsonify({"available": True}), 200
|
||||
|
||||
@app.route('/impressum')
|
||||
def impressum():
|
||||
|
||||
Reference in New Issue
Block a user