diff --git a/.gitignore b/.gitignore index e8a710b..b379a32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ docker/.env backend/django/seatstock_django/db.sqlite3 +docker/volumes/postgresql diff --git a/backend/django/Dockerfile b/backend/django/Dockerfile index 3f6c15f..1deaac1 100644 --- a/backend/django/Dockerfile +++ b/backend/django/Dockerfile @@ -1,5 +1,5 @@ # base image -FROM python:3.8 +FROM python:3.9 # setup environment variable ENV DockerHOME=/home/app/webapp diff --git a/backend/django/requirements.txt b/backend/django/requirements.txt index 8eb58c8..338f3d1 100644 --- a/backend/django/requirements.txt +++ b/backend/django/requirements.txt @@ -2,5 +2,10 @@ django ~= 4.0 authlib ~= 1.0 python-dotenv ~= 0.19 requests ~= 2.27 -pymongo ~= 3.11 -dnspython +psycopg2 +#pymongo ~= 3.6 +#dnspython +#mongoengine +#djongo +#pytz +#django-utils-six diff --git a/backend/django/seatstock_django/db.sqlite3 b/backend/django/seatstock_django/db.sqlite3 deleted file mode 100644 index 1181932..0000000 Binary files a/backend/django/seatstock_django/db.sqlite3 and /dev/null differ diff --git a/backend/django/seatstock_django/django_mongo/views.py b/backend/django/seatstock_django/django_mongo/views.py index a947aeb..4330f54 100644 --- a/backend/django/seatstock_django/django_mongo/views.py +++ b/backend/django/seatstock_django/django_mongo/views.py @@ -1,6 +1,90 @@ -from django.shortcuts import render +#from django.shortcuts import render +#from django.http import HttpResponse # Create your views here. +#def index(request): +# return HttpResponse("

Hello and welcome to my first Django App project!

") + + +import json +from authlib.integrations.django_client import OAuth +from django.conf import settings +from django.shortcuts import redirect, render, redirect +from django.urls import reverse +from urllib.parse import quote_plus, urlencode +import os + +from pymongo.mongo_client import MongoClient +from pymongo.server_api import ServerApi +from dotenv import load_dotenv, find_dotenv + + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +ENV_FILE = find_dotenv() +if ENV_FILE: + load_dotenv(ENV_FILE) + +MONGO_DB_USERNAME = os.environ.get("MONGO_DB_USERNAME") +MONGO_DB_PASSWORD = os.environ.get("MONGO_DB_PASSWORD") +MONGO_DB_HOST = os.environ.get("MONGO_DB_HOST") + +#uri = 'mongodb+srv://'+MONGO_DB_USERNAME+':'+MONGO_DB_PASSWORD+'@'+MONGO_DB_HOST+'/?retryWrites=true&w=majority' +#client = MongoClient(uri) + +# Send a ping to confirm a successful connection +#try: +# client.admin.command('ping') +# print("Pinged your deployment. You successfully connected to MongoDB!") +#except Exception as e: +# print(e) + +# AUTH0 +oauth = OAuth() + +oauth.register( + "auth0", + client_id=settings.AUTH0_CLIENT_ID, + client_secret=settings.AUTH0_CLIENT_SECRET, + client_kwargs={ + "scope": "openid profile email", + }, + server_metadata_url=f"https://{settings.AUTH0_DOMAIN}/.well-known/openid-configuration", +) + +def login(request): + return oauth.auth0.authorize_redirect( + request, request.build_absolute_uri(reverse("callback")) + ) + +def callback(request): + token = oauth.auth0.authorize_access_token(request) + request.session["user"] = token + return redirect(request.build_absolute_uri(reverse("index"))) + +def logout(request): + request.session.clear() + + return redirect( + f"https://{settings.AUTH0_DOMAIN}/v2/logout?" + + urlencode( + { + "returnTo": request.build_absolute_uri(reverse("index")), + "client_id": settings.AUTH0_CLIENT_ID, + }, + quote_via=quote_plus, + ), + ) + def index(request): - return HttpResponse("

Hello and welcome to my first Django App project!

