From 0fd9d162d5ddbf2a1d4ff7e1aa20b7c2cbe6f390 Mon Sep 17 00:00:00 2001 From: tomoron Date: Wed, 28 Aug 2024 18:35:40 +0200 Subject: [PATCH] login with 42 works, fix crash when session is deleted from database --- Makefile | 4 +- docker-compose/docker-compose.yml | 2 + .../requirements/djangoserver/Dockerfile | 14 ++-- .../djangoserver/file/server/server/models.py | 4 +- .../server/typeRequests/getAllListUser.py | 48 ++----------- .../file/server/server/typeRequests/login.py | 15 +--- .../server/typeRequests/login42/login42.py | 68 ------------------- .../djangoserver/file/server/server/urls.py | 6 +- .../djangoserver/file/server/server/views.py | 68 ++++++++++++++++++- 9 files changed, 89 insertions(+), 140 deletions(-) delete mode 100644 docker-compose/requirements/djangoserver/file/server/server/typeRequests/login42/login42.py diff --git a/Makefile b/Makefile index 92d20de..b0f45b0 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: tomoron +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/07/13 16:18:56 by tomoron #+# #+# # -# Updated: 2024/08/11 16:54:45 by tomoron ### ########.fr # +# Updated: 2024/08/28 18:27:14 by tomoron ### ########.fr # # # # **************************************************************************** # @@ -24,7 +24,7 @@ up: build up_att: build $(COMPOSE) up -watch: build +watch: $(COMPOSE) watch down: $(COMPOSE) down -v diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 96e8e5f..863eda8 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -35,6 +35,8 @@ services: DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} DB_HOST: ${DB_HOST} + UID_42: ${UID_42} + SECRET_42: ${SECRET_42} depends_on: - postgresql restart: always diff --git a/docker-compose/requirements/djangoserver/Dockerfile b/docker-compose/requirements/djangoserver/Dockerfile index 4b4a3aa..e1f7661 100644 --- a/docker-compose/requirements/djangoserver/Dockerfile +++ b/docker-compose/requirements/djangoserver/Dockerfile @@ -14,12 +14,12 @@ RUN python3.12 /root/get-pip.py RUN pip3 install requests django psycopg "channels[daphne]" bcrypt -ARG DB_HOST=; -ARG DB_NAME=; -ARG DB_USERNAME=; -ARG DB_PASSWORD=; -ARG SECRET_42=; -ARG SECRET_42=; +ARG DB_HOST +ARG DB_NAME +ARG DB_USERNAME +ARG DB_PASSWORD +ARG UID_42 +ARG SECRET_42 ENV DB_HOST=${DB_HOST} ENV PYTHONUNBUFFERED=1 @@ -41,4 +41,6 @@ sed -i "s/VAR_DB_NAME/$DB_NAME/" /var/www/djangoserver/server/server/settings.py sed -i "s/VAR_DB_USERNAME/$DB_USERNAME/" /var/www/djangoserver/server/server/settings.py && \ sed -i "s/VAR_DB_PASSWORD/$DB_PASSWORD/" /var/www/djangoserver/server/server/settings.py +RUN echo -n $UID_42:$SECRET_42 > /var/www/djangoserver/42_credentials + ENTRYPOINT ["sh", "/root/start.sh"] diff --git a/docker-compose/requirements/djangoserver/file/server/server/models.py b/docker-compose/requirements/djangoserver/file/server/server/models.py index 24cb7f9..5cd5579 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/models.py +++ b/docker-compose/requirements/djangoserver/file/server/server/models.py @@ -3,8 +3,8 @@ from django.db import models class User(models.Model): id = models.AutoField(primary_key=True) username = models.CharField(max_length=20, unique=True) - mail = models.EmailField(unique=True) - password = models.CharField(max_length=100) + mail = models.EmailField(unique=True, null=True, blank=True) + password = models.CharField(max_length=100, null=True, blank=True) id42 = models.DecimalField(max_digits=15, decimal_places=0, null=True, unique=True) pfp = models.CharField(max_length=1024, default="/static/img/default_pfp.jpg") diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getAllListUser.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getAllListUser.py index 75a69d9..f2bee42 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getAllListUser.py +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getAllListUser.py @@ -1,61 +1,23 @@ # **************************************************************************** # # # # ::: :::::::: # -# getPrivateListUser.py :+: :+: :+: # +# getAllListUser.py :+: :+: :+: # # +:+ +:+ +:+ # # By: edbernar +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/08/03 15:10:23 by edbernar #+# #+# # -# Updated: 2024/08/25 21:23:08 by tomoron ### ########.fr # +# Updated: 2024/08/28 18:22:43 by tomoron ### ########.fr # # # # **************************************************************************** # import asyncio import json +from django.db.models import Q from ..models import Message, User -#data = [ -# { -# "name": "Nessundorma", -# "status": "online", -# "pfp": "https://wallpapers-clan.com/wp-content/uploads/2023/05/cool-pfp-02.jpg", -# "id": 145564 -# }, -# { -# "name": "Succotash", -# "status": "offline", -# "pfp": "https://i.pinimg.com/200x/28/75/96/287596f98304bf1adc2c411619ae8fef.jpg", -# "id": 256981 -# }, -# { -# "name": "Astropower", -# "status": "online", -# "pfp": "https://ashisheditz.com/wp-content/uploads/2024/03/cool-anime-pfp-demon-slayer-HD.jpg", -# "id": 301547 -# }, -# { -# "name": "Assaultive", -# "status": "offline", -# "pfp": "https://i1.sndcdn.com/artworks-1Li0JIJrQGlojD3y-AEiNkw-t500x500.jpg", -# "id": 432448 -# }, -# { -# "name": "Redshock", -# "status": "offline", -# "pfp": "https://cdn.pfps.gg/pfps/7094-boy-pfp.png", -# "id": 543211 -# }, -# { -# "name": "Parley", -# "status": "offline", -# "pfp": "https://pbs.twimg.com/media/EscE6ckU0AA-Uhe.png", -# "id": 654123 -# } -#] - def getAllListUser(socket, content=None): - id = socket.scope["session"].get("id", 0) - res = User.objects.all() + uid = socket.scope["session"].get("uid", 0) + res = User.objects.filter(~Q(id=uid)) data = [] for x in res: data.append({"name":x.username, "pfp":x.pfp, "id":x.id}) diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/login.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/login.py index 1d17f2c..4013bc7 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/login.py +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/login.py @@ -6,11 +6,10 @@ # By: edbernar &redirect_uri=https://localhost:8000/login42&response_type=code&scope=public' + if(request.session.get("logged_in", False)): + return HttpResponse("you're already logged in") + code = request.GET.get('code', None) + if(code == None): + return(HttpResponse("code param not found")) + + data = { + 'grant_type': 'authorization_code', + 'client_id': UID42, + 'client_secret': SECRET42, + 'code': code, + 'redirect_uri': REDIRECT + } + print("\033[31m",data) + response = requests.post(TOKENURL, data=data) + if (response.status_code != 200): + print(response.json()) + return HttpResponse("couln't get authorization token, likely invalid code") + response = response.json() + headers = { + 'Authorization': f'Bearer {response["access_token"]}', + } + response = requests.get(INFOURL, headers=headers) + if (response.status_code != 200): + return HttpResponse("couln't get user info... what, why ?") + response = response.json() + id42 = response['id'] + login42 = response['login'] + db_user = User.objects.filter(id42=id42) + if(not db_user.exists()): + while(User.objects.filter(username=login42).exists()): + login42 += "_" + db_user = [User.objects.create(username=login42, id42=id42)] + db_user[0].save() + request.session["logged_in"] = True + request.session["username"] = db_user[0].username + request.session["id"] = db_user[0].id + return redirect("/") + +def logout(request): + request.session.delete() + return redirect("/")