def view_user_issues(username): """ Shows the issues created or assigned to the specified user. :param username: The username to retrieve the issues for :type username: str """ if not pagure_config.get("ENABLE_TICKETS", True): flask.abort( 404, description="Tickets have been disabled on this pagure instance", ) user = _get_user(username=username) userprofile_common = get_userprofile_common(user) return flask.render_template( "userprofile_issues.html", username=username, user=user, repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], select="issues", )
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 = _get_user(username=flask.g.fas_user.username) 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.query.update_user_settings( flask.g.session, settings=settings, user=user.username ) flask.g.session.commit() flask.flash(message) except pagure.exceptions.PagureException as msg: flask.g.session.rollback() flask.flash(msg, "error") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() flask.flash(str(err), "error") return flask.redirect(flask.url_for("ui_ns.user_settings"))
def userprofile_groups(username): """ Shows the groups of a user """ user = _get_user(username=username) userprofile_common = get_userprofile_common(user) groups = [] for groupname in user.groups: groups.append( pagure.lib.query.search_groups( flask.g.session, group_name=groupname ) ) return flask.render_template( "userprofile_groups.html", username=username, user=user, groups=groups, repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], select="groups", )
def reconfirm_email(): """ Re-send the email address of the user. """ if admin_session_timedout(): return flask.redirect( flask.url_for("auth_login", next=flask.request.url) ) user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.UserEmailForm() if form.validate_on_submit(): email = form.email.data try: pagure.lib.query.resend_pending_email(flask.g.session, user, email) flask.g.session.commit() flask.flash("Confirmation email re-sent") except pagure.exceptions.PagureException as err: flask.flash(str(err), "error") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("Confirmation email could not be re-sent", "error") return flask.redirect(flask.url_for("ui_ns.user_settings"))
def add_user_email(): """ Add a new email for the logged in user. """ if admin_session_timedout(): return flask.redirect( flask.url_for("auth_login", next=flask.request.url) ) user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.UserEmailForm( emails=[mail.email for mail in user.emails] ) if form.validate_on_submit(): email = form.email.data try: pagure.lib.query.add_user_pending_email( flask.g.session, user, email ) flask.g.session.commit() flask.flash("Email pending validation") return flask.redirect(flask.url_for("ui_ns.user_settings")) except pagure.exceptions.PagureException as err: flask.flash(str(err), "error") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("Email could not be added", "error") return flask.render_template("user_emails.html", user=user, form=form)
def set_default_email(): """ Set the default email address of the user. """ if admin_session_timedout(): return flask.redirect( flask.url_for("auth_login", next=flask.request.url) ) user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.UserEmailForm() if form.validate_on_submit(): email = form.email.data useremails = [mail.email for mail in user.emails] if email not in useremails: flask.flash( "You do not have the email: %s, nothing to set" % email, "error", ) return flask.redirect(flask.url_for("ui_ns.user_settings")) user.default_email = email try: flask.g.session.commit() flask.flash("Default email set to: %s" % email) except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("Default email could not be set", "error") return flask.redirect(flask.url_for("ui_ns.user_settings"))
def view_user(username): """ Front page of a specific user. """ user = _get_user(username=username) # public profile, so never show private repos, # even if the user is viewing themself private = False owned_repos = pagure.lib.query.list_users_projects( flask.g.session, username=username, exclude_groups=None, fork=False, private=private, limit=6, acls=["main admin"], ) userprofile_common = get_userprofile_common(user) return flask.render_template( "userprofile_overview.html", username=username, user=user, owned_repos=owned_repos, repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], select="overview", )
def index_auth(): """ Front page for authenticated user. """ user = _get_user(username=flask.g.fas_user.username) acl = flask.request.args.get('acl', '').strip().lower() or None repopage = flask.request.args.get('repopage', 1) try: repopage = int(repopage) if repopage < 1: repopage = 1 except ValueError: repopage = 1 forkpage = flask.request.args.get('forkpage', 1) try: forkpage = int(forkpage) if forkpage < 1: forkpage = 1 except ValueError: forkpage = 1 repos = pagure.lib.search_projects( flask.g.session, username=flask.g.fas_user.username, exclude_groups=pagure_config.get('EXCLUDE_GROUP_INDEX'), fork=False, private=flask.g.fas_user.username) if repos and acl: repos = _filter_acls(repos, acl, user) repos_length = len(repos) forks = pagure.lib.search_projects(flask.g.session, username=flask.g.fas_user.username, fork=True, private=flask.g.fas_user.username) forks_length = len(forks) watch_list = pagure.lib.user_watch_list( flask.g.session, user=flask.g.fas_user.username, exclude_groups=pagure_config.get('EXCLUDE_GROUP_INDEX'), ) return flask.render_template( 'index_auth.html', username=flask.g.fas_user.username, user=user, forks=forks, repos=repos, watch_list=watch_list, repopage=repopage, forkpage=forkpage, repos_length=repos_length, forks_length=forks_length, )
def user_settings(): """ Update the user settings. """ if admin_session_timedout(): return flask.redirect( flask.url_for("auth_login", next=flask.request.url)) user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.ConfirmationForm() return flask.render_template("user_settings.html", user=user, form=form)
def user_settings(): """ Update the user settings. """ if admin_session_timedout(): return flask.redirect( flask.url_for("auth_login", next=flask.request.url) ) user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.ConfirmationForm() return flask.render_template("user_settings.html", user=user, form=form)
def add_user_sshkey(): """ Add the specified SSH key to the user. """ 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) ) form = pagure.forms.AddSSHKeyForm() 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, ssh_key=form.ssh_key.data, pushaccess=True, creator=user, user=user, ) flask.g.session.commit() pagure.lib.query.create_user_ssh_keys_on_disk( user, pagure_config.get("GITOLITE_KEYDIR", None) ) pagure.lib.tasks.gitolite_post_compile_only.delay() if ( pagure_config.get("GIT_AUTH_BACKEND") == "pagure_authorized_keys" ): _log.info("SSH FOLDER: %s", pagure_config.get("SSH_FOLDER")) pagure.lib.tasks.add_key_to_authorized_keys.delay( ssh_folder=pagure_config.get("SSH_FOLDER"), username=flask.g.fas_user.username, sshkey=form.ssh_key.data, ) flask.flash(msg) return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab" ) except pagure.exceptions.PagureException as msg: flask.g.session.rollback() _log.debug(msg) flask.flash(str(msg), "error") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("SSH key could not be added", "error") return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab" )
def remove_user_sshkey(keyid): """ Removes an SSH key from the user. """ 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) ) form = pagure.forms.ConfirmationForm() if form.validate_on_submit(): user = _get_user(username=flask.g.fas_user.username) found = False sshkey = None for key in user.sshkeys: if key.id == keyid: sshkey = key.public_ssh_key flask.g.session.delete(key) found = True break 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" ) try: flask.g.session.commit() pagure.lib.query.create_user_ssh_keys_on_disk( user, pagure_config.get("GITOLITE_KEYDIR", None) ) pagure.lib.tasks.gitolite_post_compile_only.delay() if ( pagure_config.get("GIT_AUTH_BACKEND") == "pagure_authorized_keys" ): _log.info("SSH FOLDER: %s", pagure_config.get("SSH_FOLDER")) pagure.lib.tasks.remove_key_from_authorized_keys.delay( ssh_folder=pagure_config.get("SSH_FOLDER"), sshkey=sshkey ) flask.flash("SSH key removed") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("SSH key could not be removed", "error") return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab" )
def view_user_requests(username): """ Shows the pull-requests for the specified user. """ user = _get_user(username=username) requests = pagure.lib.get_pull_request_of_user(flask.g.session, username=username) return flask.render_template( 'user_requests.html', username=username, user=user, requests=requests, )
def view_user_stars(username): """ Shows the starred projects of the specified user. :arg username: The username whose stars we have to retrieve """ user = _get_user(username=username) return flask.render_template( 'user_stars.html', username=username, user=user, repos=[star.project for star in user.stars], )
def add_api_user_token(): """ Create an user token (not project specific). """ 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) ) # Ensure the user is in the DB at least user = _get_user(username=flask.g.fas_user.username) acls = pagure.lib.query.get_acls( flask.g.session, restrict=pagure_config.get("CROSS_PROJECT_ACLS") ) form = pagure.forms.NewTokenForm(acls=acls) if form.validate_on_submit(): try: pagure.lib.query.add_token_to_user( flask.g.session, project=None, description=form.description.data.strip() or None, acls=form.acls.data, username=user.username, expiration_date=form.expiration_date.data, ) flask.g.session.commit() flask.flash("Token created") return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-api-tab" ) except pagure.exceptions.PagureException as err: flask.flash(str(err), "error") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("API key could not be added", "error") # When form is displayed after an empty submission, show an error. if form.errors.get("acls"): flask.flash("You must select at least one permission.", "error") return flask.render_template( "add_token.html", select="settings", form=form, acls=acls )
def force_logout(): """ Set refuse_sessions_before, logging the user out everywhere """ if admin_session_timedout(): flask.flash("Action canceled, try it again", "error") return flask.redirect( flask.url_for("auth_login", next=flask.request.url)) # we just need an empty form here to validate that csrf token is present form = pagure.forms.PagureForm() if form.validate_on_submit(): # Ensure the user is in the DB at least user = _get_user(username=flask.g.fas_user.username) user.refuse_sessions_before = datetime.datetime.utcnow() flask.g.session.commit() flask.flash("All active sessions logged out") return flask.redirect(flask.url_for("ui_ns.user_settings"))
def view_user_issues(username): """ Shows the issues created or assigned to the specified user. :param username: The username to retrieve the issues for :type username: str """ if not pagure_config.get('ENABLE_TICKETS', True): flask.abort(404, 'Tickets have been disabled on this pagure instance') user = _get_user(username=username) return flask.render_template( 'user_issues.html', username=username, user=user, )
def add_api_user_token(): """ Create an user token (not project specific). """ 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) ) # Ensure the user is in the DB at least user = _get_user(username=flask.g.fas_user.username) acls = pagure.lib.query.get_acls( flask.g.session, restrict=pagure_config.get("CROSS_PROJECT_ACLS") ) form = pagure.forms.NewTokenForm(acls=acls) if form.validate_on_submit(): try: pagure.lib.query.add_token_to_user( flask.g.session, project=None, description=form.description.data.strip() or None, acls=form.acls.data, username=user.username, ) flask.g.session.commit() flask.flash("Token created") return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-api-tab" ) except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("API key could not be added", "error") # When form is displayed after an empty submission, show an error. if form.errors.get("acls"): flask.flash("You must select at least one permission.", "error") return flask.render_template( "add_token.html", select="settings", form=form, acls=acls )
def userdash_forks(): """ Forks tab of the user dashboard """ user = _get_user(username=flask.g.fas_user.username) userdash_counts, search_data = get_userdash_common(user) limit = pagure_config["ITEM_PER_PAGE"] # FORKS forkpage = flask.request.args.get("forkpage", 1) try: forkpage = int(forkpage) if forkpage < 1: forkpage = 1 except ValueError: forkpage = 1 start = limit * (forkpage - 1) forks = pagure.lib.query.search_projects( flask.g.session, username=flask.g.fas_user.username, fork=True, private=flask.g.fas_user.username, start=start, limit=limit, ) total_fork_page = int( ceil(userdash_counts["forks_length"] / float(limit)) if userdash_counts["forks_length"] > 0 else 1 ) return flask.render_template( "userdash_forks.html", username=flask.g.fas_user.username, user=user, select="forks", forks=forks, forkpage=forkpage, total_fork_page=total_fork_page, userdash_counts=userdash_counts, search_data=search_data, )
def view_user_requests(username): """ Shows the pull-requests for the specified user. """ user = _get_user(username=username) requests = pagure.lib.query.get_pull_request_of_user(flask.g.session, username=username) userprofile_common = get_userprofile_common(user) return flask.render_template( "userprofile_pullrequests.html", username=username, user=user, requests=requests, select="requests", repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], )
def force_logout(): """ Set refuse_sessions_before, logging the user out everywhere """ if admin_session_timedout(): flask.flash("Action canceled, try it again", "error") return flask.redirect( flask.url_for("auth_login", next=flask.request.url) ) # we just need an empty form here to validate that csrf token is present form = pagure.forms.PagureForm() if form.validate_on_submit(): # Ensure the user is in the DB at least user = _get_user(username=flask.g.fas_user.username) user.refuse_sessions_before = datetime.datetime.utcnow() flask.g.session.commit() flask.flash("All active sessions logged out") return flask.redirect(flask.url_for("ui_ns.user_settings"))
def userdash_activity(): """ User Dashboard page listing user activity """ user = _get_user(username=flask.g.fas_user.username) userdash_counts, search_data = get_userdash_common(user) messages = pagure.lib.query.get_watchlist_messages( flask.g.session, user, limit=20 ) return flask.render_template( "userdash_activity.html", username=flask.g.fas_user.username, user=user, select="activity", messages=messages, userdash_counts=userdash_counts, search_data=search_data, )
def add_api_user_token(): """ Create an user token (not project specific). """ 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)) # Ensure the user is in the DB at least user = _get_user(username=flask.g.fas_user.username) acls = pagure.lib.get_acls( flask.g.session, restrict=pagure_config.get('CROSS_PROJECT_ACLS')) form = pagure.forms.NewTokenForm(acls=acls) if form.validate_on_submit(): try: msg = pagure.lib.add_token_to_user( flask.g.session, project=None, description=form.description.data.strip() or None, acls=form.acls.data, username=user.username, ) flask.g.session.commit() flask.flash(msg) return flask.redirect(flask.url_for('ui_ns.user_settings')) except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash('API key could not be added', 'error') # When form is displayed after an empty submission, show an error. if form.errors.get('acls'): flask.flash('You must select at least one permission.', 'error') return flask.render_template( 'add_token.html', select='settings', form=form, acls=acls, )
def userprofile_starred(username): """ Shows the starred projects of the specified user. :arg username: The username whose stars we have to retrieve """ user = _get_user(username=username) userprofile_common = get_userprofile_common(user) return flask.render_template( "userprofile_starred.html", username=username, user=user, repos=[star.project for star in user.stars], repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], select="starred", )
def add_user_sshkey(): """ Add the specified SSH key to the user. """ 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) ) form = pagure.forms.AddSSHKeyForm() 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, ssh_key=form.ssh_key.data, pushaccess=True, creator=user, user=user, ) flask.g.session.commit() pagure.lib.query.create_user_ssh_keys_on_disk( user, pagure_config.get("GITOLITE_KEYDIR", None) ) pagure.lib.tasks.gitolite_post_compile_only.delay() flask.flash(msg) return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab" ) except pagure.exceptions.PagureException as msg: flask.g.session.rollback() _log.debug(msg) flask.flash(str(msg), "error") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("SSH key could not be added", "error") return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab" )
def userprofile_projects(username): """ Public Profile view of a user's projects. """ user = _get_user(username=username) repopage = flask.request.args.get("repopage", 1) try: repopage = int(repopage) if repopage < 1: repopage = 1 except ValueError: repopage = 1 limit = pagure_config["ITEM_PER_PAGE"] repo_start = limit * (repopage - 1) repos = pagure.lib.query.search_projects( flask.g.session, username=username, fork=False, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), start=repo_start, limit=limit, private=False, ) userprofile_common = get_userprofile_common(user) total_page_repos = int( ceil(userprofile_common["repos_length"] / float(limit)) ) return flask.render_template( "userprofile_projects.html", username=username, user=user, repos=repos, total_page_repos=total_page_repos, repopage=repopage, repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], select="projects", )
def view_user_requests(username): """ Shows the pull-requests for the specified user. """ user = _get_user(username=username) requests = pagure.lib.query.get_pull_request_of_user( flask.g.session, username=username ) userprofile_common = get_userprofile_common(user) return flask.render_template( "userprofile_pullrequests.html", username=username, user=user, requests=requests, select="requests", repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], )
def userprofile_forks(username): """ Public Profile view of a user's forks. """ user = _get_user(username=username) forkpage = flask.request.args.get("forkpage", 1) try: forkpage = int(forkpage) if forkpage < 1: forkpage = 1 except ValueError: forkpage = 1 limit = pagure_config["ITEM_PER_PAGE"] fork_start = limit * (forkpage - 1) forks = pagure.lib.query.search_projects( flask.g.session, username=username, fork=True, start=fork_start, limit=limit, private=False, ) userprofile_common = get_userprofile_common(user) total_page_forks = int( ceil(userprofile_common["forks_length"] / float(limit)) ) return flask.render_template( "userprofile_forks.html", username=username, user=user, forks=forks, total_page_forks=total_page_forks, forkpage=forkpage, repos_length=userprofile_common["repos_length"], forks_length=userprofile_common["forks_length"], select="forks", )
def remove_user_sshkey(keyid): """ Removes an SSH key from the user. """ 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) ) form = pagure.forms.ConfirmationForm() 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: flask.g.session.delete(key) found = True break 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" ) try: flask.g.session.commit() pagure.lib.query.create_user_ssh_keys_on_disk( user, pagure_config.get("GITOLITE_KEYDIR", None) ) pagure.lib.tasks.gitolite_post_compile_only.delay() flask.flash("SSH key removed") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("SSH key could not be removed", "error") return flask.redirect( flask.url_for("ui_ns.user_settings") + "#nav-ssh-tab" )
def remove_user_email(): """ Remove the specified email from the logged in user. """ if admin_session_timedout(): return flask.redirect( flask.url_for("auth_login", next=flask.request.url) ) user = _get_user(username=flask.g.fas_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")) form = pagure.forms.UserEmailForm() if form.validate_on_submit(): email = form.email.data useremails = [mail.email for mail in user.emails] if email not in useremails: flask.flash( "You do not have the email: %s, nothing to remove" % email, "error", ) return flask.redirect(flask.url_for("ui_ns.user_settings")) for mail in user.emails: if mail.email == email: user.emails.remove(mail) break try: flask.g.session.commit() flask.flash("Email removed") except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() _log.exception(err) flask.flash("Email could not be removed", "error") return flask.redirect(flask.url_for("ui_ns.user_settings"))
def userdash_watchlist(): """ User Dashboard page for a user's watchlist """ watch_list = pagure.lib.query.user_watch_list( flask.g.session, user=flask.g.fas_user.username, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), ) user = _get_user(username=flask.g.fas_user.username) userdash_counts, search_data = get_userdash_common(user) return flask.render_template( "userdash_watchlist.html", username=flask.g.fas_user.username, user=user, select="watchlist", watch_list=watch_list, userdash_counts=userdash_counts, search_data=search_data, )
def userdash_groups(): """ User Dashboard page listing a user's groups """ user = _get_user(username=flask.g.fas_user.username) userdash_counts, search_data = get_userdash_common(user) groups = [] for group in user.groups: groups.append( pagure.lib.query.search_groups(flask.g.session, group_name=group, group_type="user")) return flask.render_template( "userdash_groups.html", username=flask.g.fas_user.username, user=user, select="groups", groups=groups, userdash_counts=userdash_counts, search_data=search_data, )
def user_settings(): """ Update the user settings. """ if admin_session_timedout(): return flask.redirect( flask.url_for('auth_login', next=flask.request.url)) user = _get_user(username=flask.g.fas_user.username) form = pagure.forms.UserSettingsForm() if form.validate_on_submit() and pagure_config.get('LOCAL_SSH_KEY', True): ssh_key = form.ssh_key.data try: message = 'Nothing to update' if user.public_ssh_key != ssh_key: pagure.lib.update_user_ssh( flask.g.session, user=user, ssh_key=ssh_key, keydir=pagure_config.get('GITOLITE_KEYDIR', None), ) flask.g.session.commit() message = 'Public ssh key updated' flask.flash(message) return flask.redirect(flask.url_for('ui_ns.user_settings')) except SQLAlchemyError as err: # pragma: no cover flask.g.session.rollback() flask.flash(str(err), 'error') elif flask.request.method == 'GET': form.ssh_key.data = user.public_ssh_key return flask.render_template( 'user_settings.html', user=user, form=form, )
def userdash_groups(): """ User Dashboard page listing a user's groups """ user = _get_user(username=flask.g.fas_user.username) userdash_counts, search_data = get_userdash_common(user) groups = [] for group in user.groups: groups.append( pagure.lib.query.search_groups( flask.g.session, group_name=group, group_type="user" ) ) return flask.render_template( "userdash_groups.html", username=flask.g.fas_user.username, user=user, select="groups", groups=groups, userdash_counts=userdash_counts, search_data=search_data, )
def index_auth(): """ Front page for authenticated user. """ user = _get_user(username=flask.g.fas_user.username) acl = flask.request.args.get("acl", "").strip().lower() or None repopage = flask.request.args.get("repopage", 1) try: repopage = int(repopage) if repopage < 1: repopage = 1 except ValueError: repopage = 1 limit = pagure_config["ITEM_PER_PAGE"] # PROJECTS start = limit * (repopage - 1) repos = pagure.lib.query.search_projects( flask.g.session, username=flask.g.fas_user.username, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), fork=False, private=flask.g.fas_user.username, start=start, limit=limit, ) if repos and acl: repos = _filter_acls(repos, acl, user) repos_length = pagure.lib.query.search_projects( flask.g.session, username=flask.g.fas_user.username, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), fork=False, private=flask.g.fas_user.username, count=True, ) total_repo_page = int( ceil(repos_length / float(limit)) if repos_length > 0 else 1 ) # FORKS forkpage = flask.request.args.get("forkpage", 1) try: forkpage = int(forkpage) if forkpage < 1: forkpage = 1 except ValueError: forkpage = 1 start = limit * (forkpage - 1) forks = pagure.lib.query.search_projects( flask.g.session, username=flask.g.fas_user.username, fork=True, private=flask.g.fas_user.username, start=start, limit=limit, ) forks_length = pagure.lib.query.search_projects( flask.g.session, username=flask.g.fas_user.username, fork=True, private=flask.g.fas_user.username, start=start, limit=limit, count=True, ) total_fork_page = int( ceil(forks_length / float(limit)) if forks_length > 0 else 1 ) watch_list = pagure.lib.query.user_watch_list( flask.g.session, user=flask.g.fas_user.username, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), ) return flask.render_template( "userdash_projects.html", username=flask.g.fas_user.username, user=user, forks=forks, repos=repos, watch_list=watch_list, repopage=repopage, repos_length=repos_length, total_repo_page=total_repo_page, forkpage=forkpage, forks_length=forks_length, total_fork_page=total_fork_page, )
def view_user2(username): """ Front page of a specific user. """ user = _get_user(username=username) acl = flask.request.args.get("acl", "").strip().lower() or None repopage = flask.request.args.get("repopage", 1) try: repopage = int(repopage) if repopage < 1: repopage = 1 except ValueError: repopage = 1 forkpage = flask.request.args.get("forkpage", 1) try: forkpage = int(forkpage) if forkpage < 1: forkpage = 1 except ValueError: forkpage = 1 limit = pagure_config["ITEM_PER_PAGE"] repo_start = limit * (repopage - 1) fork_start = limit * (forkpage - 1) private = False if authenticated() and username == flask.g.fas_user.username: private = flask.g.fas_user.username repos = pagure.lib.query.search_projects( flask.g.session, username=username, fork=False, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), start=repo_start, limit=limit, private=private, ) if repos and acl: repos = _filter_acls(repos, acl, user) repos_length = pagure.lib.query.search_projects( flask.g.session, username=username, fork=False, exclude_groups=pagure_config.get("EXCLUDE_GROUP_INDEX"), private=private, count=True, ) forks = pagure.lib.query.search_projects( flask.g.session, username=username, fork=True, start=fork_start, limit=limit, private=private, ) forks_length = pagure.lib.query.search_projects( flask.g.session, username=username, fork=True, private=private, count=True, ) total_page_repos = int(ceil(repos_length / float(limit))) total_page_forks = int(ceil(forks_length / float(limit))) return flask.render_template( "userprofile_overview.html", username=username, user=user, repos=repos, total_page_repos=total_page_repos, forks=forks, total_page_forks=total_page_forks, repopage=repopage, forkpage=forkpage, repos_length=repos_length, forks_length=forks_length, )
def userdash_projects(): """ User Dashboard page listing projects for the user """ user = _get_user(username=flask.g.fas_user.username) userdash_counts, search_data = get_userdash_common(user) groups = [] for group in user.groups: groups.append( pagure.lib.query.search_groups( flask.g.session, group_name=group, group_type="user" ) ) acl = flask.request.args.get("acl", "").strip().lower() or None search_pattern = flask.request.args.get("search_pattern", None) if search_pattern == "": search_pattern = None limit = pagure_config["ITEM_PER_PAGE"] repopage = flask.request.args.get("repopage", 1) try: repopage = int(repopage) if repopage < 1: repopage = 1 except ValueError: repopage = 1 pattern = "*" + search_pattern + "*" if search_pattern else search_pattern start = limit * (repopage - 1) repos = pagure.lib.query.list_users_projects( flask.g.session, username=flask.g.fas_user.username, exclude_groups=None, fork=False, pattern=pattern, private=flask.g.fas_user.username, start=start, limit=limit, acls=[acl] if acl else None, ) filtered_repos_count = pagure.lib.query.list_users_projects( flask.g.session, username=flask.g.fas_user.username, exclude_groups=None, fork=False, pattern=pattern, private=flask.g.fas_user.username, count=True, acls=[acl] if acl else None, ) repo_list = [] for repo in repos: access = "" if repo.user.user == user.username: access = "main admin" else: for repoaccess in repo.contributors: for repouser in repo.contributors[repoaccess]: if repouser.username == user.username: access = repoaccess grouplist = [] for group in groups: if repo in group.projects: thegroup = {"group_name": "", "access": ""} thegroup["group_name"] = group.group_name for a in repo.contributor_groups: for gr in repo.contributor_groups[a]: if group.group_name == gr.group_name: thegroup["access"] = a grouplist.append(thegroup) repo_list.append( {"repo": repo, "grouplist": grouplist, "access": access} ) total_repo_page = int( ceil(filtered_repos_count / float(limit)) if filtered_repos_count > 0 else 1 ) return flask.render_template( "userdash_projects.html", username=flask.g.fas_user.username, user=user, select="projects", repo_list=repo_list, repopage=repopage, total_repo_page=total_repo_page, userdash_counts=userdash_counts, search_data=search_data, acl=acl, filtered_repos_count=filtered_repos_count, search_pattern=search_pattern, )