@@ -9,6 +9,7 @@ import (
12+ "github.com/ghodss/yaml"
12 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
13 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
13 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/logger"
14 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/logger"
14 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/validation"
15 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/validation"
@@ -21,6 +22,7 @@ func main() {
21 configFlagSet := pflag.NewFlagSet("oauth2-proxy", pflag.ContinueOnError)
22 configFlagSet := pflag.NewFlagSet("oauth2-proxy", pflag.ContinueOnError)
22 config := configFlagSet.String("config", "", "path to config file")
23 config := configFlagSet.String("config", "", "path to config file")
23 alphaConfig := configFlagSet.String("alpha-config", "", "path to alpha config file (use at your own risk - the structure in this config file may change between minor releases)")
24 alphaConfig := configFlagSet.String("alpha-config", "", "path to alpha config file (use at your own risk - the structure in this config file may change between minor releases)")
25+ convertConfig := configFlagSet.Bool("convert-config-to-alpha", false, "if true, the proxy will load configuration as normal and convert existing configuration to the alpha config structure, and print it to stdout")
24 showVersion := configFlagSet.Bool("version", false, "print version string")
26 showVersion := configFlagSet.Bool("version", false, "print version string")
25 configFlagSet.Parse(os.Args[1:])
27 configFlagSet.Parse(os.Args[1:])
@@ -29,12 +31,23 @@ func main() {
34+ if *convertConfig && *alphaConfig != "" {
35+ logger.Fatal("cannot use alpha-config and conver-config-to-alpha together")
32 opts, err := loadConfiguration(*config, *alphaConfig, configFlagSet, os.Args[1:])
38 opts, err := loadConfiguration(*config, *alphaConfig, configFlagSet, os.Args[1:])
33 if err != nil {
39 if err != nil {
34 logger.Printf("ERROR: %v", err)
40 logger.Printf("ERROR: %v", err)
35 os.Exit(1)
41 os.Exit(1)
45+ if err := printConvertedConfig(opts); err != nil {
46+ logger.Fatalf("ERROR: could not convert config: %v", err)
38 err = validation.Validate(opts)
51 err = validation.Validate(opts)
39 if err != nil {
52 if err != nil {
40 logger.Printf("%s", err)
53 logger.Printf("%s", err)
@@ -134,3 +147,21 @@ func loadOptions(config string, extraFlags *pflag.FlagSet, args []string) (*opti
135 return opts, nil
148 return opts, nil
151+// printConvertedConfig extracts alpha options from the loaded configuration
152+// and renders these to stdout in YAML format.
153+func printConvertedConfig(opts *options.Options) error {
154+ alphaConfig := &options.AlphaOptions{}
155+ alphaConfig.ExtractFrom(opts)
157+ data, err := yaml.Marshal(alphaConfig)
159+ return fmt.Errorf("unable to marshal config: %v", err)
162+ if _, err := os.Stdout.Write(data); err != nil {
163+ return fmt.Errorf("unable to write output: %v", err)