#!/usr/bin/env python3 """ Simplified Production Deployment Script for Atom AI Assistant This script creates all necessary configuration files and scripts for production deployment of the OAuth authentication system. Usage: python deploy_production_simple.py """ from datetime import datetime import json import os import secrets def create_oauth_config(): """Create OAuth configuration for remaining services""" config = { "production_domain": "your-production-domain.com", "remaining_services": ["outlook", "teams", "github"], "oauth_config": { "outlook": { "client_id": "YOUR_OUTLOOK_CLIENT_ID", "client_secret": "YOUR_OUTLOOK_CLIENT_SECRET", "redirect_uri": "https://your-production-domain.com/api/auth/outlook/oauth2callback", "scopes": [ "https://graph.microsoft.com/Mail.Read", "https://graph.microsoft.com/Calendars.Read", ], "setup_url": "https://portal.azure.com", }, "teams": { "client_id": "YOUR_TEAMS_CLIENT_ID", "client_secret": "YOUR_TEAMS_CLIENT_SECRET", "redirect_uri": "https://your-production-domain.com/api/auth/teams/oauth2callback", "scopes": ["https://graph.microsoft.com/Team.ReadBasic.All"], "setup_url": "https://portal.azure.com", }, "github": { "client_id": "YOUR_GITHUB_CLIENT_ID", "client_secret": "YOUR_GITHUB_CLIENT_SECRET", "redirect_uri": "https://your-production-domain.com/api/auth/github/oauth2callback", "scopes": ["repo", "user", "read:org"], "setup_url": "https://github.com/settings/developers", }, }, } with open("oauth_production_config.json", "w") as f: json.dump(config, f, indent=2) print("โœ… Created oauth_production_config.json") def create_production_env(): """Create production environment file""" env_content = f"""# Production Environment Configuration # Generated: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")} # Application Settings FLASK_ENV=production DEBUG=False SECRET_KEY={secrets.token_urlsafe(32)} # Server Configuration HOST=0.0.0.0 PORT=5058 PRODUCTION_DOMAIN=your-production-domain.com # Database Configuration DATABASE_URL=sqlite:///./data/atom_production.db # Security Configuration ATOM_OAUTH_ENCRYPTION_KEY={secrets.token_urlsafe(32)} CSRF_ENABLED=True SESSION_SECURE=True # OAuth Services - Update with real credentials GOOGLE_CLIENT_ID=your_google_client_id GOOGLE_CLIENT_SECRET=your_google_client_secret SLACK_CLIENT_ID=your_slack_client_id SLACK_CLIENT_SECRET=your_slack_client_secret TRELLO_API_KEY=your_trello_api_key TRELLO_API_SECRET=your_trello_api_secret ASANA_CLIENT_ID=your_asana_client_id ASANA_CLIENT_SECRET=your_asana_client_secret NOTION_CLIENT_ID=your_notion_client_id NOTION_CLIENT_SECRET=your_notion_client_secret DROPBOX_CLIENT_ID=your_dropbox_client_id DROPBOX_CLIENT_SECRET=your_dropbox_client_secret # Remaining OAuth Services - TODO: Configure OUTLOOK_CLIENT_ID=YOUR_OUTLOOK_CLIENT_ID OUTLOOK_CLIENT_SECRET=YOUR_OUTLOOK_CLIENT_SECRET TEAMS_CLIENT_ID=YOUR_TEAMS_CLIENT_ID TEAMS_CLIENT_SECRET=YOUR_TEAMS_CLIENT_SECRET GITHUB_CLIENT_ID=YOUR_GITHUB_CLIENT_ID GITHUB_CLIENT_SECRET=YOUR_GITHUB_CLIENT_SECRET # AI Provider Configuration OPENAI_API_KEY=your_openai_api_key ANTHROPIC_API_KEY=your_anthropic_api_key # Monitoring ENABLE_METRICS=True LOG_LEVEL=INFO HEALTH_CHECK_INTERVAL=30 """ with open(".env.production", "w") as f: f.write(env_content) print("โœ… Created .env.production") def create_setup_script(): """Create OAuth setup script""" script_content = f"""#!/bin/bash # OAuth Service Setup Script # Generated: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")} echo "๐Ÿš€ Setting up OAuth Services for Production" echo "==========================================" echo "" echo "๐Ÿ“‹ Remaining Services to Configure:" echo " - Microsoft Outlook" echo " - Microsoft Teams" echo " - GitHub" echo "" echo "๐Ÿ”ง Setup Instructions:" echo "" echo "1. Microsoft Azure (Outlook & Teams):" echo " - Go to: https://portal.azure.com" echo " - Create app registration" echo " - Add redirect URIs:" echo " - https://your-production-domain.com/api/auth/outlook/oauth2callback" echo " - https://your-production-domain.com/api/auth/teams/oauth2callback" echo " - Configure API permissions:" echo " - Mail.Read, Calendars.Read, Team.ReadBasic.All" echo "" echo "2. GitHub:" echo " - Go to: https://github.com/settings/developers" echo " - Create OAuth App" echo " - Set callback URL:" echo " - https://your-production-domain.com/api/auth/github/oauth2callback" echo " - Configure scopes: repo, user, read:org" echo "" echo "๐Ÿ“ Update .env.production with:" echo "OUTLOOK_CLIENT_ID=your_microsoft_client_id" echo "OUTLOOK_CLIENT_SECRET=your_microsoft_client_secret" echo "TEAMS_CLIENT_ID=your_teams_client_id" echo "TEAMS_CLIENT_SECRET=your_teams_client_secret" echo "GITHUB_CLIENT_ID=your_github_client_id" echo "GITHUB_CLIENT_SECRET=your_github_client_secret" echo "" echo "โœ… After configuration:" echo " - Restart backend server" echo " - Run: python test_oauth_validation.py" echo " - Verify all 10 services show as connected" echo "" echo "๐ŸŽ‰ Setup script completed" """ with open("setup_oauth.sh", "w") as f: f.write(script_content) # Make executable os.chmod("setup_oauth.sh", 0o755) print("โœ… Created setup_oauth.sh") def create_backup_script(): """Create database backup script""" script_content = f"""#!/bin/bash # Database Backup Script # Generated: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")} BACKUP_DIR="./backups" DATE=$(date +%Y%m%d_%H%M%S) DB_FILE="./data/atom_production.db" echo "๐Ÿ’พ Starting database backup..." # Create backup directory mkdir -p "$BACKUP_DIR" # Backup SQLite database if [ -f "$DB_FILE" ]; then sqlite3 "$DB_FILE" ".backup $BACKUP_DIR/atom_backup_$DATE.db" echo "โœ… Database backed up to: $BACKUP_DIR/atom_backup_$DATE.db" else echo "โŒ Database file not found: $DB_FILE" exit 1 fi # Backup configuration files tar -czf "$BACKUP_DIR/config_backup_$DATE.tar.gz" \\ .env.production \\ oauth_production_config.json echo "โœ… Configuration files backed up" # Clean up old backups (keep last 7 days) find "$BACKUP_DIR" -name "*.db" -mtime +7 -delete find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete echo "๐Ÿงน Old backups cleaned up" echo "๐ŸŽ‰ Backup completed successfully" """ with open("backup_database.sh", "w") as f: f.write(script_content) # Make executable os.chmod("backup_database.sh", 0o755) print("โœ… Created backup_database.sh") def create_deployment_plan(): """Create deployment plan""" plan = { "deployment_id": f"atom_production_{datetime.now().strftime('%Y%m%d_%H%M%S')}", "timestamp": datetime.now().isoformat(), "status": "configuration_ready", "current_state": { "oauth_services_connected": 7, "oauth_services_total": 10, "remaining_services": ["outlook", "teams", "github"], "backend_operational": True, "security_implemented": True, }, "deployment_steps": [ { "step": 1, "name": "Configure OAuth Services", "description": "Setup Microsoft Azure and GitHub OAuth applications", "status": "pending", "estimated_time": "1-2 hours", }, { "step": 2, "name": "Setup Production Domain", "description": "Configure DNS and SSL/TLS certificates", "status": "pending", "estimated_time": "1 hour", }, { "step": 3, "name": "Deploy to Production", "description": "Deploy application to production server", "status": "pending", "estimated_time": "30 minutes", }, { "step": 4, "name": "Configure Monitoring", "description": "Setup health monitoring and alerting", "status": "pending", "estimated_time": "1 hour", }, { "step": 5, "name": "Setup Backups", "description": "Configure automated database backups", "status": "pending", "estimated_time": "30 minutes", }, ], "success_criteria": [ "10/10 OAuth services operational", "Production domain accessible via HTTPS", "All health endpoints responding correctly", "Monitoring and alerting configured", "Automated backups running", ], } with open("production_deployment_plan.json", "w") as f: json.dump(plan, f, indent=2) print("โœ… Created production_deployment_plan.json") def create_monitoring_script(): """Create simple monitoring script""" script_content = '''#!/usr/bin/env python3 """ Simple Service Monitoring Script Checks health endpoints and logs status. Usage: python monitor_services.py """ import requests import time import json from datetime import datetime BASE_URL = "http://localhost:5058" ENDPOINTS = [ "/healthz", "/api/services/status", "/api/auth/oauth-status" ] def check_endpoint(endpoint): """Check a single endpoint""" try: start = time.time() response = requests.get(f"{BASE_URL}{endpoint}", timeout=5) response_time = (time.time() - start) * 1000 return { "endpoint": endpoint, "status_code": response.status_code, "response_time": response_time, "success": response.status_code == 200, "timestamp": datetime.now().isoformat() } except Exception as e: return { "endpoint": endpoint, "status_code": None, "response_time": None, "success": False, "error": str(e), "timestamp": datetime.now().isoformat() } def main(): """Main monitoring function""" print("๐Ÿ” Atom AI Assistant Service Monitor") print("=" * 40) results = [] for endpoint in ENDPOINTS: result = check_endpoint(endpoint) results.append(result) if result["success"]: print(f"โœ… {endpoint}: {result['response_time']:.1f}ms") else: print(f"โŒ {endpoint}: {result.get('error', 'Unknown error')}") # Save results with open("monitoring_results.json", "w") as f: json.dump({ "timestamp": datetime.now().isoformat(), "results": results }, f, indent=2) print(f"๐Ÿ“Š Monitoring completed: {sum(1 for r in results if r['success'])}/{len(results)} endpoints OK") if __name__ == "__main__": main() ''' with open("monitor_services.py", "w") as f: f.write(script_content) print("โœ… Created monitor_services.py") def main(): """Main execution function""" print("๐Ÿš€ Starting Production Deployment Setup") print("=" * 50) print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print("=" * 50) try: # Create all configuration files create_oauth_config() create_production_env() create_setup_script() create_backup_script() create_deployment_plan() create_monitoring_script() print("") print("๐ŸŽ‰ PRODUCTION DEPLOYMENT SETUP COMPLETED") print("=" * 50) print("๐Ÿ“ Created Files:") print(" - oauth_production_config.json") print(" - .env.production") print(" - setup_oauth.sh") print(" - backup_database.sh") print(" - production_deployment_plan.json") print(" - monitor_services.py") print("") print("๐Ÿ’ก Next Steps:") print(" 1. Run: bash setup_oauth.sh") print(" 2. Configure OAuth credentials in .env.production") print(" 3. Deploy to production server") print(" 4. Setup monitoring and backups") print("") print("โœ… System is ready for production deployment!") except Exception as e: print(f"โŒ Setup failed: {e}") return 1 return 0 if __name__ == "__main__": exit(main())