feat(zarinhub): automate access token refresh

This commit is contained in:
2026-09-21 16:27:30 +03:30
parent 7f2f26e596
commit c54332cd61
9 changed files with 621 additions and 36 deletions

View File

@@ -8,12 +8,14 @@ import (
)
type config struct {
ServerAddr string
FrontendOrigin string
ZarinHubEndpoint string
ZarinHubToken string
ZarinHubTimeout time.Duration
DatabasePath string
ServerAddr string
FrontendOrigin string
ZarinHubEndpoint string
ZarinHubAuthEndpoint string
ZarinHubUsername string
ZarinHubPassword string
ZarinHubTimeout time.Duration
DatabasePath string
}
func loadConfig() (config, error) {
@@ -21,9 +23,14 @@ func loadConfig() (config, error) {
}
func readConfig(getenv func(string) string) (config, error) {
token := strings.TrimSpace(getenv("ZARINHUB_ACCESS_TOKEN"))
if token == "" {
return config{}, fmt.Errorf("ZARINHUB_ACCESS_TOKEN is required")
username := strings.TrimSpace(getenv("ZARINHUB_API_USERNAME"))
if username == "" {
return config{}, fmt.Errorf("ZARINHUB_API_USERNAME is required")
}
password := strings.TrimSpace(getenv("ZARINHUB_API_PASSWORD"))
if password == "" {
return config{}, fmt.Errorf("ZARINHUB_API_PASSWORD is required")
}
timeoutText := valueOrDefault(
@@ -50,8 +57,13 @@ func readConfig(getenv func(string) string) (config, error) {
getenv("ZARINHUB_ENDPOINT"),
"https://zarin-hub.com/api/v5/KYC/CardToIban",
),
ZarinHubToken: token,
ZarinHubTimeout: timeout,
ZarinHubAuthEndpoint: valueOrDefault(
getenv("ZARINHUB_AUTH_ENDPOINT"),
"https://zarin-hub.com/api/v5/Authentication/GetToken",
),
ZarinHubUsername: username,
ZarinHubPassword: password,
ZarinHubTimeout: timeout,
DatabasePath: valueOrDefault(
getenv("DATABASE_PATH"),
"./card-to-iban.db",