|
Pierre-Yves Chibon |
b130e5 |
# -*- coding: utf-8 -*-
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
"""
|
|
Pierre-Yves Chibon |
b130e5 |
(c) 2014-2017 - Copyright Red Hat Inc
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
Authors:
|
|
Pierre-Yves Chibon |
b130e5 |
Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
"""
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
67d1cc |
from __future__ import unicode_literals, absolute_import
|
|
Aurélien Bompard |
dcf6f6 |
|
|
Pierre-Yves Chibon |
b130e5 |
import logging
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
import flask
|
|
Mary Kate Fain |
a16918 |
from flask import Markup
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
from sqlalchemy.exc import SQLAlchemyError
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
930073 |
import pagure.lib.query
|
|
Pierre-Yves Chibon |
f00f95 |
import pagure.utils
|
|
Pierre-Yves Chibon |
b130e5 |
from pagure.flask_app import logout
|
|
Clement Verna |
3fd9df |
from pagure.config import config as pagure_config
|
|
Pierre-Yves Chibon |
b130e5 |
import flask_fas_openid
|
|
Pierre-Yves Chibon |
9c2953 |
|
|
Pierre-Yves Chibon |
b130e5 |
FAS = flask_fas_openid.FAS()
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
_log = logging.getLogger(__name__)
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
@FAS.postlogin
|
|
Pierre-Yves Chibon |
b130e5 |
def set_user(return_url):
|
|
Pierre-Yves Chibon |
9c2953 |
""" After login method. """
|
|
Pierre-Yves Chibon |
b130e5 |
if flask.g.fas_user.username is None:
|
|
Pierre-Yves Chibon |
b130e5 |
flask.flash(
|
|
Pierre-Yves Chibon |
9c2953 |
"It looks like your OpenID provider did not provide an "
|
|
Pierre-Yves Chibon |
9c2953 |
"username we could retrieve, username being needed we cannot "
|
|
Pierre-Yves Chibon |
9c2953 |
"go further.",
|
|
Pierre-Yves Chibon |
9c2953 |
"error",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
logout()
|
|
Pierre-Yves Chibon |
b130e5 |
return flask.redirect(return_url)
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
9c2953 |
flask.session["_new_user"] = False
|
|
Pierre-Yves Chibon |
930073 |
user = pagure.lib.query.search_user(
|
|
Pierre-Yves Chibon |
9c2953 |
flask.g.session, username=flask.g.fas_user.username
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
1fef46 |
if not user:
|
|
Pierre-Yves Chibon |
9c2953 |
flask.session["_new_user"] = True
|
|
Pierre-Yves Chibon |
1fef46 |
else:
|
|
Pierre-Yves Chibon |
930073 |
user_email = pagure.lib.query.search_user(
|
|
Pierre-Yves Chibon |
9c2953 |
flask.g.session, email=flask.g.fas_user.email
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
1fef46 |
if user_email and user_email.user != user.user:
|
|
Pierre-Yves Chibon |
1fef46 |
flask.flash(
|
|
Pierre-Yves Chibon |
9c2953 |
"This email address seems to already be associated with "
|
|
Pierre-Yves Chibon |
9c2953 |
"another account and thus can not be associated with yours",
|
|
Pierre-Yves Chibon |
9c2953 |
"error",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
1fef46 |
logout()
|
|
Pierre-Yves Chibon |
1fef46 |
return flask.redirect(return_url)
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
try:
|
|
Pierre-Yves Chibon |
5acd44 |
try:
|
|
Pierre-Yves Chibon |
5acd44 |
pagure.lib.query.set_up_user(
|
|
Pierre-Yves Chibon |
5acd44 |
session=flask.g.session,
|
|
Pierre-Yves Chibon |
5acd44 |
username=flask.g.fas_user.username,
|
|
Pierre-Yves Chibon |
5acd44 |
fullname=flask.g.fas_user.fullname,
|
|
Pierre-Yves Chibon |
5acd44 |
default_email=flask.g.fas_user.email,
|
|
Pierre-Yves Chibon |
5acd44 |
ssh_key=flask.g.fas_user.get("ssh_key"),
|
|
Pierre-Yves Chibon |
5acd44 |
keydir=pagure_config.get("GITOLITE_KEYDIR", None),
|
|
Pierre-Yves Chibon |
5acd44 |
)
|
|
Pierre-Yves Chibon |
5acd44 |
except pagure.exceptions.PagureException as err:
|
|
Pierre-Yves Chibon |
5acd44 |
message = str(err)
|
|
Pierre-Yves Chibon |
5acd44 |
if message == "SSH key invalid.":
|
|
Pierre-Yves Chibon |
5acd44 |
flask.flash(message, "error")
|
|
Pierre-Yves Chibon |
5acd44 |
else:
|
|
Pierre-Yves Chibon |
5acd44 |
raise
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
# If groups are managed outside pagure, set up the user at login
|
|
Pierre-Yves Chibon |
9c2953 |
if not pagure_config.get("ENABLE_GROUP_MNGT", False):
|
|
Pierre-Yves Chibon |
930073 |
user = pagure.lib.query.search_user(
|
|
Pierre-Yves Chibon |
9c2953 |
flask.g.session, username=flask.g.fas_user.username
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
groups = set(user.groups)
|
|
Pierre-Yves Chibon |
b130e5 |
fas_groups = set(flask.g.fas_user.groups)
|
|
Pierre-Yves Chibon |
b130e5 |
# Add the new groups
|
|
Pierre-Yves Chibon |
b130e5 |
for group in fas_groups - groups:
|
|
Pierre-Yves Chibon |
b130e5 |
groupobj = None
|
|
Pierre-Yves Chibon |
b130e5 |
if group:
|
|
Pierre-Yves Chibon |
930073 |
groupobj = pagure.lib.query.search_groups(
|
|
Pierre-Yves Chibon |
9c2953 |
flask.g.session, group_name=group
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
if groupobj:
|
|
Pierre-Yves Chibon |
b130e5 |
try:
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.add_user_to_group(
|
|
Pierre-Yves Chibon |
b130e5 |
session=flask.g.session,
|
|
Pierre-Yves Chibon |
b130e5 |
username=flask.g.fas_user.username,
|
|
Pierre-Yves Chibon |
b130e5 |
group=groupobj,
|
|
Pierre-Yves Chibon |
b130e5 |
user=flask.g.fas_user.username,
|
|
Pierre-Yves Chibon |
f00f95 |
is_admin=pagure.utils.is_admin(),
|
|
Pierre-Yves Chibon |
b130e5 |
from_external=True,
|
|
Pierre-Yves Chibon |
b130e5 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
except pagure.exceptions.PagureException as err:
|
|
Pierre-Yves Chibon |
b130e5 |
_log.error(err)
|
|
Pierre-Yves Chibon |
b130e5 |
# Remove the old groups
|
|
Pierre-Yves Chibon |
b130e5 |
for group in groups - fas_groups:
|
|
Pierre-Yves Chibon |
b130e5 |
if group:
|
|
Pierre-Yves Chibon |
b130e5 |
try:
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.delete_user_of_group(
|
|
Pierre-Yves Chibon |
b130e5 |
session=flask.g.session,
|
|
Pierre-Yves Chibon |
b130e5 |
username=flask.g.fas_user.username,
|
|
Pierre-Yves Chibon |
b130e5 |
groupname=group,
|
|
Pierre-Yves Chibon |
b130e5 |
user=flask.g.fas_user.username,
|
|
Pierre-Yves Chibon |
f00f95 |
is_admin=pagure.utils.is_admin(),
|
|
Pierre-Yves Chibon |
b130e5 |
force=True,
|
|
Pierre-Yves Chibon |
b130e5 |
from_external=True,
|
|
Pierre-Yves Chibon |
b130e5 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
except pagure.exceptions.PagureException as err:
|
|
Pierre-Yves Chibon |
b130e5 |
_log.error(err)
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
flask.g.session.commit()
|
|
Pierre-Yves Chibon |
b130e5 |
except SQLAlchemyError as err:
|
|
Pierre-Yves Chibon |
b130e5 |
flask.g.session.rollback()
|
|
Pierre-Yves Chibon |
b130e5 |
_log.exception(err)
|
|
Mary Kate Fain |
a16918 |
message = Markup(
|
|
Mary Kate Fain |
a16918 |
"Could not set up you as a user properly,"
|
|
Mary Kate Fain |
a16918 |
' please contact an administrator'
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Mary Kate Fain |
a16918 |
flask.flash(message, "error")
|
|
Pierre-Yves Chibon |
b130e5 |
# Ensure the user is logged out if we cannot set them up
|
|
Pierre-Yves Chibon |
b130e5 |
# correctly
|
|
Pierre-Yves Chibon |
b130e5 |
logout()
|
|
Pierre-Yves Chibon |
5acd44 |
except pagure.exceptions.PagureException as err:
|
|
Pierre-Yves Chibon |
5acd44 |
flask.flash(str(err), "error")
|
|
Pierre-Yves Chibon |
5acd44 |
|
|
Pierre-Yves Chibon |
b130e5 |
return flask.redirect(return_url)
|