mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
sso api
This commit is contained in:
parent
c9563506ef
commit
e843404c5f
@ -119,7 +119,6 @@ class ResetPasswordSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
|
|
||||||
class SSOSerializer(serializers.Serializer):
|
class SSOSerializer(serializers.Serializer):
|
||||||
appkey = serializers.CharField()
|
|
||||||
token = serializers.CharField()
|
token = serializers.CharField()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ from ..views.oj import (ApplyResetPasswordAPI, ResetPasswordAPI,
|
|||||||
UserLoginAPI, UserLogoutAPI, UsernameOrEmailCheck,
|
UserLoginAPI, UserLogoutAPI, UsernameOrEmailCheck,
|
||||||
AvatarUploadAPI, TwoFactorAuthAPI, UserProfileAPI,
|
AvatarUploadAPI, TwoFactorAuthAPI, UserProfileAPI,
|
||||||
UserRankAPI, CheckTFARequiredAPI, SessionManagementAPI,
|
UserRankAPI, CheckTFARequiredAPI, SessionManagementAPI,
|
||||||
ProfileProblemDisplayIDRefreshAPI, OpenAPIAppkeyAPI)
|
ProfileProblemDisplayIDRefreshAPI, OpenAPIAppkeyAPI, SSOAPI)
|
||||||
|
|
||||||
from utils.captcha.views import CaptchaAPIView
|
from utils.captcha.views import CaptchaAPIView
|
||||||
|
|
||||||
@ -27,4 +27,5 @@ urlpatterns = [
|
|||||||
url(r"^user_rank/?$", UserRankAPI.as_view(), name="user_rank_api"),
|
url(r"^user_rank/?$", UserRankAPI.as_view(), name="user_rank_api"),
|
||||||
url(r"^sessions/?$", SessionManagementAPI.as_view(), name="session_management_api"),
|
url(r"^sessions/?$", SessionManagementAPI.as_view(), name="session_management_api"),
|
||||||
url(r"^open_api_appkey/?$", OpenAPIAppkeyAPI.as_view(), name="open_api_appkey_api"),
|
url(r"^open_api_appkey/?$", OpenAPIAppkeyAPI.as_view(), name="open_api_appkey_api"),
|
||||||
|
url(r"^sso?$", SSOAPI.as_view(), name="sso_api")
|
||||||
]
|
]
|
||||||
|
|||||||
@ -5,16 +5,17 @@ from importlib import import_module
|
|||||||
import qrcode
|
import qrcode
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import auth
|
from django.contrib import auth
|
||||||
|
from django.http import HttpResponseRedirect
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
|
||||||
from otpauth import OtpAuth
|
from otpauth import OtpAuth
|
||||||
|
|
||||||
from problem.models import Problem
|
from problem.models import Problem
|
||||||
from utils.constants import ContestRuleType
|
from utils.constants import ContestRuleType
|
||||||
from options.options import SysOptions
|
from options.options import SysOptions
|
||||||
from utils.api import APIView, validate_serializer
|
from utils.api import APIView, validate_serializer, CSRFExemptAPIView
|
||||||
from utils.captcha import Captcha
|
from utils.captcha import Captcha
|
||||||
from utils.shortcuts import rand_str, img2base64, datetime2str
|
from utils.shortcuts import rand_str, img2base64, datetime2str
|
||||||
from ..decorators import login_required
|
from ..decorators import login_required
|
||||||
@ -22,7 +23,7 @@ from ..models import User, UserProfile, AdminType
|
|||||||
from ..serializers import (ApplyResetPasswordSerializer, ResetPasswordSerializer,
|
from ..serializers import (ApplyResetPasswordSerializer, ResetPasswordSerializer,
|
||||||
UserChangePasswordSerializer, UserLoginSerializer,
|
UserChangePasswordSerializer, UserLoginSerializer,
|
||||||
UserRegisterSerializer, UsernameOrEmailCheckSerializer,
|
UserRegisterSerializer, UsernameOrEmailCheckSerializer,
|
||||||
RankInfoSerializer, UserChangeEmailSerializer)
|
RankInfoSerializer, UserChangeEmailSerializer, SSOSerializer)
|
||||||
from ..serializers import (TwoFactorAuthCodeSerializer, UserProfileSerializer,
|
from ..serializers import (TwoFactorAuthCodeSerializer, UserProfileSerializer,
|
||||||
EditUserProfileSerializer, ImageUploadForm)
|
EditUserProfileSerializer, ImageUploadForm)
|
||||||
from ..tasks import send_email_async
|
from ..tasks import send_email_async
|
||||||
@ -411,8 +412,26 @@ class OpenAPIAppkeyAPI(APIView):
|
|||||||
def post(self, request):
|
def post(self, request):
|
||||||
user = request.user
|
user = request.user
|
||||||
if not user.open_api:
|
if not user.open_api:
|
||||||
return self.error("Permission denied")
|
return self.error("OpenAPI function is truned off for you")
|
||||||
api_appkey = rand_str()
|
api_appkey = rand_str()
|
||||||
user.open_api_appkey = api_appkey
|
user.open_api_appkey = api_appkey
|
||||||
user.save()
|
user.save()
|
||||||
return self.success({"appkey": api_appkey})
|
return self.success({"appkey": api_appkey})
|
||||||
|
|
||||||
|
|
||||||
|
class SSOAPI(CSRFExemptAPIView):
|
||||||
|
@login_required
|
||||||
|
def get(self, request):
|
||||||
|
token = rand_str()
|
||||||
|
request.user.auth_token = token
|
||||||
|
request.user.save()
|
||||||
|
return self.success({"token": token})
|
||||||
|
|
||||||
|
@method_decorator(csrf_exempt)
|
||||||
|
@validate_serializer(SSOSerializer)
|
||||||
|
def post(self, request):
|
||||||
|
try:
|
||||||
|
user = User.objects.get(auth_token=request.data["token"])
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return self.error("User does not exist")
|
||||||
|
return self.success({"username": user.username, "avatar": user.userprofile.avatar, "admin_type": user.admin_type})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user