Compare commits
10 Commits
main
...
wip/41633-
Author | SHA1 | Date |
---|---|---|
Frédéric Péters | 64e96ec524 | |
Frédéric Péters | b30af69f9b | |
Frédéric Péters | 90f1868bbc | |
Frédéric Péters | 0729b3fb62 | |
Frédéric Péters | 39959ed2fe | |
Frédéric Péters | 9236efe243 | |
Frédéric Péters | 20499dc46e | |
Frédéric Péters | 97f15105d5 | |
Frédéric Péters | 3ecaea41b9 | |
Frédéric Péters | 66ec73b02d |
|
@ -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',
|
||||
)
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
4
setup.py
4
setup.py
|
@ -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={
|
||||
|
|
|
@ -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):
|
||||
|
|
7
tox.ini
7
tox.ini
|
@ -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:.*
|
||||
|
|
Loading…
Reference in New Issue