sync session to takahe
This commit is contained in:
parent
685fc75b2e
commit
8a3a552bd6
7 changed files with 106 additions and 4 deletions
|
@ -42,6 +42,7 @@ urlpatterns = [
|
||||||
path("", include("common.urls")),
|
path("", include("common.urls")),
|
||||||
path("", include("legacy.urls")),
|
path("", include("legacy.urls")),
|
||||||
path("", include("developer.urls")),
|
path("", include("developer.urls")),
|
||||||
|
path("", include("takahe.urls")),
|
||||||
# path("oauth/", include("oauth2_provider.urls", namespace="oauth2_provider")),
|
# path("oauth/", include("oauth2_provider.urls", namespace="oauth2_provider")),
|
||||||
path("tz_detect/", include("tz_detect.urls")),
|
path("tz_detect/", include("tz_detect.urls")),
|
||||||
path(settings.ADMIN_URL + "/", admin.site.urls),
|
path(settings.ADMIN_URL + "/", admin.site.urls),
|
||||||
|
|
|
@ -90,7 +90,7 @@ server {
|
||||||
proxy_cache_valid any 72h;
|
proxy_cache_valid any 72h;
|
||||||
add_header X-Cache $upstream_cache_status;
|
add_header X-Cache $upstream_cache_status;
|
||||||
}
|
}
|
||||||
location ~* ^/(static|@|\.well-known|actor|inbox|api/v1|api/v2|auth|oauth|tags|settings|media|proxy|admin|djadmin) {
|
location ~* ^/(static|@|\.well-known|actor|inbox|api/v1|api/v2|oauth|tags|settings|media|proxy|admin|djadmin) {
|
||||||
proxy_pass http://takahe;
|
proxy_pass http://takahe;
|
||||||
}
|
}
|
||||||
location / {
|
location / {
|
||||||
|
|
|
@ -98,7 +98,7 @@ server {
|
||||||
proxy_cache_valid any 72h;
|
proxy_cache_valid any 72h;
|
||||||
add_header X-Cache $upstream_cache_status;
|
add_header X-Cache $upstream_cache_status;
|
||||||
}
|
}
|
||||||
location ~* ^/(@|\.well-known|actor|inbox|api/v1|api/v2|auth|oauth|tags|settings|media|proxy|admin|djadmin) {
|
location ~* ^/(@|\.well-known|actor|inbox|api/v1|api/v2|oauth|tags|settings|media|proxy|admin|djadmin) {
|
||||||
proxy_pass http://takahe;
|
proxy_pass http://takahe;
|
||||||
}
|
}
|
||||||
location / {
|
location / {
|
||||||
|
|
|
@ -15,6 +15,28 @@ class Migration(migrations.Migration):
|
||||||
dependencies = []
|
dependencies = []
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="TakaheSession",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"session_key",
|
||||||
|
models.CharField(
|
||||||
|
max_length=40,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="session key",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("session_data", models.TextField(verbose_name="session data")),
|
||||||
|
(
|
||||||
|
"expire_date",
|
||||||
|
models.DateTimeField(db_index=True, verbose_name="expire date"),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"db_table": "django_session",
|
||||||
|
},
|
||||||
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name="Domain",
|
name="Domain",
|
||||||
fields=[
|
fields=[
|
||||||
|
|
|
@ -33,6 +33,15 @@ if TYPE_CHECKING:
|
||||||
from django.db.models.manager import RelatedManager
|
from django.db.models.manager import RelatedManager
|
||||||
|
|
||||||
|
|
||||||
|
class TakaheSession(models.Model):
|
||||||
|
session_key = models.CharField(_("session key"), max_length=40, primary_key=True)
|
||||||
|
session_data = models.TextField(_("session data"))
|
||||||
|
expire_date = models.DateTimeField(_("expire date"), db_index=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "django_session"
|
||||||
|
|
||||||
|
|
||||||
class Snowflake:
|
class Snowflake:
|
||||||
"""
|
"""
|
||||||
Snowflake ID generator and parser.
|
Snowflake ID generator and parser.
|
||||||
|
|
9
takahe/urls.py
Normal file
9
takahe/urls.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from .views import *
|
||||||
|
|
||||||
|
app_name = "users"
|
||||||
|
urlpatterns = [
|
||||||
|
path("auth/login/", auth_login, name="auth_login"),
|
||||||
|
path("auth/logout/", auth_logout, name="auth_logout"),
|
||||||
|
]
|
|
@ -1,3 +1,64 @@
|
||||||
from django.shortcuts import render
|
import time
|
||||||
|
|
||||||
# Create your views here.
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.contrib.sessions.backends.signed_cookies import SessionStore
|
||||||
|
from django.http import HttpRequest
|
||||||
|
from django.shortcuts import redirect, render
|
||||||
|
from django.utils.http import http_date
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
from .models import TakaheSession
|
||||||
|
|
||||||
|
_TAKAHE_SESSION_COOKIE_NAME = "sessionid"
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def auth_login(request: HttpRequest):
|
||||||
|
"""Redirect to the login page if not yet, otherwise sync login info to takahe session"""
|
||||||
|
|
||||||
|
# if SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies" in Takahe
|
||||||
|
session = SessionStore(session_key=request.COOKIES.get(_TAKAHE_SESSION_COOKIE_NAME))
|
||||||
|
session._session_cache = request.session._session # type: ignore
|
||||||
|
session["_auth_user_backend"] = "django.contrib.auth.backends.ModelBackend"
|
||||||
|
session_key: str = session._get_session_key() # type: ignore
|
||||||
|
|
||||||
|
# if SESSION_ENGINE = "django.contrib.sessions.backends.db"
|
||||||
|
# sess = request.session._session
|
||||||
|
# sess["_auth_user_backend"] = "django.contrib.auth.backends.ModelBackend"
|
||||||
|
# logger.info(f"session: {sess}")
|
||||||
|
# TakaheSession.objects.update_or_create(
|
||||||
|
# session_key=request.session.session_key,
|
||||||
|
# defaults={
|
||||||
|
# "session_data": request.session.encode(sess),
|
||||||
|
# "expire_date": request.session.get_expiry_date(),
|
||||||
|
# },
|
||||||
|
# )
|
||||||
|
# session_key = request.session.session_key
|
||||||
|
|
||||||
|
response = redirect(request.GET.get("next", "/"))
|
||||||
|
if request.session.get_expire_at_browser_close():
|
||||||
|
max_age = None
|
||||||
|
expires = None
|
||||||
|
else:
|
||||||
|
max_age = request.session.get_expiry_age()
|
||||||
|
expires_time = time.time() + max_age
|
||||||
|
expires = http_date(expires_time)
|
||||||
|
response.set_cookie(
|
||||||
|
_TAKAHE_SESSION_COOKIE_NAME,
|
||||||
|
session_key,
|
||||||
|
max_age=max_age,
|
||||||
|
expires=expires,
|
||||||
|
domain=settings.SESSION_COOKIE_DOMAIN,
|
||||||
|
path=settings.SESSION_COOKIE_PATH,
|
||||||
|
secure=settings.SESSION_COOKIE_SECURE,
|
||||||
|
httponly=settings.SESSION_COOKIE_HTTPONLY,
|
||||||
|
samesite=settings.SESSION_COOKIE_SAMESITE,
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def auth_logout(request: HttpRequest):
|
||||||
|
response = redirect("/account/logout")
|
||||||
|
response.delete_cookie(_TAKAHE_SESSION_COOKIE_NAME)
|
||||||
|
return response
|
||||||
|
|
Loading…
Add table
Reference in a new issue