github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/config/config.go (about)

     1  package config
     2  
     3  import (
     4  	"os"
     5  	"strconv"
     6  	"strings"
     7  	"sync"
     8  	"sync/atomic"
     9  )
    10  
    11  //Config é a estrutura que tem todas as configurações da aplicação
    12  type Config struct {
    13  	InfluxDBHost                     string
    14  	InfluxDBPort                     string
    15  	APIPort                          string
    16  	MachineName                      string
    17  	PdfAPIURL                        string
    18  	Version                          string
    19  	SEQUrl                           string
    20  	SEQAPIKey                        string
    21  	EnableRequestLog                 bool
    22  	EnablePrintRequest               bool
    23  	Environment                      string
    24  	SEQDomain                        string
    25  	ApplicationName                  string
    26  	URLBBRegisterBoleto              string
    27  	CaixaEnv                         string
    28  	URLCaixaRegisterBoleto           string
    29  	URLBBToken                       string
    30  	URLCitiBoleto                    string
    31  	URLCiti                          string
    32  	URLStoneToken                    string
    33  	StoneTokenDurationInMinutes      int
    34  	StoneAudience                    string
    35  	StoneClientID                    string
    36  	AzureStorageAccount              string
    37  	AzureStorageAccessKey            string
    38  	AzureStorageContainerName        string
    39  	AzureStorageOpenBankSkPath       string
    40  	AzureStorageOpenBankSkName       string
    41  	AzureStorageJPMorganPkName       string
    42  	AzureStorageJPMorganCrtName      string
    43  	AzureStorageJPMorganSignCrtName  string
    44  	MockMode                         bool
    45  	DevMode                          bool
    46  	HTTPOnly                         bool
    47  	AppURL                           string
    48  	ElasticURL                       string
    49  	MongoURL                         string
    50  	MongoUser                        string
    51  	MongoPassword                    string
    52  	MongoDatabase                    string
    53  	MongoBoletoCollection            string
    54  	MongoCredentialsCollection       string
    55  	MongoTokenCollection             string
    56  	MongoAuthSource                  string
    57  	MongoTimeoutConnection           int
    58  	TokenSafeDurationInMinutes       int
    59  	BoletoJSONFileStore              string
    60  	DisableLog                       bool
    61  	MaskLogs                         bool
    62  	CertBoletoPathCrt                string
    63  	CertBoletoPathKey                string
    64  	CertBoletoPathCa                 string
    65  	CertICP_PathPkey                 string
    66  	CertICP_PathChainCertificates    string
    67  	URLTicketSantander               string
    68  	URLRegisterBoletoSantander       string
    69  	URLBradescoShopFacil             string
    70  	URLBradescoNetEmpresa            string
    71  	ItauEnv                          string
    72  	SantanderEnv                     string
    73  	URLTicketItau                    string
    74  	URLRegisterBoletoItau            string
    75  	RecoveryRobotExecutionEnabled    string
    76  	RecoveryRobotExecutionInMinutes  string
    77  	TimeoutRegister                  string
    78  	TimeoutToken                     string
    79  	TimeoutDefault                   string
    80  	URLPefisaToken                   string
    81  	URLPefisaRegister                string
    82  	EnableMetrics                    bool
    83  	CertificatesPath                 string
    84  	AzureTenantId                    string
    85  	AzureClientId                    string
    86  	AzureClientSecret                string
    87  	VaultName                        string
    88  	CertificateICPName               string
    89  	PswCertificateICP                string
    90  	CertificateSSLName               string
    91  	PswCertificateSSL                string
    92  	CitibankCertificateSSLName       string
    93  	SantanderCertificateSSLName      string
    94  	EnableFileServerCertificate      bool
    95  	SplunkAddress                    string
    96  	SplunkKey                        string
    97  	SplunkSourceType                 string
    98  	SplunkIndex                      string
    99  	SplunkEnabled                    bool
   100  	SeqEnabled                       bool
   101  	WaitSecondsRetentationLog        string
   102  	ConnQueue                        string
   103  	OriginExchange                   string
   104  	OriginQueue                      string
   105  	OriginRoutingKey                 string
   106  	TimeToRecoveryWithQueueInSeconds string
   107  	Heartbeat                        string
   108  	RetryNumberGetBoleto             int
   109  	QueueMaxTLS                      string
   110  	QueueMinTLS                      string
   111  	QueueByPassCertificate           bool
   112  	ForceTLS                         bool
   113  	NewRelicAppName                  string
   114  	NewRelicLicence                  string
   115  	TelemetryEnabled                 bool
   116  	URLStoneRegister                 string
   117  	BuildVersion                     string
   118  	AzureStorageUploadPath           string
   119  	AzureStorageFallbackFolder       string
   120  	URLJPMorgan                      string
   121  }
   122  
   123  var cnf Config
   124  var scnf sync.Once
   125  var running uint64
   126  var mutex sync.Mutex
   127  
   128  //Get retorna o objeto de configurações da aplicação
   129  func Get() Config {
   130  	return cnf
   131  }
   132  
   133  func Install(mockMode, devMode, disableLog bool) {
   134  	atomic.StoreUint64(&running, 0)
   135  	hostName := getHostName()
   136  
   137  	cnf = Config{
   138  		APIPort:                          ":" + os.Getenv("API_PORT"),
   139  		PdfAPIURL:                        os.Getenv("PDF_API"),
   140  		Version:                          os.Getenv("API_VERSION"),
   141  		MachineName:                      hostName,
   142  		SEQUrl:                           os.Getenv("SEQ_URL"),     //Pegar o SEQ de dev
   143  		SEQAPIKey:                        os.Getenv("SEQ_API_KEY"), //Staging Key:
   144  		SeqEnabled:                       os.Getenv("SEQ_ENABLED") == "true",
   145  		EnableRequestLog:                 os.Getenv("ENABLE_REQUEST_LOG") == "true",   // Log a cada request no SEQ
   146  		EnablePrintRequest:               os.Getenv("ENABLE_PRINT_REQUEST") == "true", // Imprime algumas informacoes da request no console
   147  		Environment:                      os.Getenv("ENVIRONMENT"),
   148  		SEQDomain:                        "One",
   149  		ApplicationName:                  "BoletoOnline",
   150  		URLBBRegisterBoleto:              os.Getenv("URL_BB_REGISTER_BOLETO"),
   151  		CaixaEnv:                         os.Getenv("CAIXA_ENV"),
   152  		URLCaixaRegisterBoleto:           os.Getenv("URL_CAIXA"),
   153  		URLBBToken:                       os.Getenv("URL_BB_TOKEN"),
   154  		URLCitiBoleto:                    os.Getenv("URL_CITI_BOLETO"),
   155  		URLCiti:                          os.Getenv("URL_CITI"),
   156  		URLStoneToken:                    os.Getenv("URL_STONE_TOKEN"),
   157  		URLJPMorgan:                      os.Getenv("URL_JPMORGAN"),
   158  		StoneTokenDurationInMinutes:      getValueInt(os.Getenv("STONE_TOKEN_DURATION_IN_MINUTES")),
   159  		StoneAudience:                    os.Getenv("STONE_AUDIENCE"),
   160  		StoneClientID:                    os.Getenv("STONE_CLIENT_ID"),
   161  		AzureStorageAccount:              os.Getenv("AZURE_STORAGE_ACCOUNT"),
   162  		AzureStorageAccessKey:            os.Getenv("AZURE_STORAGE_ACCESS_KEY"),
   163  		AzureStorageContainerName:        os.Getenv("AZURE_STORAGE_CONTAINER_NAME"),
   164  		AzureStorageOpenBankSkPath:       os.Getenv("AZURE_STORAGE_OPEN_BANK_SK_PATH"),
   165  		AzureStorageOpenBankSkName:       os.Getenv("AZURE_STORAGE_OPEN_BANK_SK_NAME"),
   166  		AzureStorageJPMorganPkName:       os.Getenv("AZURE_STORAGE_JP_MORGAN_PK_NAME"),
   167  		AzureStorageJPMorganCrtName:      os.Getenv("AZURE_STORAGE_JP_MORGAN_CRT_NAME"),
   168  		AzureStorageJPMorganSignCrtName:  os.Getenv("AZURE_STORAGE_JP_MORGAN_SIGN_NAME"),
   169  		AzureStorageUploadPath:           os.Getenv("AZURE_STORAGE_UPLOAD_PATH"),
   170  		AzureStorageFallbackFolder:       os.Getenv("AZURE_STORAGE_FALLBACK_FOLDER"),
   171  		MockMode:                         mockMode,
   172  		AppURL:                           os.Getenv("APP_URL"),
   173  		ElasticURL:                       os.Getenv("ELASTIC_URL"),
   174  		DevMode:                          devMode,
   175  		DisableLog:                       disableLog,
   176  		MaskLogs:                         os.Getenv("MASK_LOGS") == "true",
   177  		MongoURL:                         os.Getenv("MONGODB_URL"),
   178  		MongoUser:                        os.Getenv("MONGODB_USER"),
   179  		MongoPassword:                    os.Getenv("MONGODB_PASSWORD"),
   180  		MongoDatabase:                    os.Getenv("MONGODB_DATABASE"),
   181  		MongoBoletoCollection:            os.Getenv("MONGODB_BOLETO_COLLECTION"),
   182  		MongoTokenCollection:             os.Getenv("MONGODB_TOKEN_COLLECTION"),
   183  		MongoCredentialsCollection:       os.Getenv("MONGODB_CREDENTIALS_COLLECTION"),
   184  		MongoAuthSource:                  os.Getenv("MONGODB_AUTH_SOURCE"),
   185  		MongoTimeoutConnection:           getValueInt(os.Getenv("MONGODB_TIMEOUT_CONNECTION")),
   186  		TokenSafeDurationInMinutes:       getValueInt(os.Getenv("TOKEN_SAFE_DURATION_IN_MINUTES")),
   187  		RetryNumberGetBoleto:             getValueInt(os.Getenv("RETRY_NUMBER_GET_BOLETO")),
   188  		CertBoletoPathCrt:                os.Getenv("CERT_BOLETO_CRT"),
   189  		CertBoletoPathKey:                os.Getenv("CERT_BOLETO_KEY"),
   190  		CertBoletoPathCa:                 os.Getenv("CERT_BOLETO_CA"),
   191  		CertICP_PathPkey:                 os.Getenv("CERT_ICP_BOLETO_KEY"),
   192  		CertICP_PathChainCertificates:    os.Getenv("CERT_ICP_BOLETO_CHAIN_CA"),
   193  		URLTicketSantander:               os.Getenv("URL_SANTANDER_TICKET"),
   194  		URLRegisterBoletoSantander:       os.Getenv("URL_SANTANDER_REGISTER"),
   195  		ItauEnv:                          os.Getenv("ITAU_ENV"),
   196  		SantanderEnv:                     os.Getenv("SANTANDER_ENV"),
   197  		URLTicketItau:                    os.Getenv("URL_ITAU_TICKET"),
   198  		URLRegisterBoletoItau:            os.Getenv("URL_ITAU_REGISTER"),
   199  		URLBradescoShopFacil:             os.Getenv("URL_BRADESCO_SHOPFACIL"),
   200  		URLBradescoNetEmpresa:            os.Getenv("URL_BRADESCO_NET_EMPRESA"),
   201  		InfluxDBHost:                     os.Getenv("INFLUXDB_HOST"),
   202  		InfluxDBPort:                     os.Getenv("INFLUXDB_PORT"),
   203  		RecoveryRobotExecutionEnabled:    os.Getenv("RECOVERYROBOT_EXECUTION_ENABLED"),
   204  		RecoveryRobotExecutionInMinutes:  os.Getenv("RECOVERYROBOT_EXECUTION_IN_MINUTES"),
   205  		TimeoutRegister:                  os.Getenv("TIMEOUT_REGISTER"),
   206  		TimeoutToken:                     os.Getenv("TIMEOUT_TOKEN"),
   207  		TimeoutDefault:                   os.Getenv("TIMEOUT_DEFAULT"),
   208  		URLPefisaToken:                   os.Getenv("URL_PEFISA_TOKEN"),
   209  		URLPefisaRegister:                os.Getenv("URL_PEFISA_REGISTER"),
   210  		EnableMetrics:                    os.Getenv("ENABLE_METRICS") == "true",
   211  		CertificatesPath:                 os.Getenv("PATH_CERTIFICATES"),
   212  		AzureTenantId:                    os.Getenv("AZURE_TENANT_ID"),
   213  		AzureClientId:                    os.Getenv("AZURE_CLIENT_ID"),
   214  		AzureClientSecret:                os.Getenv("AZURE_CLIENT_SECRET"),
   215  		VaultName:                        os.Getenv("VAULT_NAME"),
   216  		CertificateICPName:               os.Getenv("CERTIFICATE_ICP_NAME"),
   217  		PswCertificateICP:                os.Getenv("PSW_CERTIFICATE_ICP_NAME"),
   218  		CertificateSSLName:               os.Getenv("CERTIFICATE_SSL_NAME"),
   219  		PswCertificateSSL:                os.Getenv("PSW_CERTIFICATE_SSL_NAME"),
   220  		CitibankCertificateSSLName:       os.Getenv("CITIBANK_CERTIFICATE_SSL_NAME"),
   221  		SantanderCertificateSSLName:      os.Getenv("SANTANDER_CERTIFICATE_SSL_NAME"),
   222  		EnableFileServerCertificate:      os.Getenv("ENABLE_FILESERVER_CERTIFICATE") == "true",
   223  		SplunkSourceType:                 os.Getenv("SPLUNK_SOURCE_TYPE"),
   224  		SplunkIndex:                      os.Getenv("SPLUNK_SOURCE_INDEX"),
   225  		SplunkEnabled:                    os.Getenv("SPLUNK_ENABLED") == "true",
   226  		SplunkAddress:                    os.Getenv("SPLUNK_ADDRESS"),
   227  		SplunkKey:                        os.Getenv("SPLUNK_KEY"),
   228  		WaitSecondsRetentationLog:        os.Getenv("WAIT_SECONDS_RETENTATION_LOG"),
   229  		ConnQueue:                        os.Getenv("CONN_QUEUE"),
   230  		OriginExchange:                   os.Getenv("ORIGIN_EXCHANGE"),
   231  		OriginQueue:                      os.Getenv("ORIGIN_QUEUE"),
   232  		OriginRoutingKey:                 os.Getenv("ORIGIN_ROUTING_KEY"),
   233  		TimeToRecoveryWithQueueInSeconds: os.Getenv("TIME_TO_RECOVERY_WITH_QUEUE_IN_SECONDS"),
   234  		Heartbeat:                        os.Getenv("HEARTBEAT"),
   235  		QueueMaxTLS:                      os.Getenv("QUEUE_MAX_TLS"),
   236  		QueueMinTLS:                      os.Getenv("QUEUE_MIN_TLS"),
   237  		QueueByPassCertificate:           os.Getenv("QUEUE_BYPASS_CERTIFICATE") == "true",
   238  		ForceTLS:                         strings.ToLower(os.Getenv("FORCE_TLS")) == "true",
   239  		NewRelicAppName:                  os.Getenv("NEW_RELIC_APP_NAME"),
   240  		NewRelicLicence:                  os.Getenv("NEW_RELIC_LICENCE"),
   241  		TelemetryEnabled:                 os.Getenv("TELEMETRY_ENABLED") == "true",
   242  		URLStoneRegister:                 os.Getenv("URL_STONE_REGISTER"),
   243  		BuildVersion:                     os.Getenv("BUILD_VERSION"),
   244  	}
   245  }
   246  
   247  //IsRunning verifica se a aplicação tem que aceitar requisições
   248  func IsRunning() bool {
   249  	return atomic.LoadUint64(&running) > 0
   250  }
   251  
   252  //IsNotProduction returns true if application is running in DevMode or MockMode
   253  func IsNotProduction() bool {
   254  	return cnf.DevMode || cnf.MockMode
   255  }
   256  
   257  //Stop faz a aplicação parar de receber requisições
   258  func Stop() {
   259  	atomic.StoreUint64(&running, 1)
   260  }
   261  
   262  func getHostName() string {
   263  	machineName, err := os.Hostname()
   264  	if err != nil {
   265  		return ""
   266  	}
   267  	return machineName
   268  }
   269  
   270  func getValueInt(v string) int {
   271  	t, _ := strconv.Atoi(v)
   272  	return t
   273  }