14 KiB
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
The API provides several endpoints for password generation:
Base URL: http://localhost:8080/api/v1
Generate Password:
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:
npm install -g @bitwarden/cli
Basic Password Generation and Storage:
#!/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:
#!/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:
#!/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:
#!/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
#!/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:
#!/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:
#!/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
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:
#!/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:
#!/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:
#!/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
#!/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
#!/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
- Local Deployment: Run the API locally or on a secure internal network
- Rate Limiting: The API includes built-in rate limiting (60 requests/minute by default)
- No Logging of Passwords: Passwords are not logged in server logs
- HTTPS: Use HTTPS in production deployments
Integration Security
- Environment Variables: Store API endpoints in environment variables:
export PASSWORD_API_URL="https://passwords.internal.company.com/api/v1"
- Script Permissions: Set appropriate permissions on scripts:
chmod 700 password-scripts/
chmod 600 password-scripts/*.sh
- Secure Storage: Ensure integration scripts don't leave passwords in temporary files:
# 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:
- Authentication: Add API key authentication
- Network Security: Deploy behind a firewall or VPN
- Monitoring: Monitor API usage and failed requests
- Backup: Regular backups of configuration and logs
Password Manager Sync
When integrating with password managers:
- Verify Storage: Always verify passwords are correctly stored
- Error Handling: Implement proper error handling for API failures
- Rollback: Have procedures to rollback failed password updates
- Audit Trail: Maintain logs of password generation and updates
Troubleshooting
Common Issues
API Connection Issues:
# Test API connectivity
curl -s http://localhost:8080/api/v1/health
# Check if service is running
netstat -tlnp | grep 8080
JSON Parsing Issues:
# 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:
# 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.