mellon authentication support added (#6928)
This commit is contained in:
parent
4e70852578
commit
5ca37d4008
|
@ -6,11 +6,13 @@ from json import dumps
|
|||
from django.views.generic import CreateView, DeleteView, View, TemplateView
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.shortcuts import get_object_or_404, resolve_url
|
||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
|
||||
from django.core import signing
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import get_user_model, REDIRECT_FIELD_NAME
|
||||
from django.contrib.auth import logout as auth_logout
|
||||
from django.contrib.auth import views as auth_views
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.decorators import method_decorator
|
||||
|
||||
|
@ -18,6 +20,12 @@ from django_tables2 import SingleTableMixin
|
|||
|
||||
from . import models, forms, tables
|
||||
|
||||
try:
|
||||
from mellon.utils import get_idps
|
||||
except ImportError:
|
||||
get_idps = lambda: []
|
||||
|
||||
|
||||
class Logger(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
@ -189,6 +197,27 @@ class JSON(JSONP):
|
|||
response['Access-Control-Allow-Origin'] = '*'
|
||||
return response
|
||||
|
||||
|
||||
def login(request, *args, **kwargs):
|
||||
if any(get_idps()):
|
||||
if not 'next' in request.GET:
|
||||
return HttpResponseRedirect(resolve_url('mellon_login'))
|
||||
return HttpResponseRedirect(resolve_url('mellon_login') + '?next='
|
||||
+ urllib.quote(request.GET.get('next')))
|
||||
return auth_views.login(request, *args, **kwargs)
|
||||
|
||||
|
||||
def logout(request, next_page=None):
|
||||
if any(get_idps()):
|
||||
return HttpResponseRedirect(resolve_url('mellon_logout'))
|
||||
auth_logout(request)
|
||||
if next_page is not None:
|
||||
next_page = resolve_url(next_page)
|
||||
else:
|
||||
next_page = '/'
|
||||
return HttpResponseRedirect(next_page)
|
||||
|
||||
|
||||
home = login_required(Homepage.as_view())
|
||||
document = login_required(Document.as_view())
|
||||
download = login_required(Download.as_view())
|
||||
|
|
|
@ -103,5 +103,22 @@ STATIC_URL = '/static/'
|
|||
# Fargo is made to be embedded in iframes
|
||||
X_FRAME_OPTIONS = 'ALLOW'
|
||||
|
||||
|
||||
LOGIN_URL = '/login/'
|
||||
LOGOUT_URL = '/logout/'
|
||||
|
||||
# Authentication settings
|
||||
try:
|
||||
import mellon
|
||||
except ImportError:
|
||||
mellon = None
|
||||
|
||||
if mellon is not None:
|
||||
AUTHENTICATION_BACKENDS = (
|
||||
'mellon.backends.SAMLBackend',
|
||||
'django.contrib.auth.backends.ModelBackend',
|
||||
)
|
||||
|
||||
|
||||
if 'LOCAL_SETTINGS' in os.environ:
|
||||
execfile(os.environ['LOCAL_SETTINGS'])
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from django.conf import settings
|
||||
from django.conf.urls import patterns, include, url
|
||||
from django.contrib import admin
|
||||
|
||||
|
@ -15,5 +16,10 @@ urlpatterns = patterns('',
|
|||
url(r'^upload/$', upload, name='upload'),
|
||||
url(r'^remote-download/(?P<filename>[^/]*)$', remote_download, name='remote_download'),
|
||||
url(r'^admin/', include(admin.site.urls)),
|
||||
url('^accounts/', include('django.contrib.auth.urls')),
|
||||
url(r'^login/$', login, name='auth_login'),
|
||||
url(r'^logout/$', logout, name='auth_logout'),
|
||||
)
|
||||
|
||||
|
||||
if 'mellon' in settings.INSTALLED_APPS:
|
||||
urlpatterns += patterns('', url(r'^accounts/mellon/', include('mellon.urls')))
|
||||
|
|
Loading…
Reference in New Issue