Skip to main content

App for Django to provide a CRUD REST interface for GCP's IoT Core

Project description

https://img.shields.io/pypi/v/dj_gcp_iotdevice.svg Gitlab pipeline status Documentation Status

Provides a CRDL (Create, Retrieve, Destroy, List) interface to GCP IoT Core

Getting Started

If you are not familiar with GCP IoT Core then please first read the following:

First create an IoT device registry and then make sure that the service account assigned to your service (VM, Cloud Run, App Engine) has enough GCP permissions to create/read/delete/list from GCP IoT Core.

Installation

Install dj_gcp_iotdevice from pip

$ pip install dj_gcp_iotdevice

Add to your top level apps.py

from dj_gcp_iotdevice.apps import GCPIoTDeviceConfig

class MyProjectDeviceConfig(GCPIoTDeviceConfig):
    registry = 'my-iot-registry'
    location = 'us-central1'
    project = 'my-project-id'

Add the new app config to your installed apps

INSTALLED_APPS = [
    ...
    'apps.MyProjectDeviceConfig',
]

Add the provided urls to your list of urls

urlpatterns = [
    ...
    path('', include('dj_gcp_iotdevice.urls')),
]

Run the migrate command to create the new permissions that you can protect the API with

python manage.py migrate

API

The following endpoints will be accessible

POST /devices/
GET /devices/{id}
DELETE /devices/{id}
GET /devices/

To create a new device you will need to generate a private/public keypair using the following commands

openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem

Take the contents of the rsa_public.pem and use that for the public_key in the API. Make sure to use \n characters for the line feeds.

The following snippet is the openapi spec for the new devices api

/devices/:
    get:
        operationId: devices_list
        summary: Used to list all the devices in the registry.
        description: |-
            :raises PermissionDenied: Likely bad coordinates to registry or not enough permissions
                                    to list devices from registry.
        parameters: []
        responses:
            '200':
            description: ''
            schema:
                type: array
                items:
                $ref: '#/definitions/Device'
        tags:
            - devices
    post:
        operationId: devices_create
        summary: Used to add a new IoT device to the registry.
        description: |-
            :raises ParseError: Bad data provided.  Likely a bad public key.
            :raises NotAcceptable: Could not add device.  Probably device Id already exists.
            :raises PermissionDenied: Likely wrong GCP coordinates or insufficient permissions
                                    on GCP to add devices to the registry.
        parameters:
            - name: data
            in: body
            required: true
            schema:
                $ref: '#/definitions/Device'
        responses:
            '201':
            description: ''
            schema:
                $ref: '#/definitions/Device'
        tags:
            - devices
        parameters: []
/devices/{id}/:
    get:
        operationId: devices_read
        summary: Used to get one device from the registry.
        description: |-
            :raises PermissionDenied: Likely bad coordinates to registry or not enough
                                    permissions to read devices from registry.
            :raises NotFound: Device does not exist.
        parameters: []
        responses:
            '200':
            description: ''
            schema:
                $ref: '#/definitions/Device'
        tags:
            - devices
    delete:
        operationId: devices_delete
        summary: Used to remove a device from the registry.
        description: |-
            :raises PermissionDenied: Likely bad coordinates to registry or not enough
                                    permissions to remove devices from the registry.
            :raises NotFound: Device does not exist.
        parameters: []
        responses:
            '204':
            description: ''
        tags:
            - devices
        parameters:
        - name: id
            in: path
            required: true
            type: string

Permissions

Modifying the IoT device registry is not something you want everyone to be able to do so this app also adds model permissions you can assign to groups or to individual users that can limit what the user is able to do.

In the Admin page under dj_gcp_iotdevice there are 4 permissions: can add, can change, can delete, and can view. Use these to control what parts of the CRDL a user or group can access.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dj_gcp_iotdevice-0.3.1.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

dj_gcp_iotdevice-0.3.1-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file dj_gcp_iotdevice-0.3.1.tar.gz.

File metadata

  • Download URL: dj_gcp_iotdevice-0.3.1.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.4

File hashes

Hashes for dj_gcp_iotdevice-0.3.1.tar.gz
Algorithm Hash digest
SHA256 83629dd9df0e22f4f037718234342e115641efbe78bb27ed7fde7d3ffe22ab92
MD5 7c11d6eff2278e6e3f76708197f97ff8
BLAKE2b-256 2a89eb4689bafebaf1ba197fd4dd11920c4f27c1b010c83f93fc0c9a91aacfdf

See more details on using hashes here.

File details

Details for the file dj_gcp_iotdevice-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: dj_gcp_iotdevice-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.4

File hashes

Hashes for dj_gcp_iotdevice-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1f55d5104d9f8d432a951ec42570b115cc6295f93093a5aea96d3408b1bb1683
MD5 4e6111fa1859ec819da98f07e8256a37
BLAKE2b-256 5be5166b5c5bdc45a3913603bcd339f7097816ac539dd52e2d4f7f643fad57d5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page