diff --git a/Website/main.py b/Website/main.py index 5a9543b..4e17fc2 100644 --- a/Website/main.py +++ b/Website/main.py @@ -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():