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 }