Skip to content

Commit

Permalink
api: Extended REST API
Browse files Browse the repository at this point in the history
  • Loading branch information
strongX509 committed Apr 11, 2017
1 parent fab6baf commit c738056
Show file tree
Hide file tree
Showing 9 changed files with 166 additions and 3 deletions.
12 changes: 11 additions & 1 deletion apps/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,24 @@

from apps.core.api_views import IdentityViewSet, SessionViewSet
from apps.swid.api_views import EntityViewSet, TagViewSet, TagAddView, SwidMeasurementView

from apps.devices.api_views import ProductViewSet, DeviceViewSet
from apps.packages.api_views import PackageViewSet, VersionViewSet
from apps.filesystem.api_views import AlgorithmViewSet, DirectoryViewSet, FileViewSet, FileHashViewSet

# Create router
router = routers.DefaultRouter()

# Register resources
router.register(r'identities', IdentityViewSet)
router.register(r'sessions', SessionViewSet)
router.register(r'products', ProductViewSet)
router.register(r'devices', DeviceViewSet)
router.register(r'packages', PackageViewSet)
router.register(r'versions', VersionViewSet)
router.register(r'directories', DirectoryViewSet)
router.register(r'files', FileViewSet)
router.register(r'file-hashes', FileHashViewSet)
router.register(r'algorithms', AlgorithmViewSet)
router.register(r'swid-entities', EntityViewSet)
router.register(r'swid-tags', TagViewSet)

Expand Down
1 change: 1 addition & 0 deletions apps/core/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
class IdentityViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Identity
serializer_class = serializers.IdentitySerializer
filter_fields = ('type', 'data',)


class SessionViewSet(viewsets.ReadOnlyModelViewSet):
Expand Down
4 changes: 2 additions & 2 deletions apps/core/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from rest_framework import serializers

from apps.api.mixins import DynamicFieldsMixin
from apps.devices.serializers import DeviceSerializer
from . import models


Expand All @@ -14,8 +15,7 @@ class Meta(object):


class SessionSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
# PrimaryKey fields are only needed until endpoints exists
device = serializers.PrimaryKeyRelatedField()
device = DeviceSerializer()

class Meta(object):
model = models.Session
Expand Down
18 changes: 18 additions & 0 deletions apps/devices/api_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

from rest_framework import viewsets

from . import models, serializers


class ProductViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Product
serializer_class = serializers.ProductSerializer
filter_fields = ('name',)


class DeviceViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Device
serializer_class = serializers.DeviceSerializer
filter_fields = ('value', 'description', 'product', 'created', 'trusted',)
21 changes: 21 additions & 0 deletions apps/devices/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

from rest_framework import serializers

from apps.api.mixins import DynamicFieldsMixin
from . import models


class ProductSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
class Meta(object):
model = models.Product
fields = ('id', 'uri', 'name')


class DeviceSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
product = ProductSerializer()

class Meta(object):
model = models.Device
fields = ('id', 'uri', 'value', 'description', 'product', 'created', 'trusted')
31 changes: 31 additions & 0 deletions apps/filesystem/api_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

from rest_framework import viewsets

from . import models, serializers


class AlgorithmViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Algorithm
serializer_class = serializers.AlgorithmSerializer
filter_fields = ('name',)


class DirectoryViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Directory
serializer_class = serializers.DirectorySerializer
filter_fields = ('path',)


class FileViewSet(viewsets.ReadOnlyModelViewSet):
model = models.File
serializer_class = serializers.FileSerializer
filter_fields = ('name', 'directory', 'directory__path',)


class FileHashViewSet(viewsets.ReadOnlyModelViewSet):
model = models.FileHash
serializer_class = serializers.FileHashSerializer
filter_fields = ('file', 'file__name', 'file__directory__path', 'version',
'device', 'size', 'algorithm', 'hash', 'mutable',)
41 changes: 41 additions & 0 deletions apps/filesystem/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

from rest_framework import serializers

from apps.api.mixins import DynamicFieldsMixin
from apps.packages.serializers import VersionSerializer
from apps.devices.serializers import DeviceSerializer
from . import models


class AlgorithmSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
class Meta(object):
model = models.Algorithm
fields = ('id', 'uri', 'name')


class DirectorySerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
class Meta(object):
model = models.Directory
fields = ('id', 'uri', 'path')


class FileSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
directory = DirectorySerializer()

class Meta(object):
model = models.File
fields = ('id', 'uri', 'name', 'directory')


class FileHashSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
file = FileSerializer()
version = VersionSerializer()
device = DeviceSerializer()
algorithm = AlgorithmSerializer()

class Meta(object):
model = models.FileHash
fields = ('id', 'uri', 'file', 'version', 'device', 'size', 'algorithm',
'hash', 'mutable')
18 changes: 18 additions & 0 deletions apps/packages/api_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

from rest_framework import viewsets

from . import models, serializers


class PackageViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Package
serializer_class = serializers.PackageSerializer
filter_fields = ('name',)


class VersionViewSet(viewsets.ReadOnlyModelViewSet):
model = models.Version
serializer_class = serializers.VersionSerializer
filter_fields = ('package', 'product', 'release', 'security', 'blacklist', 'time',)
23 changes: 23 additions & 0 deletions apps/packages/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literals

from rest_framework import serializers

from apps.api.mixins import DynamicFieldsMixin
from apps.devices.serializers import ProductSerializer
from . import models


class PackageSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
class Meta(object):
model = models.Package
fields = ('id', 'uri', 'name')


class VersionSerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
package = PackageSerializer()
product = ProductSerializer()

class Meta(object):
model = models.Version
fields = ('id', 'uri', 'package', 'product', 'release', 'security', 'blacklist', 'time')

0 comments on commit c738056

Please sign in to comment.