mirror of https://gitlab.crans.org/bde/nk20
Add logs to the API (this right should only be given to superusers)
This commit is contained in:
parent
38ad870939
commit
bc97eb1eb4
|
@ -7,6 +7,7 @@ from rest_framework import routers, serializers, viewsets
|
||||||
from activity.api.urls import register_activity_urls
|
from activity.api.urls import register_activity_urls
|
||||||
from member.api.urls import register_members_urls
|
from member.api.urls import register_members_urls
|
||||||
from note.api.urls import register_note_urls
|
from note.api.urls import register_note_urls
|
||||||
|
from logs.api.urls import register_logs_urls
|
||||||
|
|
||||||
|
|
||||||
class UserSerializer(serializers.ModelSerializer):
|
class UserSerializer(serializers.ModelSerializer):
|
||||||
|
@ -41,6 +42,7 @@ router.register('user', UserViewSet)
|
||||||
register_members_urls(router, 'members')
|
register_members_urls(router, 'members')
|
||||||
register_activity_urls(router, 'activity')
|
register_activity_urls(router, 'activity')
|
||||||
register_note_urls(router, 'note')
|
register_note_urls(router, 'note')
|
||||||
|
register_logs_urls(router, 'logs')
|
||||||
|
|
||||||
app_name = 'api'
|
app_name = 'api'
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from ..models import Changelog
|
||||||
|
|
||||||
|
|
||||||
|
class ChangelogSerializer(serializers.ModelSerializer):
|
||||||
|
"""
|
||||||
|
REST API Serializer for Changelog types.
|
||||||
|
The djangorestframework plugin will analyse the model `Changelog` and parse all fields in the API.
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Changelog
|
||||||
|
fields = '__all__'
|
|
@ -0,0 +1,11 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from .views import ChangelogViewSet
|
||||||
|
|
||||||
|
|
||||||
|
def register_logs_urls(router, path):
|
||||||
|
"""
|
||||||
|
Configure router for Activity REST API.
|
||||||
|
"""
|
||||||
|
router.register(path, ChangelogViewSet)
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from rest_framework import viewsets
|
||||||
|
|
||||||
|
from .serializers import ChangelogSerializer
|
||||||
|
from ..models import Changelog
|
||||||
|
|
||||||
|
|
||||||
|
class ChangelogViewSet(viewsets.ModelViewSet):
|
||||||
|
"""
|
||||||
|
REST API View set.
|
||||||
|
The djangorestframework plugin will get all `Changelog` objects, serialize it to JSON with the given serializer,
|
||||||
|
then render it on /api/logs/
|
||||||
|
"""
|
||||||
|
queryset = Changelog.objects.all()
|
||||||
|
serializer_class = ChangelogSerializer
|
|
@ -56,6 +56,12 @@ class Changelog(models.Model):
|
||||||
max_length=16,
|
max_length=16,
|
||||||
null=False,
|
null=False,
|
||||||
blank=False,
|
blank=False,
|
||||||
|
choices=[
|
||||||
|
('create', _('create')),
|
||||||
|
('edit', _('edit')),
|
||||||
|
('delete', _('delete')),
|
||||||
|
],
|
||||||
|
default='edit',
|
||||||
verbose_name=_('action'),
|
verbose_name=_('action'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ def save_object(sender, instance, **kwargs):
|
||||||
else:
|
else:
|
||||||
user = note.get().user
|
user = note.get().user
|
||||||
|
|
||||||
|
# noinspection PyProtectedMember
|
||||||
if user is not None and instance._meta.label_lower == "auth.user" and previous:
|
if user is not None and instance._meta.label_lower == "auth.user" and previous:
|
||||||
# On n'enregistre pas les connexions
|
# On n'enregistre pas les connexions
|
||||||
if instance.last_login != previous.last_login:
|
if instance.last_login != previous.last_login:
|
||||||
|
@ -80,8 +81,8 @@ def save_object(sender, instance, **kwargs):
|
||||||
model = instance.__class__
|
model = instance.__class__
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
previous_json = JSONRenderer().render(CustomSerializer(previous).data)
|
previous_json = JSONRenderer().render(CustomSerializer(previous).data).decode("UTF-8")
|
||||||
instance_json = JSONRenderer().render(CustomSerializer(instance).data)
|
instance_json = JSONRenderer().render(CustomSerializer(instance).data).decode("UTF-8")
|
||||||
|
|
||||||
if previous_json == instance_json:
|
if previous_json == instance_json:
|
||||||
# Pas de log s'il n'y a pas de modification
|
# Pas de log s'il n'y a pas de modification
|
||||||
|
@ -115,7 +116,7 @@ def delete_object(sender, instance, **kwargs):
|
||||||
model = instance.__class__
|
model = instance.__class__
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
instance_json = JSONRenderer().render(CustomSerializer(instance).data)
|
instance_json = JSONRenderer().render(CustomSerializer(instance).data).decode("UTF-8")
|
||||||
|
|
||||||
Changelog.objects.create(user=user,
|
Changelog.objects.create(user=user,
|
||||||
ip=ip,
|
ip=ip,
|
||||||
|
|
|
@ -140,6 +140,7 @@ REST_FRAMEWORK = {
|
||||||
'rest_framework.permissions.DjangoModelPermissions'
|
'rest_framework.permissions.DjangoModelPermissions'
|
||||||
],
|
],
|
||||||
'DEFAULT_AUTHENTICATION_CLASSES': [
|
'DEFAULT_AUTHENTICATION_CLASSES': [
|
||||||
|
'rest_framework.authentication.SessionAuthentication',
|
||||||
'rest_framework.authentication.TokenAuthentication',
|
'rest_framework.authentication.TokenAuthentication',
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue