combo/combo/profile/utils.py

58 lines
1.8 KiB
Python

# combo - content management system
# Copyright (C) 2014-2019 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.conf import settings
from django.contrib.auth.models import User
import django
if django.VERSION < (1, 11, 0):
CallableFalse, CallableTrue = False, True
else:
from django.utils.deprecation import CallableFalse, CallableTrue
if 'mellon' in settings.INSTALLED_APPS:
from mellon.models import UserSAMLIdentifier
else:
UserSAMLIdentifier = None
class ProxiedUser(object):
def __init__(self, name_id):
self.name_id = name_id
self.email = ''
def get_name_id(self):
return self.name_id
def is_authenticated(self):
return CallableTrue
def is_anonymous(self):
return CallableFalse
def get_user_from_name_id(name_id, raise_on_missing=False):
if not UserSAMLIdentifier:
if raise_on_missing:
raise User.DoesNotExist()
return None
try:
return UserSAMLIdentifier.objects.get(name_id=name_id).user
except UserSAMLIdentifier.DoesNotExist:
if raise_on_missing:
raise User.DoesNotExist()
return ProxiedUser(name_id=name_id)