") + return render( + request, + "index.html", + context={ + "session": request.session.get("user"), + "pretty": json.dumps(request.session.get("user"), indent=4), + }, + ) diff --git a/backend/django/seatstock_django/seatstock_django/settings.py b/backend/django/seatstock_django/seatstock_django/settings.py index 8a1563a..00525d2 100644 --- a/backend/django/seatstock_django/seatstock_django/settings.py +++ b/backend/django/seatstock_django/seatstock_django/settings.py @@ -14,6 +14,24 @@ import os from pathlib import Path from dotenv import load_dotenv, find_dotenv +# Needed to use mongodb as default 'DATABASES' +#import mongoengine, djongo +#from pymongo.mongo_client import MongoClient +#from pymongo.server_api import ServerApi + +ENV_FILE = find_dotenv() +if ENV_FILE: + load_dotenv(ENV_FILE) + +#MONGO_DB_USERNAME = os.environ.get("MONGO_DB_USERNAME") +#MONGO_DB_PASSWORD = os.environ.get("MONGO_DB_PASSWORD") +#MONGO_DB_HOST = os.environ.get("MONGO_DB_HOST") + +#uri = 'mongodb+srv://'+MONGO_DB_USERNAME+':'+MONGO_DB_PASSWORD+'@'+MONGO_DB_HOST+'/?retryWrites=true&w=majority' +#mongoengine.connect(db="default", host=uri) +#client = MongoClient(uri) + + # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -33,7 +51,7 @@ ALLOWED_HOSTS = ['docker-django', 'localhost', 'seatstock.duckdns.org'] # Application definition INSTALLED_APPS = [ - 'djangoapp', + 'django_mongo', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -88,9 +106,35 @@ WSGI_APPLICATION = 'seatstock_django.wsgi.application' #} -ENV_FILE = find_dotenv() -if ENV_FILE: - load_dotenv(ENV_FILE) +#DATABASES = { +# 'default': { +# 'ENGINE' : 'djongo', +# 'NAME' : 'seatstock', +# 'ENFORCE_SCHEMA': False, +# 'CLIENT': { +# 'host': "mongodb+srv://seatstock:3MSiYdBhf43gPvBa@cluster0.7s1vitu.mongodb.net/?retryWrites=true&w=majority" +# } +# } +#} + +DB_NAME = os.environ.get("DB_NAME") +DB_USER = os.environ.get("DB_USER") +DB_PASSWORD = os.environ.get("DB_PASSWORD") +DB_HOST = os.environ.get("DB_HOST") +DB_PORT = os.environ.get("DB_PORT") + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': DB_NAME, + 'USER': DB_USER, + 'PASSWORD': DB_PASSWORD, + 'HOST': DB_HOST, + 'PORT': DB_PORT + } +} + + # Password validation # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators diff --git a/backend/django/seatstock_django/seatstock_django/urls.py b/backend/django/seatstock_django/seatstock_django/urls.py index 9515160..05a1f6f 100644 --- a/backend/django/seatstock_django/seatstock_django/urls.py +++ b/backend/django/seatstock_django/seatstock_django/urls.py @@ -21,8 +21,8 @@ from . import views urlpatterns = [ path('admin/', admin.site.urls), - path("",include('django_mongo.urls')), -# path("", views.index, name="index"), +# path("",include('django_mongo.urls')), + path("", views.index, name="index"), path("login", views.login, name="login"), path("logout", views.logout, name="logout"), path("callback", views.callback, name="callback"), diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 7a7790b..441fb5e 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -15,15 +15,34 @@ services: image: docker-django container_name: seatstock-django restart: unless-stopped - ports: - - "8000:8000" +# ports: +# - "8000:8000" volumes: - ../backend/django:/home/app/webapp -# - ../frontend/templates:/home/app/webapp/seatstock_django/seatstock_django/templates -# - ../frontend/static:/home/app/webapp/seatstock_django/seatstock_django/static + - ../frontend/templates:/home/app/webapp/seatstock_django/seatstock_django/templates + - ../frontend/static:/home/app/webapp/seatstock_django/seatstock_django/static - ../frontend/templates:/home/app/webapp/seatstock_django/django_mongo/templates - ../frontend/static:/home/app/webapp/seatstock_django/django_mongo/static environment: - AUTH0_DOMAIN=${AUTH0_DOMAIN} - AUTH0_CLIENT_ID=${AUTH0_CLIENT_ID} - AUTH0_CLIENT_SECRET=${AUTH0_CLIENT_SECRET} + - MONGO_DB_USERNAME=${MONGO_DB_USERNAME} + - MONGO_DB_PASSWORD=${MONGO_DB_PASSWORD} + - MONGO_DB_HOST=${MONGO_DB_HOST} + - DB_NAME=${DB_NAME} + - DB_USER=${DB_USER} + - DB_PASSWORD=${DB_PASSWORD} + - DB_HOST=${DB_HOST} + - DB_PORT=${DB_PORT} + + postgres: + image: postgres:latest + container_name: seatstock-postgres + restart: unless-stopped + volumes: + - ./volumes/postgresql:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_USER=${DB_USER} + - POSTGRES_DB=${DB_NAME}