# pwkit
カスタマイズ可能なオプションとテンプレート機能を備えた安全なパスワードツールキット
## 特徴
- 🔐 安全なランダムパスワード生成
- 📝 環境変数ファイル用のテンプレートベース生成
- 📋 自動クリップボードコピー
- 🧾 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
## コントリビューション
コントリビューションを歓迎します!お気軽にプルリクエストを送信してください。