diff --git a/cmd/dex/serve.go b/cmd/dex/serve.go index ca740593..634e2606 100644 --- a/cmd/dex/serve.go +++ b/cmd/dex/serve.go @@ -29,32 +29,47 @@ import ( "github.com/dexidp/dex/storage" ) -func commandServe() *cobra.Command { - return &cobra.Command{ - Use: "serve [ config file ]", - Short: "Connect to the storage and begin serving requests.", - Long: ``, - Example: "dex serve config.yaml", - Run: func(cmd *cobra.Command, args []string) { - if err := serve(cmd, args); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(2) - } - }, - } +type serveOptions struct { + // Config file path + config string + + // Flags + webHTTPAddr string + webHTTPSAddr string + telemetryAddr string + grpcAddr string } -func serve(cmd *cobra.Command, args []string) error { - switch len(args) { - default: - return errors.New("surplus arguments") - case 0: - // TODO(ericchiang): Consider having a default config file location. - return errors.New("no arguments provided") - case 1: +func commandServe() *cobra.Command { + options := serveOptions{} + + cmd := &cobra.Command{ + Use: "serve [flags] [config file]", + Short: "Launch Dex", + Example: "dex serve config.yaml", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + cmd.SilenceUsage = true + cmd.SilenceErrors = true + + options.config = args[0] + + return runServe(options) + }, } - configFile := args[0] + flags := cmd.Flags() + + flags.StringVar(&options.webHTTPAddr, "web-http-addr", "", "Web HTTP address") + flags.StringVar(&options.webHTTPSAddr, "web-https-addr", "", "Web HTTPS address") + flags.StringVar(&options.telemetryAddr, "telemetry-addr", "", "Telemetry address") + flags.StringVar(&options.grpcAddr, "grpc-addr", "", "gRPC API address") + + return cmd +} + +func runServe(options serveOptions) error { + configFile := options.config configData, err := ioutil.ReadFile(configFile) if err != nil { return fmt.Errorf("failed to read config file %s: %v", configFile, err) @@ -65,6 +80,8 @@ func serve(cmd *cobra.Command, args []string) error { return fmt.Errorf("error parse config file %s: %v", configFile, err) } + applyConfigOverrides(options, &c) + logger, err := newLogger(c.Logger.Level, c.Logger.Format) if err != nil { return fmt.Errorf("invalid config: %v", err) @@ -384,3 +401,21 @@ func newLogger(level string, format string) (log.Logger, error) { Level: logLevel, }, nil } + +func applyConfigOverrides(options serveOptions, config *Config) { + if options.webHTTPAddr != "" { + config.Web.HTTP = options.webHTTPAddr + } + + if options.webHTTPSAddr != "" { + config.Web.HTTPS = options.webHTTPSAddr + } + + if options.telemetryAddr != "" { + config.Telemetry.HTTP = options.telemetryAddr + } + + if options.grpcAddr != "" { + config.GRPC.Addr = options.grpcAddr + } +} diff --git a/cmd/dex/version.go b/cmd/dex/version.go index b74cb016..de206e16 100644 --- a/cmd/dex/version.go +++ b/cmd/dex/version.go @@ -13,11 +13,14 @@ func commandVersion() *cobra.Command { return &cobra.Command{ Use: "version", Short: "Print the version and exit", - Run: func(cmd *cobra.Command, args []string) { - fmt.Printf(`dex Version: %s -Go Version: %s -Go OS/ARCH: %s %s -`, version.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH) + Run: func(_ *cobra.Command, _ []string) { + fmt.Printf( + "Dex Version: %s\nGo Version: %s\nGo OS/ARCH: %s %s\n", + version.Version, + runtime.Version(), + runtime.GOOS, + runtime.GOARCH, + ) }, } }