Skip to main content

Dank One Time Password - CLI and TUI TOTP/Authenticator storage

Project description

DOTP

Dank One Time Password - A CLI and TUI application for secure TOTP/Authenticator storage.

Tests Lint

TUI

Cli List

Features

  • Encrypted vault storage with password protection
  • CLI commands for managing TOTP entries
  • Interactive TUI for quick access
  • Import/Export support for Aegis and otpauth URI formats
  • Real-time token generation with auto-refresh
  • Search and filter capabilities with fuzzy matching
  • Clipboard integration
  • Clean, modern terminal UI with progress indicators

Installation

Using uvx (Recommended)

Run DOTP without installation:

uvx dotp --help

Global install

uv tool install dotp

Pip install

pip install dotp

Using uv (for development)

git clone https://github.com/rochacbruno/dotp.git
cd dotp
uv sync
uv run dotp --help

Quick Start

Initialize a vault

uvx dotp init

This creates an encrypted vault at ~/.config/dotp/.vault.dotp (or $XDG_CONFIG_HOME/dotp/.vault.dotp).

Add an entry

uvx dotp add --label GitHub --secret YOURBASE32SECRET

Or interactively:

uvx dotp add --label GitHub
# You'll be prompted for the secret

List all entries

uvx dotp list

Get a specific token

uvx dotp get GitHub

For scripting (clean output):

DOTP_PASSWD=123456 uvx dotp get GitHub | wl-copy

Scripting tip

~/.local/bin/o

#!/usr/bin/bash
DOTP_PASSWD=1234 uvx dotp get $@ | wl-copy

Then you can simply run on terminal

o Google

and get the code copied to clipboard.

If you are running on DMS, you can add the command runner plugin and then open the launcher and do >o dropbox -> run in bg.

Import from file

DOTP supports importing from various formats. See the sample files in the repository:

# From otpauth URI format
uvx dotp import otpauth_sample.txt

# From Aegis JSON format
uvx dotp import aegis.json --aegis

Export to file

# To otpauth URI format
uvx dotp export backup.txt

# To Aegis JSON format
uvx dotp export backup.json --aegis

CLI

TUI Mode

Launch the interactive TUI by running dotp without arguments:

uvx dotp
# or with password from environment
DOTP_PASSWD=123456 uvx dotp
# or with custom vault path
uvx dotp --path /tmp/my-vault.dotp
# or with environment variable
DOTP_VAULT=/tmp/my-vault.dotp uvx dotp

TUI Features

  • Type to search: Start typing to filter entries in real-time
  • Enter in search: Focus results to navigate with arrow keys
  • Enter on item: Copy selected token to clipboard
  • Ctrl+Enter: Copy token and close application
  • Ctrl+A: Add a new entry
  • Ctrl+Q: Quit
  • Escape: Clear search
  • Backspace: Return to search when navigating results

Configuration

Create a config file at ~/.config/dotp/config.toml:

# Path to your vault file (optional)
vault_path = "/path/to/.vault.dotp"

# Close TUI immediately after copying (default: false)
close_on_copy = true

# Clipboard command to use (default: wl-copy)
clipboard_command = "wl-copy"

Environment Variables

  • DOTP_PASSWD: Set vault password (useful for scripting)
  • DOTP_VAULT: Set vault file path (alternative to --path or config file)

Vault Location Priority

DOTP looks for the vault in this order:

  1. --path argument
  2. DOTP_VAULT environment variable
  3. vault_path in config file
  4. .vault.dotp in current directory
  5. ~/.config/dotp/.vault.dotp

Security

  • Vault is encrypted using Fernet (symmetric encryption)
  • Password is derived using PBKDF2HMAC with SHA256
  • 480,000 iterations (OWASP recommended minimum)
  • 16-byte random salt per vault

Development

Running tests

uv sync --extra dev
uv run pytest

Running with coverage

uv run pytest --cov=src/dotp --cov-report=html

Linting

uvx ruff check src/
uvx ruff format src/

Stack

License

AGPL License - See LICENSE file for details

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

dotp-0.1.4.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dotp-0.1.4-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file dotp-0.1.4.tar.gz.

File metadata

  • Download URL: dotp-0.1.4.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for dotp-0.1.4.tar.gz
Algorithm Hash digest
SHA256 5c9b60543d0c470d9cd927bdde5a12b24a6e0805822bc223c0c8aee10c580219
MD5 a0c0062b6578404ddcd70938f201bdfb
BLAKE2b-256 4b86b028b5e2a8045b467faa841937bae283a0e83220de8f4eedf3eedc807457

See more details on using hashes here.

File details

Details for the file dotp-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: dotp-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for dotp-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 dba54d3cfa9475ba8d8c116010329a9b6ceafa37a983ee6ca4cb9948ef5e0a7e
MD5 47fc70cb94c550a6814797e957442cd9
BLAKE2b-256 5f9ec8fd89c5b8415db8ab209ee7b1dbe1622c9f0b231952d8a7b1155561ffad

See more details on using hashes here.

Supported by

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