from flask import Blueprint, render_template, request, redirect, url_for from app.models import Client, ClientPassword, Domain from app import db clients_bp = Blueprint('clients', __name__) # List all clients @clients_bp.route('/clients') def clients(): clients_list = Client.query.all() return render_template('clients.html', clients=clients_list) # Add multiple clients at once @clients_bp.route('/clients/add', methods=['GET', 'POST']) def add_client(): if request.method == 'POST': names = request.form.getlist('name') for name in names: if name.strip(): new_client = Client(name=name.strip()) db.session.add(new_client) db.session.commit() return redirect(url_for('clients.clients')) return render_template('add_client.html') # Client detail page with all four sections @clients_bp.route('/clients/') def client_detail(client_id): client = Client.query.get_or_404(client_id) # For the Domains dropdown: only available non-SSL-only domains. available_domains = Domain.query.filter_by(ssl_only=False).all() # For the SSL dropdown: only available SSL-only domains. available_ssl = Domain.query.filter_by(ssl_only=True).all() return render_template('client_detail.html', client=client, available_domains=available_domains, available_ssl=available_ssl) # Update client details (phone, address) @clients_bp.route('/clients//update_details', methods=['POST']) def update_client_details(client_id): client = Client.query.get_or_404(client_id) client.phone = request.form.get('phone') client.address = request.form.get('address') db.session.commit() return redirect(url_for('clients.client_detail', client_id=client.id)) # Add a new password for the client @clients_bp.route('/clients//add_password', methods=['POST']) def add_client_password(client_id): client = Client.query.get_or_404(client_id) item = request.form.get('item') username = request.form.get('username') password = request.form.get('password') if item and username and password: new_pass = ClientPassword(item=item, username=username, password=password, client_id=client.id) db.session.add(new_pass) db.session.commit() return redirect(url_for('clients.client_detail', client_id=client.id)) # Attach a domain (non SSL-only) to the client @clients_bp.route('/clients//attach_domain', methods=['POST']) def attach_domain(client_id): client = Client.query.get_or_404(client_id) domain_id = request.form.get('domain_id') if domain_id: domain = Domain.query.get(int(domain_id)) if domain and domain not in client.domains: client.domains.append(domain) db.session.commit() return redirect(url_for('clients.client_detail', client_id=client.id)) # Attach an SSL domain (ssl_only) to the client @clients_bp.route('/clients//attach_ssl', methods=['POST']) def attach_ssl(client_id): client = Client.query.get_or_404(client_id) domain_id = request.form.get('ssl_domain_id') if domain_id: domain = Domain.query.get(int(domain_id)) if domain and domain not in client.ssl_domains: client.ssl_domains.append(domain) db.session.commit() return redirect(url_for('clients.client_detail', client_id=client.id)) @clients_bp.route('/clients//remove_domain/', methods=['POST']) def remove_domain(client_id, domain_id): client = Client.query.get_or_404(client_id) domain = Domain.query.get_or_404(domain_id) if domain in client.domains: client.domains.remove(domain) db.session.commit() return redirect(url_for('clients.client_detail', client_id=client.id)) @clients_bp.route('/clients//remove_ssl/', methods=['POST']) def remove_ssl(client_id, domain_id): client = Client.query.get_or_404(client_id) domain = Domain.query.get_or_404(domain_id) if domain in client.ssl_domains: client.ssl_domains.remove(domain) db.session.commit() return redirect(url_for('clients.client_detail', client_id=client.id)) @clients_bp.route('/clients//remove_password/', methods=['POST']) def remove_password(client_id, password_id): password = ClientPassword.query.get_or_404(password_id) db.session.delete(password) db.session.commit() return redirect(url_for('clients.client_detail', client_id=client_id))