diff --git a/pairent_backend/pairent_app/urls.py b/pairent_backend/pairent_app/urls.py index 55a63df..d19ec7f 100644 --- a/pairent_backend/pairent_app/urls.py +++ b/pairent_backend/pairent_app/urls.py @@ -15,5 +15,5 @@ urlpatterns = format_suffix_patterns([ # auth re_path(r'^auth/vvsu/', views.VVSUAuthProxy), - path('auth/user/login', views.UserLogin) + path('auth/user/login', views.UserLogin.as_view()) ]) diff --git a/pairent_backend/pairent_app/views.py b/pairent_backend/pairent_app/views.py index 12737d5..e008efc 100644 --- a/pairent_backend/pairent_app/views.py +++ b/pairent_backend/pairent_app/views.py @@ -4,7 +4,7 @@ from rest_framework.views import APIView, View from rest_framework.request import Request from django.views.decorators.csrf import csrf_exempt -from django.http import HttpResponseBadRequest, HttpResponse +from django.http import HttpResponseBadRequest, HttpResponse, JsonResponse, HttpRequest from django.db.models.query import QuerySet from django.core.validators import validate_email @@ -172,6 +172,36 @@ def VVSUAuthProxy(req: Request): return resp; -def UserLogin(req: Request): - data = req.data - return HttpResponse(data); +class UserLogin(APIView): + # TODO: Remove csrf exempt when index.html is loaded through django + @csrf_exempt + def post(self, req: HttpRequest): + if (req.content_type != 'application/json'): + res = HttpResponse({'error': 'bad content type'}); + res.status_code = 400; + return res; + + data = json.loads(req.body.decode('utf8')); + + # if (not hasattr(data, 'code')): + # res = JsonResponse({'error': 'no code'}); + # res.status_code = 400; + # return res + + cb = requests.post('https://vvsu.ru/connect/oauth2/token', { + 'grant_type': 'authorization_code', + 'redirect_uri': 'https://pairent.vvsu.ru/sign-in/', + 'code': data['code'], + # 'code_verifier': data['code_verifier'], + 'client_id': 'it-hub-client', + 'client_secret': 'U8y@uPVee6Q^*729esHTo4Vd' + }, headers={ + 'Origin': 'https://pairent.vvsu.ru', + 'Referer': 'https://pairent.vvsu.ru' + }); + + + resp = HttpResponse(cb.content); + resp.headers['Content-Type'] = cb.headers['Content-Type']; + + return resp; \ No newline at end of file diff --git a/pairent_frontend_react/src/API/User.js b/pairent_frontend_react/src/API/User.js index a7ad59f..472585f 100644 --- a/pairent_frontend_react/src/API/User.js +++ b/pairent_frontend_react/src/API/User.js @@ -41,7 +41,7 @@ class User { } const data = await axios.post(api_path('/api/auth/user/login'), response); - return data.data; + return new User(data.data); } } diff --git a/pairent_frontend_react/src/pages/LoggedIn/index.jsx b/pairent_frontend_react/src/pages/LoggedIn/index.jsx index c17409e..0920d60 100644 --- a/pairent_frontend_react/src/pages/LoggedIn/index.jsx +++ b/pairent_frontend_react/src/pages/LoggedIn/index.jsx @@ -37,7 +37,7 @@ export default class LoggedIn extends React.Component { async componentDidMount() { if (this.response.error) return; - User.login(this.response); + console.log(await User.login(this.response)); } render() {