From a01336216de3111c13cedbddb04a290825bc39f2 Mon Sep 17 00:00:00 2001 From: radex Date: Thu, 23 Nov 2023 20:07:26 +0100 Subject: [PATCH] admin: clean up mifareidhash modification --- webapp/admin.py | 77 ++++++++++++++++++------------------------------- 1 file changed, 28 insertions(+), 49 deletions(-) diff --git a/webapp/admin.py b/webapp/admin.py index de32174..0e556ff 100644 --- a/webapp/admin.py +++ b/webapp/admin.py @@ -130,9 +130,7 @@ def admin_user_view_del_mifareidhash(uid): value = flask.request.args.get('value') return flask.render_template('admin/ops/del_mifareidhash.html', uid=uid, form=form, value=value) -@bp.route('/admin/users//add_mifareidhash', methods=['POST']) -@admin_required -def admin_user_add_mifareidhash(uid): +def _modify_mifareidhash(uid, form, modify_func): ldaputils.validate_name(uid) conn = context.get_connection() @@ -145,17 +143,9 @@ def admin_user_add_mifareidhash(uid): return flask.redirect(redirect_url) try: - form = AddMifareIDHash() if form.validate_on_submit(): - new_value = form.value.data - - email.send_papertrail( - f'Adding mifareIDHash for user {uid}', - f'New mifareIDHash: {new_value}' - ) - dn = ldaputils.user_dn(uid) - conn.modify_s(dn, [(ldap.MOD_ADD, 'mifareidhash', new_value.encode('utf-8'))]) + modify_func(conn, dn) context.refresh_profile(dn) flask.flash('Added mifareidhash', category='info') @@ -174,49 +164,38 @@ def admin_user_add_mifareidhash(uid): flask.flash(f'Could not modify profile due to LDAP error: {e}', 'danger') return flask.redirect(redirect_url) + +@bp.route('/admin/users//add_mifareidhash', methods=['POST']) +@admin_required +def admin_user_add_mifareidhash(uid): + form = AddMifareIDHash() + def modify_func(conn, dn): + new_value = form.value.data + + email.send_papertrail( + f'Adding mifareIDHash for user {uid}', + f'New mifareIDHash: {new_value}' + ) + + conn.modify_s(dn, [(ldap.MOD_ADD, 'mifareidhash', new_value.encode('utf-8'))]) + + return _modify_mifareidhash(uid, form, modify_func) + @bp.route('/admin/users//del_mifareidhash', methods=['POST']) @admin_required def admin_user_del_mifareidhash(uid): - ldaputils.validate_name(uid) - conn = context.get_connection() + form = DelForm() + def modify_func(conn, dn): + old_value = flask.request.args.get('value') - groups = _get_groups_of(conn, uid) - is_protected = _is_user_protected(conn, uid, groups) + email.send_papertrail( + f'Deleting mifareIDHash for user {uid}', + f'Deleted mifareIDHash: {old_value}' + ) - redirect_url = flask.url_for('admin.admin_user_view', uid=uid) - if is_protected: - flask.flash('Cannot modify protected user', 'danger') - return flask.redirect(redirect_url) + conn.modify_s(dn, [(ldap.MOD_DELETE, 'mifareidhash', old_value.encode('utf-8'))]) - try: - form = DelForm() - if form.validate_on_submit(): - old_value = flask.request.args.get('value') - - email.send_papertrail( - f'Deleting mifareIDHash for user {uid}', - f'Deleted mifareIDHash: {old_value}' - ) - - dn = ldaputils.user_dn(uid) - conn.modify_s(dn, [(ldap.MOD_DELETE, 'mifareidhash', old_value.encode('utf-8'))]) - - context.refresh_profile(dn) - flask.flash('Deleted mifareidhash', category='info') - return flask.redirect(redirect_url) - - for field, errors in form.errors.items(): - for error in errors: - flask.flash("Error in the {} field - {}".format( - getattr(form, field).label.text, - error - ), 'danger') - - return flask.redirect(redirect_url) - except ldap.LDAPError as e: - print('LDAP error:', e) - flask.flash(f'Could not modify profile due to LDAP error: {e}', 'danger') - return flask.redirect(redirect_url) + return _modify_mifareidhash(uid, form, modify_func) @bp.route('/admin/groups/') @admin_required