|
|
|
|
@ -29,32 +29,47 @@ import (
|
|
|
|
|
"github.com/dexidp/dex/storage" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type serveOptions struct { |
|
|
|
|
// Config file path
|
|
|
|
|
config string |
|
|
|
|
|
|
|
|
|
// Flags
|
|
|
|
|
webHTTPAddr string |
|
|
|
|
webHTTPSAddr string |
|
|
|
|
telemetryAddr string |
|
|
|
|
grpcAddr string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func commandServe() *cobra.Command { |
|
|
|
|
return &cobra.Command{ |
|
|
|
|
Use: "serve [ config file ]", |
|
|
|
|
Short: "Connect to the storage and begin serving requests.", |
|
|
|
|
Long: ``, |
|
|
|
|
options := serveOptions{} |
|
|
|
|
|
|
|
|
|
cmd := &cobra.Command{ |
|
|
|
|
Use: "serve [flags] [config file]", |
|
|
|
|
Short: "Launch Dex", |
|
|
|
|
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) |
|
|
|
|
} |
|
|
|
|
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) |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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: |
|
|
|
|
} |
|
|
|
|
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 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
configFile := args[0] |
|
|
|
|
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 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|