from flask import request, render_template, Blueprint, session, current_app, jsonify from flask_security import roles_required, roles_accepted from flask_wtf.csrf import generate_csrf from .basic_forms import SessionDefaultsForm basic_bp = Blueprint('basic_bp', __name__) @basic_bp.before_request def log_before_request(): current_app.logger.debug(f"Before request (basic_bp): {request.method} {request.url}") @basic_bp.after_request def log_after_request(response): current_app.logger.debug(f"After request (basic_bp): {request.method} {request.url} - Status: {response.status}") return response @basic_bp.route('/', methods=['GET', ]) def index(): return render_template('index.html') @basic_bp.route('/confirm_email_ok', methods=['GET', ]) def confirm_email_ok(): return render_template('basic/confirm_email_ok.html') @basic_bp.route('/confirm_email_fail', methods=['GET', ]) def confirm_email_fail(): return render_template('basic/confirm_email_fail.html') @basic_bp.route('/session_defaults', methods=['GET', 'POST']) @roles_accepted('Super User', 'Tenant Admin') def session_defaults(): form = SessionDefaultsForm() if form.validate_on_submit(): session['default_language'] = form.default_language.data return render_template('basic/session_defaults.html', form=form) @basic_bp.route('/set_user_timezone', methods=['POST']) def set_user_timezone(): data = request.get_json() timezone = data.get('timezone') if timezone: session['admin_user_timezone'] = timezone return jsonify({'status': 'success', 'timezone': timezone}), 200 else: return jsonify({'status': 'error', 'message': 'Timezone not provided'}), 400 @basic_bp.route('/health', methods=['GET']) def health(): return jsonify({'status': 'ok'}), 200 @basic_bp.route('/check_csrf', methods=['GET']) def check_csrf(): csrf_token = generate_csrf() return jsonify({ 'csrf_token_in_session': session.get('csrf_token'), 'generated_csrf_token': csrf_token, 'session_id': session.sid if hasattr(session, 'sid') else None, 'session_data': dict(session) })