Skip to content

doorman

Field Value
Purpose Secrets management daemon — pulls secrets from Clerk plugins and stores them in an encrypted in-memory cache with TTL
Module github.com/AmadlaOrg/doorman
Status Early
Repo AmadlaOrg/doorman
Go Version 1.24.0

Commands

Command Status Description
doorman settings Working Manage doorman configuration
doorman collection Stubbed Collection management (commented out in code)
doorman compose Stubbed Entity composition (commented out in code)
doorman start Planned Start the secrets daemon
doorman resolve Planned Resolve secret references in entity data

Dependencies

Library Purpose
LibraryUtils IPC (Unix sockets / named pipes), encryption, configuration
LibraryFramework CLI framework (Cobra wrapper)

External Dependencies

Package Purpose
github.com/dgraph-io/ristretto High-performance in-memory cache with TTL
github.com/spf13/cobra CLI framework
golang.org/x/sys Platform-specific system calls

Pipeline Position

doorman sits between hery and raise in the pipeline. It receives entity data containing secret references and resolves them to actual values before passing data downstream.

hery → [doorman] → raise → lay → weaver → judge
    ┌────┴────────┐
    │ Clerk       │
    │ Plugins     │
    │ (vault,     │
    │  aws, ...)  │
    └─────────────┘

Architecture

Core Flow

Secret Source (Vault, AWS, KeePassXC, ...) → Clerk Plugin → Doorman Daemon → IPC → Client App

Package Structure

main.go                 # CLI entry via LibraryFramework
internal/
├── cache/              # In-memory cache with platform-specific encryption
│   └── cache.go        # Ristretto cache + encryption wrapper
└── cmd/                # CLI subcommands
    └── settings.go     # Settings command implementation

Cache Encryption

The in-memory cache encrypts secrets at rest using platform-specific mechanisms:

Platform Mechanism Status
Linux TPM-backed AES-GCM Planned (currently XOR placeholder)
Windows DPAPI Planned

Security Note

Cache encryption currently uses XOR as a placeholder. Production use requires proper AES-GCM backed by TPM or platform keystore.

Current Gaps

  • Only settings command is functional; collection and compose are commented out
  • No start (daemon) or resolve commands yet
  • Cache encryption uses XOR placeholder — needs AES-GCM for production
  • TPM integration is incomplete (TODO in cache.go)
  • No Clerk plugin loading or IPC communication yet
  • No tests beyond basic structure

Key Files

Path Purpose
main.go CLI entry point
internal/cache/cache.go Encrypted in-memory cache implementation
internal/cmd/settings.go Settings command
go.mod Dependencies and local replace directives