Compare commits

...

10 Commits

9 changed files with 44 additions and 35 deletions

View File

@ -65,12 +65,11 @@ INSTALLED_APPS = (
'bijoe.visualization',
)
MIDDLEWARE_CLASSES = (
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

View File

@ -1,9 +1,10 @@
{% extends "bijoe/base.html" %}
{% load i18n %}
{% block content %}
<form method="post">
{% csrf_token %}
{{ form }}
<input type="submit" name="Login"/>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="{% trans 'Log in' %}" />
</form>
{% endblock %}

View File

@ -22,7 +22,7 @@ from . import views
urlpatterns = [
url(r'^$', views.homepage, name='homepage'),
url(r'^admin/', include(admin.site.urls)),
url(r'^admin/', admin.site.urls),
url(r'^accounts/login/$', views.login, name='auth_login'),
url(r'^accounts/logout/$', views.logout, name='auth_logout'),
url(r'^manage/menu.json$', views.menu_json, name='menu-json'),

View File

@ -18,15 +18,17 @@ import json
from django.conf import settings
from django.shortcuts import resolve_url
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.views.generic import ListView, View
from django.http import HttpResponse, HttpResponseRedirect
from django.utils.decorators import method_decorator
from django.utils.http import quote
from django.utils.translation import ugettext as _
from django.contrib.auth import logout as auth_logout
from django.contrib.auth import views as auth_views
from django.contrib.auth.views import redirect_to_login
from django.core.exceptions import PermissionDenied
from django.views.decorators.cache import never_cache
try:
from mellon.utils import get_idps
@ -41,7 +43,7 @@ from .visualization.utils import Visualization as VisuUtil
class AuthorizationMixin(object):
def authorize(self, request):
if request.user.is_authenticated():
if request.user.is_authenticated:
if not request.user.is_superuser:
raise PermissionDenied(_('You must be superuser'))
return True
@ -96,21 +98,28 @@ homepage = HomepageView.as_view()
menu_json = MenuJSONView.as_view()
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='
+ quote(request.GET.get('next')))
return auth_views.login(request, template_name='bijoe/login.html')
class LoginView(auth_views.LoginView):
template_name = 'bijoe/login.html'
def get(self, request, *args, **kwargs):
if any(get_idps()):
if 'next' not in request.GET:
return HttpResponseRedirect(resolve_url('mellon_login'))
return HttpResponseRedirect(
resolve_url('mellon_login') + '?next=' + quote(request.GET.get('next'))
)
return super(LoginView, self).get(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)
login = LoginView.as_view()
class LogoutView(auth_views.LogoutView):
@method_decorator(never_cache)
def dispatch(self, request, *args, **kwargs):
if any(get_idps()):
return HttpResponseRedirect(resolve_url('mellon_logout'))
return super(LogoutView, self).dispatch(request, *args, **kwargs)
logout = LogoutView.as_view()

View File

@ -116,7 +116,7 @@ class DateRangeWidget(forms.MultiWidget):
return None, None, date_range['value']
return value['start'], value['end'], None
def render(self, name, value, attrs=None):
def render(self, name, value, attrs=None, renderer=None):
output = super(DateRangeWidget, self).render(name, value, attrs=attrs)
_id = self.build_attrs(attrs).get('id', None)
if _id:

View File

@ -28,7 +28,7 @@ from django.views.generic.edit import CreateView, DeleteView, UpdateView, FormVi
from django.views.generic.list import MultipleObjectMixin
from django.views.generic import DetailView, ListView, View, TemplateView
from django.shortcuts import redirect
from django.core.urlresolvers import reverse, reverse_lazy
from django.urls import reverse, reverse_lazy
from django.http import HttpResponse, Http404
from django.core.exceptions import PermissionDenied
from django.views.decorators.clickjacking import xframe_options_exempt
@ -184,7 +184,7 @@ class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView):
class SignatureAuthorizationMixin(views.AuthorizationMixin):
def authorize(self, request):
if request.user.is_authenticated() and request.user.is_superuser:
if request.user.is_authenticated and request.user.is_superuser:
return True
if 'signature' in request.GET:
signature = request.path + settings.SECRET_KEY
@ -230,7 +230,7 @@ class VisualizationsJSONView(MultipleObjectMixin, View):
model = models.Visualization
def get(self, request, *args, **kwargs):
if not request.user.is_authenticated() or not request.user.is_superuser:
if not request.user.is_authenticated or not request.user.is_superuser:
known_services = getattr(settings, 'KNOWN_SERVICES', [])
if known_services:
key = None

View File

@ -90,9 +90,9 @@ setup(name="bijoe",
maintainer_email="bdauvergne@entrouvert.com",
packages=find_packages(),
include_package_data=True,
install_requires=['requests', 'django', 'psycopg2', 'isodate', 'Django-Select2<6',
install_requires=['requests', 'django>=1.11, <2.3', 'psycopg2', 'isodate', 'Django-Select2<6',
'XStatic-ChartNew.js', 'gadjo', 'django-jsonfield<1.3',
'python-dateutil', 'djangorestframework<3.7',
'python-dateutil', 'djangorestframework<3.8',
'xstatic-select2'],
scripts=['manage.py'],
cmdclass={

View File

@ -61,8 +61,7 @@ def test_superuser(app, admin):
assert 'foo([{' in resp.text
app.get('/', status=200)
app.get('/visualization/', status=200)
resp = app.get('/accounts/logout/', status=302)
assert resp.location == '/'
resp = app.get('/accounts/logout/', status=(200, 302))
def test_visualizations_json_api(schema1, app, admin, settings):

View File

@ -5,7 +5,7 @@
[tox]
toxworkdir = {env:TMPDIR:/tmp}/tox-{env:USER}/bijoe/{env:BRANCH_NAME:}
envlist = {py2,py3}-dj111
envlist = py3-dj111,py3-dj22
[testenv]
usedevelop = true
@ -15,6 +15,7 @@ setenv =
coverage: COVERAGE=--junit-xml=test_results.xml --cov=bijoe --cov-report xml
deps =
dj111: django>=1.11,<1.12
dj22: django>=2.2,<2.3
coverage
pytest
pytest-cov
@ -25,10 +26,10 @@ deps =
mock
pyquery
tabulate
py2: django-appconf<1.0.4
dj22: djangorestframework>=3.7,<3.8
http://git.entrouvert.org/hobo.git/snapshot/hobo-master.tar.gz
commands =
dj111: py.test {posargs: --junitxml=test_{envname}_results.xml --cov-report xml --cov-report html --cov=bijoe tests/}
py.test {posargs: --junitxml=test_{envname}_results.xml --cov-report xml --cov-report html --cov=bijoe tests/}
[pytest]
filterwarnings =
once:.*