Merge pull request 'label_token' (#8) from label_token into release

Reviewed-on: #8
This commit is contained in:
pedro 2025-01-30 13:02:14 +00:00
commit 052ee0f2b5
6 changed files with 118 additions and 11 deletions

View file

@ -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'),
),
]

View file

@ -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)

View file

@ -1,11 +1,12 @@
import django_tables2 as tables
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from webhook.models import Token
class ButtonColumn(tables.Column):
class ButtonRemoveColumn(tables.Column):
attrs = {
"a": {
"type": "button",
@ -25,7 +26,7 @@ class ButtonColumn(tables.Column):
class TokensTable(tables.Table):
delete = ButtonColumn(
delete = ButtonRemoveColumn(
verbose_name=_("Delete"),
linkify={
"viewname": "webhook:delete_token",
@ -33,11 +34,19 @@ class TokensTable(tables.Table):
},
orderable=False
)
# active = tables.Column(linkify=lambda record: reverse("webhook:status_token", kwargs={"pk": record.pk}))
active = tables.Column(
linkify={
"viewname": "webhook:status_token",
"args": [tables.A("pk")]
}
)
token = tables.Column(verbose_name=_("Token"), empty_values=())
label = tables.Column(verbose_name=_("Label"), empty_values=())
def render_view_user(self):
return format_html('<i class="bi bi-eye"></i>')
# def render_view_user(self):
# return format_html('<i class="bi bi-eye"></i>')
# def render_token(self, record):
# return record.get_memberships()
@ -63,5 +72,13 @@ class TokensTable(tables.Table):
class Meta:
model = Token
template_name = "idhub/custom_table.html"
fields = ("token", "view_user")
fields = ("token", "label", "active")
def render_active(self, value):
"""
Render icons custom based on active value
"""
if value: # if `active` is True
return format_html('<i class="bi bi-toggle-on text-primary"></i>')
else: # if `active` is False
return format_html('<i class="bi bi-toggle-off text-danger"></i>')

View file

@ -0,0 +1,34 @@
{% extends "idhub/base_admin.html" %}
{% load i18n %}
{% block content %}
<h3>
<i class="{{ icon }}"></i>
{{ subtitle }}
</h3>
{% load django_bootstrap5 %}
<form role="form" method="post">
{% csrf_token %}
{% if form.errors %}
<div class="alert alert-danger alert-icon alert-icon-border alert-dismissible" role="alert">
<div class="icon"><span class="mdi mdi-close-circle-o"></span></div>
<div class="message">
{% for field, error in form.errors.items %}
{{ error }}<br />
{% endfor %}
<button class="btn-close" type="button" data-dismiss="alert" aria-label="Close"></button>
</div>
</div>
{% endif %}
<div class="row">
<div class="col-sm-4">
{% bootstrap_form form %}
</div>
</div>
<div class="form-actions-no-box">
<a class="btn btn-grey" href="{% url 'webhook:tokens' %}">{% translate "Cancel" %}</a>
<input class="btn btn-green-admin" type="submit" name="submit" value="{% translate 'Save' %}" />
</div>
</form>
{% endblock %}

View file

@ -11,4 +11,5 @@ urlpatterns = [
path('tokens/', views.WebHookTokenView.as_view(), name='tokens'),
path('tokens/new', views.TokenNewView.as_view(), name='new_token'),
path('tokens/<int:pk>/del', views.TokenDeleteView.as_view(), name='delete_token'),
path('tokens/<int:pk>/status', views.TokenStatusView.as_view(), name='status_token'),
]

View file

@ -3,13 +3,14 @@ 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.core.cache import cache
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
@ -30,7 +31,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)
@ -70,7 +71,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)
@ -153,10 +154,39 @@ class TokenDeleteView(AdminView, DeleteView):
return redirect('webhook:tokens')
class TokenNewView(AdminView, View):
class TokenStatusView(AdminView, DeleteView):
model = Token
def get(self, request, *args, **kwargs):
self.check_valid_user()
Token.objects.create(token=uuid4())
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
if self.object.active:
self.object.active = False
else:
self.object.active = True
self.object.save()
return redirect('webhook:tokens')
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())
# return redirect('webhook:tokens')
def form_valid(self, form):
form.instance.token = uuid4()
form.save()
return super().form_valid(form)