fup: fix config file handling
Whoops! Before, config files were being read but all the contents were basically being discarded. Now, we both load and actually use the config file, leading to a much more positive experience for everyone involved :)
This commit is contained in:
parent
a99e0309c5
commit
affe252f73
2 changed files with 40 additions and 37 deletions
|
@ -12,8 +12,7 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
cfgFile string
|
||||
bucketURL string
|
||||
cfgFile string
|
||||
|
||||
rootCmd = &cobra.Command{
|
||||
Use: "fup",
|
||||
|
@ -22,6 +21,8 @@ var (
|
|||
}
|
||||
)
|
||||
|
||||
func bucketURL() string { return viper.GetString("storage.bucketURL") }
|
||||
|
||||
func Execute() error {
|
||||
return rootCmd.Execute()
|
||||
}
|
||||
|
@ -30,8 +31,9 @@ func init() {
|
|||
cobra.OnInitialize(initConfig)
|
||||
|
||||
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file")
|
||||
rootCmd.PersistentFlags().StringVar(&bucketURL, "bucket-url", "mem://", "gocloud.dev-compatible URL to use for file storage")
|
||||
rootCmd.PersistentFlags().String("bucket-url", "mem://", "gocloud.dev-compatible URL to use for file storage")
|
||||
viper.BindPFlag("storage.bucketURL", rootCmd.PersistentFlags().Lookup("bucket-url"))
|
||||
viper.SetDefault("storage.bucketURL", "mem://")
|
||||
}
|
||||
|
||||
func initConfig() {
|
||||
|
|
|
@ -24,45 +24,46 @@ import (
|
|||
func init() {
|
||||
rootCmd.AddCommand(serveCmd)
|
||||
|
||||
serveCmd.Flags().StringVar(&serveRoot, "root", "http://localhost:8191/", "Application root address.")
|
||||
serveCmd.Flags().String("root", "http://localhost:8191/", "Application root address.")
|
||||
viper.BindPFlag("serve.app-root", serveCmd.Flags().Lookup("root"))
|
||||
serveCmd.Flags().StringVar(&serveStaticRoot, "static-root", "/static/", "Root address from which static assets should be referenced.")
|
||||
viper.BindPFlag("serve.static-root", serveCmd.Flags().Lookup("static-root"))
|
||||
serveCmd.Flags().StringVarP(&serveBind, "listen", "l", ":8191", "Bind address for HTTP server.")
|
||||
viper.BindPFlag("serve.listen", serveCmd.Flags().Lookup("listen"))
|
||||
serveCmd.Flags().BoolVar(&serveDirectOnly, "direct-only", false, "If set, all file serving will be proxied, even if the backend supports signed URLs.")
|
||||
viper.BindPFlag("serve.direct-only", serveCmd.Flags().Lookup("direct-only"))
|
||||
viper.SetDefault("serve.app-root", "http://localhost:8191/")
|
||||
|
||||
serveCmd.Flags().StringVar(&serveCheddarPath, "cheddar-path", "cheddar", "Path to 'cheddar' binary to use for syntax highlighting. If it cannot be found, syntax highlighting and markdown rendering will be disabled.")
|
||||
serveCmd.Flags().String("static-root", "/static/", "Root address from which static assets should be referenced.")
|
||||
viper.BindPFlag("serve.static-root", serveCmd.Flags().Lookup("static-root"))
|
||||
viper.SetDefault("serve.static-root", "/static/")
|
||||
|
||||
serveCmd.Flags().StringP("listen", "l", ":8191", "Bind address for HTTP server.")
|
||||
viper.BindPFlag("serve.listen", serveCmd.Flags().Lookup("listen"))
|
||||
viper.SetDefault("serve.listen", ":8191")
|
||||
|
||||
serveCmd.Flags().Bool("direct-only", false, "If set, all file serving will be proxied, even if the backend supports signed URLs.")
|
||||
viper.BindPFlag("serve.direct-only", serveCmd.Flags().Lookup("direct-only"))
|
||||
viper.SetDefault("serve.direct-only", false)
|
||||
|
||||
serveCmd.Flags().String("cheddar-path", "cheddar", "Path to 'cheddar' binary to use for syntax highlighting. If it cannot be found, syntax highlighting and markdown rendering will be disabled.")
|
||||
viper.BindPFlag("serve.cheddar.path", serveCmd.Flags().Lookup("cheddar-path"))
|
||||
serveCmd.Flags().StringVar(&serveCheddarAddr, "cheddar-address", "", "If non-empty, will be used instead of attempting to spawn a copy of cheddar.")
|
||||
viper.SetDefault("serve.cheddar.path", "cheddar")
|
||||
|
||||
serveCmd.Flags().String("cheddar-address", "", "If non-empty, will be used instead of attempting to spawn a copy of cheddar.")
|
||||
viper.BindPFlag("serve.cheddar.address", serveCmd.Flags().Lookup("cheddar-address"))
|
||||
|
||||
serveCmd.Flags().StringVar(&serveAuthToken, "auth-token", "", "If non-empty, this auth token will be required as the Basic Auth password.")
|
||||
serveCmd.Flags().String("auth-token", "", "If non-empty, this auth token will be required as the Basic Auth password.")
|
||||
viper.BindPFlag("serve.auth.token", serveCmd.Flags().Lookup("auth-token"))
|
||||
serveCmd.Flags().StringVar(&serveAuthRealm, "auth-realm", "fup", "Will be used as the realm for Basic Auth.")
|
||||
serveCmd.Flags().String("auth-realm", "fup", "Will be used as the realm for Basic Auth.")
|
||||
viper.BindPFlag("serve.auth.realm", serveCmd.Flags().Lookup("auth-realm"))
|
||||
viper.SetDefault("serve.auth.realm", "fup")
|
||||
}
|
||||
|
||||
var (
|
||||
serveBind string
|
||||
serveRoot string
|
||||
serveStaticRoot string
|
||||
serveDirectOnly bool
|
||||
serveCheddarPath string
|
||||
serveCheddarAddr string
|
||||
serveAuthToken string
|
||||
serveAuthRealm string
|
||||
|
||||
serveCmd = &cobra.Command{
|
||||
Use: "serve",
|
||||
Short: "Serve HTTP",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if !strings.HasSuffix(serveRoot, "/") {
|
||||
return fmt.Errorf("--root flag should end in / (value is %q)", serveRoot)
|
||||
if !strings.HasSuffix(viper.GetString("serve.app-root"), "/") {
|
||||
return fmt.Errorf("--root flag (serve.app-root) should end in / (value is %q)", viper.GetString("serve.app-root"))
|
||||
}
|
||||
if !strings.HasSuffix(serveStaticRoot, "/") {
|
||||
return fmt.Errorf("--static-root flag should end in / (value is %q)", serveStaticRoot)
|
||||
if !strings.HasSuffix(viper.GetString("serve.static-root"), "/") {
|
||||
return fmt.Errorf("--static-root flag (serve.static-root) should end in / (value is %q)", viper.GetString("serve.static-root"))
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
@ -75,11 +76,11 @@ var (
|
|||
Templates: fupstatic.Templates,
|
||||
Static: fupstatic.Static,
|
||||
StaticRoot: safehtml.TrustedResourceURLFromFlag(cmd.Flag("static-root").Value),
|
||||
AppRoot: serveRoot,
|
||||
StorageURL: bucketURL,
|
||||
RedirectToBlobstore: !serveDirectOnly,
|
||||
AppRoot: viper.GetString("serve.app-root"),
|
||||
StorageURL: bucketURL(),
|
||||
RedirectToBlobstore: !viper.GetBool("serve.direct-only"),
|
||||
Highlighter: highlighter,
|
||||
AuthMiddleware: fuphttp.TokenAuthMiddleware(serveAuthToken, serveAuthRealm),
|
||||
AuthMiddleware: fuphttp.TokenAuthMiddleware(viper.GetString("serve.auth.token"), viper.GetString("serve.auth.realm")),
|
||||
}
|
||||
a, err := fuphttp.New(ctx, cfg)
|
||||
if err != nil {
|
||||
|
@ -87,8 +88,8 @@ var (
|
|||
}
|
||||
http.Handle("/", a.Handler())
|
||||
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(fupstatic.Static))))
|
||||
log.Printf("Serving on %s", serveBind)
|
||||
if serveBind == "systemd" {
|
||||
log.Printf("Serving on %s", viper.GetString("serve.listen"))
|
||||
if viper.GetString("serve.listen") == "systemd" {
|
||||
listeners, err := activation.Listeners()
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting systemd socket-activated listeners: %v", err)
|
||||
|
@ -98,19 +99,19 @@ var (
|
|||
}
|
||||
return http.Serve(listeners[0], nil)
|
||||
}
|
||||
return http.ListenAndServe(serveBind, nil)
|
||||
return http.ListenAndServe(viper.GetString("serve.listen"), nil)
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
func serveCheddar(ctx context.Context) (*minicheddar.Cheddar, error) {
|
||||
if serveCheddarAddr != "" {
|
||||
if serveCheddarAddr := viper.GetString("serve.cheddar.addr"); serveCheddarAddr != "" {
|
||||
return minicheddar.Remote(serveCheddarAddr), nil
|
||||
}
|
||||
|
||||
cpath, err := exec.LookPath(serveCheddarPath)
|
||||
cpath, err := exec.LookPath(viper.GetString("serve.cheddar.path"))
|
||||
if err != nil {
|
||||
log.Printf("couldn't find cheddar at %q; disabling syntax highlighting", serveCheddarPath)
|
||||
log.Printf("couldn't find cheddar at %q; disabling syntax highlighting", viper.GetString("serve.cheddar.path"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue