82 lines
3.0 KiB
Markdown
82 lines
3.0 KiB
Markdown
|
|
Current Setup
|
||
|
|
|
||
|
|
The project already has:
|
||
|
|
- **`.env`** file (exists but protected from reading)
|
||
|
|
- **`.env.example`** file (exists but protected from reading)
|
||
|
|
- **`dotenvy`** crate integration in `main.rs` and config loading
|
||
|
|
|
||
|
|
## Why .env Files Are Important
|
||
|
|
|
||
|
|
The application uses environment variables for several critical configurations:
|
||
|
|
|
||
|
|
### 1. **JWT Configuration**
|
||
|
|
```template/server/src/auth/jwt.rs#L36-54
|
||
|
|
let secret = env::var("JWT_SECRET")
|
||
|
|
.unwrap_or_else(|_| "your-super-secret-jwt-key-change-this-in-production".to_string());
|
||
|
|
let issuer = env::var("JWT_ISSUER").unwrap_or_else(|_| "rustelo-auth".to_string());
|
||
|
|
let access_token_expires_in = Duration::minutes(
|
||
|
|
env::var("JWT_ACCESS_TOKEN_EXPIRES_IN")
|
||
|
|
.unwrap_or_else(|_| "15".to_string())
|
||
|
|
.parse()
|
||
|
|
.unwrap_or(15),
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. **OAuth Configuration**
|
||
|
|
```template/server/src/auth/oauth.rs#L105-115
|
||
|
|
let client_id = env::var("GOOGLE_CLIENT_ID").map_err(|_| {
|
||
|
|
anyhow!("Google OAuth not configured: missing GOOGLE_CLIENT_ID")
|
||
|
|
})?;
|
||
|
|
let client_secret = env::var("GOOGLE_CLIENT_SECRET").map_err(|_| {
|
||
|
|
anyhow!("Google OAuth not configured: missing GOOGLE_CLIENT_SECRET")
|
||
|
|
})?;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. **Server Configuration Overrides**
|
||
|
|
```template/server/src/config/mod.rs#L304-346
|
||
|
|
// Server overrides
|
||
|
|
if let Ok(protocol) = env::var("SERVER_PROTOCOL") { ... }
|
||
|
|
if let Ok(host) = env::var("SERVER_HOST") { ... }
|
||
|
|
if let Ok(port) = env::var("SERVER_PORT") { ... }
|
||
|
|
if let Ok(database_url) = env::var("DATABASE_URL") { ... }
|
||
|
|
if let Ok(session_secret) = env::var("SESSION_SECRET") { ... }
|
||
|
|
```
|
||
|
|
|
||
|
|
## Key Environment Variables You Should Set
|
||
|
|
|
||
|
|
Based on the code analysis, here are the important environment variables:
|
||
|
|
|
||
|
|
### **Authentication & Security**
|
||
|
|
- `JWT_SECRET` - JWT signing secret (critical for security)
|
||
|
|
- `JWT_ISSUER` - JWT issuer name
|
||
|
|
- `JWT_ACCESS_TOKEN_EXPIRES_IN` - Access token expiration (minutes)
|
||
|
|
- `JWT_REFRESH_TOKEN_EXPIRES_IN` - Refresh token expiration (days)
|
||
|
|
- `SESSION_SECRET` - Session cookie secret
|
||
|
|
|
||
|
|
### **Database**
|
||
|
|
- `DATABASE_URL` - PostgreSQL connection string
|
||
|
|
|
||
|
|
### **OAuth (if using social login)**
|
||
|
|
- `OAUTH_REDIRECT_BASE_URL` - OAuth callback base URL
|
||
|
|
- `GOOGLE_CLIENT_ID` & `GOOGLE_CLIENT_SECRET`
|
||
|
|
- `GITHUB_CLIENT_ID` & `GITHUB_CLIENT_SECRET`
|
||
|
|
- `DISCORD_CLIENT_ID` & `DISCORD_CLIENT_SECRET`
|
||
|
|
- `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET`, `MICROSOFT_TENANT_ID`
|
||
|
|
|
||
|
|
### **Server Configuration**
|
||
|
|
- `ENVIRONMENT` - Runtime environment (development/production)
|
||
|
|
- `SERVER_PROTOCOL` - HTTP or HTTPS
|
||
|
|
- `SERVER_HOST` - Server bind address
|
||
|
|
- `SERVER_PORT` - Server port
|
||
|
|
- `LOG_LEVEL` - Logging level
|
||
|
|
- `CONFIG_FILE` - Custom config file path
|
||
|
|
- `TLS_CERT_PATH` & `TLS_KEY_PATH` - For HTTPS
|
||
|
|
|
||
|
|
## How It Works
|
||
|
|
|
||
|
|
1. **Environment Loading**: The app uses `dotenvy::dotenv().ok()` to load `.env` files
|
||
|
|
2. **Config Hierarchy**: TOML files provide defaults, environment variables override them
|
||
|
|
3. **Fallback Values**: Most settings have sensible defaults if env vars aren't set
|
||
|
|
|
||
|
|
The `.env` file is essential for keeping sensitive credentials like database passwords, JWT secrets, and OAuth keys separate from your code and configuration files.
|