AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/AuthenticationHelper.swift (42 lines of code) (raw):

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import Foundation import AzureCommunicationCommon class AuthenticationHelper { static func getCommunicationToken(tokenUrl: URL, aadToken: String? = nil) -> TokenRefresher { return { completionHandler in struct TokenResponse: Decodable { let token: String } var urlRequest = URLRequest(url: tokenUrl, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10) urlRequest.httpMethod = "GET" if let aadToken = aadToken { let value = "Bearer \(aadToken)" urlRequest.setValue(value, forHTTPHeaderField: "Authorization") } URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in if let error = error { print(error) completionHandler(nil, error) } else if let data = data { do { let res = try JSONDecoder().decode(TokenResponse.self, from: data) print(res.token) completionHandler(res.token, nil) } catch let error { print(error) completionHandler(nil, error) } } }.resume() } } static func fetchInitialToken(with tokenRefresher: TokenRefresher) async -> String? { return await withCheckedContinuation { continuation in tokenRefresher { token, error in if let error = error { print("ERROR: Failed to fetch initial token. \(error.localizedDescription)") } continuation.resume(returning: token) } } } }