mirror of
https://github.com/cwinfo/powerdns-admin.git
synced 2025-06-30 19:36:19 +00:00
Add option to edit users from the comfort of the UI
Update user management feature to allow editing user details directly in the admin user interface. Also added an option to reset the two factor authentication data of a user, for when that's needed (lost device, technical issues etc). (cherry picked from commit 3139616282a18c11463c6ecf78888417b2ac1c35)
This commit is contained in:
46
app/views.py
46
app/views.py
@ -1156,26 +1156,44 @@ def admin():
|
||||
return render_template('admin.html', domains=domains, users=users, configs=configs, statistics=statistics, uptime=uptime, history_number=history_number)
|
||||
|
||||
|
||||
@app.route('/admin/user/create', methods=['GET', 'POST'])
|
||||
@app.route('/admin/user/edit/<user_username>', methods=['GET', 'POST'])
|
||||
@app.route('/admin/user/edit', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@admin_role_required
|
||||
def admin_createuser():
|
||||
def admin_edituser(user_username=None):
|
||||
if request.method == 'GET':
|
||||
return render_template('admin_createuser.html')
|
||||
if not user_username:
|
||||
return render_template('admin_edituser.html', create=1)
|
||||
|
||||
if request.method == 'POST':
|
||||
else:
|
||||
user = User.query.filter(User.username == user_username).first()
|
||||
return render_template('admin_edituser.html', user=user, create=0)
|
||||
|
||||
elif request.method == 'POST':
|
||||
fdata = request.form
|
||||
|
||||
user = User(username=fdata['username'], plain_text_password=fdata['password'], firstname=fdata['firstname'], lastname=fdata['lastname'], email=fdata['email'])
|
||||
if not user_username:
|
||||
user_username = fdata['username']
|
||||
|
||||
if fdata['password'] == "":
|
||||
return render_template('admin_createuser.html', user=user, blank_password=True)
|
||||
user = User(username=user_username, plain_text_password=fdata['password'], firstname=fdata['firstname'], lastname=fdata['lastname'], email=fdata['email'], reload_info=False)
|
||||
|
||||
create = int(fdata['create'])
|
||||
if create:
|
||||
if fdata['password'] == "":
|
||||
return render_template('admin_edituser.html', user=user, create=create, blank_password=True)
|
||||
|
||||
result = user.create_local_user()
|
||||
history = History(msg='Created user {0}'.format(user.username), created_by=current_user.username)
|
||||
|
||||
else:
|
||||
result = user.update_local_user()
|
||||
history = History(msg='Updated user {0}'.format(user.username), created_by=current_user.username)
|
||||
|
||||
result = user.create_local_user();
|
||||
if result['status']:
|
||||
history.add()
|
||||
return redirect(url_for('admin_manageuser'))
|
||||
|
||||
return render_template('admin_createuser.html', user=user, error=result['msg'])
|
||||
return render_template('admin_edituser.html', user=user, create=create, error=result['msg'])
|
||||
|
||||
|
||||
@app.route('/admin/manageuser', methods=['GET', 'POST'])
|
||||
@ -1195,6 +1213,16 @@ def admin_manageuser():
|
||||
jdata = request.json
|
||||
data = jdata['data']
|
||||
|
||||
if jdata['action'] == 'user_otp_disable':
|
||||
user = User(username=data)
|
||||
result = user.update_profile(enable_otp=False)
|
||||
if result:
|
||||
history = History(msg='Two factor authentication disabled for user {0}'.format(data), created_by=current_user.username)
|
||||
history.add()
|
||||
return make_response(jsonify( { 'status': 'ok', 'msg': 'Two factor authentication has been disabled for user.' } ), 200)
|
||||
else:
|
||||
return make_response(jsonify( { 'status': 'error', 'msg': 'Cannot disable two factor authentication for user.' } ), 500)
|
||||
|
||||
if jdata['action'] == 'delete_user':
|
||||
user = User(username=data)
|
||||
if user.username == current_user.username:
|
||||
|
Reference in New Issue
Block a user