credential broker: Play tokens from POST /api/google/token (cached, single flight, local key fallback), grants and APIs per package in validate, Play write preflight, apps check and the desktop Accounts view; Google 403 names the API or grant, no retry
This commit is contained in:
parent
304407e523
commit
2c5e30090f
27 changed files with 1145 additions and 43 deletions
|
|
@ -354,13 +354,12 @@ export async function authFor(store: Store, root: string): Promise<Auth> {
|
|||
const { jwt } = ascJwt(root);
|
||||
return () => 'Bearer ' + jwt();
|
||||
}
|
||||
const { playServiceAccount } = await import('../lib/credentials');
|
||||
const { tokenSource } = await import('../lib/google-auth');
|
||||
const sa = playServiceAccount(root);
|
||||
const sources = new Map<string, () => Promise<string>>();
|
||||
const { PLAY_SCOPE, playToken } = await import('../lib/google-auth');
|
||||
// the credential broker when it has the scope, else the local key; throws now when neither is there
|
||||
const sources = new Map<string, () => Promise<string>>([[PLAY_SCOPE, playToken(root, PLAY_SCOPE)]]);
|
||||
return async req => {
|
||||
const scope = PLAY_APIS[req.op.api as keyof typeof PLAY_APIS].scope;
|
||||
if (!sources.has(scope)) sources.set(scope, tokenSource(sa, scope));
|
||||
if (!sources.has(scope)) sources.set(scope, playToken(root, scope));
|
||||
return 'Bearer ' + (await sources.get(scope)!());
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue