2015-04-30 11:47:07 -05:00
package command
import (
2017-09-15 18:54:14 -05:00
"errors"
2015-04-30 11:47:07 -05:00
"os"
2016-02-19 21:14:56 -06:00
"strings"
2015-04-30 11:47:07 -05:00
"github.com/jessevdk/go-flags"
)
type Options struct {
2017-09-16 21:57:04 -05:00
Version bool ` short:"v" long:"version" description:"Print version" `
Debug bool ` short:"d" long:"debug" description:"Enable debugging mode" default:"false" `
Url string ` long:"url" description:"Database connection string" `
Host string ` long:"host" description:"Server hostname or IP" `
Port int ` long:"port" description:"Server port" default:"5432" `
User string ` long:"user" description:"Database user" `
Pass string ` long:"pass" description:"Password for user" `
DbName string ` long:"db" description:"Database name" `
Ssl string ` long:"ssl" description:"SSL option" `
HttpHost string ` long:"bind" description:"HTTP server host" default:"localhost" `
HttpPort uint ` long:"listen" description:"HTTP server listen port" default:"8081" `
AuthUser string ` long:"auth-user" description:"HTTP basic auth user" `
AuthPass string ` long:"auth-pass" description:"HTTP basic auth password" `
SkipOpen bool ` short:"s" long:"skip-open" description:"Skip browser open on start" `
Sessions bool ` long:"sessions" description:"Enable multiple database sessions" default:"false" `
Prefix string ` long:"prefix" description:"Add a url prefix" `
ReadOnly bool ` long:"readonly" description:"Run database connection in readonly mode" `
LockSession bool ` long:"lock-session" description:"Lock session to a single database connection" default:"false" `
Bookmark string ` short:"b" long:"bookmark" description:"Bookmark to use for connection. Bookmark files are stored under $HOME/.pgweb/bookmarks/*.toml" default:"" `
BookmarksDir string ` long:"bookmarks-dir" description:"Overrides default directory for bookmark files to search" default:"" `
DisablePrettyJson bool ` long:"no-pretty-json" description:"Disable JSON formatting feature for result export" default:"false" `
2017-09-19 00:45:07 -05:00
ConnectBackend string ` long:"connect-backend" description:"Enable database authentication through a third party backend" `
ConnectToken string ` long:"connect-token" description:"Authentication token for the third-party connect backend" `
2017-09-21 01:21:26 -05:00
ConnectHeaders string ` long:"connect-headers" description:"List of headers to pass to the connect backend" `
2015-04-30 11:47:07 -05:00
}
var Opts Options
func ParseOptions ( ) error {
_ , err := flags . ParseArgs ( & Opts , os . Args )
if err != nil {
return err
}
if Opts . Url == "" {
Opts . Url = os . Getenv ( "DATABASE_URL" )
}
2016-01-10 15:22:30 -06:00
if os . Getenv ( "SESSIONS" ) != "" {
Opts . Sessions = true
}
2016-11-05 21:23:37 -05:00
if os . Getenv ( "LOCK_SESSION" ) != "" {
Opts . LockSession = true
Opts . Sessions = false
}
2016-02-19 21:14:56 -06:00
if Opts . Prefix != "" && ! strings . Contains ( Opts . Prefix , "/" ) {
Opts . Prefix = Opts . Prefix + "/"
}
2016-09-28 20:37:07 -05:00
if Opts . AuthUser == "" && os . Getenv ( "AUTH_USER" ) != "" {
Opts . AuthUser = os . Getenv ( "AUTH_USER" )
}
if Opts . AuthPass == "" && os . Getenv ( "AUTH_PASS" ) != "" {
Opts . AuthPass = os . Getenv ( "AUTH_PASS" )
}
2017-09-15 18:54:14 -05:00
if Opts . ConnectBackend != "" {
if ! Opts . Sessions {
return errors . New ( "--sessions flag must be set" )
}
if Opts . ConnectToken == "" {
return errors . New ( "--connect-token flag must be set" )
}
2017-09-21 02:06:14 -05:00
} else {
if Opts . ConnectToken != "" || Opts . ConnectHeaders != "" {
return errors . New ( "--connect-backend flag must be set" )
}
2017-09-15 18:54:14 -05:00
}
2015-04-30 11:47:07 -05:00
return nil
}