Skip to main content

A custom Django field for storing and securely accessing a 1Password vault item.

Project description

django-opfield

PyPI PyPI - Python Version Django Version

A custom Django field that integrates with the 1Password op CLI to securely access secrets via the op:// secret reference URI.

Requirements

Getting Started

  1. Install the package from PyPI:

    python -m pip install django-opfield
    
  2. Install the 1Password op CLI tool, making sure it is callable from wherever your application is running.

  3. Create a 1Password service account and make the service account's token available to your application.

    Choose one option:

    • Set the OP_SERVICE_ACCOUNT_TOKEN environment variable

    • Configure in your application's settings.py:

      # settings.py
      DJANGO_OPFIELD = {
          # Explicitly set here only as an example
          # Use whatever configuration/environment library you prefer
          # (`python-dotenv`, `django-environs`, `environs`, etc.)
          "OP_SERVICE_ACCOUNT_TOKEN": "super-secret-token",
      }
      

Usage

OPField allows Django models to securely access secrets stored in a 1Password vault, enabling the integration of sensitive data without exposing it directly in your codebase. Secrets are stored using the op:// URI scheme and can be retrieved dynamically using a corresponding model attribute, <field_name>_secret.

Defining a model

First, let's define a model that includes the OPField. This field will store the reference to the secret in 1Password, not the secret itself.

from django.db import models

from django_opfield.fields import OPField


class APIService(models.Model):
    name = models.CharField(max_length=255)
    api_key = OPField()

    def __str__(self):
        return self.name

Accessing the secret

Assume you have a secret API key stored in a 1Password vault named "my_vault" under the item "my_api" with the field "api_key". Here's how you can store and access this secret within your Django project:

>>> from example.models import APIService
>>> my_api = APIService.objects.create(
...     name="My API", api_key="op://my_vault/my_api/api_key"
... )
>>> print(my_api)
<APIService: My API>
>>> print(my_api.name)
'My API'
>>> print(my_api.api_key)
'op://my_vault/my_api/api_key'
>>> # Retrieving the actual secret value is done using the automatically generated '_secret' attribute
>>> print(my_api.api_key_secret)
'your_super_secret_api_token_here'

Storing references, not secrets

Only the URI reference to the secret is ever stored and exposed in the Django admin interface and the database. The actual secret itself is never stored and is only retrieved dynamically when accessed. This approach enables secure management and access to secrets throughout your Django application, safeguarding against potential security vulnerabilities associated with direct exposure.

Documentation

Please refer to the documentation for more information.

License

django-opfield is licensed under the MIT license. See the LICENSE file for more information.

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

django_opfield-0.2.0.tar.gz (17.2 kB view details)

Uploaded Source

Built Distribution

django_opfield-0.2.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file django_opfield-0.2.0.tar.gz.

File metadata

  • Download URL: django_opfield-0.2.0.tar.gz
  • Upload date:
  • Size: 17.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for django_opfield-0.2.0.tar.gz
Algorithm Hash digest
SHA256 77d6b604b977a7e1339f1d49fa9c7e2c4bdb9b84dc39fe6377d69d9bf92e79fd
MD5 86cd4075cf66b169d30119d43c85f38e
BLAKE2b-256 769ae67daafd80b8ec5c110b3e2f5d7bc96026e2ee6892f722b2b969652d74c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_opfield-0.2.0.tar.gz:

Publisher: release.yml on westerveltco/django-opfield

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_opfield-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: django_opfield-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for django_opfield-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7556dec2628245751b29da621a6af8b3787d4afde0d8c03e017622b4e9664aba
MD5 732292329ee8f199059bafabc8ccdfbc
BLAKE2b-256 d7a82f4c58821dcc8d0745a3ed21b1735c7f730a119a137a47dcc9a190220e6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_opfield-0.2.0-py3-none-any.whl:

Publisher: release.yml on westerveltco/django-opfield

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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