pwkit 0.1.0

A secure CLI password generator with template support for environment files
# pwkit

カスタマイズ可能なオプションとテンプレート機能を備えた安全なパスワードツールキット

[English]README.md | 日本語

## 特徴

- 🔐 安全なランダムパスワード生成
- 📝 環境変数ファイル用のテンプレートベース生成
- 📋 自動クリップボードコピー
- 🧾 QRコード生成
- ⚙️ 高度なカスタマイズ(長さ、記号、数字)
- 🔁 バッチ生成サポート

## インストール

```bash
cargo install --path .
```

## 使い方

### 基本的なパスワード生成

単一のパスワードを生成(デフォルト:数字を含む20文字):

```bash
pwkit
```

カスタム長さで生成:

```bash
pwkit --length 32
```

記号を含めて生成:

```bash
pwkit --symbols --length 24
```

複数のパスワードを生成:

```bash
pwkit --batch 5
```

### テンプレートモード(環境変数ファイル生成)

テンプレートモードは、複数のパスワードを持つ環境変数ファイルを生成する際に、関連する認証情報が同じパスワードを共有するように設定するのに最適です。

#### テンプレート構文

テンプレートファイルでプレースホルダーを使用します:

```
{{PWGEN}}                    # 匿名パスワード(20文字、デフォルト設定)
{{PWGEN:name}}               # 名前付きパスワード(同じ名前で再利用)
{{PWGEN:name:32}}            # カスタム長(32文字)
{{PWGEN:name:32:symbols}}    # 記号を含む
```

**重要**: 同じ名前のプレースホルダーは同じパスワードを使用します!

#### テンプレート例

テンプレートファイル `template.env` を作成:

```bash
# データベース設定
DB_PASSWORD={{PWGEN:db_password}}
DB_USERNAME=admin

# アプリケーション設定
APP_SECRET={{PWGEN:app_secret:32:symbols}}
API_KEY={{PWGEN:api_key:64}}

# 同じパスワードを使用する複数のサービス
SERVICE_A_PASSWORD={{PWGEN:shared_pass}}
SERVICE_B_PASSWORD={{PWGEN:shared_pass}}
SERVICE_C_PASSWORD={{PWGEN:shared_pass}}
```

環境変数ファイルを生成:

```bash
# 標準出力に表示
pwkit --template template.env

# ファイルに保存
pwkit --template template.env --env-output .env
```

#### 実例:Ansible Automation Platform

テンプレートファイル `aap.env.template`:

```bash
# データベース
postgresql_admin_password={{PWGEN:db_password}}

# AAP Gateway
gateway_admin_password={{PWGEN:admin_password}}
gateway_pg_password={{PWGEN:db_password}}

# AAP Controller
controller_admin_password={{PWGEN:admin_password}}
controller_pg_password={{PWGEN:db_password}}

# EDA Controller
eda_admin_password={{PWGEN:admin_password}}
eda_pg_password={{PWGEN:db_password}}
```

生成:

```bash
pwkit --template aap.env.template --env-output aap.env
```

これにより以下が保証されます:
- すべての管理者パスワードが同じ
- すべてのデータベースパスワードが同じ
- ただし、管理者パスワードとデータベースパスワードは異なる

### その他のオプション

#### QRコード生成

パスワードを生成してQRコードとして表示:

```bash
pwkit --qrcode --length 16
```

#### ファイルに保存

```bash
pwkit --batch 10 --output passwords.txt
```

#### テンプレートモードのグローバルオプション

すべてのプレースホルダーに適用されるデフォルトオプションを設定できます:

```bash
# すべてのパスワードにデフォルトで記号を含める
pwkit --template template.env --symbols

# カスタムデフォルト長
pwkit --template template.env --length 32
```

## CLIオプション

```
Options:
  -l, --length <LENGTH>       生成するパスワードの長さ [default: 20]
  -n, --numbers               パスワードに数字を含める
  -s, --symbols               パスワードに記号を含める
  -q, --qrcode                パスワードをQRコードとして表示
  -b, --batch <BATCH>         生成するパスワードの数 [default: 1]
  -o, --output <OUTPUT>       パスワードをファイルに出力
  -t, --template <FILE>       テンプレートファイルから生成
  -e, --env-output <FILE>     テンプレートモード用の出力ファイル
  -h, --help                  ヘルプを表示
  -V, --version               バージョンを表示
```

## テンプレートプレースホルダーのオプション

| 構文 | 説明 ||
|------|------|-----|
| `{{PWGEN}}` | 匿名パスワード、デフォルト設定 | 出現ごとにユニークなパスワードを生成 |
| `{{PWGEN:name}}` | 名前付きパスワード | 同じ名前 = 同じパスワード |
| `{{PWGEN:name:LENGTH}}` | カスタム長 | `{{PWGEN:api:64}}` |
| `{{PWGEN:name:LENGTH:symbols}}` | 記号を含む | `{{PWGEN:secure:32:symbols}}` |

### オプションキーワード

- `symbols`, `symbol`, `s` - 記号を含める
- `nosymbols`, `ns` - 記号を除外
- `numbers`, `number`, `n` - 数字を含める
- `nonumbers`, `nn` - 数字を除外

## 使用例

### 例1:シンプルなパスワード

```bash
$ pwkit
rx2lmH5m7UEon4DTGmoa

✅ First password copied to clipboard!
```

### 例2:記号を含む複数のパスワード

```bash
$ pwkit -s -b 3 -l 16
]Fc_&8BtSikMg]}m
9O&F]nlg^{>PlY8#
xrDHJU9MNvlZ(&4)

✅ First password copied to clipboard!
```

### 例3:テンプレート生成

```bash
$ pwkit --template myapp.env.template --env-output .env
📄 Reading template from: myapp.env.template
🔍 Found 7 password placeholder(s)
  ✨ Generated password for 'db_password': 20 chars
  ✨ Generated password for 'admin_password': 20 chars

✅ Environment file generated: .env
```

## 文字セット

- **小文字**: a-z
- **大文字**: A-Z
- **数字**: 0-9
- **記号**: `!@#$%^&*()-_=+[]{};:,.<>?`

## セキュリティに関する注意

- Rustの`rand`クレートを使用した暗号学的に安全な乱数生成を使用
- パスワードはローカルで生成され、ネットワーク経由で送信されることはありません
- 本番環境では、専用のシークレット管理ソリューションの使用を検討してください

## ライセンス

MIT

## コントリビューション

コントリビューションを歓迎します!お気軽にプルリクエストを送信してください。