增加部分基础组件

This commit is contained in:
LiYang
2016-07-31 20:26:11 +08:00
parent 0fc35d4d02
commit bcee7bca67
18 changed files with 999 additions and 95 deletions

View File

@@ -6,7 +6,7 @@ import functools
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext as _
from utils.shortcuts import error_response, error_page
from utils.shortcuts import error_response, error_page, redirect_to_login
from .models import AdminType
@@ -34,7 +34,7 @@ class BasePermissionDecorator(object):
if self.request.is_ajax():
return error_response(_("Please login in first"))
else:
return HttpResponseRedirect("/login/?__from=" + urllib.quote(self.request.path))
return redirect_to_login(self.request)
def check_permission(self):
raise NotImplementedError()
@@ -47,9 +47,11 @@ class login_required(BasePermissionDecorator):
class super_admin_required(BasePermissionDecorator):
def check_permission(self):
return self.request.user.is_authenticated() and self.request.user.admin_type == AdminType.SUPER_ADMIN
return self.request.user.is_authenticated() and \
self.request.user.admin_type == AdminType.SUPER_ADMIN
class admin_required(BasePermissionDecorator):
def check_permission(self):
return self.request.user.is_authenticated() and self.request.user.admin_type in [AdminType.SUPER_ADMIN, AdminType.ADMIN]
return self.request.user.is_authenticated() and \
self.request.user.admin_type in [AdminType.SUPER_ADMIN, AdminType.ADMIN]

View File

@@ -3,27 +3,24 @@ import time
import json
import urllib
from django.http import HttpResponseRedirect, HttpResponse
from django.http import HttpResponse
from django.utils.translation import ugettext as _
from django.contrib import auth
from .models import AdminType, User
from utils.shortcuts import redirect_to_login
from .models import AdminType
# todo remove this
from django.contrib import auth
class SessionSecurityMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated() and request.user.admin_type in [AdminType.ADMIN, AdminType.SUPER_ADMIN]:
if "last_activity" in request.session:
# 24 hours passwd since last visit
# 24 hours passed since last visit
if time.time() - request.session["last_activity"] >= 24 * 60 * 60:
auth.logout(request)
if request.is_ajax():
return HttpResponse(json.dumps({"code": 1, "data": _("Please login in first")}),
content_type="application/json")
else:
return HttpResponseRedirect("/login/?__from=" + urllib.quote(request.path))
return redirect_to_login(request)
# 更新最后活动日期
request.session["last_activity"] = time.time()

View File

@@ -1,38 +1,35 @@
# coding=utf-8
import os
import codecs
import qrcode
import StringIO
import codecs
import os
from django import http
import qrcode
from django.conf import settings
from django.contrib import auth
from django.shortcuts import render
from django.core.exceptions import MultipleObjectsReturned
from django.core.paginator import Paginator
from django.db.models import Q
from django.conf import settings
from django.http import HttpResponse
from django.core.exceptions import MultipleObjectsReturned
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.utils.timezone import now
from django.utils.translation import ugettext as _
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.views import APIView
from utils.shortcuts import (serializer_invalid_response, error_response,
success_response, error_page, paginate, rand_str)
from utils.captcha import Captcha
from utils.otp_auth import OtpAuth
from .tasks import _send_email
from utils.shortcuts import (serializer_invalid_response, error_response,
success_response, error_page, paginate, rand_str)
from .decorators import login_required
from .models import User, UserProfile, AdminExtraPermission, AdminType
from .decorators import super_admin_required
from .models import User, UserProfile, AdminType
from .serializers import (UserLoginSerializer, UserRegisterSerializer,
UserChangePasswordSerializer,
UserSerializer, EditUserSerializer,
ApplyResetPasswordSerializer, ResetPasswordSerializer,
SSOSerializer, EditUserProfileSerializer,
TwoFactorAuthCodeSerializer)
from .decorators import super_admin_required
from .tasks import _send_email
class UserLoginAPIView(APIView):
@@ -223,7 +220,7 @@ class UserAdminAPIView(APIView):
def logout(request):
auth.logout(request)
return http.HttpResponseRedirect("/")
return HttpResponseRedirect("/")
def index_page(request):
@@ -233,7 +230,7 @@ def index_page(request):
if request.META.get('HTTP_REFERER') or request.GET.get("index"):
return render(request, "oj/index.html")
else:
return http.HttpResponseRedirect('/problems/')
return HttpResponseRedirect('/problems/')
class UsernameCheckAPIView(APIView):