(tokType string, domain string, force bool)
| 226 | } |
| 227 | |
| 228 | func getAccessCredential(tokType string, domain string, force bool) (storedCredential, string, error) { |
| 229 | filePath, err := authFilePath() |
| 230 | if err != nil { |
| 231 | return storedCredential{}, "", err |
| 232 | } |
| 233 | |
| 234 | tokenMap, err := readTokens(filePath) |
| 235 | if err != nil && !os.IsNotExist(err) { |
| 236 | return storedCredential{}, "", fmt.Errorf("read auth file %q: %w", filePath, err) |
| 237 | } |
| 238 | if tokenMap == nil { |
| 239 | tokenMap = make(TokenMap) |
| 240 | } |
| 241 | if tokenMap[domain] == nil { |
| 242 | tokenMap[domain] = make(map[string]storedCredential) |
| 243 | } |
| 244 | tokens := tokenMap[domain] |
| 245 | credential := tokens[tokType] |
| 246 | |
| 247 | if force || (credential.AccessToken == "" && credential.RefreshToken == "") { |
| 248 | if !force { |
| 249 | return storedCredential{}, "", missingAccessTokenError(tokType) |
| 250 | } |
| 251 | credential, err = requestAccessCredential(tokType, domain) |
| 252 | if err != nil { |
| 253 | return storedCredential{}, "", err |
| 254 | } |
| 255 | tokens[tokType] = credential |
| 256 | if err = writeTokens(filePath, tokenMap); err != nil { |
| 257 | return storedCredential{}, "", err |
| 258 | } |
| 259 | } |
| 260 | |
| 261 | if !force && credential.shouldRefresh(time.Now()) { |
| 262 | credential, err = refreshStoredCredential(tokType, domain, credential) |
| 263 | if err != nil { |
| 264 | details := authTokenDetails(tokType) |
| 265 | if jsonErrorCode(err) == jsonErrorCodeAppKeyRequired { |
| 266 | return storedCredential{}, "", appKeyRequiredErrorfWithDetails("refresh saved Dropbox credentials: %w; run %q again", details, err, loginCommand(tokType)) |
| 267 | } |
| 268 | return storedCredential{}, "", authRefreshFailedErrorfWithDetails("refresh saved Dropbox credentials: %w; run %q again", details, err, loginCommand(tokType)) |
| 269 | } |
| 270 | tokens[tokType] = credential |
| 271 | if err = writeTokens(filePath, tokenMap); err != nil { |
| 272 | return storedCredential{}, "", err |
| 273 | } |
| 274 | } |
| 275 | |
| 276 | return credential, filePath, nil |
| 277 | } |
| 278 | |
| 279 | func getAccessToken(tokType string, domain string, force bool) (string, string, error) { |
| 280 | credential, filePath, err := getAccessCredential(tokType, domain, force) |
no test coverage detected