From 77c793b2be19e2a3b7f388faac859154e9696156 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Mon, 27 Jan 2025 16:16:21 +0100 Subject: [PATCH] write label for token --- .../0002_token_active_token_label.py | 22 ++++++++++++ webhook/models.py | 3 ++ webhook/tables.py | 4 +-- webhook/templates/new_token.html | 34 +++++++++++++++++++ webhook/views.py | 30 +++++++++++----- 5 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 webhook/migrations/0002_token_active_token_label.py create mode 100644 webhook/templates/new_token.html diff --git a/webhook/migrations/0002_token_active_token_label.py b/webhook/migrations/0002_token_active_token_label.py new file mode 100644 index 0000000..149ce7a --- /dev/null +++ b/webhook/migrations/0002_token_active_token_label.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.5 on 2025-01-27 09:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('webhook', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='token', + name='active', + field=models.BooleanField(default=True, verbose_name='Active'), + ), + migrations.AddField( + model_name='token', + name='label', + field=models.CharField(default='', max_length=250, verbose_name='Label'), + ), + ] diff --git a/webhook/models.py b/webhook/models.py index 54218c2..04e6109 100644 --- a/webhook/models.py +++ b/webhook/models.py @@ -1,7 +1,10 @@ from django.db import models +from django.utils.translation import gettext_lazy as _ # Create your models here. class Token(models.Model): token = models.UUIDField() + label = models.CharField(_("Label"), max_length=250, default="") + active = models.BooleanField(_("Active"), default=True) diff --git a/webhook/tables.py b/webhook/tables.py index 06809ea..981e1ce 100644 --- a/webhook/tables.py +++ b/webhook/tables.py @@ -43,6 +43,7 @@ class TokensTable(tables.Table): ) token = tables.Column(verbose_name=_("Token"), empty_values=()) + label = tables.Column(verbose_name=_("Label"), empty_values=()) # def render_view_user(self): # return format_html('') @@ -71,13 +72,12 @@ class TokensTable(tables.Table): class Meta: model = Token template_name = "idhub/custom_table.html" - fields = ("token", "lavel", "active") + fields = ("token", "label", "active") def render_active(self, value): """ Render icons custom based on active value """ - # import pdb; pdb.set_trace() if value: # if `active` is True return format_html('') else: # if `active` is False diff --git a/webhook/templates/new_token.html b/webhook/templates/new_token.html new file mode 100644 index 0000000..03355c1 --- /dev/null +++ b/webhook/templates/new_token.html @@ -0,0 +1,34 @@ +{% extends "idhub/base_admin.html" %} +{% load i18n %} + +{% block content %} +

+ + {{ subtitle }} +

+{% load django_bootstrap5 %} +
+{% csrf_token %} +{% if form.errors %} + +{% endif %} +
+
+ {% bootstrap_form form %} +
+
+ + +
+{% endblock %} diff --git a/webhook/views.py b/webhook/views.py index 50f0b72..e2b2649 100644 --- a/webhook/views.py +++ b/webhook/views.py @@ -3,12 +3,13 @@ import json from django.shortcuts import get_object_or_404, redirect from django.utils.translation import gettext_lazy as _ from django.views.decorators.csrf import csrf_exempt -from django.views.generic.edit import DeleteView +from django.views.generic.edit import DeleteView, CreateView from django.views.generic.base import View from django.http import JsonResponse from django_tables2 import SingleTableView from pyvckit.verify import verify_vp, verify_vc from uuid import uuid4 +from django.urls import reverse_lazy from idhub.mixins import AdminView from idhub_auth.models import User @@ -25,7 +26,7 @@ def webhook_verify(request): return JsonResponse({'error': 'Invalid or missing token'}, status=401) token = auth_header.split(' ')[1].strip("'").strip('"') - tk = Token.objects.filter(token=token).first() + tk = Token.objects.filter(token=token, active=True).first() if not tk: return JsonResponse({'error': 'Invalid or missing token'}, status=401) @@ -61,7 +62,7 @@ def webhook_issue(request): return JsonResponse({'error': 'Invalid or missing token'}, status=401) token = auth_header.split(' ')[1].strip("'").strip('"') - tk = Token.objects.filter(token=token).first() + tk = Token.objects.filter(token=token, active=True).first() if not tk: return JsonResponse({'error': 'Invalid or missing token'}, status=401) @@ -158,10 +159,23 @@ class TokenStatusView(AdminView, DeleteView): return redirect('webhook:tokens') -class TokenNewView(AdminView, View): +class TokenNewView(AdminView, CreateView): + title = _("Token management") + section = "Credential" + subtitle = _('New Tokens') + icon = 'bi bi-key' + title = "Token" + template_name = "new_token.html" + model = Token + fields = ("label",) + success_url = reverse_lazy('webhook:tokens') + # def get(self, request, *args, **kwargs): + # self.check_valid_user() + # Token.objects.create(token=uuid4()) - def get(self, request, *args, **kwargs): - self.check_valid_user() - Token.objects.create(token=uuid4()) + # return redirect('webhook:tokens') - return redirect('webhook:tokens') + def form_valid(self, form): + form.instance.token = uuid4() + form.save() + return super().form_valid(form)