Skip to content

Hogeyama/crypto-wrapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cryptow

概要

cryptow は gocryptfspass を組み合わせ、既存の CLI ツールを暗号化ストレージ越しに安全に利用するための Deno 製ラッパーです。プロファイル定義に従って暗号化ストアをマウントし、必要に応じてアンマウントすることで秘匿情報の平文放置を防ぎます。

主な機能

  • プロファイル単位で対象コマンド・環境変数・マウント設定を管理
  • gocryptfs のマウント/アンマウントを自動化し、PID ファイルと実マウント状態で管理
  • pass からのパスワード取得による認証情報インジェクション
  • ~/.local/share/cryptow/log/cryptow.log への操作ログ保存(XDG 環境変数に追従)

必要条件

  • Deno 1.45 以降(deno --version で確認)
  • gocryptfs バイナリ(暗号化ディレクトリのマウントに使用)
  • passpass show でシークレットを取得)
  • umount が利用可能な Linux 環境を想定

インストール

  1. リポジトリを取得します。
    git clone https://github.com/Hogeyama/crypto-wrapper.git
    cd cryptow
  2. Deno で実行ファイルをインストールします。
    deno install -A --name cryptow src/main.ts

開発中に直接実行する場合は deno task dev を利用できます。

プロファイル設定

設定ファイルは既定で ~/.config/cryptow/profiles.yaml に配置します(XDG_CONFIG_HOMECRYPTOW_CONFIG_DIR を利用すると位置を変えられます)。

最小例:

profiles:
  codex:
    command:
      - ~/.local/bin/codex
    injectors:
      - type: gocryptfs
        password_entry: gocryptfs/codex
        mount_dir: ~/.codex
      - type: env
        password_entry: openai_api_key
        env: OPENAI_API_KEY

各プロファイルは以下の項目を持ちます。

  • command: 実行するバイナリと引数(文字列または配列)。~ や環境変数は自動展開されます。
  • env: 任意の環境変数上書きマップ。
  • injectors: 少なくとも 1 つ以上のインジェクタを定義します。
    • type: gocryptfs は暗号化ストアをマウントします。cipher_dirmount_dir を省略すると ~/.local/share/cryptow/profiles/<name>/cipher~/.local/share/cryptow/mounts/<name> が既定値になります。password_entrypass 内のエントリ名です。
    • type: envpass から取得したシークレットを環境変数に注入します。env(または variable/name)で変数名を指定します。
  • working_dir / cwd: コマンド実行時のカレントディレクトリ。

データディレクトリは ~/.local/share/cryptow(または XDG_DATA_HOME/CRYPTOW_DATA_DIR)配下に作成され、マウント用ディレクトリ・PID ファイル・ログを管理します。

使い方

  • プロファイル一覧とマウント状態を確認:
    cryptow list
    cryptow list --json
  • 暗号化ストアをマウントのみ実施:
    cryptow mount <profile> [--dry-run]
  • 暗号化ストアを初期化:
    cryptow init <profile> [--dry-run] [--gen-pass]
  • マウント解除:
    cryptow unmount <profile> [--dry-run]
  • マウントしてコマンドを実行:
    cryptow run <profile> [--dry-run] [-- <追加引数>]
    実行時には CRYPTOW_PROFILE が自動的に設定されます。対象プロファイルが既にマウント済みの場合はマウントを再利用し、実行後も維持します。

--dry-run は実行予定のコマンドや環境変数上書きを出力するのみで実際のマウントやコマンド実行は行いません。

初回利用時は cryptow init <profile>gocryptfs.conf を作成してください。mount / run は未初期化の場合、 cryptow init <profile> を先に実行するよう案内して終了します。

cryptow init --gen-pass を使うと、password_entry に対して pass generate <entry> 32 を実行してから gocryptfs 初期化を行います。既存の gocryptfs.conf または既存の pass エントリがある場合は安全のためエラー終了します。

シェル補完

bash / zsh / fish 向けの補完スクリプトを生成できます。

# bash (~/.bashrc に追記)
source <(cryptow completions bash)

# zsh (~/.zshrc に追記)
source <(cryptow completions zsh)

# fish (~/.config/fish/config.fish に追記)
source (cryptow completions fish | psub)

サブコマンド名・オプションが補完されます。bash ではプロファイル名も補完されます。

注意: zsh ではプロファイル名の補完が効きません(cliffy の zsh 補完生成のバグ: サブコマンドの位置引数に対するカスタム補完が出力されない)。

ログ

操作ログは ~/.local/share/cryptow/log/cryptow.log(XDG または CRYPTOW_DATA_DIR に従って解決)に追記されます。トラブルシュート時はこのファイルを確認してください。

開発・メンテナンス

  • コードフォーマットと静的解析: deno fmt / deno lint
  • 型チェック: deno check src/main.ts
  • E2E テスト: deno test -A tests/e2e_*.ts

バグ報告や改善提案は Issue や Pull Request で歓迎します。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors