from flask import Blueprint, request, flash, redirect, url_for, render_template, make_response, jsonify from services.google_service import GoogleAdminService from blueprints.auth import login_required from rechten import recht_vereist import rechten from config import Config from tenancy import per_school from datetime import datetime import io from xhtml2pdf import pisa google_bp = Blueprint('google', __name__) google_service = per_school(GoogleAdminService) #------------------------------------------------- # Passwoord reset route #------------------------------------------------- @google_bp.route('/reset_pw', methods=['POST']) @login_required @recht_vereist('google_wachtwoord') def reset_pw(): email = request.form.get('email') nieuw_wachtwoord = Config.STANDAARD_WACHTWOORD if not email: flash("Geen e-mailadres opgegeven.", "error") return redirect(url_for('google.password_reset')) success, message = google_service.change_password(email, nieuw_wachtwoord) if success: rechten.log(actie=f"PW Reset voor {email}") # tabel Logs (centrale database) flash(f"Wachtwoord voor {email} is gereset naar {nieuw_wachtwoord}", "success") else: flash(f"Google API Fout: {message}", "error") return redirect(url_for('google.password_reset')) #-------------------------------------------------- # Route voor pagina google gebruikers #-------------------------------------------------- @google_bp.route('/google_account_beheer', methods=['GET', 'POST']) @login_required @recht_vereist('google_wachtwoord', 'google_accounts') def password_reset(): results = [] query = "" if request.method == 'POST': query = request.form.get('query') results = google_service.search_users(query) return render_template('google_beheer.html', results=results, query=query) # Logica voor apply password @google_bp.route('/apply_password', methods=['POST']) @login_required @recht_vereist('google_wachtwoord') def apply_password(): email = request.form.get('email') new_password = request.form.get('new_password') success, message = google_service.change_password(email, new_password) if success: return "OK", 200 else: return message, 500 # Logica voor google account aanmaken @google_bp.route('/aanmaken_google_account', methods=['POST']) @login_required @recht_vereist('google_accounts') def aanmaken_google_account(): first_name = request.form.get('first_name') last_name = request.form.get('last_name') password = request.form.get('password') account_type = request.form.get('account_type') # Gebruik de config vanuit de service target_ou = Config.OU_NIEUWE_LEERKRACHTEN if account_type == "Leerkracht" else f"/{google_service.conf.OU_NEW_STUDENTS}" template_html = "pdf_template_leerkracht.html" if account_type == "Leerkracht" else "pdf_template_leerling.html" success, result = google_service.create_user(first_name, last_name, password, target_ou) if success: context = { 'naam': f"{first_name} {last_name}", 'email': result, 'wachtwoord': password, 'datum': datetime.now().strftime("%d/%m/%Y") } html_string = render_template(template_html, **context) pdf_buffer = io.BytesIO() # Gebruik pisa om de HTML om te zetten naar PDF pisa_status = pisa.CreatePDF(io.StringIO(html_string), dest=pdf_buffer) if pisa_status.err: flash("Fout bij het genereren van PDF", "error") return redirect(url_for('google.password_reset')) pdf_buffer.seek(0) response = make_response(pdf_buffer.read()) response.headers['Content-Type'] = 'application/pdf' response.headers['Content-Disposition'] = f'inline; filename=account_{first_name}.pdf' return response else: flash(f"Google Fout: {result}", "error") return redirect(url_for('google.password_reset'))