113 lines
3.9 KiB
Python
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'))
|
|
|