freezone/portal/AUTHENTICATION_FIX.md
2025-06-30 17:01:40 +02:00

93 lines
3.4 KiB
Markdown

# Portal Authentication Fix Summary
## Problem
The portal client was getting 401 errors when calling portal-server endpoints because the HTTP requests were missing the required `x-api-key` authentication header.
## Root Cause
The HTTP requests were being made from Rust code in [`multi_step_resident_wizard.rs`](src/components/entities/resident_registration/multi_step_resident_wizard.rs), not from JavaScript as initially assumed. The Rust code was missing the API key header and using an incorrect endpoint URL.
## Solution Implemented
### 1. Fixed Rust HTTP Request Code
**File**: [`src/components/entities/resident_registration/multi_step_resident_wizard.rs`](src/components/entities/resident_registration/multi_step_resident_wizard.rs)
**Changes**:
- Added `x-api-key` header to the HTTP request
- Fixed endpoint URL from `/resident/create-payment-intent` to `/api/resident/create-payment-intent`
- Integrated with new configuration system
### 2. Created Configuration Module
**File**: [`src/config.rs`](src/config.rs)
**Features**:
- Centralized API key management
- Configurable API base URL
- Development fallback with `dev_key_123` key
- Helper methods for endpoint URL construction
### 3. Updated Application Initialization
**File**: [`src/lib.rs`](src/lib.rs)
**Changes**:
- Added config module import
- Initialize configuration on app startup
- Added logging for configuration status
### 4. Cleaned Up JavaScript Code
**File**: [`index.html`](index.html)
**Changes**:
- Removed unused `createPaymentIntent` function (now handled in Rust)
- Removed unused API key configuration variables
- Kept only Stripe Elements initialization functions
### 5. Updated Documentation
**Files**:
- [`TROUBLESHOOTING.md`](TROUBLESHOOTING.md) - Updated for Rust-based authentication
- [`test-env.sh`](test-env.sh) - Environment testing script (now less relevant)
## API Key Configuration
### Development
- **Client**: Hardcoded `dev_key_123` in [`src/config.rs`](src/config.rs)
- **Server**: Must include `dev_key_123` in `API_KEYS` environment variable
### Production
To change the API key for production:
1. Edit [`src/config.rs`](src/config.rs) and update the `get_api_key()` function
2. Rebuild the client: `trunk build --release`
3. Update server's `.env` file to include the new key in `API_KEYS`
## Testing
### Manual Test with curl
```bash
curl -X POST http://127.0.0.1:3001/api/resident/create-payment-intent \
-H "Content-Type: application/json" \
-H "x-api-key: dev_key_123" \
-d '{"type":"resident_registration","amount":5000}'
```
### Browser Console Logs
When the portal starts, you should see:
```
✅ Portal configuration initialized
🔧 Portal config loaded - API key: Present
🔑 Using API key: dev_key_123
```
When making payment requests:
```
🔧 Creating payment intent...
🔧 Setting up Stripe payment for resident registration
```
## Files Modified
1. [`src/components/entities/resident_registration/multi_step_resident_wizard.rs`](src/components/entities/resident_registration/multi_step_resident_wizard.rs) - Fixed HTTP request
2. [`src/config.rs`](src/config.rs) - New configuration module
3. [`src/lib.rs`](src/lib.rs) - Added config initialization
4. [`index.html`](index.html) - Cleaned up unused JavaScript
5. [`TROUBLESHOOTING.md`](TROUBLESHOOTING.md) - Updated documentation
## Result
The portal client now properly authenticates with the portal-server using the `x-api-key` header, resolving the 401 authentication errors.