|
|
|
@ -1,18 +1,75 @@
@@ -1,18 +1,75 @@
|
|
|
|
|
from django.core.handlers.wsgi import WSGIRequest |
|
|
|
|
from django.http import HttpResponse, HttpResponseNotFound |
|
|
|
|
from django.shortcuts import render |
|
|
|
|
from django.http import HttpResponse, HttpResponseNotFound, JsonResponse, HttpRequest |
|
|
|
|
from django.shortcuts import render, redirect |
|
|
|
|
from django.core.paginator import Paginator |
|
|
|
|
from django.db.models import Q |
|
|
|
|
from django.urls import reverse |
|
|
|
|
from requests_oauthlib import OAuth2Session |
|
|
|
|
|
|
|
|
|
from apps.tuxbot_gnous_eu.models import Users |
|
|
|
|
|
|
|
|
|
from django.conf import settings |
|
|
|
|
|
|
|
|
|
TEMPLATE_PATH = 'users/' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OAuth2: |
|
|
|
|
OAUTH2_CLIENT_ID = settings.CLIENT_ID |
|
|
|
|
OAUTH2_CLIENT_SECRET = settings.CLIENT_SECRET |
|
|
|
|
OAUTH2_REDIRECT_URI = settings.REDIRECT_URI |
|
|
|
|
|
|
|
|
|
API_BASE_URL = 'https://discordapp.com/api' |
|
|
|
|
AUTHORIZATION_BASE_URL = API_BASE_URL + '/oauth2/authorize' |
|
|
|
|
TOKEN_URL = API_BASE_URL + '/oauth2/token' |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def token_updater(request: HttpRequest, token): |
|
|
|
|
request.session['oauth2_token'] = token |
|
|
|
|
|
|
|
|
|
def make_session(self, token=None, state=None, scope=None): |
|
|
|
|
return OAuth2Session( |
|
|
|
|
client_id=self.OAUTH2_CLIENT_ID, |
|
|
|
|
token=token, |
|
|
|
|
state=state, |
|
|
|
|
scope=scope, |
|
|
|
|
redirect_uri=self.OAUTH2_REDIRECT_URI, |
|
|
|
|
auto_refresh_kwargs={ |
|
|
|
|
'client_id': self.OAUTH2_CLIENT_ID, |
|
|
|
|
'client_secret': self.OAUTH2_CLIENT_SECRET, |
|
|
|
|
}, |
|
|
|
|
auto_refresh_url=self.TOKEN_URL, |
|
|
|
|
token_updater=self.token_updater |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def login(self, request: HttpRequest, *args, **kwargs): |
|
|
|
|
discord = self.make_session(scope=['identify', 'guilds']) |
|
|
|
|
authorization_url, state = discord.authorization_url(self.AUTHORIZATION_BASE_URL) |
|
|
|
|
request.session['oauth2_state'] = state |
|
|
|
|
return redirect(authorization_url) |
|
|
|
|
|
|
|
|
|
def callback(self, request: HttpRequest, *args, **kwargs): |
|
|
|
|
if request.GET.get('error'): |
|
|
|
|
return request.GET.get('error') |
|
|
|
|
|
|
|
|
|
discord = self.make_session() |
|
|
|
|
token = discord.fetch_token( |
|
|
|
|
self.TOKEN_URL, |
|
|
|
|
client_secret=self.OAUTH2_CLIENT_SECRET, |
|
|
|
|
authorization_response=reverse('tuxbot_gnous_eu:login_callback'), |
|
|
|
|
code=request.GET.get('code') |
|
|
|
|
) |
|
|
|
|
request.session['oauth2_token'] = token |
|
|
|
|
|
|
|
|
|
user = discord.get(self.API_BASE_URL + '/users/@me').json() |
|
|
|
|
guilds = discord.get(self.API_BASE_URL + '/users/@me/guilds').json() |
|
|
|
|
|
|
|
|
|
request.session['user'] = user |
|
|
|
|
request.session['guilds'] = guilds |
|
|
|
|
|
|
|
|
|
return redirect(reverse('tuxbot_gnous_eu:users_edit', kwargs={'user_id': user.get('id')})) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UsersView: |
|
|
|
|
@staticmethod |
|
|
|
|
def index(request: WSGIRequest, *args, **kwargs) -> HttpResponse: |
|
|
|
|
def index(request: HttpRequest, *args, **kwargs) -> HttpResponse: |
|
|
|
|
search: str = request.GET.get('search') |
|
|
|
|
|
|
|
|
|
if search: |
|
|
|
@ -42,7 +99,7 @@ class UsersView:
@@ -42,7 +99,7 @@ class UsersView:
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def show(request: WSGIRequest, *args, **kwargs) -> HttpResponse: |
|
|
|
|
def show(request: HttpRequest, *args, **kwargs) -> HttpResponse: |
|
|
|
|
try: |
|
|
|
|
data_user = Users.objects.get(user_id=kwargs.get('user_id')) |
|
|
|
|
except Users.DoesNotExist: |
|
|
|
@ -57,16 +114,6 @@ class UsersView:
@@ -57,16 +114,6 @@ class UsersView:
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def edit(request: WSGIRequest, *args, **kwargs) -> HttpResponse: |
|
|
|
|
try: |
|
|
|
|
data_user = Users.objects.get(user_id=kwargs.get('user_id')) |
|
|
|
|
except Users.DoesNotExist: |
|
|
|
|
return HttpResponseNotFound("Question does not exist") |
|
|
|
|
|
|
|
|
|
return render( |
|
|
|
|
request, |
|
|
|
|
TEMPLATE_PATH + 'edit.html', |
|
|
|
|
{ |
|
|
|
|
'user': data_user |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
def edit(request: HttpRequest, *args, **kwargs): |
|
|
|
|
oauth2 = OAuth2(request) |
|
|
|
|
return oauth2.login() |
|
|
|
|