198 lines
4.9 KiB
Markdown
198 lines
4.9 KiB
Markdown
# Portal Server Setup Guide
|
|
|
|
This guide will help you set up the portal-server quickly and resolve common 401 authentication errors.
|
|
|
|
## Quick Setup (5 minutes)
|
|
|
|
### 1. Copy Environment File
|
|
```bash
|
|
cd portal-server
|
|
cp .env.example .env
|
|
```
|
|
|
|
### 2. Edit Your .env File
|
|
Open `.env` in your editor and replace the placeholder values:
|
|
|
|
```bash
|
|
# Required: Replace with your actual Stripe keys
|
|
STRIPE_SECRET_KEY=sk_test_your_actual_stripe_secret_key_here
|
|
STRIPE_PUBLISHABLE_KEY=pk_test_your_actual_stripe_publishable_key_here
|
|
|
|
# Required: Replace with your actual Identify API key
|
|
IDENTIFY_API_KEY=your_actual_identify_api_key_here
|
|
|
|
# Required: Set API keys for authentication (prevents 401 errors)
|
|
API_KEYS=dev_key_123,another_key_456
|
|
|
|
# Optional: Webhook secrets (for production)
|
|
STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret_here
|
|
IDENTIFY_WEBHOOK_SECRET=your_identify_webhook_secret_here
|
|
```
|
|
|
|
### 3. Start the Server
|
|
```bash
|
|
cargo run -- --from-env --verbose
|
|
```
|
|
|
|
### 4. Test API Access
|
|
```bash
|
|
# This should work (replace dev_key_123 with your actual API key)
|
|
curl -X GET http://localhost:3001/api/health \
|
|
-H "x-api-key: dev_key_123"
|
|
|
|
# This will return 401 Unauthorized (no API key)
|
|
curl -X GET http://localhost:3001/api/health
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Getting 401 Unauthorized Errors?
|
|
|
|
**Problem**: All API calls return `401 Unauthorized`
|
|
|
|
**Solution**: Make sure you include the `x-api-key` header in all requests:
|
|
|
|
```bash
|
|
# ✅ Correct - includes API key header
|
|
curl -X POST http://localhost:3001/api/kyc/create-verification-session \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-api-key: dev_key_123" \
|
|
-d '{"user_id": "test123", "email": "test@example.com"}'
|
|
|
|
# ❌ Wrong - missing API key header
|
|
curl -X POST http://localhost:3001/api/kyc/create-verification-session \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"user_id": "test123", "email": "test@example.com"}'
|
|
```
|
|
|
|
### Server Won't Start?
|
|
|
|
**Problem**: Server fails to start with environment variable errors
|
|
|
|
**Solutions**:
|
|
1. Check that your `.env` file exists: `ls -la .env`
|
|
2. Verify all required variables are set: `cat .env`
|
|
3. Make sure API keys are valid (no extra spaces or quotes)
|
|
|
|
### Can't Find .env File?
|
|
|
|
The server looks for `.env` files in this order:
|
|
1. `.env` (current directory)
|
|
2. `portal-server/.env` (if running from parent directory)
|
|
|
|
You can also specify a custom location:
|
|
```bash
|
|
cargo run -- --from-env --env-file /path/to/your/.env
|
|
```
|
|
|
|
## Development vs Production
|
|
|
|
### Development Setup (Default)
|
|
- Uses `.env` file for configuration
|
|
- Allows all CORS origins (`*`)
|
|
- API keys are optional (but recommended)
|
|
|
|
```bash
|
|
# Development mode
|
|
cargo run -- --from-env --verbose
|
|
```
|
|
|
|
### Production Setup
|
|
- Requires all security configurations
|
|
- Restricted CORS origins
|
|
- API keys are mandatory
|
|
|
|
```bash
|
|
# Production build
|
|
cargo build --release --features prod --no-default-features
|
|
|
|
# Production run
|
|
./target/release/portal-server --from-env --cors-origins "https://yourdomain.com"
|
|
```
|
|
|
|
## API Key Management
|
|
|
|
### For Development
|
|
Use simple, memorable keys in your `.env`:
|
|
```bash
|
|
API_KEYS=dev_key_123,test_key_456
|
|
```
|
|
|
|
### For Production
|
|
Use strong, random keys:
|
|
```bash
|
|
API_KEYS=prod_a1b2c3d4e5f6,prod_x9y8z7w6v5u4,prod_m3n4o5p6q7r8
|
|
```
|
|
|
|
### Multiple Keys
|
|
You can configure multiple API keys for different clients:
|
|
```bash
|
|
API_KEYS=frontend_key_123,mobile_app_456,admin_panel_789
|
|
```
|
|
|
|
## Integration Examples
|
|
|
|
### Frontend JavaScript
|
|
```javascript
|
|
const apiKey = 'dev_key_123'; // From your .env API_KEYS
|
|
|
|
const response = await fetch('http://localhost:3001/api/kyc/create-verification-session', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'x-api-key': apiKey
|
|
},
|
|
body: JSON.stringify({
|
|
user_id: 'user123',
|
|
email: 'user@example.com'
|
|
})
|
|
});
|
|
```
|
|
|
|
### Python
|
|
```python
|
|
import requests
|
|
|
|
api_key = 'dev_key_123' # From your .env API_KEYS
|
|
|
|
response = requests.post(
|
|
'http://localhost:3001/api/kyc/create-verification-session',
|
|
headers={
|
|
'Content-Type': 'application/json',
|
|
'x-api-key': api_key
|
|
},
|
|
json={
|
|
'user_id': 'user123',
|
|
'email': 'user@example.com'
|
|
}
|
|
)
|
|
```
|
|
|
|
### Rust
|
|
```rust
|
|
use reqwest::Client;
|
|
use serde_json::json;
|
|
|
|
let client = Client::new();
|
|
let api_key = "dev_key_123"; // From your .env API_KEYS
|
|
|
|
let response = client
|
|
.post("http://localhost:3001/api/kyc/create-verification-session")
|
|
.header("Content-Type", "application/json")
|
|
.header("x-api-key", api_key)
|
|
.json(&json!({
|
|
"user_id": "user123",
|
|
"email": "user@example.com"
|
|
}))
|
|
.send()
|
|
.await?;
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. **Set up webhooks**: Configure `STRIPE_WEBHOOK_SECRET` and `IDENTIFY_WEBHOOK_SECRET` for production
|
|
2. **Configure CORS**: Set specific origins for production: `CORS_ORIGINS=https://yourdomain.com`
|
|
3. **Add rate limiting**: Consider implementing rate limiting for production use
|
|
4. **Monitor logs**: Use `--verbose` flag to see detailed request logs
|
|
|
|
For more details, see the main [README.md](README.md). |