drop python2 support, upgrade to django 3

This commit is contained in:
j 2020-05-29 00:20:18 +02:00
commit 844382b1e8
124 changed files with 413 additions and 563 deletions

View file

@ -8,7 +8,7 @@ from oxdjango.shortcuts import render_to_json_response, json_response
def capability_required_json(capability):
def capability_required(function=None):
def _wrapped_view(request, *args, **kwargs):
if request.user.is_authenticated() and \
if request.user.is_authenticated and \
request.user.profile.capability(capability):
return function(request, *args, **kwargs)
return render_to_json_response(json_response(status=403, text='permission denied'))

View file

@ -1,10 +1,12 @@
# -*- coding: utf-8 -*-
from django.conf import settings
from django.contrib.sessions.models import Session
from django.utils.deprecation import MiddlewareMixin
class UpdateSession(MiddlewareMixin):
class UpdateSession(object):
def process_request(self, request):
if request.user.is_authenticated():
if request.user.is_authenticated:
expire_date = Session.objects.get(session_key=request.session.session_key).expire_date
if (request.session.get_expiry_date() - expire_date).total_seconds() > settings.SESSION_UPDATE:
request.session.modified = True

View file

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import division, print_function, absolute_import
import copy
from datetime import datetime
@ -9,7 +8,6 @@ from django.contrib.auth import get_user_model
from django.db import models
from django.db.models import Max
from django.conf import settings
from django.utils.encoding import python_2_unicode_compatible
from oxdjango.fields import JSONField
import ox
@ -21,10 +19,9 @@ from .utils import get_ip, get_location
User = get_user_model()
@python_2_unicode_compatible
class SessionData(models.Model):
session_key = models.CharField(max_length=40, primary_key=True)
user = models.OneToOneField(User, null=True, blank=True, related_name='data')
user = models.OneToOneField(User, null=True, blank=True, related_name='data', on_delete=models.CASCADE)
firstseen = models.DateTimeField(auto_now_add=True, db_index=True)
lastseen = models.DateTimeField(default=datetime.now, db_index=True)
username = models.CharField(max_length=255, null=True, db_index=True)
@ -50,7 +47,7 @@ class SessionData(models.Model):
groupssort = models.CharField(default=None, blank=True, null=True, max_length=255)
def __str__(self):
return u"%s" % self.session_key
return "%s" % self.session_key
def parse_useragent(self):
if self.useragent:
@ -69,8 +66,8 @@ class SessionData(models.Model):
if self.ip:
city, country = get_location(self.ip)
if city:
location = u'%s, %s' % (city, country)
location_sort = u'%s, %s' % (country, city)
location = '%s, %s' % (city, country)
location_sort = '%s, %s' % (country, city)
else:
location = location_sort = country
self.location = location
@ -98,10 +95,10 @@ class SessionData(models.Model):
request.session.modified = True
session_key = request.session.session_key
assert session_key
if request.user.is_authenticated():
if request.user.is_authenticated:
cls.objects.filter(user=request.user).update(session_key=session_key)
data, created = cls.objects.get_or_create(session_key=session_key)
if request.user.is_authenticated():
if request.user.is_authenticated:
data.user = request.user
data.ip = get_ip(request)
data.useragent = request.META.get('HTTP_USER_AGENT', '')[:4096]
@ -115,10 +112,10 @@ class SessionData(models.Model):
]
screen = data.info.get('screen', {})
if screen and 'height' in screen and 'width' in screen:
data.screensize = u'%s\xd7%s' % (screen['width'], screen['height'])
data.screensize = '%s\xd7%s' % (screen['width'], screen['height'])
window = data.info.get('window', {})
if window and 'outerHeight' in window and 'outerWidth' in window:
data.windowsize = u'%s\xd7%s' % (window['outerWidth'], window['outerHeight'])
data.windowsize = '%s\xd7%s' % (window['outerWidth'], window['outerHeight'])
if not data.timesseen:
data.timesseen = 0
data.timesseen += 1
@ -172,10 +169,9 @@ class SessionData(models.Model):
del j[key]
return j
@python_2_unicode_compatible
class UserProfile(models.Model):
reset_code = models.CharField(max_length=255, blank=True, null=True, unique=True)
user = models.OneToOneField(User, related_name='profile')
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
level = models.IntegerField(default=1)
files_updated = models.DateTimeField(default=datetime.now)
@ -395,7 +391,7 @@ def get_ui(user_ui, user=None):
def init_user(user, request=None):
if request:
SessionData.get_or_create(request)
if user.is_anonymous():
if user.is_anonymous:
result = settings.CONFIG['user'].copy()
result['ui'] = get_ui(json.loads(request.session.get('ui', '{}')))
else:
@ -434,7 +430,7 @@ def user_json(user, keys=None):
return j
def has_capability(user, capability):
if user.is_anonymous():
if user.is_anonymous:
level = 'guest'
else:
level = user.profile.get_level()

