fix(settings): corregir desincronizacion de metodos de autenticacion, normalizar claves de proveedores y añadir badges reactivos de estado
This commit is contained in:
@@ -1454,8 +1454,11 @@ def global_settings():
|
||||
},
|
||||
'auth_providers': {
|
||||
'local': SystemSetting.get_value('auth_local_enabled', 'true') in ['true', 'True', '1', True],
|
||||
'local_enabled': SystemSetting.get_value('auth_local_enabled', 'true') in ['true', 'True', '1', True],
|
||||
'google': SystemSetting.get_value('auth_google_enabled', 'false') in ['true', 'True', '1', True],
|
||||
'moodle': SystemSetting.get_value('auth_moodle_enabled', 'false') in ['true', 'True', '1', True]
|
||||
'google_enabled': SystemSetting.get_value('auth_google_enabled', 'false') in ['true', 'True', '1', True],
|
||||
'moodle': SystemSetting.get_value('auth_moodle_enabled', 'false') in ['true', 'True', '1', True],
|
||||
'moodle_enabled': SystemSetting.get_value('auth_moodle_enabled', 'false') in ['true', 'True', '1', True]
|
||||
},
|
||||
'google_oauth': {
|
||||
'client_id': SystemSetting.get_value('google_client_id', ''),
|
||||
@@ -1555,3 +1558,61 @@ def toggle_demo_mode():
|
||||
flash(_(msg_detail), 'success' if not target_state else 'info')
|
||||
return redirect(url_for('admin.global_settings'))
|
||||
|
||||
|
||||
@admin_bp.route('/settings/auth-providers', methods=['POST'])
|
||||
@login_required
|
||||
def update_auth_providers_web():
|
||||
"""Actualiza los métodos de autenticación habilitados desde la interfaz de administración."""
|
||||
if not (current_user.is_admin() or (current_user.role and current_user.role.upper() == 'ADMIN')):
|
||||
if request.is_json or request.headers.get('X-Requested-With') == 'XMLHttpRequest':
|
||||
return jsonify({'status': 'error', 'message': 'Acción no autorizada'}), 403
|
||||
abort(403)
|
||||
|
||||
from app.models.setting import SystemSetting
|
||||
from app.models.audit_log import AuditLog
|
||||
|
||||
data = request.get_json(silent=True) or request.form.to_dict() or {}
|
||||
local_input = data.get('local_enabled') if 'local_enabled' in data else data.get('local', True)
|
||||
google_input = data.get('google_enabled') if 'google_enabled' in data else data.get('google', False)
|
||||
moodle_input = data.get('moodle_enabled') if 'moodle_enabled' in data else data.get('moodle', False)
|
||||
|
||||
local_val = 'true' if local_input in [True, 'true', '1', 'on'] else 'false'
|
||||
google_val = 'true' if google_input in [True, 'true', '1', 'on'] else 'false'
|
||||
moodle_val = 'true' if moodle_input in [True, 'true', '1', 'on'] else 'false'
|
||||
|
||||
SystemSetting.set_value('auth_local_enabled', local_val, 'Habilitar login nativo con usuario/contraseña', category='sso')
|
||||
SystemSetting.set_value('auth_google_enabled', google_val, 'Habilitar login SSO con Google Workspace', category='sso')
|
||||
SystemSetting.set_value('auth_moodle_enabled', moodle_val, 'Habilitar login delegado con Moodle', category='sso')
|
||||
|
||||
try:
|
||||
audit = AuditLog(
|
||||
user_id=current_user.id,
|
||||
user_email=current_user.email,
|
||||
action='UPDATE_AUTH_PROVIDERS',
|
||||
module='settings',
|
||||
details=f"Métodos de login actualizados: Local={local_val}, Google={google_val}, Moodle={moodle_val}"
|
||||
)
|
||||
db.session.add(audit)
|
||||
db.session.commit()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
resp_data = {
|
||||
'status': 'success',
|
||||
'message': 'Métodos de autenticación actualizados correctamente.',
|
||||
'auth_providers': {
|
||||
'local': local_val == 'true',
|
||||
'local_enabled': local_val == 'true',
|
||||
'google': google_val == 'true',
|
||||
'google_enabled': google_val == 'true',
|
||||
'moodle': moodle_val == 'true',
|
||||
'moodle_enabled': moodle_val == 'true'
|
||||
}
|
||||
}
|
||||
|
||||
if request.is_json or request.headers.get('X-Requested-With') == 'XMLHttpRequest':
|
||||
return jsonify(resp_data), 200
|
||||
|
||||
flash(_('Métodos de autenticación actualizados correctamente.'), 'success')
|
||||
return redirect(url_for('admin.global_settings'))
|
||||
|
||||
|
||||
@@ -1746,8 +1746,11 @@ def get_all_settings():
|
||||
}
|
||||
|
||||
auth_providers = {
|
||||
'local': SystemSetting.get_value('auth_local_enabled', 'true') in ['true', 'True', '1', True],
|
||||
'local_enabled': SystemSetting.get_value('auth_local_enabled', 'true') in ['true', 'True', '1', True],
|
||||
'google': SystemSetting.get_value('auth_google_enabled', 'false') in ['true', 'True', '1', True],
|
||||
'google_enabled': SystemSetting.get_value('auth_google_enabled', 'false') in ['true', 'True', '1', True],
|
||||
'moodle': SystemSetting.get_value('auth_moodle_enabled', 'false') in ['true', 'True', '1', True],
|
||||
'moodle_enabled': SystemSetting.get_value('auth_moodle_enabled', 'false') in ['true', 'True', '1', True]
|
||||
}
|
||||
|
||||
@@ -1914,9 +1917,15 @@ def update_auth_providers():
|
||||
return jsonify({'error': 'Forbidden', 'message': 'Solo administradores pueden modificar los métodos de autenticación.'}), 403
|
||||
|
||||
data = request.get_json(silent=True) or request.form.to_dict() or {}
|
||||
local_val = 'true' if data.get('local_enabled', True) in [True, 'true', '1', 'on'] else 'false'
|
||||
google_val = 'true' if data.get('google_enabled', False) in [True, 'true', '1', 'on'] else 'false'
|
||||
moodle_val = 'true' if data.get('moodle_enabled', False) in [True, 'true', '1', 'on'] else 'false'
|
||||
|
||||
# Soporte para claves tanto cortas (local) como largas (local_enabled)
|
||||
local_input = data.get('local_enabled') if 'local_enabled' in data else data.get('local', True)
|
||||
google_input = data.get('google_enabled') if 'google_enabled' in data else data.get('google', False)
|
||||
moodle_input = data.get('moodle_enabled') if 'moodle_enabled' in data else data.get('moodle', False)
|
||||
|
||||
local_val = 'true' if local_input in [True, 'true', '1', 'on'] else 'false'
|
||||
google_val = 'true' if google_input in [True, 'true', '1', 'on'] else 'false'
|
||||
moodle_val = 'true' if moodle_input in [True, 'true', '1', 'on'] else 'false'
|
||||
|
||||
SystemSetting.set_value('auth_local_enabled', local_val, 'Habilitar login nativo con usuario/contraseña', category='sso')
|
||||
SystemSetting.set_value('auth_google_enabled', google_val, 'Habilitar login SSO con Google Workspace', category='sso')
|
||||
@@ -1937,7 +1946,15 @@ def update_auth_providers():
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'message': 'Métodos de autenticación actualizados correctamente.'
|
||||
'message': 'Métodos de autenticación actualizados correctamente.',
|
||||
'auth_providers': {
|
||||
'local': local_val == 'true',
|
||||
'local_enabled': local_val == 'true',
|
||||
'google': google_val == 'true',
|
||||
'google_enabled': google_val == 'true',
|
||||
'moodle': moodle_val == 'true',
|
||||
'moodle_enabled': moodle_val == 'true'
|
||||
}
|
||||
}), 200
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user