(cmd *cobra.Command)
| 50 | } |
| 51 | |
| 52 | func runProxy(cmd *cobra.Command) error { |
| 53 | // Load configuration |
| 54 | configPath, _ := cmd.Flags().GetString("config") |
| 55 | cfg, err := config.LoadCLIConfig(configPath) |
| 56 | if err != nil { |
| 57 | return fmt.Errorf("failed to load configuration: %w", err) |
| 58 | } |
| 59 | |
| 60 | // Apply command line flag overrides |
| 61 | if port, _ := cmd.Flags().GetInt("port"); cmd.Flags().Changed("port") { |
| 62 | cfg.Proxy.Port = port |
| 63 | } |
| 64 | if mode, _ := cmd.Flags().GetString("mode"); cmd.Flags().Changed("mode") { |
| 65 | cfg.Deployment.Mode = config.PerformanceMode(mode) |
| 66 | } |
| 67 | |
| 68 | // Validate configuration |
| 69 | if errors := config.ValidateCLIConfig(cfg); len(errors) > 0 { |
| 70 | fmt.Fprintf(os.Stderr, "Configuration validation errors:\n") |
| 71 | for _, err := range errors { |
| 72 | fmt.Fprintf(os.Stderr, " - %s\n", err.Error()) |
| 73 | } |
| 74 | return fmt.Errorf("configuration validation failed") |
| 75 | } |
| 76 | |
| 77 | // Auto-detect S3 bucket from CloudFormation stack |
| 78 | bucketName, err := autoDetectS3Bucket(cfg) |
| 79 | if err != nil { |
| 80 | return fmt.Errorf("unable to find S3 bucket. Please deploy infrastructure first:\n\n lambda-nat-proxy deploy\n\nError details: %v", err) |
| 81 | } |
| 82 | |
| 83 | // Convert to legacy config format |
| 84 | legacyConfig := cfg.ToLegacyConfig(bucketName) |
| 85 | |
| 86 | // Set up debug logging if requested |
| 87 | if debug, _ := cmd.Flags().GetBool("debug"); debug { |
| 88 | log.SetFlags(log.LstdFlags | log.Lshortfile) |
| 89 | log.Printf("Debug mode enabled") |
| 90 | log.Printf("Using configuration: AWS region=%s, S3 bucket=%s, SOCKS5 port=%d, mode=%s", |
| 91 | cfg.AWS.Region, bucketName, cfg.Proxy.Port, cfg.Deployment.Mode) |
| 92 | } |
| 93 | |
| 94 | log.Printf("Using S3 bucket: %s", legacyConfig.S3BucketName) |
| 95 | log.Printf("Using AWS region: %s", legacyConfig.AWSRegion) |
| 96 | |
| 97 | // Create AWS session |
| 98 | sess, err := session.NewSession(&aws.Config{ |
| 99 | Region: aws.String(legacyConfig.AWSRegion), |
| 100 | }) |
| 101 | if err != nil { |
| 102 | return fmt.Errorf("failed to create AWS session: %w", err) |
| 103 | } |
| 104 | |
| 105 | // Initialize components |
| 106 | stunClient := stun.New() |
| 107 | s3Coord := s3.New(awss3.New(sess), legacyConfig.S3BucketName) |
| 108 | natTraversal := nat.New() |
| 109 | socks5Proxy := socks5.New() |
no test coverage detected