Merge pull request #23827 from backstage/fix/scaffolder-undefined-task
Scaffolder: fix auth credentials issue
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Fixed an issue causing actions to fail when retrieving auth credentials
|
||||
@@ -434,7 +434,7 @@ export class NunjucksWorkflowRunner implements WorkflowRunner {
|
||||
user: task.spec.user,
|
||||
isDryRun: task.isDryRun,
|
||||
signal: task.cancelSignal,
|
||||
getInitiatorCredentials: task.getInitiatorCredentials,
|
||||
getInitiatorCredentials: () => task.getInitiatorCredentials(),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ import {
|
||||
TaskCompletionState,
|
||||
TaskContext,
|
||||
} from '@backstage/plugin-scaffolder-node';
|
||||
import { TaskStore } from './types';
|
||||
import { InternalTaskSecrets, TaskStore } from './types';
|
||||
import { readDuration } from './helper';
|
||||
import {
|
||||
AuthService,
|
||||
@@ -179,8 +179,10 @@ export class TaskManager implements TaskContext {
|
||||
}
|
||||
|
||||
async getInitiatorCredentials(): Promise<BackstageCredentials> {
|
||||
if (this.task.secrets && '__initiatorCredentials' in this.task.secrets) {
|
||||
return JSON.parse(this.task.secrets.__initiatorCredentials);
|
||||
const secrets = this.task.secrets as InternalTaskSecrets;
|
||||
|
||||
if (secrets && secrets.__initiatorCredentials) {
|
||||
return JSON.parse(secrets.__initiatorCredentials);
|
||||
}
|
||||
if (!this.auth) {
|
||||
throw new Error(
|
||||
|
||||
@@ -228,3 +228,10 @@ export type TaskTrackType = {
|
||||
action: TemplateAction<JsonObject>,
|
||||
) => Promise<void>;
|
||||
};
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export type InternalTaskSecrets = TaskSecrets & {
|
||||
__initiatorCredentials: string;
|
||||
};
|
||||
|
||||
@@ -316,7 +316,7 @@ describe('createRouter', () => {
|
||||
createdBy: 'user:default/mock',
|
||||
secrets: {
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
|
||||
spec: {
|
||||
@@ -455,7 +455,7 @@ describe('createRouter', () => {
|
||||
createdAt: '',
|
||||
secrets: {
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
createdBy: '',
|
||||
});
|
||||
@@ -925,7 +925,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{
|
||||
createdBy: 'user:default/mock',
|
||||
secrets: {
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
|
||||
spec: {
|
||||
@@ -995,7 +995,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{
|
||||
createdBy: 'user:default/mock',
|
||||
secrets: {
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
|
||||
spec: {
|
||||
@@ -1084,7 +1084,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{
|
||||
createdBy: 'user:default/mock',
|
||||
secrets: {
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
|
||||
spec: {
|
||||
@@ -1220,7 +1220,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{
|
||||
createdAt: '',
|
||||
secrets: {
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
createdBy: '',
|
||||
});
|
||||
|
||||
@@ -88,6 +88,7 @@ import {
|
||||
IdentityApi,
|
||||
IdentityApiGetIdentityRequest,
|
||||
} from '@backstage/plugin-auth-node';
|
||||
import { InternalTaskSecrets } from '../scaffolder/tasks/types';
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -523,14 +524,16 @@ export async function createRouter(
|
||||
},
|
||||
};
|
||||
|
||||
const secrets: InternalTaskSecrets = {
|
||||
...req.body.secrets,
|
||||
backstageToken: token,
|
||||
__initiatorCredentials: JSON.stringify(credentials),
|
||||
};
|
||||
|
||||
const result = await taskBroker.dispatch({
|
||||
spec: taskSpec,
|
||||
createdBy: userEntityRef,
|
||||
secrets: {
|
||||
...req.body.secrets,
|
||||
backstageToken: token,
|
||||
initiatorCredentials: JSON.stringify(credentials),
|
||||
},
|
||||
secrets,
|
||||
});
|
||||
|
||||
res.status(201).json({ id: result.taskId });
|
||||
|
||||
Reference in New Issue
Block a user