Files
2026-10-14 13:34:37 +02:00

113 lines
3.9 KiB
Python

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'))