From be7011bf115c54081df0100442280b9b8ffeac00 Mon Sep 17 00:00:00 2001 From: Stefan Mitterrutzner Date: Thu, 29 Jun 2023 12:33:20 +0200 Subject: [PATCH] Adds the OCI access_token fallback field (#530) --- Sources/tart/OCI/Registry.swift | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Sources/tart/OCI/Registry.swift b/Sources/tart/OCI/Registry.swift index 1f3046a..2d5a7b9 100644 --- a/Sources/tart/OCI/Registry.swift +++ b/Sources/tart/OCI/Registry.swift @@ -45,7 +45,8 @@ struct TokenResponse: Decodable, Authentication { let defaultIssuedAt = Date() let defaultExpiresIn = 60 - var token: String + var token: String? + var accessToken: String? var expiresIn: Int? var issuedAt: Date? @@ -65,7 +66,13 @@ struct TokenResponse: Decodable, Authentication { return dateFormatter.date(from: dateString) ?? Date() } - return try decoder.decode(TokenResponse.self, from: fromData) + let response = try decoder.decode(TokenResponse.self, from: fromData) + + guard response.token != nil || response.accessToken != nil else { + throw DecodingError.keyNotFound(CodingKeys.token, .init(codingPath: [], debugDescription: "Missing token or access_token. One must be present.")) + } + + return response } var tokenExpiresAt: Date { @@ -83,7 +90,7 @@ struct TokenResponse: Decodable, Authentication { } func header() -> (String, String) { - ("Authorization", "Bearer \(token)") + return ("Authorization", "Bearer \(token ?? accessToken ?? "")") } func isValid() -> Bool {