diff options
| author | Bobby <[email protected]> | 2024-12-15 20:19:17 -0500 |
|---|---|---|
| committer | Bobby <[email protected]> | 2024-12-15 20:19:17 -0500 |
| commit | 5c14aa56c401915a99cf1c6f5700e8e3cb88453b (patch) | |
| tree | e486ed3ea32ef76163623894b40370483bd6f5d6 | |
| parent | 8bb529d5eefec11360e7aacb287120d6427793bd (diff) | |
| download | thatcomputerscientist-5c14aa56c401915a99cf1c6f5700e8e3cb88453b.tar.xz thatcomputerscientist-5c14aa56c401915a99cf1c6f5700e8e3cb88453b.zip | |
login . logout working
| -rw-r--r-- | apps/pagoda/__init__.py | 0 | ||||
| -rw-r--r-- | apps/pagoda/admin.py | 3 | ||||
| -rw-r--r-- | apps/pagoda/apps.py | 6 | ||||
| -rw-r--r-- | apps/pagoda/migrations/__init__.py | 0 | ||||
| -rw-r--r-- | apps/pagoda/models.py | 3 | ||||
| -rw-r--r-- | apps/pagoda/tests.py | 3 | ||||
| -rw-r--r-- | apps/pagoda/views.py | 3 | ||||
| -rw-r--r-- | internal/auth_utilities.py | 52 | ||||
| -rw-r--r-- | services/users/urls.py | 41 | ||||
| -rw-r--r-- | services/users/views.py | 594 | ||||
| -rw-r--r-- | static/css/core/post_list.css | 4 | ||||
| -rw-r--r-- | static/css/shared/core.css | 16 | ||||
| -rw-r--r-- | static/css/shared/login-area.css | 27 | ||||
| -rw-r--r-- | static/fonts/SourceHanSans-VF.ttf | bin | 0 -> 36174452 bytes | |||
| -rw-r--r-- | static/images/core/messages/login/ENVERR.png (renamed from static/images/backgrounds/login-messages/ENVERR.png) | bin | 341246 -> 341246 bytes | |||
| -rw-r--r-- | static/images/core/messages/login/IUOPERR.png (renamed from static/images/backgrounds/login-messages/IUOPERR.png) | bin | 338128 -> 338128 bytes | |||
| -rw-r--r-- | static/images/core/messages/login/RFEERR.png (renamed from static/images/backgrounds/login-messages/RFEERR.png) | bin | 342869 -> 342869 bytes | |||
| -rw-r--r-- | static/images/core/messages/login/VESENDERR.png (renamed from static/images/backgrounds/login-messages/VESENDERR.png) | bin | 339299 -> 339299 bytes | |||
| -rw-r--r-- | static/images/core/messages/login/VESENT.png (renamed from static/images/backgrounds/login-messages/VESENT.png) | bin | 337493 -> 337493 bytes | |||
| -rw-r--r-- | static/images/core/messages/login/VESUCCESS.png (renamed from static/images/backgrounds/login-messages/VESUCCESS.png) | bin | 325006 -> 325006 bytes | |||
| -rw-r--r-- | templates/shared/left_sidebar.html | 13 | ||||
| -rw-r--r-- | thatcomputerscientist/urls.py | 3 |
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 Binary files differnew file mode 100644 index 00000000..f71661c0 --- /dev/null +++ b/static/fonts/SourceHanSans-VF.ttf diff --git a/static/images/backgrounds/login-messages/ENVERR.png b/static/images/core/messages/login/ENVERR.png Binary files differindex a4c8b74d..a4c8b74d 100644 --- a/static/images/backgrounds/login-messages/ENVERR.png +++ b/static/images/core/messages/login/ENVERR.png diff --git a/static/images/backgrounds/login-messages/IUOPERR.png b/static/images/core/messages/login/IUOPERR.png Binary files differindex 8620a7ee..8620a7ee 100644 --- a/static/images/backgrounds/login-messages/IUOPERR.png +++ b/static/images/core/messages/login/IUOPERR.png diff --git a/static/images/backgrounds/login-messages/RFEERR.png b/static/images/core/messages/login/RFEERR.png Binary files differindex 3cd048f9..3cd048f9 100644 --- a/static/images/backgrounds/login-messages/RFEERR.png +++ b/static/images/core/messages/login/RFEERR.png diff --git a/static/images/backgrounds/login-messages/VESENDERR.png b/static/images/core/messages/login/VESENDERR.png Binary files differindex 4ab23525..4ab23525 100644 --- a/static/images/backgrounds/login-messages/VESENDERR.png +++ b/static/images/core/messages/login/VESENDERR.png diff --git a/static/images/backgrounds/login-messages/VESENT.png b/static/images/core/messages/login/VESENT.png Binary files differindex 885d2ba4..885d2ba4 100644 --- a/static/images/backgrounds/login-messages/VESENT.png +++ b/static/images/core/messages/login/VESENT.png diff --git a/static/images/backgrounds/login-messages/VESUCCESS.png b/static/images/core/messages/login/VESUCCESS.png Binary files differindex cfcd8bc7..cfcd8bc7 100644 --- a/static/images/backgrounds/login-messages/VESUCCESS.png +++ b/static/images/core/messages/login/VESUCCESS.png 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) |
