initialization
This commit is contained in:
commit
9ff09693ed
92 files changed
+46209
No files matched your search
@@ -0,0 +1,545 @@
|
||||
# Password Generator API Integration Guide
|
||||
|
||||
This guide provides comprehensive examples for integrating the Password Generator API with popular password managers, launchers, and automation tools.
|
||||
|
||||
## Table of Contents
|
||||
- [Quick Start](#quick-start)
|
||||
- [Password Managers](#password-managers)
|
||||
- [Launchers & Tools](#launchers--tools)
|
||||
- [Automation Scripts](#automation-scripts)
|
||||
- [Security Considerations](#security-considerations)
|
||||
|
||||
## Quick Start
|
||||
|
||||
The API provides several endpoints for password generation:
|
||||
|
||||
**Base URL:** `http://localhost:8080/api/v1`
|
||||
|
||||
**Generate Password:**
|
||||
```bash
|
||||
curl -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"diceware","count":1,"options":{"words":6}}'
|
||||
```
|
||||
|
||||
## Password Managers
|
||||
|
||||
### Bitwarden
|
||||
|
||||
#### Bitwarden CLI Integration
|
||||
|
||||
**Installation:**
|
||||
```bash
|
||||
npm install -g @bitwarden/cli
|
||||
```
|
||||
|
||||
**Basic Password Generation and Storage:**
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# generate-and-store-bitwarden.sh
|
||||
|
||||
# Login to Bitwarden (do this once)
|
||||
bw login
|
||||
|
||||
# Unlock vault (enter master password when prompted)
|
||||
export BW_SESSION="$(bw unlock --raw)"
|
||||
|
||||
# Generate high-entropy password
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"high-entropy","count":1,"options":{"length":20,"includeSymbols":true}}' | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
# Create new login item
|
||||
ITEM_DATA=$(cat <<EOF
|
||||
{
|
||||
"type": 1,
|
||||
"name": "Generated Password $(date +%Y-%m-%d)",
|
||||
"login": {
|
||||
"username": "user@example.com",
|
||||
"password": "$PASSWORD"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
echo "$ITEM_DATA" | bw encode | bw create item
|
||||
|
||||
echo "Password created and stored in Bitwarden: $PASSWORD"
|
||||
```
|
||||
|
||||
**Advanced: Generate Different Password Types:**
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# bitwarden-multi-generator.sh
|
||||
|
||||
generate_and_store() {
|
||||
local type=$1
|
||||
local name=$2
|
||||
local options=$3
|
||||
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"$type\",\"count\":1,\"options\":$options}" | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
ITEM_DATA="{\"type\": 1, \"name\": \"$name\", \"login\": {\"password\": \"$PASSWORD\"}}"
|
||||
echo "$ITEM_DATA" | bw encode | bw create item
|
||||
|
||||
echo "Created $name: $PASSWORD"
|
||||
}
|
||||
|
||||
# Generate different types
|
||||
generate_and_store "diceware" "Diceware Passphrase" '{"words":6,"capitalize":true}'
|
||||
generate_and_store "passkey" "Apple-style Password" '{"syllables":4,"addNumbers":true}'
|
||||
generate_and_store "xkcdpass" "XKCD Passphrase" '{"words":4,"language":"english","addNumber":true}'
|
||||
```
|
||||
|
||||
### 1Password
|
||||
|
||||
#### 1Password CLI Integration
|
||||
|
||||
**Installation:**
|
||||
Follow 1Password CLI installation guide for your platform.
|
||||
|
||||
**Basic Integration:**
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# generate-and-store-1password.sh
|
||||
|
||||
# Generate secure password
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"high-entropy","count":1,"options":{"length":24}}' | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
# Create login item
|
||||
op item create \
|
||||
--category=login \
|
||||
--title="Generated Password $(date +%Y-%m-%d)" \
|
||||
--field="username=user@example.com" \
|
||||
--field="password=$PASSWORD"
|
||||
|
||||
echo "Password stored in 1Password: $PASSWORD"
|
||||
```
|
||||
|
||||
**Batch Password Generation:**
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 1password-batch-generator.sh
|
||||
|
||||
TYPES=("diceware" "high-entropy" "passkey" "xkcdpass")
|
||||
NAMES=("Diceware Phrase" "High Entropy" "Passkey Style" "XKCD Phrase")
|
||||
|
||||
for i in "${!TYPES[@]}"; do
|
||||
TYPE=${TYPES[$i]}
|
||||
NAME=${NAMES[$i]}
|
||||
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"$TYPE\",\"count\":1}" | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
op item create \
|
||||
--category=login \
|
||||
--title="$NAME $(date +%Y-%m-%d)" \
|
||||
--field="password=$PASSWORD"
|
||||
|
||||
echo "Created $NAME: $PASSWORD"
|
||||
done
|
||||
```
|
||||
|
||||
### KeePass
|
||||
|
||||
#### KeePassXC CLI Integration
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# keepassxc-generator.sh
|
||||
|
||||
DB_PATH="$HOME/passwords.kdbx"
|
||||
KEY_FILE="$HOME/keyfile.key"
|
||||
|
||||
# Generate password
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"diceware","count":1,"options":{"words":6}}' | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
# Add to KeePass database
|
||||
keepassxc-cli add "$DB_PATH" \
|
||||
--key-file "$KEY_FILE" \
|
||||
"Generated/$(date +%Y-%m-%d)" \
|
||||
--username "user@example.com" \
|
||||
--password-prompt
|
||||
|
||||
echo "Password: $PASSWORD"
|
||||
```
|
||||
|
||||
## Launchers & Tools
|
||||
|
||||
### Raycast
|
||||
|
||||
#### Simple Password Generator Extension
|
||||
|
||||
Create a Raycast script command:
|
||||
|
||||
**generate-password.sh:**
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# Required parameters:
|
||||
# @raycast.schemaVersion 1
|
||||
# @raycast.title Generate Secure Password
|
||||
# @raycast.mode compact
|
||||
# @raycast.icon 🔐
|
||||
# @raycast.packageName Password Generator
|
||||
# @raycast.argument1 {"type": "dropdown", "placeholder": "Password Type", "data": [{"title": "High Entropy", "value": "high-entropy"}, {"title": "Diceware", "value": "diceware"}, {"title": "Passkey", "value": "passkey"}, {"title": "XKCD", "value": "xkcdpass"}]}
|
||||
|
||||
TYPE=${1:-"passkey"}
|
||||
|
||||
case $TYPE in
|
||||
"high-entropy")
|
||||
OPTIONS='{"length":16,"includeSymbols":true}'
|
||||
;;
|
||||
"diceware")
|
||||
OPTIONS='{"words":5,"capitalize":true}'
|
||||
;;
|
||||
"passkey")
|
||||
OPTIONS='{"syllables":3,"addNumbers":true}'
|
||||
;;
|
||||
"xkcdpass")
|
||||
OPTIONS='{"words":4,"capitalize":true,"addNumber":true}'
|
||||
;;
|
||||
esac
|
||||
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"$TYPE\",\"count\":1,\"options\":$OPTIONS}" | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
if [ -n "$PASSWORD" ]; then
|
||||
echo "$PASSWORD" | pbcopy
|
||||
echo "✅ Password copied: $PASSWORD"
|
||||
else
|
||||
echo "❌ Failed to generate password"
|
||||
fi
|
||||
```
|
||||
|
||||
#### Advanced Raycast Extension with Options
|
||||
|
||||
**raycast-advanced.sh:**
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# Required parameters:
|
||||
# @raycast.schemaVersion 1
|
||||
# @raycast.title Advanced Password Generator
|
||||
# @raycast.mode fullOutput
|
||||
# @raycast.icon 🔐
|
||||
# @raycast.packageName Password Generator
|
||||
# @raycast.argument1 {"type": "text", "placeholder": "Number of passwords", "optional": true}
|
||||
|
||||
COUNT=${1:-1}
|
||||
|
||||
# Generate multiple password types
|
||||
echo "🔐 Password Generator Results"
|
||||
echo "================================"
|
||||
|
||||
# High Entropy
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"high-entropy\",\"count\":$COUNT,\"options\":{\"length\":16}}" | \
|
||||
jq -r '.data.passwords[]' | head -1)
|
||||
echo "🔒 High Entropy: $PASSWORD"
|
||||
|
||||
# Diceware
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"diceware\",\"count\":$COUNT,\"options\":{\"words\":5}}" | \
|
||||
jq -r '.data.passwords[]' | head -1)
|
||||
echo "🎲 Diceware: $PASSWORD"
|
||||
|
||||
# Passkey
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"passkey\",\"count\":$COUNT,\"options\":{\"syllables\":3}}" | \
|
||||
jq -r '.data.passwords[]' | head -1)
|
||||
echo "🗝️ Passkey: $PASSWORD"
|
||||
|
||||
echo ""
|
||||
echo "Select a password above to copy it."
|
||||
```
|
||||
|
||||
### Alfred
|
||||
|
||||
#### Alfred Workflow Script Filter
|
||||
|
||||
**alfred-password-generator.php:**
|
||||
|
||||
```php
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$types = [
|
||||
'high-entropy' => ['name' => 'High Entropy', 'icon' => '🔒', 'options' => '{"length":16}'],
|
||||
'diceware' => ['name' => 'Diceware', 'icon' => '🎲', 'options' => '{"words":5}'],
|
||||
'passkey' => ['name' => 'Passkey', 'icon' => '🗝️', 'options' => '{"syllables":3}'],
|
||||
'xkcdpass' => ['name' => 'XKCD', 'icon' => '💭', 'options' => '{"words":4}']
|
||||
];
|
||||
|
||||
$items = [];
|
||||
|
||||
foreach ($types as $type => $config) {
|
||||
$items[] = [
|
||||
'uid' => $type,
|
||||
'title' => $config['name'] . ' Password',
|
||||
'subtitle' => 'Generate ' . strtolower($config['name']) . ' password',
|
||||
'arg' => $type,
|
||||
'icon' => ['emoji' => $config['icon']]
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode(['items' => $items]);
|
||||
?>
|
||||
```
|
||||
|
||||
**alfred-generate.sh:**
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
TYPE=$1
|
||||
|
||||
case $TYPE in
|
||||
"high-entropy")
|
||||
OPTIONS='{"length":16,"includeSymbols":true}'
|
||||
;;
|
||||
"diceware")
|
||||
OPTIONS='{"words":5,"capitalize":true}'
|
||||
;;
|
||||
"passkey")
|
||||
OPTIONS='{"syllables":3,"addNumbers":true}'
|
||||
;;
|
||||
"xkcdpass")
|
||||
OPTIONS='{"words":4,"capitalize":true,"addNumber":true}'
|
||||
;;
|
||||
esac
|
||||
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"$TYPE\",\"count\":1,\"options\":$OPTIONS}" | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
echo "$PASSWORD" | pbcopy
|
||||
echo "$PASSWORD"
|
||||
```
|
||||
|
||||
### LaunchBar
|
||||
|
||||
#### LaunchBar Action
|
||||
|
||||
**PasswordGenerator.lbaction/Contents/Scripts/default.sh:**
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"passkey","count":1,"options":{"syllables":4,"addNumbers":true}}' | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
if [ -n "$PASSWORD" ]; then
|
||||
echo "$PASSWORD" | pbcopy
|
||||
echo "$PASSWORD"
|
||||
else
|
||||
echo "Error generating password"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
### Ubar / Menu Bar Apps
|
||||
|
||||
#### BitBar Plugin
|
||||
|
||||
**password-generator.1m.sh:**
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
echo "🔐 Password Generator"
|
||||
echo "---"
|
||||
|
||||
# Generate different types
|
||||
TYPES=("high-entropy:High Entropy" "diceware:Diceware" "passkey:Passkey" "xkcdpass:XKCD")
|
||||
|
||||
for TYPE_PAIR in "${TYPES[@]}"; do
|
||||
TYPE="${TYPE_PAIR%%:*}"
|
||||
NAME="${TYPE_PAIR##*:}"
|
||||
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"type\":\"$TYPE\",\"count\":1}" | \
|
||||
jq -r '.data.passwords[0]' 2>/dev/null)
|
||||
|
||||
if [ -n "$PASSWORD" ]; then
|
||||
echo "$NAME: $PASSWORD | bash='echo \"$PASSWORD\" | pbcopy' terminal=false"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "---"
|
||||
echo "API Status | bash='curl -s http://localhost:8080/api/v1/health' terminal=true"
|
||||
```
|
||||
|
||||
## Automation Scripts
|
||||
|
||||
### Automated Password Rotation
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# rotate-passwords.sh
|
||||
|
||||
SERVICES=("email:user@example.com" "bank:john.doe" "social:johndoe123")
|
||||
|
||||
for SERVICE_PAIR in "${SERVICES[@]}"; do
|
||||
SERVICE="${SERVICE_PAIR%%:*}"
|
||||
USERNAME="${SERVICE_PAIR##*:}"
|
||||
|
||||
# Generate new password
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"high-entropy","count":1,"options":{"length":20}}' | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
# Update in password manager (example with Bitwarden)
|
||||
ITEM_ID=$(bw list items --search "$SERVICE" | jq -r '.[0].id')
|
||||
if [ "$ITEM_ID" != "null" ]; then
|
||||
ITEM=$(bw get item "$ITEM_ID")
|
||||
UPDATED_ITEM=$(echo "$ITEM" | jq ".login.password = \"$PASSWORD\"")
|
||||
echo "$UPDATED_ITEM" | bw encode | bw edit item "$ITEM_ID"
|
||||
|
||||
echo "Rotated password for $SERVICE: $PASSWORD"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
### Bulk Password Generation for Teams
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# team-password-generator.sh
|
||||
|
||||
TEAM_MEMBERS=("alice" "bob" "charlie" "diana")
|
||||
SERVICES=("staging" "development" "testing")
|
||||
|
||||
for MEMBER in "${TEAM_MEMBERS[@]}"; do
|
||||
echo "Generating passwords for $MEMBER:"
|
||||
|
||||
for SERVICE in "${SERVICES[@]}"; do
|
||||
PASSWORD=$(curl -s -X POST http://localhost:8080/api/v1/passwords/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"diceware","count":1,"options":{"words":4,"addNumber":true}}' | \
|
||||
jq -r '.data.passwords[0]')
|
||||
|
||||
# Store in team password manager
|
||||
op item create \
|
||||
--category=login \
|
||||
--title="$SERVICE-$MEMBER" \
|
||||
--field="username=$MEMBER" \
|
||||
--field="password=$PASSWORD" \
|
||||
--vault="Team Vault"
|
||||
|
||||
echo " $SERVICE: $PASSWORD"
|
||||
done
|
||||
echo ""
|
||||
done
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
### API Security
|
||||
|
||||
1. **Local Deployment**: Run the API locally or on a secure internal network
|
||||
2. **Rate Limiting**: The API includes built-in rate limiting (60 requests/minute by default)
|
||||
3. **No Logging of Passwords**: Passwords are not logged in server logs
|
||||
4. **HTTPS**: Use HTTPS in production deployments
|
||||
|
||||
### Integration Security
|
||||
|
||||
1. **Environment Variables**: Store API endpoints in environment variables:
|
||||
|
||||
```bash
|
||||
export PASSWORD_API_URL="https://passwords.internal.company.com/api/v1"
|
||||
```
|
||||
|
||||
2. **Script Permissions**: Set appropriate permissions on scripts:
|
||||
|
||||
```bash
|
||||
chmod 700 password-scripts/
|
||||
chmod 600 password-scripts/*.sh
|
||||
```
|
||||
|
||||
3. **Secure Storage**: Ensure integration scripts don't leave passwords in temporary files:
|
||||
|
||||
```bash
|
||||
# Good: Use pipes and variables
|
||||
PASSWORD=$(curl -s ... | jq -r '.data.passwords[0]')
|
||||
|
||||
# Bad: Don't write to temporary files
|
||||
# curl -s ... > /tmp/password.json
|
||||
```
|
||||
|
||||
### Production Deployment
|
||||
|
||||
For production use, consider:
|
||||
|
||||
1. **Authentication**: Add API key authentication
|
||||
2. **Network Security**: Deploy behind a firewall or VPN
|
||||
3. **Monitoring**: Monitor API usage and failed requests
|
||||
4. **Backup**: Regular backups of configuration and logs
|
||||
|
||||
### Password Manager Sync
|
||||
|
||||
When integrating with password managers:
|
||||
|
||||
1. **Verify Storage**: Always verify passwords are correctly stored
|
||||
2. **Error Handling**: Implement proper error handling for API failures
|
||||
3. **Rollback**: Have procedures to rollback failed password updates
|
||||
4. **Audit Trail**: Maintain logs of password generation and updates
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**API Connection Issues:**
|
||||
```bash
|
||||
# Test API connectivity
|
||||
curl -s http://localhost:8080/api/v1/health
|
||||
|
||||
# Check if service is running
|
||||
netstat -tlnp | grep 8080
|
||||
```
|
||||
|
||||
**JSON Parsing Issues:**
|
||||
```bash
|
||||
# Validate JSON response
|
||||
curl -s http://localhost:8080/api/v1/passwords | jq '.'
|
||||
|
||||
# Check for errors
|
||||
curl -s http://localhost:8080/api/v1/passwords | jq '.error'
|
||||
```
|
||||
|
||||
**Password Manager Integration:**
|
||||
```bash
|
||||
# Test CLI tools separately
|
||||
bw --version
|
||||
op --version
|
||||
keepassxc-cli --version
|
||||
|
||||
# Verify authentication
|
||||
bw status
|
||||
op whoami
|
||||
```
|
||||
|
||||
This integration guide provides comprehensive examples for connecting the Password Generator API with popular tools and services. Adapt these examples based on your specific requirements and security policies.
|
||||
Reference in new issue
Block a user