feat(frontend/management command): Add a command to craft tokens
This commit is contained in:
parent
005dc42433
commit
dfbaf2fd65
5 changed files with 47 additions and 26 deletions
0
frontend/frontend/management/__init__.py
Normal file
0
frontend/frontend/management/__init__.py
Normal file
0
frontend/frontend/management/commands/__init__.py
Normal file
0
frontend/frontend/management/commands/__init__.py
Normal file
22
frontend/frontend/management/commands/craft_token.py
Normal file
22
frontend/frontend/management/commands/craft_token.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from frontend.utils import craft_token
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "Craft a token for the backend"
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--is_cof",
|
||||||
|
action="store_true",
|
||||||
|
)
|
||||||
|
parser.add_argument("user", type=str)
|
||||||
|
parser.add_argument("exp_time", type=int)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
token = craft_token(options["user"], options["is_cof"], options["exp_time"])
|
||||||
|
|
||||||
|
self.stdout.write(f"Token:\n{pprint.pformat(token)}")
|
21
frontend/frontend/utils.py
Normal file
21
frontend/frontend/utils.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
from datetime import datetime, timedelta, timezone
|
||||||
|
|
||||||
|
import jwt
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
def craft_token(username, is_cof, hours=9):
|
||||||
|
claims = {
|
||||||
|
"exp": datetime.now(tz=timezone.utc) + timedelta(hours=hours),
|
||||||
|
"sub": "ragb",
|
||||||
|
"user": username,
|
||||||
|
"is_cof": is_cof,
|
||||||
|
"scope": "modify",
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
"token": jwt.encode(
|
||||||
|
claims,
|
||||||
|
settings.JWT_SECRET,
|
||||||
|
),
|
||||||
|
"claims": claims,
|
||||||
|
}
|
|
@ -1,6 +1,3 @@
|
||||||
from datetime import datetime, timedelta, timezone
|
|
||||||
|
|
||||||
import jwt
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.core.exceptions import ViewDoesNotExist
|
from django.core.exceptions import ViewDoesNotExist
|
||||||
|
@ -8,6 +5,8 @@ from django.http import Http404, JsonResponse
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
|
|
||||||
|
from .utils import craft_token
|
||||||
|
|
||||||
|
|
||||||
def get_context_from_proj(kind, chans):
|
def get_context_from_proj(kind, chans):
|
||||||
print(kind, chans)
|
print(kind, chans)
|
||||||
|
@ -40,20 +39,7 @@ def get_context_from_proj(kind, chans):
|
||||||
|
|
||||||
class TokenView(LoginRequiredMixin, View):
|
class TokenView(LoginRequiredMixin, View):
|
||||||
def get(self, request, *arg, **kwargs):
|
def get(self, request, *arg, **kwargs):
|
||||||
return JsonResponse(
|
return JsonResponse(craft_token(self.request.user.username, self.request.user.groups.filter(name="cof").exists()))
|
||||||
{
|
|
||||||
"token": jwt.encode(
|
|
||||||
{
|
|
||||||
"exp": datetime.now(tz=timezone.utc) + timedelta(hours=9),
|
|
||||||
"sub": "ragb",
|
|
||||||
"user": self.request.user.username,
|
|
||||||
"is_cof": self.requests.user.groups.filter(name="cof").exists(),
|
|
||||||
"scope": "modify",
|
|
||||||
},
|
|
||||||
settings.JWT_SECRET,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class LightView(TemplateView):
|
class LightView(TemplateView):
|
||||||
|
@ -64,15 +50,7 @@ class LightView(TemplateView):
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
if self.request.user.is_authenticated:
|
if self.request.user.is_authenticated:
|
||||||
context["jwt"] = jwt.encode(
|
context["jwt"] = craft_token(self.request.user.username, self.request.user.groups.filter(name="cof").exists())["token"]
|
||||||
{
|
|
||||||
"exp": datetime.now(tz=timezone.utc) + timedelta(hours=9),
|
|
||||||
"sub": "ragb",
|
|
||||||
"user": self.request.user.username,
|
|
||||||
"scope": "modify",
|
|
||||||
},
|
|
||||||
settings.JWT_SECRET,
|
|
||||||
)
|
|
||||||
context["websocket_endpoint"] = settings.WEBSOCKET_ENDPOINT
|
context["websocket_endpoint"] = settings.WEBSOCKET_ENDPOINT
|
||||||
light = self.kwargs["light"]
|
light = self.kwargs["light"]
|
||||||
if light not in settings.LIGHTS["lights"]:
|
if light not in settings.LIGHTS["lights"]:
|
||||||
|
|
Loading…
Reference in a new issue