github.com/uvalib/orcid-access-ws@v0.0.0-20250612130209-7d062dbabf9d/orcidaccessws/config/configuration.go (about)

     1  package config
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/uvalib/orcid-access-ws/orcidaccessws/logger"
     9  )
    10  
    11  // Config -- our configuration structure
    12  type Config struct {
    13  	ServicePort string
    14  
    15  	// database attributes
    16  	DbSecure     string // do we use TLS
    17  	DbHost       string // hostname of database server
    18  	DbName       string // database name
    19  	DbUser       string // database user name
    20  	DbPassphrase string // database user password
    21  	DbTimeout    string // connection/read/write timeout
    22  
    23  	// ORCID attributes
    24  	OrcidPublicURL    string
    25  	OrcidSecureURL    string
    26  	OrcidOauthURL     string
    27  	OrcidClientID     string
    28  	OrcidClientSecret string
    29  
    30  	// token authentication
    31  	SharedSecret string
    32  
    33  	// Service timeout
    34  	ServiceTimeout int
    35  
    36  	// diagnostic only
    37  	Debug bool
    38  }
    39  
    40  // Configuration -- our configuration instance
    41  var Configuration = loadConfig()
    42  
    43  func loadConfig() Config {
    44  
    45  	// default value for the database timeout
    46  	c := Config{DbTimeout: "10s"}
    47  
    48  	// process command line flags and setup configuration
    49  	flag.StringVar(&c.ServicePort, "port", "8080", "The service listen port")
    50  	flag.StringVar(&c.DbSecure, "dbsecure", "false", "Use TLS for the database connection")
    51  	flag.StringVar(&c.DbHost, "dbhost", "mysqldev.lib.virginia.edu:3306", "The database server hostname:port")
    52  	flag.StringVar(&c.DbName, "dbname", "orcidaccess_development", "The database name")
    53  	flag.StringVar(&c.DbUser, "dbuser", "orcidaccess", "The database username")
    54  	flag.StringVar(&c.DbPassphrase, "dbpassword", "", "The database passphrase")
    55  	flag.StringVar(&c.OrcidPublicURL, "orcidpublicurl", "https://pub.orcid.org/v3.0", "The ORCID service public URL")
    56  	flag.StringVar(&c.OrcidSecureURL, "orcidsecureurl", "https://api.sandbox.orcid.org/v3.0", "The ORCID service secure URL")
    57  	flag.StringVar(&c.OrcidOauthURL, "orcidoauthurl", "https://sandbox.orcid.org", "The ORCID service OAuth URL")
    58  	flag.StringVar(&c.OrcidClientID, "orcidclientid", "client-id", "The ORCID client identifier")
    59  	flag.StringVar(&c.OrcidClientSecret, "orcidclientsecret", "client-secret", "The ORCID client secret")
    60  	flag.IntVar(&c.ServiceTimeout, "timeout", 15, "The external service timeout in seconds")
    61  	flag.StringVar(&c.SharedSecret, "secret", "", "The JWT shared secret")
    62  	flag.BoolVar(&c.Debug, "debug", false, "Enable debugging")
    63  
    64  	flag.Parse()
    65  
    66  	logger.Log(fmt.Sprintf("INFO: ServicePort:         %s", c.ServicePort))
    67  	logger.Log(fmt.Sprintf("INFO: DbSecure:            %s", c.DbSecure))
    68  	logger.Log(fmt.Sprintf("INFO: DbHost:              %s", c.DbHost))
    69  	logger.Log(fmt.Sprintf("INFO: DbName:              %s", c.DbName))
    70  	logger.Log(fmt.Sprintf("INFO: DbUser:              %s", c.DbUser))
    71  	logger.Log(fmt.Sprintf("INFO: DbPassphrase:        %s", strings.Repeat("*", len(c.DbPassphrase))))
    72  	logger.Log(fmt.Sprintf("INFO: DbTimeout:           %s", c.DbTimeout))
    73  	logger.Log(fmt.Sprintf("INFO: OrcidPublicURL:      %s", c.OrcidPublicURL))
    74  	logger.Log(fmt.Sprintf("INFO: OrcidSecureURL:      %s", c.OrcidSecureURL))
    75  	logger.Log(fmt.Sprintf("INFO: OrcidOauthURL:       %s", c.OrcidOauthURL))
    76  	logger.Log(fmt.Sprintf("INFO: OrcidClientID:       %s", c.OrcidClientID))
    77  	logger.Log(fmt.Sprintf("INFO: OrcidClientSecret:   %s", strings.Repeat("*", len(c.OrcidClientSecret))))
    78  	logger.Log(fmt.Sprintf("INFO: SharedSecret:        %s", strings.Repeat("*", len(c.SharedSecret))))
    79  	logger.Log(fmt.Sprintf("INFO: ServiceTimeout:      %d", c.ServiceTimeout))
    80  	logger.Log(fmt.Sprintf("INFO: Debug:               %t", c.Debug))
    81  
    82  	return c
    83  }
    84  
    85  //
    86  // end of file
    87  //