# Normogen Deployment & Testing Guide ## Overview This guide covers deploying the Normogen backend to Solaria and testing all API endpoints. ## Prerequisites ### Local Setup - Git repository cloned - SSH access to Solaria configured - jq installed for JSON parsing - Scripts made executable ### Server Requirements (Solaria) - Docker and Docker Compose installed - Git access to gitea.solivarez.com.ar - Ports 8000 available ## Deployment Scripts ### 1. Deploy to Solaria ```bash ./deploy-to-solaria.sh ``` **What it does:** 1. Pushes latest changes to git 2. Connects to Solaria via SSH 3. Clones/updates the repository 4. Stops existing containers 5. Builds and starts new containers 6. Shows container status and logs **Manual Deployment Steps:** ```bash # Push to git git push origin main # SSH to Solaria ssh alvaro@solaria # Navigate to project cd ~/normogen/backend # Stop existing containers docker-compose down # Build and start docker-compose up -d --build # Check status docker-compose ps # View logs docker-compose logs -f backend ``` ### 2. Check Server Logs ```bash ./check-solaria-logs.sh ``` **What it shows:** - Container status - Backend logs (last 50 lines) - MongoDB logs ### 3. Test API Endpoints ```bash ./test-api-endpoints.sh ``` **What it tests:** 1. Health Check 2. Authentication (Register, Login) 3. User Management (Get/Update Profile, Settings) 4. Password Recovery (Set phrase, Recover, Change password) 5. Share Management (Create, List shares) 6. Permissions (Check permission) 7. Session Management (Get sessions) ## API Endpoints Reference ### Base URL ``` http://solaria:8000 ``` ### Public Endpoints (No Auth) #### Health Check ```bash curl http://solaria:8000/health ``` #### Register ```bash curl -X POST http://solaria:8000/api/auth/register \ -H "Content-Type: application/json" \ -d '{ "email": "test@example.com", "password": "Password123!", "full_name": "Test User" }' ``` #### Login ```bash curl -X POST http://solaria:8000/api/auth/login \ -H "Content-Type: application/json" \ -d '{ "email": "test@example.com", "password": "Password123!" }' ``` #### Set Recovery Phrase ```bash curl -X POST http://solaria:8000/api/auth/set-recovery-phrase \ -H "Content-Type: application/json" \ -d '{ "email": "test@example.com", "recovery_phrase": "my-secret-phrase" }' ``` #### Recover Password ```bash curl -X POST http://solaria:8000/api/auth/recover-password \ -H "Content-Type: application/json" \ -d '{ "email": "test@example.com", "recovery_phrase": "my-secret-phrase", "new_password": "NewPassword456!" }' ``` ### Protected Endpoints (Require Bearer Token) #### Get Profile ```bash curl http://solaria:8000/api/users/me \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### Update Profile ```bash curl -X PUT http://solaria:8000/api/users/me \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "full_name": "Updated Name" }' ``` #### Get Settings ```bash curl http://solaria:8000/api/users/me/settings \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### Update Settings ```bash curl -X PUT http://solaria:8000/api/users/me/settings \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "theme": "dark" }' ``` #### Change Password ```bash curl -X POST http://solaria:8000/api/users/me/change-password \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "old_password": "OldPassword123!", "new_password": "NewPassword456!" }' ``` #### Delete Account ```bash curl -X DELETE http://solaria:8000/api/users/me \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "confirmation": "DELETE_ACCOUNT" }' ``` #### Create Share ```bash curl -X POST http://solaria:8000/api/shares \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "target_email": "other@example.com", "resource_type": "profiles", "resource_id": "507f1f77bcf86cd799439011", "permissions": ["read"] }' ``` #### List Shares ```bash curl http://solaria:8000/api/shares \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### Update Share ```bash curl -X PUT http://solaria:8000/api/shares/SHARE_ID \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "permissions": ["read", "write"] }' ``` #### Delete Share ```bash curl -X DELETE http://solaria:8000/api/shares/SHARE_ID \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### Check Permission ```bash curl -X POST http://solaria:8000/api/permissions/check \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "resource_id": "507f1f77bcf86cd799439011", "permission": "read" }' ``` #### Get Sessions (NEW) ```bash curl http://solaria:8000/api/sessions \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### Revoke Session (NEW) ```bash curl -X DELETE http://solaria:8000/api/sessions/SESSION_ID \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### Revoke All Sessions (NEW) ```bash curl -X DELETE http://solaria:8000/api/sessions/all \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` ## Troubleshooting ### Container Won't Start ```bash # Check logs docker-compose logs backend # Check container status docker-compose ps # Restart containers docker-compose restart # Rebuild from scratch docker-compose down -v docker-compose up -d --build ``` ### Database Connection Issues ```bash # Check MongoDB is running docker-compose ps mongodb # Check MongoDB logs docker-compose logs mongodb # Test MongoDB connection docker-compose exec backend mongosh mongodb://mongodb:27017 ``` ### Permission Denied ```bash # Make sure scripts are executable chmod +x deploy-to-solaria.sh chmod +x test-api-endpoints.sh chmod +x check-solaria-logs.sh ``` ### SSH Connection Issues ```bash # Test SSH connection ssh alvaro@solaria # Check SSH config cat ~/.ssh/config | grep solaria ``` ## Environment Variables Create a `.env` file in `backend/` directory: ```env JWT_SECRET=your-super-secret-jwt-key-min-32-chars MONGODB_URI=mongodb://mongodb:27017 MONGODB_DATABASE=normogen RUST_LOG=info SERVER_PORT=8000 SERVER_HOST=0.0.0.0 ``` ## Security Features (Phase 2.6) ### Session Management - Tracks user sessions across devices - View active sessions - Revoke specific or all sessions - Automatic cleanup of expired sessions ### Audit Logging - Logs all security-relevant events - Track login attempts, password changes - Monitor data access and modifications - Query logs by user or system-wide ### Account Lockout - Brute-force protection - Progressive lockout durations - Configurable attempt limits - Automatic reset on successful login ### Security Headers - X-Content-Type-Options: nosniff - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - Strict-Transport-Security - Content-Security-Policy ## Performance Tips ### Production Deployment 1. Use environment-specific JWT_SECRET 2. Set RUST_LOG=warn for production 3. Enable MongoDB authentication 4. Use Docker volumes for data persistence 5. Set up monitoring and alerting 6. Configure reverse proxy (nginx/caddy) ### Monitoring ```bash # Check container stats docker stats # View real-time logs docker-compose logs -f backend # Check resource usage docker-compose top ``` ## Next Steps 1. ✅ Complete Phase 2.6 (Security Hardening) 2. ⏳ Integrate session management into auth flow 3. ⏳ Implement proper rate limiting 4. ⏳ Add comprehensive tests 5. ⏳ Begin Phase 2.7 (Health Data Features) ## Support For issues or questions: - Check logs: `./check-solaria-logs.sh` - Review deployment: `./deploy-to-solaria.sh` - Test API: `./test-api-endpoints.sh` - Check PHASE_2.6_COMPLETION.md for implementation details