aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2024-12-15 20:19:17 -0500
committerBobby <[email protected]>2024-12-15 20:19:17 -0500
commit5c14aa56c401915a99cf1c6f5700e8e3cb88453b (patch)
treee486ed3ea32ef76163623894b40370483bd6f5d6
parent8bb529d5eefec11360e7aacb287120d6427793bd (diff)
downloadthatcomputerscientist-5c14aa56c401915a99cf1c6f5700e8e3cb88453b.tar.xz
thatcomputerscientist-5c14aa56c401915a99cf1c6f5700e8e3cb88453b.zip
login . logout working
-rw-r--r--apps/pagoda/__init__.py0
-rw-r--r--apps/pagoda/admin.py3
-rw-r--r--apps/pagoda/apps.py6
-rw-r--r--apps/pagoda/migrations/__init__.py0
-rw-r--r--apps/pagoda/models.py3
-rw-r--r--apps/pagoda/tests.py3
-rw-r--r--apps/pagoda/views.py3
-rw-r--r--internal/auth_utilities.py52
-rw-r--r--services/users/urls.py41
-rw-r--r--services/users/views.py594
-rw-r--r--static/css/core/post_list.css4
-rw-r--r--static/css/shared/core.css16
-rw-r--r--static/css/shared/login-area.css27
-rw-r--r--static/fonts/SourceHanSans-VF.ttfbin0 -> 36174452 bytes
-rw-r--r--static/images/core/messages/login/ENVERR.png (renamed from static/images/backgrounds/login-messages/ENVERR.png)bin341246 -> 341246 bytes
-rw-r--r--static/images/core/messages/login/IUOPERR.png (renamed from static/images/backgrounds/login-messages/IUOPERR.png)bin338128 -> 338128 bytes
-rw-r--r--static/images/core/messages/login/RFEERR.png (renamed from static/images/backgrounds/login-messages/RFEERR.png)bin342869 -> 342869 bytes
-rw-r--r--static/images/core/messages/login/VESENDERR.png (renamed from static/images/backgrounds/login-messages/VESENDERR.png)bin339299 -> 339299 bytes
-rw-r--r--static/images/core/messages/login/VESENT.png (renamed from static/images/backgrounds/login-messages/VESENT.png)bin337493 -> 337493 bytes
-rw-r--r--static/images/core/messages/login/VESUCCESS.png (renamed from static/images/backgrounds/login-messages/VESUCCESS.png)bin325006 -> 325006 bytes
-rw-r--r--templates/shared/left_sidebar.html13
-rw-r--r--thatcomputerscientist/urls.py3
22 files changed, 442 insertions, 326 deletions
diff --git a/apps/pagoda/__init__.py b/apps/pagoda/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/apps/pagoda/__init__.py
diff --git a/apps/pagoda/admin.py b/apps/pagoda/admin.py
new file mode 100644
index 00000000..8c38f3f3
--- /dev/null
+++ b/apps/pagoda/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/apps/pagoda/apps.py b/apps/pagoda/apps.py
new file mode 100644
index 00000000..acc7a0eb
--- /dev/null
+++ b/apps/pagoda/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class PagodaConfig(AppConfig):
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "pagoda"
diff --git a/apps/pagoda/migrations/__init__.py b/apps/pagoda/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/apps/pagoda/migrations/__init__.py
diff --git a/apps/pagoda/models.py b/apps/pagoda/models.py
new file mode 100644
index 00000000..71a83623
--- /dev/null
+++ b/apps/pagoda/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/apps/pagoda/tests.py b/apps/pagoda/tests.py
new file mode 100644
index 00000000..7ce503c2
--- /dev/null
+++ b/apps/pagoda/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/apps/pagoda/views.py b/apps/pagoda/views.py
new file mode 100644
index 00000000..91ea44a2
--- /dev/null
+++ b/apps/pagoda/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
diff --git a/internal/auth_utilities.py b/internal/auth_utilities.py
new file mode 100644
index 00000000..82500e4c
--- /dev/null
+++ b/internal/auth_utilities.py
@@ -0,0 +1,52 @@
+from services.users.models import UserProfile
+
+PROTECTED_USERNAMES = [
+ "admin",
+ "administrator",
+ "root",
+ "thatcomputerscientist",
+ "skippy",
+ "system",
+ "superuser",
+ "sysadmin",
+ "sysadministrator",
+ "sysop",
+ "test",
+ "user",
+ "webmaster",
+ "www",
+ "postmaster",
+ "hostmaster",
+ "info",
+ "support",
+ "anonymous",
+ "guest",
+ "nobody",
+ "someone",
+ "moderator",
+ "moderators",
+ "mods",
+ "crvs",
+]
+
+
+def validate_auth_input(username, password, login=True):
+ valid = True
+ if not username or not password:
+ valid = False
+
+ if username == "" or password == "":
+ valid = False
+
+ if username in PROTECTED_USERNAMES and not login:
+ valid = False
+
+ return valid
+
+
+def validate_verified_user_email(user):
+ try:
+ email_verified = UserProfile.objects.get(user=user).email_verified
+ except UserProfile.DoesNotExist:
+ email_verified = False
+ return email_verified
diff --git a/services/users/urls.py b/services/users/urls.py
index b7081e42..a24d81d5 100644
--- a/services/users/urls.py
+++ b/services/users/urls.py
@@ -3,29 +3,26 @@ from django.urls import path
from . import views
-app_name = "users"
+app_name = "auth"
urlpatterns = [
- path("/login", views.login_user, name="login"),
- path("/logout", views.logout_user, name="logout"),
- path("/update", views.update_user, name="update"),
- path("/changepassword", views.change_password, name="changepassword"),
- path(
- "/sendchangeuseremail", views.send_change_user_email, name="sendchangeuseremail"
- ),
- path(
- "/sendverificationemail",
- views.send_verification_email,
- name="sendverificationemail",
- ),
- path("/updateavatar", views.update_avatar, name="updateavatar"),
- path("/updateblinkies", views.update_blinkie, name="updateblinkie"),
- path("/delete", views.delete_user, name="delete"),
- path("/<mode>/<uid>/<token>", views.verify_email, name="verifyemail"),
- path("/<mode>/<uid>/<token>", views.verify_email, name="changeemail"),
- path("/resetpassword/<uid>/<token>", views.reset_password, name="resetpassword"),
+ path("login", views.login, name="login"),
+ path("logout", views.logout, name="logout"),
+ # path("/update", views.update_user, name="update"),
+ # path("/changepassword", views.change_password, name="changepassword"),
+ # path(
+ # "/sendchangeuseremail", views.send_change_user_email, name="sendchangeuseremail"
+ # ),
+ # path(
+ # "/sendverificationemail",
+ # views.send_verification_email,
+ # name="sendverificationemail",
+ # ),
+ # path("/updateavatar", views.update_avatar, name="updateavatar"),
+ # path("/updateblinkies", views.update_blinkie, name="updateblinkie"),
+ # path("/delete", views.delete_user, name="delete"),
+ # path("/<mode>/<uid>/<token>", views.verify_email, name="verifyemail"),
+ # path("/<mode>/<uid>/<token>", views.verify_email, name="changeemail"),
+ # path("/resetpassword/<uid>/<token>", views.reset_password, name="resetpassword"),
]
# Configure Admin Site
-admin.site.site_header = "Shifoo Administation"
-admin.site.site_title = "Shifoo"
-admin.site.index_title = "Administration Area"
diff --git a/services/users/views.py b/services/users/views.py
index 5dba135b..b90a4cd1 100644
--- a/services/users/views.py
+++ b/services/users/views.py
@@ -1,300 +1,336 @@
from django.contrib import messages
-from django.contrib.auth import authenticate, login, logout, update_session_auth_hash
+from django.contrib.auth import (
+ authenticate,
+ login as lgn,
+ logout as lgt,
+ update_session_auth_hash,
+)
from django.contrib.auth.models import User
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotAllowed
from django.shortcuts import redirect, reverse
from django.template.loader import render_to_string
from django.utils.html import strip_tags
+from internal.auth_utilities import validate_auth_input, validate_verified_user_email
+
from .accountFunctions import store_token, verify_token
from .forms import UpdateUserDetailsForm
from .mail_send import send_email
-from .models import UserProfile
# Create your views here.
-def login_user(request):
- # pass
- next = request.POST.get("next", "blog:home")
- username = request.POST["username"]
- password = request.POST["password"]
- if username == "" or password == "" or username is None or password is None:
- # required fields are empty
- messages.error(request, "RFEERR", extra_tags="loginError")
- return HttpResponseRedirect(next + "?username=" + username)
+def login(request):
+ if not request.POST:
+ return HttpResponseNotAllowed("Method not allowed")
else:
- # check if email is verified
- user = authenticate(request, username=username, password=password)
- if user is not None:
- try:
- email_verified = UserProfile.objects.get(user=user.pk).email_verified
- except:
- # user has no profile
- email_verified = False
- if email_verified:
- login(request, user)
- return HttpResponseRedirect(next)
+ next = request.POST.get("next", "core:home")
+ username = request.POST["username"]
+ password = request.POST["password"]
+ if not validate_auth_input(username, password):
+ messages.error(request, "RFEERR", extra_tags="loginError")
+ return HttpResponseRedirect(next + "?username=" + username)
+ else:
+ user = authenticate(request, username=username, password=password)
+ if user is not None:
+ email_verified = validate_verified_user_email(user)
+ if email_verified:
+ lgn(request, user)
+ return HttpResponseRedirect(next)
+ else:
+ messages.error(request, "ENVERR", extra_tags="loginError")
+ return HttpResponseRedirect(next + "?username=" + username)
else:
- # email not verified
- messages.error(request, "ENVERR", extra_tags="loginError")
+ messages.error(request, "IUOPERR", extra_tags="loginError")
return HttpResponseRedirect(next + "?username=" + username)
- else:
- # invalid credentials
- messages.error(request, "IUOPERR", extra_tags="loginError")
- return HttpResponseRedirect(next + "?username=" + username)
-def logout_user(request):
- logout(request)
+def logout(request):
+ lgt(request)
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
-def update_user(request):
- user = request.user
- if user is not None:
- if request.method == "POST":
- form = UpdateUserDetailsForm(request.POST, user=user)
- if form.is_valid():
- form.save()
- messages.success(request, "Profile was successfully updated!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(
- request, "Unable to update profile! Please try again later."
- )
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "You must be logged in to update your profile!")
- return redirect("blog:home")
-
-
-def delete_user(request):
- user = request.user
- if user is not None:
- if request.method == "POST":
- password = request.POST["password"]
- if user.check_password(password):
- # delete user, all comments, user profile details, and all posts
- user.delete()
- messages.success(request, "Your account was successfully deleted!")
- return redirect("blog:home")
- else:
- messages.error(request, "Incorrect password!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "Unable to delete account! Please try again later.")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "You must be logged in to delete your account!")
- return redirect("blog:home")
-
-
-def update_avatar(request):
- user = request.user
- if user is not None:
- if request.method == "POST":
- user_profile = UserProfile.objects.get(user=user)
- user_profile.avatar_url = request.POST["avatar"]
- user_profile.save()
- messages.success(request, "Avatar was successfully updated!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "Unable to update avatar! Please try again later.")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "You must be logged in to update your avatar!")
- return redirect("blog:home")
-
-
-def update_blinkie(request):
- user = request.user
- if user is not None:
- if request.method == "POST":
- user_profile = UserProfile.objects.get(user=user)
- user_profile.blinkie_url = request.POST["blinkie"]
- user_profile.save()
- messages.success(request, "Blinkie was successfully updated!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "Unable to update blinkie! Please try again later.")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "You must be logged in to update your blinkie!")
- return redirect("blog:home")
-
-
-def change_password(request):
- username = request.user
- old_password = request.POST["oldPassword"]
- new_password = request.POST["newPassword"]
- confirm_password = request.POST["confirmPassword"]
- if username is not None:
- user = User.objects.get(username=username)
- if user.check_password(old_password):
- if new_password == confirm_password:
- if len(new_password) < 8:
- messages.error(
- request, "The new password must be at least 8 characters long!"
- )
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- user.set_password(new_password)
- user.save()
- update_session_auth_hash(request, user)
- messages.success(request, "Password was successfully changed!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(
- request, "The new password and confirmation password do not match!"
- )
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "Old password is incorrect!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "Unable to change password! Please try again later.")
- return redirect("blog:home")
-
-
-def send_change_user_email(request):
- user = request.user
- new_email = request.POST["email"]
- if user is not None:
- # Check if the new and the old email are the same
- if user.email == new_email:
- messages.error(request, "New email is the same as the old one!")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
-
- # check if email is already in use
- if User.objects.filter(email=new_email).exists():
- messages.error(request, "Email is already in use!")
- # Redirect to referrer
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- # Send verification email
- subject = "Change your email address"
- uid, token = store_token(token_type="changeemail", user=user, email=new_email)
-
- message = render_to_string(
- "email_change_verification_email.html",
- {
- "user": user.username if user.first_name is None else user.first_name,
- "site_name": "Shifoo",
- "uid": uid,
- "token": token,
- "protocol": request.scheme + "://",
- "domain": request.get_host(),
- },
- )
- # message = strip_tags(message)
- # send_mail(subject, message, 'That Computer Scientist <' + settings.EMAIL_HOST_USER + '>', [new_email])
-
- if send_email(
- sender="[email protected]",
- sender_name="Shifoo",
- recipient=new_email,
- subject=subject,
- body_html=message,
- body_text=message,
- ):
- messages.success(
- request, "Verification email was sent! Please check your email."
- )
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "Unable to change email! Please try again later.")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# def login_user(request):
+# # pass
+# next = request.POST.get("next", "blog:home")
+# username = request.POST["username"]
+# password = request.POST["password"]
+# if username == "" or password == "" or username is None or password is None:
+# # required fields are empty
+# messages.error(request, "RFEERR", extra_tags="loginError")
+# return HttpResponseRedirect(next + "?username=" + username)
+# else:
+# # check if email is verified
+# user = authenticate(request, username=username, password=password)
+# if user is not None:
+# try:
+# email_verified = UserProfile.objects.get(user=user.pk).email_verified
+# except:
+# # user has no profile
+# email_verified = False
+# if email_verified:
+# login(request, user)
+# return HttpResponseRedirect(next)
+# else:
+# # email not verified
+# messages.error(request, "ENVERR", extra_tags="loginError")
+# return HttpResponseRedirect(next + "?username=" + username)
+# else:
+# # invalid credentials
+# messages.error(request, "IUOPERR", extra_tags="loginError")
+# return HttpResponseRedirect(next + "?username=" + username)
- else:
- messages.error(request, "Unable to change email! Please try again later.")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
-
-
-def send_verification_email(request):
- # this is a post only view
- if request.method == "POST":
- username = request.POST.get("username")
- subject = "Verify your email address"
- user = User.objects.get(username=username)
- uid, token = store_token(token_type="verifyemail", user=user, email=user.email)
-
- message = render_to_string(
- "verification_email.html",
- {
- "user": user.username if user.first_name is None else user.first_name,
- "site_name": "Shifoo",
- "uid": uid,
- "token": token,
- "protocol": "https://" if request.is_secure() else "http://",
- "domain": request.get_host(),
- },
- )
- # message = strip_tags(message)
- if send_email(
- sender="[email protected]",
- sender_name="Shifoo",
- recipient=user.email,
- subject=subject,
- body_html=message,
- body_text=message,
- ):
- messages.success(request, "VESENT", extra_tags="loginError")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "VESENDERR", extra_tags="loginError")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
- else:
- messages.error(request, "VESENDERR", extra_tags="loginError")
- return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
-
-
-def verify_email(request, mode, uid, token):
- token_object = verify_token(mode, uid, token)
- redirect_to = (
- reverse("blog:account") + "?tab=email" if mode == "changeemail" else "blog:home"
- )
- success_message = (
- "Email was successfully changed!" if mode == "changeemail" else "VESUCCESS"
- )
- error_message = "Unable to verify email! Please try again later."
-
- if token_object is not None and token_object.verified:
- user = User.objects.get(pk=token_object.user_id)
- user.email = token_object.email
- user.save()
- token_object.delete()
- messages.success(
- request,
- success_message,
- extra_tags="loginError" if mode == "verifyemail" else "",
- )
- return redirect(redirect_to)
- else:
- messages.error(request, error_message)
- return redirect(redirect_to)
-
-
-def reset_password(request, uid, token):
- mode = "resetpassword"
- token_object = verify_token(mode, uid, token)
-
- # Token is not verified yet, but confirmed that it belongs to the user
- # Now we send a form for the user to reset their password
- if token_object is not None and token_object.verified:
- print(token_object.user_id)
- # redirect to forgotpassword/reset?uid=uid&token=token
- return HttpResponseRedirect(
- reverse("blog:resetpassword")
- + "?uid="
- + token_object.user_id
- + "&token="
- + token
- )
- else:
- # Token is invalid
- messages.error(
- request,
- "Unable to reset password! Please try again later.",
- extra_tags="passwordReset",
- )
- return redirect("blog:forgotpassword")
+
+# def logout_user(request):
+# logout(request)
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+
+
+# def update_user(request):
+# user = request.user
+# if user is not None:
+# if request.method == "POST":
+# form = UpdateUserDetailsForm(request.POST, user=user)
+# if form.is_valid():
+# form.save()
+# messages.success(request, "Profile was successfully updated!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(
+# request, "Unable to update profile! Please try again later."
+# )
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "You must be logged in to update your profile!")
+# return redirect("blog:home")
+
+
+# def delete_user(request):
+# user = request.user
+# if user is not None:
+# if request.method == "POST":
+# password = request.POST["password"]
+# if user.check_password(password):
+# # delete user, all comments, user profile details, and all posts
+# user.delete()
+# messages.success(request, "Your account was successfully deleted!")
+# return redirect("blog:home")
+# else:
+# messages.error(request, "Incorrect password!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "Unable to delete account! Please try again later.")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "You must be logged in to delete your account!")
+# return redirect("blog:home")
+
+
+# def update_avatar(request):
+# user = request.user
+# if user is not None:
+# if request.method == "POST":
+# user_profile = UserProfile.objects.get(user=user)
+# user_profile.avatar_url = request.POST["avatar"]
+# user_profile.save()
+# messages.success(request, "Avatar was successfully updated!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "Unable to update avatar! Please try again later.")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "You must be logged in to update your avatar!")
+# return redirect("blog:home")
+
+
+# def update_blinkie(request):
+# user = request.user
+# if user is not None:
+# if request.method == "POST":
+# user_profile = UserProfile.objects.get(user=user)
+# user_profile.blinkie_url = request.POST["blinkie"]
+# user_profile.save()
+# messages.success(request, "Blinkie was successfully updated!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "Unable to update blinkie! Please try again later.")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "You must be logged in to update your blinkie!")
+# return redirect("blog:home")
+
+
+# def change_password(request):
+# username = request.user
+# old_password = request.POST["oldPassword"]
+# new_password = request.POST["newPassword"]
+# confirm_password = request.POST["confirmPassword"]
+# if username is not None:
+# user = User.objects.get(username=username)
+# if user.check_password(old_password):
+# if new_password == confirm_password:
+# if len(new_password) < 8:
+# messages.error(
+# request, "The new password must be at least 8 characters long!"
+# )
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# user.set_password(new_password)
+# user.save()
+# update_session_auth_hash(request, user)
+# messages.success(request, "Password was successfully changed!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(
+# request, "The new password and confirmation password do not match!"
+# )
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "Old password is incorrect!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "Unable to change password! Please try again later.")
+# return redirect("blog:home")
+
+
+# def send_change_user_email(request):
+# user = request.user
+# new_email = request.POST["email"]
+# if user is not None:
+# # Check if the new and the old email are the same
+# if user.email == new_email:
+# messages.error(request, "New email is the same as the old one!")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+
+# # check if email is already in use
+# if User.objects.filter(email=new_email).exists():
+# messages.error(request, "Email is already in use!")
+# # Redirect to referrer
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# # Send verification email
+# subject = "Change your email address"
+# uid, token = store_token(token_type="changeemail", user=user, email=new_email)
+
+# message = render_to_string(
+# "email_change_verification_email.html",
+# {
+# "user": user.username if user.first_name is None else user.first_name,
+# "site_name": "Shifoo",
+# "uid": uid,
+# "token": token,
+# "protocol": request.scheme + "://",
+# "domain": request.get_host(),
+# },
+# )
+# # message = strip_tags(message)
+# # send_mail(subject, message, 'That Computer Scientist <' + settings.EMAIL_HOST_USER + '>', [new_email])
+
+# if send_email(
+# sender="[email protected]",
+# sender_name="Shifoo",
+# recipient=new_email,
+# subject=subject,
+# body_html=message,
+# body_text=message,
+# ):
+# messages.success(
+# request, "Verification email was sent! Please check your email."
+# )
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "Unable to change email! Please try again later.")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+
+# else:
+# messages.error(request, "Unable to change email! Please try again later.")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+
+
+# def send_verification_email(request):
+# # this is a post only view
+# if request.method == "POST":
+# username = request.POST.get("username")
+# subject = "Verify your email address"
+# user = User.objects.get(username=username)
+# uid, token = store_token(token_type="verifyemail", user=user, email=user.email)
+
+# message = render_to_string(
+# "verification_email.html",
+# {
+# "user": user.username if user.first_name is None else user.first_name,
+# "site_name": "Shifoo",
+# "uid": uid,
+# "token": token,
+# "protocol": "https://" if request.is_secure() else "http://",
+# "domain": request.get_host(),
+# },
+# )
+# # message = strip_tags(message)
+# if send_email(
+# sender="[email protected]",
+# sender_name="Shifoo",
+# recipient=user.email,
+# subject=subject,
+# body_html=message,
+# body_text=message,
+# ):
+# messages.success(request, "VESENT", extra_tags="loginError")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "VESENDERR", extra_tags="loginError")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+# else:
+# messages.error(request, "VESENDERR", extra_tags="loginError")
+# return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
+
+
+# def verify_email(request, mode, uid, token):
+# token_object = verify_token(mode, uid, token)
+# redirect_to = (
+# reverse("blog:account") + "?tab=email" if mode == "changeemail" else "blog:home"
+# )
+# success_message = (
+# "Email was successfully changed!" if mode == "changeemail" else "VESUCCESS"
+# )
+# error_message = "Unable to verify email! Please try again later."
+
+# if token_object is not None and token_object.verified:
+# user = User.objects.get(pk=token_object.user_id)
+# user.email = token_object.email
+# user.save()
+# token_object.delete()
+# messages.success(
+# request,
+# success_message,
+# extra_tags="loginError" if mode == "verifyemail" else "",
+# )
+# return redirect(redirect_to)
+# else:
+# messages.error(request, error_message)
+# return redirect(redirect_to)
+
+
+# def reset_password(request, uid, token):
+# mode = "resetpassword"
+# token_object = verify_token(mode, uid, token)
+
+# # Token is not verified yet, but confirmed that it belongs to the user
+# # Now we send a form for the user to reset their password
+# if token_object is not None and token_object.verified:
+# print(token_object.user_id)
+# # redirect to forgotpassword/reset?uid=uid&token=token
+# return HttpResponseRedirect(
+# reverse("blog:resetpassword")
+# + "?uid="
+# + token_object.user_id
+# + "&token="
+# + token
+# )
+# else:
+# # Token is invalid
+# messages.error(
+# request,
+# "Unable to reset password! Please try again later.",
+# extra_tags="passwordReset",
+# )
+# return redirect("blog:forgotpassword")
diff --git a/static/css/core/post_list.css b/static/css/core/post_list.css
index a84dc36e..7f7511a2 100644
--- a/static/css/core/post_list.css
+++ b/static/css/core/post_list.css
@@ -8,7 +8,7 @@
}
.author-info {
- margin: 8px 0px;
+ margin: 4px 0px 8px 0px;
}
.post-profile-image {
@@ -45,7 +45,7 @@
.post-content p {
text-align: justify;
- margin: 8px 0px;
+ margin: 4px 0px;
}
.post-actions {
diff --git a/static/css/shared/core.css b/static/css/shared/core.css
index 094f9555..94e9e2e1 100644
--- a/static/css/shared/core.css
+++ b/static/css/shared/core.css
@@ -1,13 +1,10 @@
/* Reset and Base Styles */
-@import url('https://fonts.googleapis.com/css2?family=M+PLUS+Rounded+1c:wght@100;300;400;500;700;800;900&display=swap');
-/* @font-face {
- font-family: 'Klee';
- src: url('../../fonts/KleeOne-Regular.ttf') format('truetype');
- font-weight: 400;
- font-style: normal;
- font-display: swap
-} */
+@font-face {
+ font-family: 'SourceHanSansVariable';
+ src: url('../../fonts/SourceHanSans-VF.ttf') format('truetype');
+ font-weight: 100 300 400 500 600 700 900;
+}
@font-face {
font-family: 'SweetFairy';
@@ -41,9 +38,10 @@ body {
body,
textarea,
input {
- font-family: 'M PLUS Rounded 1c';
+ font-family: 'SourceHanSansVariable';
font-size: 12px;
font-weight: 400;
+ line-height: 1.5;
}
/* Element Styles */
diff --git a/static/css/shared/login-area.css b/static/css/shared/login-area.css
index b2e86506..47cee42d 100644
--- a/static/css/shared/login-area.css
+++ b/static/css/shared/login-area.css
@@ -60,36 +60,41 @@
#login-error>.messageBox {
position: absolute;
- top: -100px;
- left: -140px;
+ top: -88px;
+ left: -120px;
z-index: 2;
- width: 250px;
- height: 166px;
- background-size: 250px 166px;
+ width: 200px;
+ height: 132px;
}
#login-error>.RFEERR {
- background: url("../images/backgrounds/login-messages/RFEERR.png") no-repeat;
+ background: url("../../images/core/messages/login/RFEERR.png") no-repeat;
+ background-size: contain;
}
#login-error>.IUOPERR {
- background: url("../images/backgrounds/login-messages/IUOPERR.png") no-repeat;
+ background: url("../../images/core/messages/login//IUOPERR.png") no-repeat;
+ background-size: contain;
}
#login-error>.ENVERR {
- background: url("../images/backgrounds/login-messages/ENVERR.png") no-repeat;
+ background: url("../../images/core/messages/login//ENVERR.png") no-repeat;
+ background-size: contain;
}
#login-error>.VESENDERR {
- background: url("../images/backgrounds/login-messages/VESENDERR.png") no-repeat;
+ background: url("../../images/core/messages/login//VESENDERR.png") no-repeat;
+ background-size: contain;
}
#login-error>.VESENT {
- background: url("../images/backgrounds/login-messages/VESENT.png") no-repeat;
+ background: url("../../images/core/messages/login//VESENT.png") no-repeat;
+ background-size: contain;
}
#login-error>.VESUCCESS {
- background: url("../images/backgrounds/login-messages/VESUCCESS.png") no-repeat;
+ background: url("../../images/core/messages/login//VESUCCESS.png") no-repeat;
+ background-size: contain;
}
/* Login Area Button Styles */
diff --git a/static/fonts/SourceHanSans-VF.ttf b/static/fonts/SourceHanSans-VF.ttf
new file mode 100644
index 00000000..f71661c0
--- /dev/null
+++ b/static/fonts/SourceHanSans-VF.ttf
Binary files differ
diff --git a/static/images/backgrounds/login-messages/ENVERR.png b/static/images/core/messages/login/ENVERR.png
index a4c8b74d..a4c8b74d 100644
--- a/static/images/backgrounds/login-messages/ENVERR.png
+++ b/static/images/core/messages/login/ENVERR.png
Binary files differ
diff --git a/static/images/backgrounds/login-messages/IUOPERR.png b/static/images/core/messages/login/IUOPERR.png
index 8620a7ee..8620a7ee 100644
--- a/static/images/backgrounds/login-messages/IUOPERR.png
+++ b/static/images/core/messages/login/IUOPERR.png
Binary files differ
diff --git a/static/images/backgrounds/login-messages/RFEERR.png b/static/images/core/messages/login/RFEERR.png
index 3cd048f9..3cd048f9 100644
--- a/static/images/backgrounds/login-messages/RFEERR.png
+++ b/static/images/core/messages/login/RFEERR.png
Binary files differ
diff --git a/static/images/backgrounds/login-messages/VESENDERR.png b/static/images/core/messages/login/VESENDERR.png
index 4ab23525..4ab23525 100644
--- a/static/images/backgrounds/login-messages/VESENDERR.png
+++ b/static/images/core/messages/login/VESENDERR.png
Binary files differ
diff --git a/static/images/backgrounds/login-messages/VESENT.png b/static/images/core/messages/login/VESENT.png
index 885d2ba4..885d2ba4 100644
--- a/static/images/backgrounds/login-messages/VESENT.png
+++ b/static/images/core/messages/login/VESENT.png
Binary files differ
diff --git a/static/images/backgrounds/login-messages/VESUCCESS.png b/static/images/core/messages/login/VESUCCESS.png
index cfcd8bc7..cfcd8bc7 100644
--- a/static/images/backgrounds/login-messages/VESUCCESS.png
+++ b/static/images/core/messages/login/VESUCCESS.png
Binary files differ
diff --git a/templates/shared/left_sidebar.html b/templates/shared/left_sidebar.html
index 78ec7e2c..1603f5f1 100644
--- a/templates/shared/left_sidebar.html
+++ b/templates/shared/left_sidebar.html
@@ -7,8 +7,15 @@
<link rel="stylesheet" href="{% static 'css/en/login-area.css' %}" />
{% endif %}
{% if not user.is_authenticated %}
+ {% for message in messages %}
+ {% if 'loginError' in message.tags %}
+ <div id="login-error">
+ <div class="messageBox {{message.message}}"></div>
+ </div>
+ {% endif %}
+ {% endfor %}
<div id="login-area">
- <form method="post" action="#" id="login-form">
+ <form method="post" action="{% url 'auth:login' %}" id="login-form">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}" />
<input type="text" id="username" name="username" placeholder="{% if request.LANGUAGE_CODE == 'ja' %}ユーザー名{% else %}Username{% endif %}" autocomplete="off" value="{{ request.GET.username }}" />
<input type="password" id="password" name="password" placeholder="{% if request.LANGUAGE_CODE == 'ja' %}パスワード{% else %}Password{% endif %}" autocomplete="off" />
@@ -39,7 +46,7 @@
</div>
<div class="user-item">
<img src="{% static 'images/core/icons/logout.png' %}" alt="Logout Icon" />
- <a href="#logout">{% if request.LANGUAGE_CODE == 'ja' %}ログアウト{% else %}Logout{% endif %}</a>
+ <a href="{% url 'auth:logout' %}">{% if request.LANGUAGE_CODE == 'ja' %}ログアウト{% else %}Logout{% endif %}</a>
</div>
</div>
</div>
@@ -95,7 +102,7 @@
<div class="navigation-item {% if request.LANGUAGE_CODE == 'ja' %}en{% else %}ja{% endif %}">
<img src="{% static 'images/core/icons/changelanguage.png' %}" alt="Change Language Icon" />
- <a href="#" onclick="changeLanguage({% if request.LANGUAGE_CODE == 'ja' %}'en'{% else %}'ja'{% endif %})">
+ <a href="javascript:void(0);" onclick="changeLanguage({% if request.LANGUAGE_CODE == 'ja' %}'en'{% else %}'ja'{% endif %})">
{% if request.LANGUAGE_CODE == 'ja' %}English (英語){% else %}日本語 (Japanese){% endif %}
</a>
</div>
diff --git a/thatcomputerscientist/urls.py b/thatcomputerscientist/urls.py
index 18c4dcbe..754ebd50 100644
--- a/thatcomputerscientist/urls.py
+++ b/thatcomputerscientist/urls.py
@@ -52,5 +52,8 @@ urlpatterns = [
# path('ignis', include(('ignis.urls', 'ignis'), namespace='ignis')),
# path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]
+admin.site.site_header = "Shifoo Administation"
+admin.site.site_title = "Shifoo"
+admin.site.index_title = "Administration Area"
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)