Files
eveAI/eveai_app/views/basic_views.py

104 lines
3.3 KiB
Python

from flask import request, render_template, Blueprint, session, current_app, jsonify, flash, redirect
from flask_security import roles_required, roles_accepted
from flask_wtf.csrf import generate_csrf
from common.models.document import Catalog
from common.models.user import Tenant
from common.utils.database import Database
from common.utils.nginx_utils import prefixed_url_for
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: {request.path} =====================================')
@basic_bp.after_request
def log_after_request(response):
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', 'Partner Admin', 'Tenant Admin')
def session_defaults():
try:
# Get tenant session
tenant_id = session.get('tenant').get('id')
tenant_db = Database(tenant_id)
tenant_session = tenant_db.get_session()
try:
form = SessionDefaultsForm()
if form.validate_on_submit():
session['default_language'] = form.default_language.data
if form.catalog.data:
catalog_id = int(form.catalog.data)
catalog = tenant_session.query(Catalog).get(catalog_id)
if catalog:
session['catalog_id'] = catalog.id
session['catalog_name'] = catalog.name
else:
session.pop('catalog_id', None)
session.pop('catalog_name', None)
flash('Session defaults updated successfully', 'success')
return redirect(prefixed_url_for('basic_bp.index'))
return render_template('basic/session_defaults.html', form=form)
finally:
tenant_session.close()
except Exception as e:
current_app.logger.error(f"Error in session_defaults: {str(e)}")
flash('Error accessing catalog data. Please ensure your session is valid.', 'danger')
return redirect(prefixed_url_for('security_bp.login'))
@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)
})