mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 15:50:03 +01:00 
			
		
		
		
	Manage auth token
This commit is contained in:
		| @@ -18,7 +18,7 @@ urlpatterns = [ | ||||
|     path('user/',views.UserListView.as_view(),name="user_list"), | ||||
|     path('user/<int:pk>',views.UserDetailView.as_view(),name="user_detail"), | ||||
|     path('user/<int:pk>/update',views.UserUpdateView.as_view(),name="user_update_profile"), | ||||
|     path('generate-auth-token/', views.GenerateAuthTokenView.as_view(), name='generate_auth_token'), | ||||
|     path('manage-auth-token/', views.ManageAuthTokens.as_view(), name='auth_token'), | ||||
|  | ||||
|     # API for the user autocompleter | ||||
|     path('user/user-autocomplete',views.UserAutocomplete.as_view(),name="user_autocomplete"), | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| from dal import autocomplete | ||||
| from django.contrib.auth.mixins import LoginRequiredMixin | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
| from django.views.generic import CreateView, ListView, DetailView, UpdateView, TemplateView | ||||
| from django.views.generic import CreateView, ListView, DetailView, UpdateView, RedirectView, TemplateView | ||||
| from django.contrib.auth.models import User | ||||
| from django.urls import reverse_lazy | ||||
| from django.db.models import Q | ||||
| @@ -140,20 +140,21 @@ class UserListView(LoginRequiredMixin,SingleTableView): | ||||
|         return context | ||||
|  | ||||
|  | ||||
| class GenerateAuthTokenView(LoginRequiredMixin, TemplateView): | ||||
| class ManageAuthTokens(LoginRequiredMixin, TemplateView): | ||||
|     """ | ||||
|     Génère un jeton d'authentification pour un utilisateur et détruit l'ancien | ||||
|     Affiche le jeton d'authentification, et permet de le regénérer | ||||
|     """ | ||||
|     template_name = "member/generate_auth_token.html" | ||||
|     model = Token | ||||
|     template_name = "member/manage_auth_tokens.html" | ||||
|  | ||||
|     def get_context_data(self): | ||||
|         context = super().get_context_data() | ||||
|     def get_context_data(self, **kwargs): | ||||
|         context = super().get_context_data(**kwargs) | ||||
|  | ||||
|         if Token.objects.filter(user=self.request.user).exists(): | ||||
|         if 'regenerate' in self.request.GET and Token.objects.filter(user=self.request.user).exists(): | ||||
|             Token.objects.get(user=self.request.user).delete() | ||||
|         token = Token.objects.create(user=self.request.user) | ||||
|  | ||||
|         context['token'] = token.key | ||||
|         context['token'] = Token.objects.get_or_create(user=self.request.user)[0] | ||||
|  | ||||
|         return context | ||||
|  | ||||
| class UserAutocomplete(autocomplete.Select2QuerySetView): | ||||
|   | ||||
| @@ -1,22 +0,0 @@ | ||||
| {% extends "base.html" %} | ||||
| {% load i18n static pretty_money django_tables2 %} | ||||
|  | ||||
| {% block content %} | ||||
|     Jeton : <strong>{{ token }}</strong> | ||||
|  | ||||
|     <div class="alert alert-danger"> | ||||
|     Conservez bien précieusement ce jeton d'authentification, car il ne vous sera jamais donné de nouveau. | ||||
|     Revenir sur cette page aura pour conséquence de révoquer tout ancien jeton d'authentification. | ||||
|     Cela peut entre autres mener à des plantages d'autres applications qui pouvaient utiliser ce jeton. | ||||
|     </div> | ||||
|  | ||||
|     <div class="alert alert-info"> | ||||
|     <h4>À quoi sert ce jeton ?</h4> | ||||
|  | ||||
|     Ce jeton vous permet de vous connecter à <a href="/api/">l'API de la Note Kfet</a>. | ||||
|     Il suffit pour cela d'ajouter en en-tête de vos requêtes <code>Authorization: Token <TOKEN></code> | ||||
|     pour pouvoir vous identifier. | ||||
|  | ||||
|     Une documentation de l'API arrivera ultérieurement. | ||||
|     </div> | ||||
| {% endblock %} | ||||
							
								
								
									
										27
									
								
								templates/member/manage_auth_tokens.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								templates/member/manage_auth_tokens.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| {% extends "base.html" %} | ||||
| {% load i18n static pretty_money django_tables2 %} | ||||
|  | ||||
| {% block content %} | ||||
|     <div class="alert alert-info"> | ||||
|     <h4>À quoi sert un jeton d'authentification ?</h4> | ||||
|  | ||||
|     Un jeton vous permet de vous connecter à <a href="/api/">l'API de la Note Kfet</a>.<br /> | ||||
|     Il suffit pour cela d'ajouter en en-tête de vos requêtes <code>Authorization: Token <TOKEN></code> | ||||
|     pour pouvoir vous identifier.<br /><br /> | ||||
|  | ||||
|     Une documentation de l'API arrivera ultérieurement. | ||||
|     </div> | ||||
|  | ||||
|     <div class="alert alert-info"> | ||||
|         <strong>{%trans  'Token' %} :</strong> {{ token.key }}<br /> | ||||
|         <strong>{%trans  'Created' %} :</strong> {{ token.created }} | ||||
|     </div> | ||||
|  | ||||
|     <div class="alert alert-warning"> | ||||
|         <strong>Attention :</strong> regénérer le jeton va révoquer tout accès autorisé à l'API via ce jeton ! | ||||
|     </div> | ||||
|  | ||||
|     <a href="{% url 'member:auth_token' %}?regenerate"> | ||||
|         <button class="btn btn-primary">{% trans 'Regenerate token' %}</button> | ||||
|     </a> | ||||
| {% endblock %} | ||||
| @@ -23,7 +23,9 @@ | ||||
|         <dd class="col-6 col-md-3">{{ object.user.note.balance | pretty_money }}</dd> | ||||
|     </dl> | ||||
|     <center> | ||||
|         <a class="btn btn-primary" href="{% url 'member:generate_auth_token' %}">{% trans 'Generate auth token' %}</a> | ||||
|         {% if object.user.pk == user.pk %} | ||||
|             <a class="btn btn-primary" href="{% url 'member:auth_token' %}">{% trans 'Manage auth token' %}</a> | ||||
|         {% endif %} | ||||
|         <a class="btn btn-primary" href="{% url 'member:user_update_profile' object.pk %}">{% trans 'Update Profile' %}</a> | ||||
|         <a class="btn btn-primary" href="{% url 'password_change' %}">{% trans 'Change password' %}</a> | ||||
|     </center> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user