Compare commits
1 Commits
AUT-770
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
![]() |
06b99ac58a |
@@ -8,7 +8,7 @@
|
||||
"version": "latest"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"version": 18
|
||||
"version": 20
|
||||
},
|
||||
"ghcr.io/devcontainers/features/common-utils:1": {
|
||||
"username": "vscode",
|
||||
|
@@ -57,7 +57,7 @@
|
||||
"morgan": "^1.10.0",
|
||||
"multer": "1.4.5-lts.1",
|
||||
"node-html-markdown": "^1.3.0",
|
||||
"nodemailer": "6.7.0",
|
||||
"nodemailer": "6.9.9",
|
||||
"oauth-1.0a": "^2.2.6",
|
||||
"objection": "^3.0.0",
|
||||
"passport": "^0.6.0",
|
||||
|
@@ -1,120 +0,0 @@
|
||||
import defineAction from '../../../../helpers/define-action.js';
|
||||
|
||||
export default defineAction({
|
||||
name: 'Change a scheduled event',
|
||||
key: 'changeScheduledEvent',
|
||||
description: 'Changes a scheduled event',
|
||||
arguments: [
|
||||
{
|
||||
label: 'Scheduled Event',
|
||||
key: 'scheduledEventId',
|
||||
type: 'dropdown',
|
||||
required: true,
|
||||
description: '',
|
||||
variables: false,
|
||||
source: {
|
||||
type: 'query',
|
||||
name: 'getDynamicData',
|
||||
arguments: [
|
||||
{
|
||||
name: 'key',
|
||||
value: 'listScheduledEvents',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Status',
|
||||
key: 'status',
|
||||
type: 'dropdown',
|
||||
required: false,
|
||||
description:
|
||||
'After the status has been changed to COMPLETED or CANCELED, it becomes immutable and cannot be modified further.',
|
||||
variables: true,
|
||||
options: [
|
||||
{ label: 'SCHEDULED', value: 1 },
|
||||
{ label: 'ACTIVE', value: 2 },
|
||||
{ label: 'COMPLETED', value: 3 },
|
||||
{ label: 'CANCELED', value: 4 },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Type',
|
||||
key: 'entityType',
|
||||
type: 'dropdown',
|
||||
required: true,
|
||||
variables: true,
|
||||
options: [
|
||||
{ label: 'Stage channel', value: 1 },
|
||||
{ label: 'Voice channel', value: 2 },
|
||||
{ label: 'External', value: 3 },
|
||||
],
|
||||
additionalFields: {
|
||||
type: 'query',
|
||||
name: 'getDynamicFields',
|
||||
arguments: [
|
||||
{
|
||||
name: 'key',
|
||||
value: 'listScheduledEventFieldsForChange',
|
||||
},
|
||||
{
|
||||
name: 'parameters.entityType',
|
||||
value: '{parameters.entityType}',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Name',
|
||||
key: 'name',
|
||||
type: 'string',
|
||||
required: false,
|
||||
variables: true,
|
||||
},
|
||||
{
|
||||
label: 'Description',
|
||||
key: 'description',
|
||||
type: 'string',
|
||||
required: false,
|
||||
variables: true,
|
||||
},
|
||||
{
|
||||
label: 'Image',
|
||||
key: 'image',
|
||||
type: 'string',
|
||||
required: false,
|
||||
description:
|
||||
'Image as DataURI scheme [data:image/<jpeg/png/gif>;base64,BASE64_ENCODED_<JPEG/PNG/GIF>_IMAGE_DATA]',
|
||||
variables: true,
|
||||
},
|
||||
],
|
||||
|
||||
async run($) {
|
||||
const data = {
|
||||
channel_id: $.step.parameters.channel_id,
|
||||
name: $.step.parameters.name,
|
||||
scheduled_start_time: $.step.parameters.scheduledStartTime,
|
||||
scheduled_end_time: $.step.parameters.scheduledEndTime,
|
||||
description: $.step.parameters.description,
|
||||
entity_type: $.step.parameters.entityType,
|
||||
image: $.step.parameters.image,
|
||||
};
|
||||
|
||||
const isExternal = $.step.parameters.entityType === 3;
|
||||
|
||||
if (isExternal) {
|
||||
data.entity_metadata = {
|
||||
location: $.step.parameters.location,
|
||||
};
|
||||
|
||||
data.channel_id = null;
|
||||
}
|
||||
|
||||
const response = await $.http?.patch(
|
||||
`/guilds/${$.auth.data.guildId}/scheduled-events/${$.step.parameters.scheduledEventId}`,
|
||||
data
|
||||
);
|
||||
|
||||
$.setActionItem({ raw: response.data });
|
||||
},
|
||||
});
|
@@ -1,9 +1,4 @@
|
||||
import changeScheduledEvent from './change-scheduled-event/index.js';
|
||||
import sendMessageToChannel from './send-message-to-channel/index.js';
|
||||
import createScheduledEvent from './create-scheduled-event/index.js';
|
||||
|
||||
export default [
|
||||
changeScheduledEvent,
|
||||
sendMessageToChannel,
|
||||
createScheduledEvent,
|
||||
];
|
||||
export default [sendMessageToChannel, createScheduledEvent];
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import listChannels from './list-channels/index.js';
|
||||
import listScheduledEvents from './list-scheduled-events/index.js';
|
||||
import listVoiceChannels from './list-voice-channels/index.js';
|
||||
|
||||
export default [listChannels, listScheduledEvents, listVoiceChannels];
|
||||
export default [listChannels, listVoiceChannels];
|
||||
|
@@ -1,24 +0,0 @@
|
||||
export default {
|
||||
name: 'List scheduled events',
|
||||
key: 'listScheduledEvents',
|
||||
|
||||
async run($) {
|
||||
const scheduledEvents = {
|
||||
data: [],
|
||||
error: null,
|
||||
};
|
||||
|
||||
const response = await $.http.get(
|
||||
`/guilds/${$.auth.data.guildId}/scheduled-events`
|
||||
);
|
||||
|
||||
scheduledEvents.data = response.data.map((scheduledEvent) => {
|
||||
return {
|
||||
value: scheduledEvent.id,
|
||||
name: scheduledEvent.name,
|
||||
};
|
||||
});
|
||||
|
||||
return scheduledEvents;
|
||||
},
|
||||
};
|
@@ -1,7 +1,3 @@
|
||||
import listExternalScheduledEventFields from './list-external-scheduled-event-fields/index.js';
|
||||
import listScheduledEventFieldsForChange from './list-scheduled-event-fields-for-change/index.js';
|
||||
|
||||
export default [
|
||||
listExternalScheduledEventFields,
|
||||
listScheduledEventFieldsForChange,
|
||||
];
|
||||
export default [listExternalScheduledEventFields];
|
||||
|
@@ -1,87 +0,0 @@
|
||||
export default {
|
||||
name: 'List scheduled event fields for change',
|
||||
key: 'listScheduledEventFieldsForChange',
|
||||
|
||||
async run($) {
|
||||
const isExternal = $.step.parameters.entityType === 3;
|
||||
|
||||
if (isExternal) {
|
||||
return [
|
||||
{
|
||||
label: 'Location',
|
||||
key: 'location',
|
||||
type: 'string',
|
||||
required: true,
|
||||
description:
|
||||
'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL',
|
||||
variables: true,
|
||||
},
|
||||
{
|
||||
label: 'Start-Time',
|
||||
key: 'scheduledStartTime',
|
||||
type: 'string',
|
||||
required: false,
|
||||
description: 'The time the event will start [ISO8601]',
|
||||
variables: true,
|
||||
},
|
||||
{
|
||||
label: 'End-Time',
|
||||
key: 'scheduledEndTime',
|
||||
type: 'string',
|
||||
required: true,
|
||||
description:
|
||||
'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL',
|
||||
variables: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
{
|
||||
label: 'Channel',
|
||||
key: 'channel_id',
|
||||
type: 'dropdown',
|
||||
required: true,
|
||||
description:
|
||||
'Pick a voice or stage channel to link the event to. This will be omitted if type is EXTERNAL',
|
||||
variables: true,
|
||||
source: {
|
||||
type: 'query',
|
||||
name: 'getDynamicData',
|
||||
arguments: [
|
||||
{
|
||||
name: 'key',
|
||||
value: 'listVoiceChannels',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Location',
|
||||
key: 'location',
|
||||
type: 'string',
|
||||
required: false,
|
||||
description:
|
||||
'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL',
|
||||
variables: true,
|
||||
},
|
||||
{
|
||||
label: 'Start-Time',
|
||||
key: 'scheduledStartTime',
|
||||
type: 'string',
|
||||
required: false,
|
||||
description: 'The time the event will start [ISO8601]',
|
||||
variables: true,
|
||||
},
|
||||
{
|
||||
label: 'End-Time',
|
||||
key: 'scheduledEndTime',
|
||||
type: 'string',
|
||||
required: false,
|
||||
description:
|
||||
'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL',
|
||||
variables: true,
|
||||
},
|
||||
];
|
||||
},
|
||||
};
|
@@ -1,6 +0,0 @@
|
||||
import { renderObject } from '../../../../../helpers/renderer.js';
|
||||
import permissionCatalog from '../../../../../helpers/permission-catalog.ee.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
renderObject(response, permissionCatalog);
|
||||
};
|
@@ -1,32 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createRole } from '../../../../../../test/factories/role.js';
|
||||
import { createUser } from '../../../../../../test/factories/user.js';
|
||||
import getPermissionsCatalogMock from '../../../../../../test/mocks/rest/api/v1/admin/permissions/get-permissions-catalog.ee.js';
|
||||
import * as license from '../../../../../helpers/license.ee.js';
|
||||
|
||||
describe('GET /api/v1/admin/permissions/catalog', () => {
|
||||
let role, currentUser, token;
|
||||
|
||||
beforeEach(async () => {
|
||||
role = await createRole({ key: 'admin' });
|
||||
currentUser = await createUser({ roleId: role.id });
|
||||
|
||||
token = createAuthTokenByUserId(currentUser.id);
|
||||
});
|
||||
|
||||
it('should return roles', async () => {
|
||||
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
|
||||
|
||||
const response = await request(app)
|
||||
.get('/api/v1/admin/permissions/catalog')
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedPayload = await getPermissionsCatalogMock();
|
||||
|
||||
expect(response.body).toEqual(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,16 +0,0 @@
|
||||
import { renderObject } from '../../../../../helpers/renderer.js';
|
||||
import Role from '../../../../../models/role.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
const role = await Role.query()
|
||||
.leftJoinRelated({
|
||||
permissions: true,
|
||||
})
|
||||
.withGraphFetched({
|
||||
permissions: true,
|
||||
})
|
||||
.findById(request.params.roleId)
|
||||
.throwIfNotFound();
|
||||
|
||||
renderObject(response, role);
|
||||
};
|
@@ -1,38 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createRole } from '../../../../../../test/factories/role.js';
|
||||
import { createUser } from '../../../../../../test/factories/user.js';
|
||||
import { createPermission } from '../../../../../../test/factories/permission.js';
|
||||
import getRoleMock from '../../../../../../test/mocks/rest/api/v1/admin/roles/get-role.ee.js';
|
||||
import * as license from '../../../../../helpers/license.ee.js';
|
||||
|
||||
describe('GET /api/v1/admin/roles/:roleId', () => {
|
||||
let role, currentUser, token, permissionOne, permissionTwo;
|
||||
|
||||
beforeEach(async () => {
|
||||
role = await createRole({ key: 'admin' });
|
||||
permissionOne = await createPermission({ roleId: role.id });
|
||||
permissionTwo = await createPermission({ roleId: role.id });
|
||||
currentUser = await createUser({ roleId: role.id });
|
||||
|
||||
token = createAuthTokenByUserId(currentUser.id);
|
||||
});
|
||||
|
||||
it('should return roles', async () => {
|
||||
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
|
||||
|
||||
const response = await request(app)
|
||||
.get(`/api/v1/admin/roles/${role.id}`)
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedPayload = await getRoleMock(role, [
|
||||
permissionOne,
|
||||
permissionTwo,
|
||||
]);
|
||||
|
||||
expect(response.body).toEqual(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,8 +0,0 @@
|
||||
import { renderObject } from '../../../../../helpers/renderer.js';
|
||||
import Role from '../../../../../models/role.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
const roles = await Role.query().orderBy('name');
|
||||
|
||||
renderObject(response, roles);
|
||||
};
|
@@ -1,33 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createRole } from '../../../../../../test/factories/role.js';
|
||||
import { createUser } from '../../../../../../test/factories/user.js';
|
||||
import getRolesMock from '../../../../../../test/mocks/rest/api/v1/admin/roles/get-roles.ee.js';
|
||||
import * as license from '../../../../../helpers/license.ee.js';
|
||||
|
||||
describe('GET /api/v1/admin/roles', () => {
|
||||
let roleOne, roleTwo, currentUser, token;
|
||||
|
||||
beforeEach(async () => {
|
||||
roleOne = await createRole({ key: 'admin' });
|
||||
roleTwo = await createRole({ key: 'user' });
|
||||
currentUser = await createUser({ roleId: roleOne.id });
|
||||
|
||||
token = createAuthTokenByUserId(currentUser.id);
|
||||
});
|
||||
|
||||
it('should return roles', async () => {
|
||||
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
|
||||
|
||||
const response = await request(app)
|
||||
.get('/api/v1/admin/roles')
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedPayload = await getRolesMock([roleOne, roleTwo]);
|
||||
|
||||
expect(response.body).toEqual(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,10 +0,0 @@
|
||||
import { renderObject } from '../../../../../helpers/renderer.js';
|
||||
import SamlAuthProvider from '../../../../../models/saml-auth-provider.ee.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
const samlAuthProvider = await SamlAuthProvider.query()
|
||||
.findById(request.params.samlAuthProviderId)
|
||||
.throwIfNotFound();
|
||||
|
||||
renderObject(response, samlAuthProvider);
|
||||
};
|
@@ -1,34 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createRole } from '../../../../../../test/factories/role.js';
|
||||
import { createUser } from '../../../../../../test/factories/user.js';
|
||||
import { createSamlAuthProvider } from '../../../../../../test/factories/saml-auth-provider.ee.js';
|
||||
import getSamlAuthProviderMock from '../../../../../../test/mocks/rest/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.js';
|
||||
import * as license from '../../../../../helpers/license.ee.js';
|
||||
|
||||
describe('GET /api/v1/admin/saml-auth-provider/:samlAuthProviderId', () => {
|
||||
let samlAuthProvider, currentUser, token;
|
||||
|
||||
beforeEach(async () => {
|
||||
const role = await createRole({ key: 'admin' });
|
||||
currentUser = await createUser({ roleId: role.id });
|
||||
samlAuthProvider = await createSamlAuthProvider();
|
||||
|
||||
token = createAuthTokenByUserId(currentUser.id);
|
||||
});
|
||||
|
||||
it('should return saml auth provider with specified id', async () => {
|
||||
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
|
||||
|
||||
const response = await request(app)
|
||||
.get(`/api/v1/admin/saml-auth-providers/${samlAuthProvider.id}`)
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedPayload = await getSamlAuthProviderMock(samlAuthProvider);
|
||||
|
||||
expect(response.body).toEqual(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,11 +0,0 @@
|
||||
import { renderObject } from '../../../../../helpers/renderer.js';
|
||||
import SamlAuthProvider from '../../../../../models/saml-auth-provider.ee.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
const samlAuthProviders = await SamlAuthProvider.query().orderBy(
|
||||
'created_at',
|
||||
'desc'
|
||||
);
|
||||
|
||||
renderObject(response, samlAuthProviders);
|
||||
};
|
@@ -1,39 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createRole } from '../../../../../../test/factories/role.js';
|
||||
import { createUser } from '../../../../../../test/factories/user.js';
|
||||
import { createSamlAuthProvider } from '../../../../../../test/factories/saml-auth-provider.ee.js';
|
||||
import getSamlAuthProvidersMock from '../../../../../../test/mocks/rest/api/v1/admin/saml-auth-providers/get-saml-auth-providers.ee.js';
|
||||
import * as license from '../../../../../helpers/license.ee.js';
|
||||
|
||||
describe('GET /api/v1/admin/saml-auth-providers', () => {
|
||||
let samlAuthProviderOne, samlAuthProviderTwo, currentUser, token;
|
||||
|
||||
beforeEach(async () => {
|
||||
const role = await createRole({ key: 'admin' });
|
||||
currentUser = await createUser({ roleId: role.id });
|
||||
|
||||
samlAuthProviderOne = await createSamlAuthProvider();
|
||||
samlAuthProviderTwo = await createSamlAuthProvider();
|
||||
|
||||
token = createAuthTokenByUserId(currentUser.id);
|
||||
});
|
||||
|
||||
it('should return saml auth providers', async () => {
|
||||
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
|
||||
|
||||
const response = await request(app)
|
||||
.get('/api/v1/admin/saml-auth-providers')
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedPayload = await getSamlAuthProvidersMock([
|
||||
samlAuthProviderTwo,
|
||||
samlAuthProviderOne,
|
||||
]);
|
||||
|
||||
expect(response.body).toEqual(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,19 +0,0 @@
|
||||
import { renderObject } from '../../../../helpers/renderer.js';
|
||||
import axios from '../../../../helpers/axios-with-proxy.js';
|
||||
import logger from '../../../../helpers/logger.js';
|
||||
|
||||
const NOTIFICATIONS_URL =
|
||||
'https://notifications.automatisch.io/notifications.json';
|
||||
|
||||
export default async (request, response) => {
|
||||
let notifications = [];
|
||||
|
||||
try {
|
||||
const response = await axios.get(NOTIFICATIONS_URL);
|
||||
notifications = response.data;
|
||||
} catch (error) {
|
||||
logger.error('Error fetching notifications API endpoint!', error);
|
||||
}
|
||||
|
||||
renderObject(response, notifications);
|
||||
};
|
@@ -1,9 +0,0 @@
|
||||
import { describe, it } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../app.js';
|
||||
|
||||
describe('GET /api/v1/automatisch/notifications', () => {
|
||||
it('should return Automatisch notifications', async () => {
|
||||
await request(app).get('/api/v1/automatisch/notifications').expect(200);
|
||||
});
|
||||
});
|
@@ -1,8 +0,0 @@
|
||||
import { renderObject } from '../../../../helpers/renderer.js';
|
||||
import Billing from '../../../../helpers/billing/index.ee.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
const paddleInfo = Billing.paddleInfo;
|
||||
|
||||
renderObject(response, paddleInfo);
|
||||
};
|
@@ -1,33 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createUser } from '../../../../../test/factories/user.js';
|
||||
import getPaddleInfoMock from '../../../../../test/mocks/rest/api/v1/payment/get-paddle-info.js';
|
||||
import appConfig from '../../../../config/app.js';
|
||||
import billing from '../../../../helpers/billing/index.ee.js';
|
||||
|
||||
describe('GET /api/v1/payment/paddle-info', () => {
|
||||
let user, token;
|
||||
|
||||
beforeEach(async () => {
|
||||
user = await createUser();
|
||||
token = createAuthTokenByUserId(user.id);
|
||||
|
||||
vi.spyOn(appConfig, 'isCloud', 'get').mockReturnValue(true);
|
||||
vi.spyOn(billing.paddleInfo, 'vendorId', 'get').mockReturnValue(
|
||||
'sampleVendorId'
|
||||
);
|
||||
});
|
||||
|
||||
it('should return payment plans', async () => {
|
||||
const response = await request(app)
|
||||
.get('/api/v1/payment/paddle-info')
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedResponsePayload = await getPaddleInfoMock();
|
||||
|
||||
expect(response.body).toEqual(expectedResponsePayload);
|
||||
});
|
||||
});
|
@@ -1,8 +0,0 @@
|
||||
import { renderObject } from '../../../../helpers/renderer.js';
|
||||
import Billing from '../../../../helpers/billing/index.ee.js';
|
||||
|
||||
export default async (request, response) => {
|
||||
const paymentPlans = Billing.paddlePlans;
|
||||
|
||||
renderObject(response, paymentPlans);
|
||||
};
|
@@ -1,29 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import app from '../../../../app.js';
|
||||
import createAuthTokenByUserId from '../../../../helpers/create-auth-token-by-user-id.js';
|
||||
import { createUser } from '../../../../../test/factories/user.js';
|
||||
import getPaymentPlansMock from '../../../../../test/mocks/rest/api/v1/payment/get-plans.js';
|
||||
import appConfig from '../../../../config/app.js';
|
||||
|
||||
describe('GET /api/v1/payment/plans', () => {
|
||||
let user, token;
|
||||
|
||||
beforeEach(async () => {
|
||||
user = await createUser();
|
||||
token = createAuthTokenByUserId(user.id);
|
||||
|
||||
vi.spyOn(appConfig, 'isCloud', 'get').mockReturnValue(true);
|
||||
});
|
||||
|
||||
it('should return payment plans', async () => {
|
||||
const response = await request(app)
|
||||
.get('/api/v1/payment/plans')
|
||||
.set('Authorization', token)
|
||||
.expect(200);
|
||||
|
||||
const expectedResponsePayload = await getPaymentPlansMock();
|
||||
|
||||
expect(response.body).toEqual(expectedResponsePayload);
|
||||
});
|
||||
});
|
@@ -1,17 +1,16 @@
|
||||
const authorizationList = {
|
||||
'GET /api/v1/users/:userId': {
|
||||
'/api/v1/users/:userId': {
|
||||
action: 'read',
|
||||
subject: 'User',
|
||||
},
|
||||
'GET /api/v1/users/': {
|
||||
'/api/v1/users/': {
|
||||
action: 'read',
|
||||
subject: 'User',
|
||||
},
|
||||
};
|
||||
|
||||
export const authorizeUser = async (request, response, next) => {
|
||||
const currentRoute =
|
||||
request.method + ' ' + request.baseUrl + request.route.path;
|
||||
const currentRoute = request.baseUrl + request.route.path;
|
||||
const currentRouteRule = authorizationList[currentRoute];
|
||||
|
||||
try {
|
||||
@@ -21,13 +20,3 @@ export const authorizeUser = async (request, response, next) => {
|
||||
return response.status(403).end();
|
||||
}
|
||||
};
|
||||
|
||||
export const authorizeAdmin = async (request, response, next) => {
|
||||
const role = await request.currentUser.$relatedQuery('role');
|
||||
|
||||
if (role?.isAdmin) {
|
||||
next();
|
||||
} else {
|
||||
return response.status(403).end();
|
||||
}
|
||||
};
|
||||
|
@@ -1,9 +0,0 @@
|
||||
import { hasValidLicense } from './license.ee.js';
|
||||
|
||||
export const checkIsEnterprise = async (request, response, next) => {
|
||||
if (await hasValidLicense()) {
|
||||
next();
|
||||
} else {
|
||||
return response.status(404).end();
|
||||
}
|
||||
};
|
@@ -4,8 +4,8 @@ import appConfig from '../config/app.js';
|
||||
const levels = {
|
||||
error: 0,
|
||||
warn: 1,
|
||||
http: 2,
|
||||
info: 3,
|
||||
info: 2,
|
||||
http: 3,
|
||||
debug: 4,
|
||||
};
|
||||
|
||||
|
@@ -15,8 +15,6 @@ const renderObject = (response, object) => {
|
||||
let data = isPaginated(object) ? object.records : object;
|
||||
const type = isPaginated(object)
|
||||
? object.records[0].constructor.name
|
||||
: Array.isArray(object)
|
||||
? object[0].constructor.name
|
||||
: object.constructor.name;
|
||||
|
||||
const serializer = serializers[type];
|
||||
|
@@ -1,17 +0,0 @@
|
||||
import { Router } from 'express';
|
||||
import { authenticateUser } from '../../../../helpers/authentication.js';
|
||||
import { authorizeAdmin } from '../../../../helpers/authorization.js';
|
||||
import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js';
|
||||
import getPermissionsCatalogAction from '../../../../controllers/api/v1/admin/permissions/get-permissions-catalog.ee.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get(
|
||||
'/catalog',
|
||||
authenticateUser,
|
||||
authorizeAdmin,
|
||||
checkIsEnterprise,
|
||||
getPermissionsCatalogAction
|
||||
);
|
||||
|
||||
export default router;
|
@@ -1,26 +0,0 @@
|
||||
import { Router } from 'express';
|
||||
import { authenticateUser } from '../../../../helpers/authentication.js';
|
||||
import { authorizeAdmin } from '../../../../helpers/authorization.js';
|
||||
import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js';
|
||||
import getRolesAction from '../../../../controllers/api/v1/admin/roles/get-roles.ee.js';
|
||||
import getRoleAction from '../../../../controllers/api/v1/admin/roles/get-role.ee.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get(
|
||||
'/',
|
||||
authenticateUser,
|
||||
authorizeAdmin,
|
||||
checkIsEnterprise,
|
||||
getRolesAction
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/:roleId',
|
||||
authenticateUser,
|
||||
authorizeAdmin,
|
||||
checkIsEnterprise,
|
||||
getRoleAction
|
||||
);
|
||||
|
||||
export default router;
|
@@ -1,26 +0,0 @@
|
||||
import { Router } from 'express';
|
||||
import { authenticateUser } from '../../../../helpers/authentication.js';
|
||||
import { authorizeAdmin } from '../../../../helpers/authorization.js';
|
||||
import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js';
|
||||
import getSamlAuthProvidersAction from '../../../../controllers/api/v1/admin/saml-auth-providers/get-saml-auth-providers.ee.js';
|
||||
import getSamlAuthProviderAction from '../../../../controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get(
|
||||
'/',
|
||||
authenticateUser,
|
||||
authorizeAdmin,
|
||||
checkIsEnterprise,
|
||||
getSamlAuthProvidersAction
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/:samlAuthProviderId',
|
||||
authenticateUser,
|
||||
authorizeAdmin,
|
||||
checkIsEnterprise,
|
||||
getSamlAuthProviderAction
|
||||
);
|
||||
|
||||
export default router;
|
@@ -1,10 +1,8 @@
|
||||
import { Router } from 'express';
|
||||
import versionAction from '../../../controllers/api/v1/automatisch/version.js';
|
||||
import notificationsAction from '../../../controllers/api/v1/automatisch/notifications.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/version', versionAction);
|
||||
router.get('/notifications', notificationsAction);
|
||||
|
||||
export default router;
|
||||
|
@@ -1,12 +0,0 @@
|
||||
import { Router } from 'express';
|
||||
import { authenticateUser } from '../../../helpers/authentication.js';
|
||||
import checkIsCloud from '../../../helpers/check-is-cloud.js';
|
||||
import getPlansAction from '../../../controllers/api/v1/payment/get-plans.ee.js';
|
||||
import getPaddleInfoAction from '../../../controllers/api/v1/payment/get-paddle-info.ee.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/plans', authenticateUser, checkIsCloud, getPlansAction);
|
||||
router.get('/paddle-info', authenticateUser, checkIsCloud, getPaddleInfoAction);
|
||||
|
||||
export default router;
|
@@ -5,10 +5,6 @@ import paddleRouter from './paddle.ee.js';
|
||||
import healthcheckRouter from './healthcheck.js';
|
||||
import automatischRouter from './api/v1/automatisch.js';
|
||||
import usersRouter from './api/v1/users.js';
|
||||
import paymentRouter from './api/v1/payment.ee.js';
|
||||
import samlAuthProvidersRouter from './api/v1/admin/saml-auth-providers.ee.js';
|
||||
import rolesRouter from './api/v1/admin/roles.ee.js';
|
||||
import permissionsRouter from './api/v1/admin/permissions.ee.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
@@ -18,9 +14,5 @@ router.use('/paddle', paddleRouter);
|
||||
router.use('/healthcheck', healthcheckRouter);
|
||||
router.use('/api/v1/automatisch', automatischRouter);
|
||||
router.use('/api/v1/users', usersRouter);
|
||||
router.use('/api/v1/payment', paymentRouter);
|
||||
router.use('/api/v1/admin/saml-auth-providers', samlAuthProvidersRouter);
|
||||
router.use('/api/v1/admin/roles', rolesRouter);
|
||||
router.use('/api/v1/admin/permissions', permissionsRouter);
|
||||
|
||||
export default router;
|
||||
|
@@ -1,13 +1,11 @@
|
||||
import userSerializer from './user.js';
|
||||
import roleSerializer from './role.js';
|
||||
import permissionSerializer from './permission.js';
|
||||
import samlAuthProviderSerializer from './saml-auth-provider.ee.js';
|
||||
|
||||
const serializers = {
|
||||
User: userSerializer,
|
||||
Role: roleSerializer,
|
||||
Permission: permissionSerializer,
|
||||
SamlAuthProvider: samlAuthProviderSerializer,
|
||||
};
|
||||
|
||||
export default serializers;
|
||||
|
@@ -1,25 +0,0 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest';
|
||||
import { createPermission } from '../../test/factories/permission';
|
||||
import permissionSerializer from './permission';
|
||||
|
||||
describe('permissionSerializer', () => {
|
||||
let permission;
|
||||
|
||||
beforeEach(async () => {
|
||||
permission = await createPermission();
|
||||
});
|
||||
|
||||
it('should return permission data', async () => {
|
||||
const expectedPayload = {
|
||||
id: permission.id,
|
||||
roleId: permission.roleId,
|
||||
action: permission.action,
|
||||
subject: permission.subject,
|
||||
conditions: permission.conditions,
|
||||
createdAt: permission.createdAt,
|
||||
updatedAt: permission.updatedAt,
|
||||
};
|
||||
|
||||
expect(permissionSerializer(permission)).toEqual(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,7 +1,5 @@
|
||||
import permissionSerializer from './permission.js';
|
||||
|
||||
const roleSerializer = (role) => {
|
||||
let roleData = {
|
||||
return {
|
||||
id: role.id,
|
||||
name: role.name,
|
||||
key: role.key,
|
||||
@@ -10,14 +8,6 @@ const roleSerializer = (role) => {
|
||||
updatedAt: role.updatedAt,
|
||||
isAdmin: role.isAdmin,
|
||||
};
|
||||
|
||||
if (role.permissions) {
|
||||
roleData.permissions = role.permissions.map((permission) =>
|
||||
permissionSerializer(permission)
|
||||
);
|
||||
}
|
||||
|
||||
return roleData;
|
||||
};
|
||||
|
||||
export default roleSerializer;
|
||||
|
@@ -1,48 +0,0 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest';
|
||||
import { createRole } from '../../test/factories/role';
|
||||
import roleSerializer from './role';
|
||||
import { createPermission } from '../../test/factories/permission';
|
||||
|
||||
describe('roleSerializer', () => {
|
||||
let role, permissionOne, permissionTwo;
|
||||
|
||||
beforeEach(async () => {
|
||||
role = await createRole();
|
||||
|
||||
permissionOne = await createPermission({
|
||||
roleId: role.id,
|
||||
action: 'read',
|
||||
subject: 'User',
|
||||
});
|
||||
|
||||
permissionTwo = await createPermission({
|
||||
roleId: role.id,
|
||||
action: 'read',
|
||||
subject: 'Role',
|
||||
});
|
||||
});
|
||||
|
||||
it('should return role data', async () => {
|
||||
const expectedPayload = {
|
||||
id: role.id,
|
||||
name: role.name,
|
||||
key: role.key,
|
||||
description: role.description,
|
||||
createdAt: role.createdAt,
|
||||
updatedAt: role.updatedAt,
|
||||
isAdmin: role.isAdmin,
|
||||
};
|
||||
|
||||
expect(roleSerializer(role)).toEqual(expectedPayload);
|
||||
});
|
||||
|
||||
it('should return role data with the permissions', async () => {
|
||||
role.permissions = [permissionOne, permissionTwo];
|
||||
|
||||
const expectedPayload = {
|
||||
permissions: [permissionOne, permissionTwo],
|
||||
};
|
||||
|
||||
expect(roleSerializer(role)).toMatchObject(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,18 +0,0 @@
|
||||
const samlAuthProviderSerializer = (samlAuthProvider) => {
|
||||
return {
|
||||
id: samlAuthProvider.id,
|
||||
name: samlAuthProvider.name,
|
||||
certificate: samlAuthProvider.certificate,
|
||||
signatureAlgorithm: samlAuthProvider.signatureAlgorithm,
|
||||
issuer: samlAuthProvider.issuer,
|
||||
entryPoint: samlAuthProvider.entryPoint,
|
||||
firstnameAttributeName: samlAuthProvider.firstnameAttributeName,
|
||||
surnameAttributeName: samlAuthProvider.surnameAttributeName,
|
||||
emailAttributeName: samlAuthProvider.emailAttributeName,
|
||||
roleAttributeName: samlAuthProvider.roleAttributeName,
|
||||
active: samlAuthProvider.active,
|
||||
defaultRoleId: samlAuthProvider.defaultRoleId,
|
||||
};
|
||||
};
|
||||
|
||||
export default samlAuthProviderSerializer;
|
@@ -1,32 +0,0 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest';
|
||||
import { createSamlAuthProvider } from '../../test/factories/saml-auth-provider.ee.js';
|
||||
import samlAuthProviderSerializer from './saml-auth-provider.ee.js';
|
||||
|
||||
describe('samlAuthProviderSerializer', () => {
|
||||
let samlAuthProvider;
|
||||
|
||||
beforeEach(async () => {
|
||||
samlAuthProvider = await createSamlAuthProvider();
|
||||
});
|
||||
|
||||
it('should return saml auth provider data', async () => {
|
||||
const expectedPayload = {
|
||||
id: samlAuthProvider.id,
|
||||
name: samlAuthProvider.name,
|
||||
certificate: samlAuthProvider.certificate,
|
||||
signatureAlgorithm: samlAuthProvider.signatureAlgorithm,
|
||||
issuer: samlAuthProvider.issuer,
|
||||
entryPoint: samlAuthProvider.entryPoint,
|
||||
firstnameAttributeName: samlAuthProvider.firstnameAttributeName,
|
||||
surnameAttributeName: samlAuthProvider.surnameAttributeName,
|
||||
emailAttributeName: samlAuthProvider.emailAttributeName,
|
||||
roleAttributeName: samlAuthProvider.roleAttributeName,
|
||||
active: samlAuthProvider.active,
|
||||
defaultRoleId: samlAuthProvider.defaultRoleId,
|
||||
};
|
||||
|
||||
expect(samlAuthProviderSerializer(samlAuthProvider)).toEqual(
|
||||
expectedPayload
|
||||
);
|
||||
});
|
||||
});
|
@@ -9,6 +9,7 @@ const userSerializer = (user) => {
|
||||
createdAt: user.createdAt,
|
||||
updatedAt: user.updatedAt,
|
||||
fullName: user.fullName,
|
||||
roleId: user.roleId,
|
||||
};
|
||||
|
||||
if (user.role) {
|
||||
|
@@ -1,75 +0,0 @@
|
||||
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
||||
import { DateTime } from 'luxon';
|
||||
import appConfig from '../config/app';
|
||||
import { createUser } from '../../test/factories/user';
|
||||
import { createPermission } from '../../test/factories/permission';
|
||||
import userSerializer from './user';
|
||||
|
||||
describe('userSerializer', () => {
|
||||
let user, role, permissionOne, permissionTwo;
|
||||
|
||||
beforeEach(async () => {
|
||||
user = await createUser();
|
||||
role = await user.$relatedQuery('role');
|
||||
|
||||
permissionOne = await createPermission({
|
||||
roleId: role.id,
|
||||
action: 'read',
|
||||
subject: 'User',
|
||||
});
|
||||
|
||||
permissionTwo = await createPermission({
|
||||
roleId: role.id,
|
||||
action: 'read',
|
||||
subject: 'Role',
|
||||
});
|
||||
});
|
||||
|
||||
it('should return user data', async () => {
|
||||
vi.spyOn(appConfig, 'isCloud', 'get').mockReturnValue(false);
|
||||
|
||||
const expectedPayload = {
|
||||
createdAt: user.createdAt,
|
||||
email: user.email,
|
||||
fullName: user.fullName,
|
||||
id: user.id,
|
||||
updatedAt: user.updatedAt,
|
||||
};
|
||||
|
||||
expect(userSerializer(user)).toEqual(expectedPayload);
|
||||
});
|
||||
|
||||
it('should return user data with the role', async () => {
|
||||
user.role = role;
|
||||
|
||||
const expectedPayload = {
|
||||
role,
|
||||
};
|
||||
|
||||
expect(userSerializer(user)).toMatchObject(expectedPayload);
|
||||
});
|
||||
|
||||
it('should return user data with the permissions', async () => {
|
||||
user.permissions = [permissionOne, permissionTwo];
|
||||
|
||||
const expectedPayload = {
|
||||
permissions: [permissionOne, permissionTwo],
|
||||
};
|
||||
|
||||
expect(userSerializer(user)).toMatchObject(expectedPayload);
|
||||
});
|
||||
|
||||
it('should return user data with trial expiry date', async () => {
|
||||
vi.spyOn(appConfig, 'isCloud', 'get').mockReturnValue(true);
|
||||
|
||||
await user.$query().patch({
|
||||
trialExpiryDate: DateTime.now().plus({ days: 30 }).toISODate(),
|
||||
});
|
||||
|
||||
const expectedPayload = {
|
||||
trialExpiryDate: user.trialExpiryDate,
|
||||
};
|
||||
|
||||
expect(userSerializer(user)).toMatchObject(expectedPayload);
|
||||
});
|
||||
});
|
@@ -1,33 +0,0 @@
|
||||
import { createRole } from './role';
|
||||
import SamlAuthProvider from '../../src/models/saml-auth-provider.ee.js';
|
||||
|
||||
export const createSamlAuthProvider = async (params = {}) => {
|
||||
params.name = params?.name || 'Keycloak SAML';
|
||||
params.certificate = params?.certificate || 'certificate';
|
||||
params.signatureAlgorithm = params?.signatureAlgorithm || 'sha512';
|
||||
|
||||
params.entryPoint =
|
||||
params?.entryPoint ||
|
||||
'https://example.com/auth/realms/automatisch/protocol/saml';
|
||||
|
||||
params.issuer = params?.issuer || 'automatisch-client';
|
||||
|
||||
params.firstnameAttributeName =
|
||||
params?.firstnameAttributeName || 'urn:oid:2.1.1.42';
|
||||
|
||||
params.surnameAttributeName =
|
||||
params?.surnameAttributeName || 'urn:oid:2.1.1.4';
|
||||
|
||||
params.emailAttributeName =
|
||||
params?.emailAttributeName || 'urn:oid:1.1.2342.19200300.100.1.1';
|
||||
|
||||
params.roleAttributeName = params?.roleAttributeName || 'Role';
|
||||
params.defaultRoleId = params?.defaultRoleId || (await createRole()).id;
|
||||
params.active = params?.active || true;
|
||||
|
||||
const samlAuthProvider = await SamlAuthProvider.query()
|
||||
.insert(params)
|
||||
.returning('*');
|
||||
|
||||
return samlAuthProvider;
|
||||
};
|
@@ -1,64 +0,0 @@
|
||||
const getPermissionsCatalogMock = async () => {
|
||||
const data = {
|
||||
actions: [
|
||||
{
|
||||
key: 'create',
|
||||
label: 'Create',
|
||||
subjects: ['Connection', 'Flow'],
|
||||
},
|
||||
{
|
||||
key: 'read',
|
||||
label: 'Read',
|
||||
subjects: ['Connection', 'Execution', 'Flow'],
|
||||
},
|
||||
{
|
||||
key: 'update',
|
||||
label: 'Update',
|
||||
subjects: ['Connection', 'Flow'],
|
||||
},
|
||||
{
|
||||
key: 'delete',
|
||||
label: 'Delete',
|
||||
subjects: ['Connection', 'Flow'],
|
||||
},
|
||||
{
|
||||
key: 'publish',
|
||||
label: 'Publish',
|
||||
subjects: ['Flow'],
|
||||
},
|
||||
],
|
||||
conditions: [
|
||||
{
|
||||
key: 'isCreator',
|
||||
label: 'Is creator',
|
||||
},
|
||||
],
|
||||
subjects: [
|
||||
{
|
||||
key: 'Connection',
|
||||
label: 'Connection',
|
||||
},
|
||||
{
|
||||
key: 'Flow',
|
||||
label: 'Flow',
|
||||
},
|
||||
{
|
||||
key: 'Execution',
|
||||
label: 'Execution',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return {
|
||||
data: data,
|
||||
meta: {
|
||||
count: 1,
|
||||
currentPage: null,
|
||||
isArray: false,
|
||||
totalPages: null,
|
||||
type: 'Object',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getPermissionsCatalogMock;
|
@@ -1,33 +0,0 @@
|
||||
const getRoleMock = async (role, permissions) => {
|
||||
const data = {
|
||||
id: role.id,
|
||||
key: role.key,
|
||||
name: role.name,
|
||||
isAdmin: role.isAdmin,
|
||||
description: role.description,
|
||||
createdAt: role.createdAt.toISOString(),
|
||||
updatedAt: role.updatedAt.toISOString(),
|
||||
permissions: permissions.map((permission) => ({
|
||||
id: permission.id,
|
||||
action: permission.action,
|
||||
conditions: permission.conditions,
|
||||
roleId: permission.roleId,
|
||||
subject: permission.subject,
|
||||
createdAt: permission.createdAt.toISOString(),
|
||||
updatedAt: permission.updatedAt.toISOString(),
|
||||
})),
|
||||
};
|
||||
|
||||
return {
|
||||
data: data,
|
||||
meta: {
|
||||
count: 1,
|
||||
currentPage: null,
|
||||
isArray: false,
|
||||
totalPages: null,
|
||||
type: 'Role',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getRoleMock;
|
@@ -1,26 +0,0 @@
|
||||
const getRolesMock = async (roles) => {
|
||||
const data = roles.map((role) => {
|
||||
return {
|
||||
id: role.id,
|
||||
key: role.key,
|
||||
name: role.name,
|
||||
isAdmin: role.isAdmin,
|
||||
description: role.description,
|
||||
createdAt: role.createdAt.toISOString(),
|
||||
updatedAt: role.updatedAt.toISOString(),
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
data: data,
|
||||
meta: {
|
||||
count: data.length,
|
||||
currentPage: null,
|
||||
isArray: true,
|
||||
totalPages: null,
|
||||
type: 'Role',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getRolesMock;
|
@@ -1,29 +0,0 @@
|
||||
const getSamlAuthProviderMock = async (samlAuthProvider) => {
|
||||
const data = {
|
||||
active: samlAuthProvider.active,
|
||||
certificate: samlAuthProvider.certificate,
|
||||
defaultRoleId: samlAuthProvider.defaultRoleId,
|
||||
emailAttributeName: samlAuthProvider.emailAttributeName,
|
||||
entryPoint: samlAuthProvider.entryPoint,
|
||||
firstnameAttributeName: samlAuthProvider.firstnameAttributeName,
|
||||
id: samlAuthProvider.id,
|
||||
issuer: samlAuthProvider.issuer,
|
||||
name: samlAuthProvider.name,
|
||||
roleAttributeName: samlAuthProvider.roleAttributeName,
|
||||
signatureAlgorithm: samlAuthProvider.signatureAlgorithm,
|
||||
surnameAttributeName: samlAuthProvider.surnameAttributeName,
|
||||
};
|
||||
|
||||
return {
|
||||
data: data,
|
||||
meta: {
|
||||
count: 1,
|
||||
currentPage: null,
|
||||
isArray: false,
|
||||
totalPages: null,
|
||||
type: 'SamlAuthProvider',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getSamlAuthProviderMock;
|
@@ -1,31 +0,0 @@
|
||||
const getSamlAuthProvidersMock = async (samlAuthProviders) => {
|
||||
const data = samlAuthProviders.map((samlAuthProvider) => {
|
||||
return {
|
||||
active: samlAuthProvider.active,
|
||||
certificate: samlAuthProvider.certificate,
|
||||
defaultRoleId: samlAuthProvider.defaultRoleId,
|
||||
emailAttributeName: samlAuthProvider.emailAttributeName,
|
||||
entryPoint: samlAuthProvider.entryPoint,
|
||||
firstnameAttributeName: samlAuthProvider.firstnameAttributeName,
|
||||
id: samlAuthProvider.id,
|
||||
issuer: samlAuthProvider.issuer,
|
||||
name: samlAuthProvider.name,
|
||||
roleAttributeName: samlAuthProvider.roleAttributeName,
|
||||
signatureAlgorithm: samlAuthProvider.signatureAlgorithm,
|
||||
surnameAttributeName: samlAuthProvider.surnameAttributeName,
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
data: data,
|
||||
meta: {
|
||||
count: data.length,
|
||||
currentPage: null,
|
||||
isArray: true,
|
||||
totalPages: null,
|
||||
type: 'SamlAuthProvider',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getSamlAuthProvidersMock;
|
@@ -1,17 +0,0 @@
|
||||
const getPaddleInfoMock = async () => {
|
||||
return {
|
||||
data: {
|
||||
sandbox: true,
|
||||
vendorId: 'sampleVendorId',
|
||||
},
|
||||
meta: {
|
||||
count: 1,
|
||||
currentPage: null,
|
||||
isArray: false,
|
||||
totalPages: null,
|
||||
type: 'Object',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getPaddleInfoMock;
|
@@ -1,22 +0,0 @@
|
||||
const getPaymentPlansMock = async () => {
|
||||
return {
|
||||
data: [
|
||||
{
|
||||
limit: '10,000',
|
||||
name: '10k - monthly',
|
||||
price: '€20',
|
||||
productId: '47384',
|
||||
quota: 10000,
|
||||
},
|
||||
],
|
||||
meta: {
|
||||
count: 1,
|
||||
currentPage: null,
|
||||
isArray: true,
|
||||
totalPages: null,
|
||||
type: 'Object',
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default getPaymentPlansMock;
|
@@ -15,6 +15,7 @@ const getCurrentUserMock = (currentUser, role) => {
|
||||
name: role.name,
|
||||
updatedAt: role.updatedAt.toISOString(),
|
||||
},
|
||||
roleId: role.id,
|
||||
trialExpiryDate: currentUser.trialExpiryDate.toISOString(),
|
||||
updatedAt: currentUser.updatedAt.toISOString(),
|
||||
},
|
||||
|
@@ -14,6 +14,7 @@ const getUserMock = (currentUser, role) => {
|
||||
name: role.name,
|
||||
updatedAt: role.updatedAt.toISOString(),
|
||||
},
|
||||
roleId: role.id,
|
||||
trialExpiryDate: currentUser.trialExpiryDate.toISOString(),
|
||||
updatedAt: currentUser.updatedAt.toISOString(),
|
||||
},
|
||||
|
@@ -1,7 +1,6 @@
|
||||
const getUsersMock = async (users, roles) => {
|
||||
const data = users.map((user) => {
|
||||
const role = roles.find((r) => r.id === user.roleId);
|
||||
|
||||
return {
|
||||
createdAt: user.createdAt.toISOString(),
|
||||
email: user.email,
|
||||
@@ -17,7 +16,8 @@ const getUsersMock = async (users, roles) => {
|
||||
name: role.name,
|
||||
updatedAt: role.updatedAt.toISOString(),
|
||||
}
|
||||
: null,
|
||||
: null, // Fallback to null if role not found
|
||||
roleId: user.roleId,
|
||||
trialExpiryDate: user.trialExpiryDate.toISOString(),
|
||||
updatedAt: user.updatedAt.toISOString(),
|
||||
};
|
||||
|
@@ -1,8 +1,6 @@
|
||||
---
|
||||
favicon: /favicons/discord.svg
|
||||
items:
|
||||
- name: Change a scheduled event
|
||||
desc: Changes a scheduled event.
|
||||
- name: Send a message to channel
|
||||
desc: Sends a message to a specific channel you specify.
|
||||
- name: Create a scheduled event
|
||||
|
@@ -3,7 +3,6 @@ import Box from '@mui/material/Box';
|
||||
import Toolbar from '@mui/material/Toolbar';
|
||||
import { useTheme } from '@mui/material/styles';
|
||||
import useMediaQuery from '@mui/material/useMediaQuery';
|
||||
import Stack from '@mui/material/Stack';
|
||||
import AppsIcon from '@mui/icons-material/Apps';
|
||||
import SwapCallsIcon from '@mui/icons-material/SwapCalls';
|
||||
import HistoryIcon from '@mui/icons-material/History';
|
||||
@@ -140,7 +139,7 @@ export default function PublicLayout({
|
||||
onDrawerClose={closeDrawer}
|
||||
/>
|
||||
|
||||
<Box sx={{ display: 'flex', height: '100%' }}>
|
||||
<Box sx={{ display: 'flex' }}>
|
||||
<Drawer
|
||||
links={drawerLinks}
|
||||
bottomLinks={bottomLinks}
|
||||
@@ -149,10 +148,11 @@ export default function PublicLayout({
|
||||
onClose={closeDrawer}
|
||||
/>
|
||||
|
||||
<Stack flex={1}>
|
||||
<Box sx={{ flex: 1 }}>
|
||||
<Toolbar />
|
||||
|
||||
{children}
|
||||
</Stack>
|
||||
</Box>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
|
@@ -1,44 +0,0 @@
|
||||
import { Link } from 'react-router-dom';
|
||||
import Button from '@mui/material/Button';
|
||||
import Stack from '@mui/material/Stack';
|
||||
import Typography from '@mui/material/Typography';
|
||||
|
||||
import * as URLS from 'config/urls';
|
||||
import useFormatMessage from 'hooks/useFormatMessage';
|
||||
import useAuthentication from 'hooks/useAuthentication';
|
||||
import Layout from 'components/Layout';
|
||||
import PublicLayout from 'components/PublicLayout';
|
||||
|
||||
export default function NoResultFound(): React.ReactElement {
|
||||
const formatMessage = useFormatMessage();
|
||||
const { isAuthenticated } = useAuthentication();
|
||||
|
||||
const pageContent = (
|
||||
<Stack
|
||||
justifyContent="center"
|
||||
alignItems="center"
|
||||
flex={1}
|
||||
spacing={1}
|
||||
p={2}
|
||||
mb={11}
|
||||
>
|
||||
<Typography variant="h1" color="primary" textAlign="center">
|
||||
404
|
||||
</Typography>
|
||||
<Typography variant="body1" textAlign="center">
|
||||
{formatMessage('notFoundPage.title')}
|
||||
</Typography>
|
||||
<Link to={isAuthenticated ? URLS.FLOWS : URLS.LOGIN}>
|
||||
<Button variant="contained" sx={{ mt: 3 }} component="div">
|
||||
{formatMessage('notFoundPage.button')}
|
||||
</Button>
|
||||
</Link>
|
||||
</Stack>
|
||||
);
|
||||
|
||||
return isAuthenticated ? (
|
||||
<Layout>{pageContent}</Layout>
|
||||
) : (
|
||||
<PublicLayout>{pageContent}</PublicLayout>
|
||||
);
|
||||
}
|
@@ -265,7 +265,5 @@
|
||||
"authClient.buttonSubmit": "Submit",
|
||||
"authClient.inputName": "Name",
|
||||
"authClient.inputActive": "Active",
|
||||
"updateAuthClient.title": "Update auth client",
|
||||
"notFoundPage.title": "We can't seem to find a page you're looking for.",
|
||||
"notFoundPage.button": "Back to home page"
|
||||
"updateAuthClient.title": "Update auth client"
|
||||
}
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import { Route, Routes as ReactRouterRoutes, Navigate } from 'react-router-dom';
|
||||
import { Route, Routes, Navigate } from 'react-router-dom';
|
||||
import Layout from 'components/Layout';
|
||||
import NoResultFound from 'components/NotFound';
|
||||
import PublicLayout from 'components/PublicLayout';
|
||||
import Applications from 'pages/Applications';
|
||||
import Application from 'pages/Application';
|
||||
@@ -18,15 +17,9 @@ import * as URLS from 'config/urls';
|
||||
import settingsRoutes from './settingsRoutes';
|
||||
import adminSettingsRoutes from './adminSettingsRoutes';
|
||||
import Notifications from 'pages/Notifications';
|
||||
import useConfig from 'hooks/useConfig';
|
||||
import useAuthentication from 'hooks/useAuthentication';
|
||||
|
||||
function Routes() {
|
||||
const { config } = useConfig();
|
||||
const { isAuthenticated } = useAuthentication();
|
||||
|
||||
return (
|
||||
<ReactRouterRoutes>
|
||||
export default (
|
||||
<Routes>
|
||||
<Route
|
||||
path={URLS.EXECUTIONS}
|
||||
element={
|
||||
@@ -92,7 +85,10 @@ function Routes() {
|
||||
}
|
||||
/>
|
||||
|
||||
<Route path={URLS.LOGIN_CALLBACK} element={<LoginCallback />} />
|
||||
<Route
|
||||
path={URLS.LOGIN_CALLBACK}
|
||||
element={<LoginCallback />}
|
||||
/>
|
||||
|
||||
<Route
|
||||
path={URLS.SIGNUP}
|
||||
@@ -121,7 +117,6 @@ function Routes() {
|
||||
}
|
||||
/>
|
||||
|
||||
{!config?.disableNotificationsPage && (
|
||||
<Route
|
||||
path={URLS.UPDATES}
|
||||
element={
|
||||
@@ -130,22 +125,19 @@ function Routes() {
|
||||
</Layout>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
||||
<Route
|
||||
path="/"
|
||||
element={
|
||||
<Navigate to={isAuthenticated ? URLS.FLOWS : URLS.LOGIN} replace />
|
||||
}
|
||||
/>
|
||||
<Route path="/" element={<Navigate to={URLS.FLOWS} replace />} />
|
||||
|
||||
<Route path={URLS.SETTINGS}>{settingsRoutes}</Route>
|
||||
|
||||
<Route path={URLS.ADMIN_SETTINGS}>{adminSettingsRoutes}</Route>
|
||||
|
||||
<Route path="*" element={<NoResultFound />} />
|
||||
</ReactRouterRoutes>
|
||||
);
|
||||
<Route
|
||||
element={
|
||||
<Layout>
|
||||
<div>404</div>
|
||||
</Layout>
|
||||
}
|
||||
|
||||
export default <Routes />;
|
||||
/>
|
||||
</Routes>
|
||||
);
|
||||
|
@@ -11458,10 +11458,10 @@ node-releases@^2.0.1:
|
||||
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz"
|
||||
integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
|
||||
|
||||
nodemailer@6.7.0:
|
||||
version "6.7.0"
|
||||
resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.0.tgz"
|
||||
integrity sha512-AtiTVUFHLiiDnMQ43zi0YgkzHOEWUkhDgPlBXrsDzJiJvB29Alo4OKxHQ0ugF3gRqRQIneCLtZU3yiUo7pItZw==
|
||||
nodemailer@6.9.9:
|
||||
version "6.9.9"
|
||||
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.9.tgz#4549bfbf710cc6addec5064dd0f19874d24248d9"
|
||||
integrity sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA==
|
||||
|
||||
nodemon@^2.0.13:
|
||||
version "2.0.15"
|
||||
|
Reference in New Issue
Block a user