buildkite-swift/Sources/Buildkite/Networking/TokenProvider.swift

46 lines
1.2 KiB
Swift

//
// TokenProvider.swift
// Buildkite
//
// Created by Aaron Sky on 6/5/22.
// Copyright © 2022 Aaron Sky. All rights reserved.
//
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
///
public protocol TokenProvider {
/// Returns a token string for the given ``APIVersion``. This will usually be a fixed constant such as ``APIVersion/REST/v2`` or ``APIVersion/GraphQL/v1``, so you can switch on the values of one of these.
func token(for version: APIVersion) -> String?
}
extension TokenProvider {
func authorizationHeader(for version: APIVersion) -> String? {
guard let token = token(for: version) else { return nil }
switch version {
case .GraphQL.v1, .REST.v2:
return "Bearer \(token)"
case .Agent.v3:
return "Token \(token)"
case .TestAnalytics.v1:
return "Token token=\(token)"
default:
return nil
}
}
}
/// Wrapper for a raw representable token provider
struct RawTokenProvider: RawRepresentable, TokenProvider {
let rawValue: String
func token(for version: APIVersion) -> String? {
rawValue
}
}