scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
35 lines (28 loc) • 1.11 kB
text/typescript
import type { IamApiKey } from 'scrivito_sdk/app_support/configure';
import {
AuthorizationProvider,
TokenAuthorizationProvider,
} from 'scrivito_sdk/client';
import { fetchIamToken } from 'scrivito_sdk/node_support/fetch_iam_token';
export class ApiKeyAuthorizationProvider implements AuthorizationProvider {
constructor(apiKey: string | IamApiKey) {
const authProvider = isIamTokenAuth(apiKey)
? new TokenAuthorizationProvider(() => fetchIamToken(apiKey))
: new LegacyApiKeyAuthorizationProvider(apiKey);
this.authorize = authProvider.authorize.bind(authProvider);
}
authorize: (
request: (auth: string | undefined) => Promise<Response>
) => Promise<Response>;
}
class LegacyApiKeyAuthorizationProvider implements AuthorizationProvider {
constructor(readonly apiKey: string) {}
async authorize(
request: (auth: string | undefined) => Promise<Response>
): Promise<Response> {
return request(`Basic ${btoa(`api_token:${this.apiKey}`)}`);
}
}
function isIamTokenAuth(apiKey: string | IamApiKey): apiKey is IamApiKey {
return typeof apiKey !== 'string';
}