132 lines
4.4 KiB
Python
132 lines
4.4 KiB
Python
from flask import request, render_template, Blueprint, session, current_app, jsonify, flash, redirect, url_for
|
|
from flask_security import roles_required, roles_accepted
|
|
from flask_wtf.csrf import generate_csrf
|
|
import os
|
|
import requests
|
|
|
|
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)
|
|
})
|
|
|
|
|
|
@basic_bp.route('/release_notes', methods=['GET'])
|
|
@roles_accepted('Super User', 'Partner Admin', 'Tenant Admin')
|
|
def release_notes():
|
|
"""Display the CHANGELOG.md file."""
|
|
try:
|
|
# Construct the URL to the CHANGELOG.md file in the static directory
|
|
static_url = url_for('static', filename='docs/CHANGELOG.md', _external=True)
|
|
|
|
# Make a request to get the content of the CHANGELOG.md file
|
|
response = requests.get(static_url)
|
|
response.raise_for_status() # Raise an exception for HTTP errors
|
|
|
|
# Get the content of the response
|
|
markdown_content = response.text
|
|
|
|
return render_template(
|
|
'basic/view_markdown.html',
|
|
title='Release Notes',
|
|
description='EveAI Release Notes and Change History',
|
|
markdown_content=markdown_content
|
|
)
|
|
except Exception as e:
|
|
current_app.logger.error(f"Error displaying release notes: {str(e)}")
|
|
flash(f'Error displaying release notes: {str(e)}', 'danger')
|
|
return redirect(prefixed_url_for('basic_bp.index'))
|