| |
@@ -23,8 +23,9 @@
|
| |
import pagure.lib.query
|
| |
import pagure.forms
|
| |
import pagure.ui.filters
|
| |
+ import pagure.ui.services
|
| |
from pagure.config import config as pagure_config
|
| |
- from pagure.flask_app import _get_user, admin_session_timedout
|
| |
+ from pagure.flask_app import _get_user, admin_session_timedout, get_other_user
|
| |
from pagure.ui import UI_NS
|
| |
from pagure.utils import (
|
| |
authenticated,
|
| |
@@ -1119,8 +1120,9 @@
|
| |
|
| |
@UI_NS.route("/settings/")
|
| |
@UI_NS.route("/settings")
|
| |
+ @UI_NS.route("/settings/<username>")
|
| |
@login_required
|
| |
- def user_settings():
|
| |
+ def user_settings(username=None):
|
| |
""" Update the user settings.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1128,14 +1130,15 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
form = pagure.forms.ConfirmationForm()
|
| |
return flask.render_template("user_settings.html", user=user, form=form)
|
| |
|
| |
|
| |
@UI_NS.route("/settings/usersettings", methods=["POST"])
|
| |
+ @UI_NS.route("/settings/usersettings/<username>", methods=["POST"])
|
| |
@login_required
|
| |
- def update_user_settings():
|
| |
+ def update_user_settings(username=None):
|
| |
""" Update the user's settings set in the settings page.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1145,7 +1148,7 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
|
| |
form = pagure.forms.ConfirmationForm()
|
| |
|
| |
@@ -1169,12 +1172,15 @@
|
| |
flask.g.session.rollback()
|
| |
flask.flash(str(err), "error")
|
| |
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
|
| |
@UI_NS.route("/settings/usersettings/addkey", methods=["POST"])
|
| |
+ @UI_NS.route("/settings/usersettings/<username>/addkey", methods=["POST"])
|
| |
@login_required
|
| |
- def add_user_sshkey():
|
| |
+ def add_user_sshkey(username=None):
|
| |
""" Add the specified SSH key to the user.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1186,8 +1192,8 @@
|
| |
|
| |
form = pagure.forms.AddSSHKeyForm()
|
| |
|
| |
+ user = get_other_user(username)
|
| |
if form.validate_on_submit():
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
try:
|
| |
msg = pagure.lib.query.add_sshkey_to_project_or_user(
|
| |
flask.g.session,
|
| |
@@ -1203,7 +1209,10 @@
|
| |
pagure.lib.tasks.gitolite_post_compile_only.delay()
|
| |
flask.flash(msg)
|
| |
return flask.redirect(
|
| |
- flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab"
|
| |
+ flask.url_for("ui_ns.user_settings")
|
| |
+ + "/"
|
| |
+ + user.user
|
| |
+ + "#nav-ssh-tab"
|
| |
)
|
| |
except pagure.exceptions.PagureException as msg:
|
| |
flask.g.session.rollback()
|
| |
@@ -1214,14 +1223,21 @@
|
| |
_log.exception(err)
|
| |
flask.flash("SSH key could not be added", "error")
|
| |
|
| |
+ userstring = user.user or ""
|
| |
return flask.redirect(
|
| |
- flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab"
|
| |
+ flask.url_for("ui_ns.user_settings")
|
| |
+ + "/"
|
| |
+ + userstring
|
| |
+ + "#nav-ssh-tab"
|
| |
)
|
| |
|
| |
|
| |
@UI_NS.route("/settings/usersettings/removekey/<int:keyid>", methods=["POST"])
|
| |
+ @UI_NS.route(
|
| |
+ "/settings/usersettings/removekey/<int:keyid>/<username>", methods=["POST"]
|
| |
+ )
|
| |
@login_required
|
| |
- def remove_user_sshkey(keyid):
|
| |
+ def remove_user_sshkey(keyid, username=None):
|
| |
""" Removes an SSH key from the user.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1231,8 +1247,8 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
form = pagure.forms.ConfirmationForm()
|
| |
+ user = get_other_user(username)
|
| |
if form.validate_on_submit():
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
found = False
|
| |
for key in user.sshkeys:
|
| |
if key.id == keyid:
|
| |
@@ -1243,7 +1259,10 @@
|
| |
if not found:
|
| |
flask.flash("SSH key does not exist in user.", "error")
|
| |
return flask.redirect(
|
| |
- flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab"
|
| |
+ flask.url_for("ui_ns.user_settings")
|
| |
+ + "/"
|
| |
+ + user.user
|
| |
+ + "#nav-ssh-tab"
|
| |
)
|
| |
|
| |
try:
|
| |
@@ -1259,7 +1278,7 @@
|
| |
flask.flash("SSH key could not be removed", "error")
|
| |
|
| |
return flask.redirect(
|
| |
- flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab"
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user + "#nav-ssh-tab"
|
| |
)
|
| |
|
| |
|
| |
@@ -1277,8 +1296,9 @@
|
| |
|
| |
|
| |
@UI_NS.route("/settings/email/drop", methods=["POST"])
|
| |
+ @UI_NS.route("/settings/<username>/email/drop", methods=["POST"])
|
| |
@login_required
|
| |
- def remove_user_email():
|
| |
+ def remove_user_email(username=None):
|
| |
""" Remove the specified email from the logged in user.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1286,11 +1306,13 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
|
| |
if len(user.emails) == 1:
|
| |
flask.flash("You must always have at least one email", "error")
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
form = pagure.forms.UserEmailForm()
|
| |
|
| |
@@ -1303,7 +1325,9 @@
|
| |
"You do not have the email: %s, nothing to remove" % email,
|
| |
"error",
|
| |
)
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
for mail in user.emails:
|
| |
if mail.email == email:
|
| |
@@ -1317,13 +1341,16 @@
|
| |
_log.exception(err)
|
| |
flask.flash("Email could not be removed", "error")
|
| |
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
|
| |
@UI_NS.route("/settings/email/add/", methods=["GET", "POST"])
|
| |
@UI_NS.route("/settings/email/add", methods=["GET", "POST"])
|
| |
+ @UI_NS.route("/settings/email/add/<username>", methods=["GET", "POST"])
|
| |
@login_required
|
| |
- def add_user_email():
|
| |
+ def add_user_email(username=None):
|
| |
""" Add a new email for the logged in user.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1331,7 +1358,7 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
|
| |
form = pagure.forms.UserEmailForm(
|
| |
emails=[mail.email for mail in user.emails]
|
| |
@@ -1357,8 +1384,9 @@
|
| |
|
| |
|
| |
@UI_NS.route("/settings/email/default", methods=["POST"])
|
| |
+ @UI_NS.route("/settings/<username>/email/default", methods=["POST"])
|
| |
@login_required
|
| |
- def set_default_email():
|
| |
+ def set_default_email(username=None):
|
| |
""" Set the default email address of the user.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1366,7 +1394,7 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
|
| |
form = pagure.forms.UserEmailForm()
|
| |
if form.validate_on_submit():
|
| |
@@ -1379,7 +1407,9 @@
|
| |
"error",
|
| |
)
|
| |
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
user.default_email = email
|
| |
|
| |
@@ -1391,12 +1421,15 @@
|
| |
_log.exception(err)
|
| |
flask.flash("Default email could not be set", "error")
|
| |
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
|
| |
@UI_NS.route("/settings/email/resend", methods=["POST"])
|
| |
+ @UI_NS.route("/settings/<username>/email/resend", methods=["POST"])
|
| |
@login_required
|
| |
- def reconfirm_email():
|
| |
+ def reconfirm_email(username=None):
|
| |
""" Re-send the email address of the user.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1404,7 +1437,7 @@
|
| |
flask.url_for("auth_login", next=flask.request.url)
|
| |
)
|
| |
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
|
| |
form = pagure.forms.UserEmailForm()
|
| |
if form.validate_on_submit():
|
| |
@@ -1421,12 +1454,16 @@
|
| |
_log.exception(err)
|
| |
flask.flash("Confirmation email could not be re-sent", "error")
|
| |
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + user.user
|
| |
+ )
|
| |
|
| |
|
| |
@UI_NS.route("/settings/email/confirm/<token>/")
|
| |
@UI_NS.route("/settings/email/confirm/<token>")
|
| |
- def confirm_email(token):
|
| |
+ @UI_NS.route("/settings/<username>/email/confirm/<token>/")
|
| |
+ @UI_NS.route("/settings/<username>/email/confirm/<token>")
|
| |
+ def confirm_email(token, username=None):
|
| |
""" Confirm a new email.
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1437,6 +1474,7 @@
|
| |
email = pagure.lib.query.search_pending_email(flask.g.session, token=token)
|
| |
if not email:
|
| |
flask.flash("No email associated with this token.", "error")
|
| |
+ return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
else:
|
| |
try:
|
| |
pagure.lib.query.add_email_to_user(
|
| |
@@ -1456,8 +1494,9 @@
|
| |
"error",
|
| |
)
|
| |
_log.exception(err)
|
| |
-
|
| |
- return flask.redirect(flask.url_for("ui_ns.user_settings"))
|
| |
+ return flask.redirect(
|
| |
+ flask.url_for("ui_ns.user_settings") + "/" + email.user.username
|
| |
+ )
|
| |
|
| |
|
| |
@UI_NS.route("/ssh_info/")
|
| |
@@ -1469,10 +1508,12 @@
|
| |
return flask.render_template("doc_ssh_keys.html")
|
| |
|
| |
|
| |
- @UI_NS.route("/settings/token/new/", methods=("GET", "POST"))
|
| |
+ # UI_NS.route("/settings/token/new/", methods=("GET", "POST"))
|
| |
+ # UI_NS.route("/settings/token/new", methods=("GET", "POST"))
|
| |
@UI_NS.route("/settings/token/new", methods=("GET", "POST"))
|
| |
+ @UI_NS.route("/settings/<username>/token/new", methods=("GET", "POST"))
|
| |
@login_required
|
| |
- def add_api_user_token():
|
| |
+ def add_api_user_token(username=None):
|
| |
""" Create an user token (not project specific).
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1483,7 +1524,7 @@
|
| |
)
|
| |
|
| |
# Ensure the user is in the DB at least
|
| |
- user = _get_user(username=flask.g.fas_user.username)
|
| |
+ user = get_other_user(username)
|
| |
|
| |
acls = pagure.lib.query.get_acls(
|
| |
flask.g.session, restrict=pagure_config.get("CROSS_PROJECT_ACLS")
|
| |
@@ -1502,7 +1543,10 @@
|
| |
flask.g.session.commit()
|
| |
flask.flash("Token created")
|
| |
return flask.redirect(
|
| |
- flask.url_for("ui_ns.user_settings") + "#nav-api-tab"
|
| |
+ flask.url_for("ui_ns.user_settings")
|
| |
+ + "/"
|
| |
+ + user.user
|
| |
+ + "#nav-api-tab"
|
| |
)
|
| |
except SQLAlchemyError as err: # pragma: no cover
|
| |
flask.g.session.rollback()
|
| |
@@ -1514,14 +1558,19 @@
|
| |
flask.flash("You must select at least one permission.", "error")
|
| |
|
| |
return flask.render_template(
|
| |
- "add_token.html", select="settings", form=form, acls=acls
|
| |
+ "add_token.html",
|
| |
+ select="settings",
|
| |
+ form=form,
|
| |
+ acls=acls,
|
| |
+ username=user.username,
|
| |
)
|
| |
|
| |
|
| |
@UI_NS.route("/settings/token/revoke/<token_id>/", methods=["POST"])
|
| |
@UI_NS.route("/settings/token/revoke/<token_id>", methods=["POST"])
|
| |
+ @UI_NS.route("/settings/token/revoke/<token_id>/<username>", methods=["POST"])
|
| |
@login_required
|
| |
- def revoke_api_user_token(token_id):
|
| |
+ def revoke_api_user_token(token_id, username=None):
|
| |
""" Revoke a user token (ie: not project specific).
|
| |
"""
|
| |
if admin_session_timedout():
|
| |
@@ -1531,8 +1580,10 @@
|
| |
|
| |
token = pagure.lib.query.get_api_token(flask.g.session, token_id)
|
| |
|
| |
- if not token or token.user.username != flask.g.fas_user.username:
|
| |
- flask.abort(404, description="Token not found")
|
| |
+ user = get_other_user(username)
|
| |
+
|
| |
+ if not token or token.user.username != user.username:
|
| |
+ flask.abort(404, "Token not found")
|
| |
|
| |
form = pagure.forms.ConfirmationForm()
|
| |
|
| |
@@ -1551,7 +1602,10 @@
|
| |
)
|
| |
|
| |
return flask.redirect(
|
| |
- flask.url_for("ui_ns.user_settings") + "#nav-api-token"
|
| |
+ flask.url_for("ui_ns.user_settings")
|
| |
+ + "/"
|
| |
+ + user.user
|
| |
+ + "#nav-api-token"
|
| |
)
|
| |
|
| |
|
| |
I'm confused, does this means these templates can be accessed even if the service accounts are disabled?