diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py
index 11f98f6..f27ba47 100644
--- a/pagure/lib/__init__.py
+++ b/pagure/lib/__init__.py
@@ -1441,6 +1441,32 @@ def update_project_settings(session, repo, settings, user):
return 'Edited successfully settings of repo: %s' % repo.fullname
+def update_user_settings(session, settings, user):
+ ''' Update the settings of a project. '''
+ user_obj = get_user(session, user)
+
+ update = []
+ new_settings = user_obj.settings
+ for key in new_settings:
+ if key in settings:
+ if new_settings[key] != settings[key]:
+ update.append(key)
+ new_settings[key] = settings[key]
+ else:
+ update.append(key)
+ val = False
+ new_settings[key] = val
+
+ if not update:
+ return 'No settings to change'
+ else:
+ user_obj.settings = new_settings
+ session.add(user_obj)
+ session.flush()
+
+ return 'Successfully edited your settings'
+
+
def fork_project(session, user, repo, gitfolder,
docfolder, ticketfolder, requestfolder):
''' Fork a given project into the user's forks. '''
diff --git a/pagure/templates/user_settings.html b/pagure/templates/user_settings.html
index 71c2a55..fe22f90 100644
--- a/pagure/templates/user_settings.html
+++ b/pagure/templates/user_settings.html
@@ -112,6 +112,42 @@
+
+
+
+
{% if config.get('PAGURE_AUTH')=='local' %}
Change password
diff --git a/pagure/ui/app.py b/pagure/ui/app.py
index 6f2f8f7..adef315 100644
--- a/pagure/ui/app.py
+++ b/pagure/ui/app.py
@@ -471,6 +471,49 @@ def user_settings():
form=form,
)
+@APP.route('/settings/usersettings', methods=['POST'])
+@login_required
+def update_user_settings():
+ """ Update the user's settings set in the settings page.
+ """
+ if admin_session_timedout():
+ if flask.request.method == 'POST':
+ flask.flash('Action canceled, try it again', 'error')
+ return flask.redirect(
+ flask.url_for('auth_login', next=flask.request.url))
+
+
+ user = pagure.lib.search_user(
+ SESSION, username=flask.g.fas_user.username)
+ if not user:
+ flask.abort(404, 'User not found')
+
+ form = pagure.forms.ConfirmationForm()
+
+ if form.validate_on_submit():
+ settings = {}
+ for key in flask.request.form:
+ if key == 'csrf_token':
+ continue
+ settings[key] = flask.request.form[key]
+
+ try:
+ message = pagure.lib.update_user_settings(
+ SESSION,
+ settings=settings,
+ user=flask.g.fas_user.username,
+ )
+ SESSION.commit()
+ flask.flash(message)
+ except pagure.exceptions.PagureException as msg:
+ SESSION.rollback()
+ flask.flash(msg, 'error')
+ except SQLAlchemyError as err: # pragma: no cover
+ SESSION.rollback()
+ flask.flash(str(err), 'error')
+
+ return flask.redirect(flask.url_for('user_settings'))
+
@APP.route('/markdown/', methods=['POST'])
def markdown_preview():