move auth functions to different file
This commit is contained in:
parent
5604c20903
commit
4f5f817d83
|
@ -0,0 +1,87 @@
|
||||||
|
from django.http import HttpResponseBadRequest, HttpResponse, JsonResponse, HttpRequest
|
||||||
|
|
||||||
|
def VVSUAuthProxy(req: HttpRequest):
|
||||||
|
proxy = 'https://vvsu.ru/connect' + req.path[len('/api/auth/vvsu'):];
|
||||||
|
|
||||||
|
preq = requests.request(req.method, proxy, headers={
|
||||||
|
'User-Agent': 'OIDC Client / Pairent',
|
||||||
|
'Origin': 'http://pairent.vvsu.ru',
|
||||||
|
'Referer': 'http://pairent.vvsu.ru'
|
||||||
|
});
|
||||||
|
|
||||||
|
resp = HttpResponse(preq.content);
|
||||||
|
resp.headers['Content-Type'] = preq.headers['Content-Type'];
|
||||||
|
|
||||||
|
return resp;
|
||||||
|
|
||||||
|
def register(oid, provider_id, name):
|
||||||
|
user = User(
|
||||||
|
favorites_apartments='',
|
||||||
|
comparison_apartments='',
|
||||||
|
name=name,
|
||||||
|
# date_of_birth=,
|
||||||
|
about_me='',
|
||||||
|
gender='?',
|
||||||
|
phone='+00000',
|
||||||
|
# email=,
|
||||||
|
# telegram=,
|
||||||
|
# discord=,
|
||||||
|
# city=,
|
||||||
|
role='s',
|
||||||
|
photo_provider='VVSU',
|
||||||
|
openid_addr=oid,
|
||||||
|
openid_id=provider_id,
|
||||||
|
);
|
||||||
|
user.save();
|
||||||
|
return user;
|
||||||
|
|
||||||
|
def get_oauth_token(remote, data):
|
||||||
|
return requests.post(remote + '/oauth2/token', data,
|
||||||
|
headers={
|
||||||
|
'Origin': 'https://pairent.vvsu.ru',
|
||||||
|
'Referer': 'https://pairent.vvsu.ru'
|
||||||
|
}).json();
|
||||||
|
|
||||||
|
def get_oauth_data(remote, key):
|
||||||
|
return requests.get(remote + '/userinfo', headers={
|
||||||
|
'Origin': 'https://pairent.vvsu.ru',
|
||||||
|
'Authorization': 'Bearer ' + key,
|
||||||
|
'User-Agent': 'curl/8.1'
|
||||||
|
}).json();
|
||||||
|
|
||||||
|
def create_auth_token(userid, ip):
|
||||||
|
|
||||||
|
try:
|
||||||
|
token = AuthToken.objects.get(user=userid, ip=ip);
|
||||||
|
if (verify_auth_token(token.key, token.ip)):
|
||||||
|
return token;
|
||||||
|
except AuthToken.DoesNotExist:
|
||||||
|
0 # ignore
|
||||||
|
|
||||||
|
token = AuthToken(
|
||||||
|
user=userid,
|
||||||
|
key=str(uuid.uuid4()),
|
||||||
|
# 2 days
|
||||||
|
# vvv
|
||||||
|
expires=time.time() + 60 * 60 * 24 * 2,
|
||||||
|
ip=ip
|
||||||
|
);
|
||||||
|
token.save();
|
||||||
|
return token;
|
||||||
|
|
||||||
|
def verify_auth_token(key, ip):
|
||||||
|
|
||||||
|
try:
|
||||||
|
token = AuthToken.objects.get(key=key);
|
||||||
|
except AuthToken.DoesNotExist:
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if (token.ip != ip):
|
||||||
|
token.delete();
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if (token.expires > time.time()):
|
||||||
|
token.delete();
|
||||||
|
return False;
|
||||||
|
|
||||||
|
return True;
|
|
@ -17,6 +17,8 @@ from .serializer import (ApartamentListSerializer,
|
||||||
PublicUserSerializer,
|
PublicUserSerializer,
|
||||||
TokenSerializer)
|
TokenSerializer)
|
||||||
|
|
||||||
|
from .authlib import *
|
||||||
|
|
||||||
import json, math, random, re, requests, oidc_client, base64, uuid, time, ipware as iplib
|
import json, math, random, re, requests, oidc_client, base64, uuid, time, ipware as iplib
|
||||||
ipware = iplib.IpWare();
|
ipware = iplib.IpWare();
|
||||||
|
|
||||||
|
@ -159,92 +161,6 @@ class CompatibleUsersView(viewsets.ViewSet):
|
||||||
|
|
||||||
return Response(users);
|
return Response(users);
|
||||||
|
|
||||||
def VVSUAuthProxy(req: Request):
|
|
||||||
proxy = 'https://vvsu.ru/connect' + req.path[len('/api/auth/vvsu'):];
|
|
||||||
|
|
||||||
preq = requests.request(req.method, proxy, headers={
|
|
||||||
'User-Agent': 'OIDC Client / Pairent',
|
|
||||||
'Origin': 'http://pairent.vvsu.ru',
|
|
||||||
'Referer': 'http://pairent.vvsu.ru'
|
|
||||||
});
|
|
||||||
|
|
||||||
resp = HttpResponse(preq.content);
|
|
||||||
resp.headers['Content-Type'] = preq.headers['Content-Type'];
|
|
||||||
|
|
||||||
return resp;
|
|
||||||
|
|
||||||
def register(oid, provider_id, name):
|
|
||||||
user = User(
|
|
||||||
favorites_apartments='',
|
|
||||||
comparison_apartments='',
|
|
||||||
name=name,
|
|
||||||
# date_of_birth=,
|
|
||||||
about_me='',
|
|
||||||
gender='?',
|
|
||||||
phone='+00000',
|
|
||||||
# email=,
|
|
||||||
# telegram=,
|
|
||||||
# discord=,
|
|
||||||
# city=,
|
|
||||||
role='s',
|
|
||||||
photo_provider='VVSU',
|
|
||||||
openid_addr=oid,
|
|
||||||
openid_id=provider_id,
|
|
||||||
);
|
|
||||||
user.save();
|
|
||||||
return user;
|
|
||||||
|
|
||||||
def get_oauth_token(remote, data):
|
|
||||||
return requests.post(remote + '/oauth2/token', data,
|
|
||||||
headers={
|
|
||||||
'Origin': 'https://pairent.vvsu.ru',
|
|
||||||
'Referer': 'https://pairent.vvsu.ru'
|
|
||||||
}).json();
|
|
||||||
|
|
||||||
def get_oauth_data(remote, key):
|
|
||||||
return requests.get(remote + '/userinfo', headers={
|
|
||||||
'Origin': 'https://pairent.vvsu.ru',
|
|
||||||
'Authorization': 'Bearer ' + key,
|
|
||||||
'User-Agent': 'curl/8.1'
|
|
||||||
}).json();
|
|
||||||
|
|
||||||
def create_auth_token(userid, ip):
|
|
||||||
|
|
||||||
try:
|
|
||||||
token = AuthToken.objects.get(user=userid, ip=ip);
|
|
||||||
if (verify_auth_token(token.key, token.ip)):
|
|
||||||
return token;
|
|
||||||
except AuthToken.DoesNotExist:
|
|
||||||
0 # ignore
|
|
||||||
|
|
||||||
token = AuthToken(
|
|
||||||
user=userid,
|
|
||||||
key=str(uuid.uuid4()),
|
|
||||||
# 2 days
|
|
||||||
# vvv
|
|
||||||
expires=time.time() + 60 * 60 * 24 * 2,
|
|
||||||
ip=ip
|
|
||||||
);
|
|
||||||
token.save();
|
|
||||||
return token;
|
|
||||||
|
|
||||||
def verify_auth_token(key, ip):
|
|
||||||
|
|
||||||
try:
|
|
||||||
token = AuthToken.objects.get(key=key);
|
|
||||||
except AuthToken.DoesNotExist:
|
|
||||||
return False;
|
|
||||||
|
|
||||||
if (token.ip != ip):
|
|
||||||
token.delete();
|
|
||||||
return False;
|
|
||||||
|
|
||||||
if (token.expires > time.time()):
|
|
||||||
token.delete();
|
|
||||||
return False;
|
|
||||||
|
|
||||||
return True;
|
|
||||||
|
|
||||||
class UserLogin(APIView):
|
class UserLogin(APIView):
|
||||||
|
|
||||||
# TODO: Remove csrf exempt when index.html is loaded through django
|
# TODO: Remove csrf exempt when index.html is loaded through django
|
||||||
|
|
Loading…
Reference in New Issue