View file

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import division, print_function, absolute_import
import json
from datetime import timedelta

View file

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import division, print_function, absolute_import
import random
random.seed()
@ -118,7 +117,7 @@ def signout(request, data):
see: signin, signup
'''
response = json_response(text='ok')
if request.user.is_authenticated():
if request.user.is_authenticated:
uid = request.user.id
profile = request.user.profile
if profile.ui.get('page') == 'signout':
@ -608,7 +607,7 @@ def mail(request, data):
'url': request.build_absolute_uri('/'),
}
message = template.render(context, request)
subject = u'Fwd: %s' % subject
subject = 'Fwd: %s' % subject
email_to = '"%s" <%s>' % (request.user.username, request.user.email)
receipt = EmailMessage(subject,
message,
@ -634,7 +633,7 @@ def contact(request, data):
'''
name = data.get('name', '')
email = data.get('email', '')
if request.user.is_authenticated():
if request.user.is_authenticated:
if not name:
name = request.user.username
if not email:
@ -657,10 +656,10 @@ def contact(request, data):
message = ox.decode_html(template.render(context, request))
response = json_response(text='message sent')
try:
send_mail(u'%s Contact - %s' % (settings.SITENAME, subject), message, email_from, email_to)
send_mail('%s Contact - %s' % (settings.SITENAME, subject), message, email_from, email_to)
except BadHeaderError:
response = json_response(status=400, text='invalid data')
if request.user.is_authenticated() \
if request.user.is_authenticated \
and 'receipt' in data \
and data['receipt']:
template = loader.get_template('contact_receipt.txt')
@ -735,7 +734,7 @@ actions.register(editPreferences, cache=False)
def reset_ui(request):
if request.user.is_authenticated():
if request.user.is_authenticated:
profile = request.user.profile
profile.ui = {}
profile.save()
@ -752,7 +751,7 @@ def resetUI(request, data):
see: setUI
'''
response = json_response()
if request.user.is_authenticated():
if request.user.is_authenticated:
profile = request.user.profile
profile.ui = {}
profile.save()
@ -773,7 +772,7 @@ def setUI(request, data):
notes: To set nested keys, use {'foo.bar.baz': value}
see: resetUI
'''
if request.user.is_authenticated():
if request.user.is_authenticated:
profile = request.user.profile
ui = profile.ui
else:
@ -794,7 +793,7 @@ def setUI(request, data):
del p[keys[0]]
else:
p[keys[0]] = value
if request.user.is_authenticated():
if request.user.is_authenticated:
profile.save()
else:
request.session['ui'] = json.dumps(ui)
@ -802,7 +801,7 @@ def setUI(request, data):
if data.get('item'):
item = get_object_or_404_json(Item, public_id=data['item'])
with transaction.atomic():
if request.user.is_authenticated():
if request.user.is_authenticated:
access, created = Access.objects.get_or_create(item=item, user=request.user)
else:
access, created = Access.objects.get_or_create(item=item, user=None)
@ -919,7 +918,7 @@ def addGroup(request, data):
while not created:
g, created = Group.objects.get_or_create(name=name)
n += 1
name = u'%s [%d]' % (_name, n)
name = '%s [%d]' % (_name, n)
response['data'] = group_json(g)
add_changelog(request, data, g.name)
return render_to_json_response(response)
@ -950,7 +949,7 @@ def editGroup(request, data):
_name = re.sub(' \[\d+\]$', '', name).strip()
while Group.objects.filter(name=name).count():
n += 1
name = u'%s [%d]' % (_name, n)
name = '%s [%d]' % (_name, n)
g.name = name
g.save()
add_changelog(request, data, g.name)