Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions ui/app/adapters/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import RESTAdapter from '@ember-data/adapter/rest';
import codesForError from '../utils/codes-for-error';
import removeRecord from '../utils/remove-record';
import { default as NoLeaderError, NO_LEADER } from '../utils/no-leader-error';
import { ForbiddenError } from '@ember-data/adapter/error';
import classic from 'ember-classic-decorator';

export const namespace = 'v1';
Expand Down Expand Up @@ -37,6 +38,17 @@ export default class ApplicationAdapter extends RESTAdapter {
if (status === 500 && payload === NO_LEADER) {
return new NoLeaderError();
}
if (status === 403) {
const error = new ForbiddenError([
{
status: String(status),
title: 'The backend responded with an error',
detail: payload,
},
]);
error.message = payload;
return error;
}
return super.handleResponse(...arguments);
}

Expand Down
4 changes: 4 additions & 0 deletions ui/app/utils/message-from-adapter-error.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ import { ForbiddenError } from '@ember-data/adapter/error';
// Returns a single string based on the response the adapter received
export default function messageFromAdapterError(error, actionMessage) {
if (error instanceof ForbiddenError) {
const msg = error.message?.toLowerCase();
if (msg && !msg.endsWith('permission denied')) {
return error.message;
}
return `Your ACL token does not grant permission to ${actionMessage}.`;
}

Expand Down
7 changes: 6 additions & 1 deletion ui/tests/unit/utils/message-from-adapter-error-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@ import messageFromAdapterError from 'nomad-ui/utils/message-from-adapter-error';
const testCases = [
{
name: 'Forbidden Error',
in: [new ForbiddenError([], "Can't do that"), 'run tests'],
in: [new ForbiddenError([], 'Permission denied'), 'run tests'],
out: 'Your ACL token does not grant permission to run tests.',
},
{
name: 'Forbidden Error with custom message',
in: [new ForbiddenError([], 'Custom message.'), 'run tests'],
out: 'Custom message.',
},
{
name: 'Generic Error',
in: [
Expand Down
Loading