Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ced4602501 | ||
![]() |
d7893d9a32 | ||
![]() |
9cbdda330c | ||
![]() |
42a9bfd099 | ||
![]() |
eb15bd01ca | ||
![]() |
9e98aebeb3 | ||
![]() |
1361cbc826 | ||
![]() |
679d0808a9 | ||
![]() |
6fe9a548ad | ||
![]() |
2d6d2430d2 | ||
![]() |
a445538e81 | ||
![]() |
50d38ffbd8 | ||
![]() |
93bcdfd9c9 | ||
![]() |
5be3b101a5 |
1487
packages/backend/src/apps/pdf-monkey/assets/favicon.svg
Normal file
1487
packages/backend/src/apps/pdf-monkey/assets/favicon.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 112 KiB |
21
packages/backend/src/apps/pdf-monkey/auth/index.js
Normal file
21
packages/backend/src/apps/pdf-monkey/auth/index.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import verifyCredentials from './verify-credentials.js';
|
||||||
|
import isStillVerified from './is-still-verified.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
key: 'apiKey',
|
||||||
|
label: 'API Key',
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
readOnly: false,
|
||||||
|
value: null,
|
||||||
|
placeholder: null,
|
||||||
|
description: 'PDFMonkey API secret key of your account.',
|
||||||
|
clickToCopy: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
verifyCredentials,
|
||||||
|
isStillVerified,
|
||||||
|
};
|
@@ -0,0 +1,8 @@
|
|||||||
|
import getCurrentUser from '../common/get-current-user.js';
|
||||||
|
|
||||||
|
const isStillVerified = async ($) => {
|
||||||
|
const currentUser = await getCurrentUser($);
|
||||||
|
return !!currentUser.id;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default isStillVerified;
|
@@ -0,0 +1,15 @@
|
|||||||
|
import getCurrentUser from '../common/get-current-user.js';
|
||||||
|
|
||||||
|
const verifyCredentials = async ($) => {
|
||||||
|
const currentUser = await getCurrentUser($);
|
||||||
|
const screenName = [currentUser.desired_name, currentUser.email]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(' @ ');
|
||||||
|
|
||||||
|
await $.auth.set({
|
||||||
|
screenName,
|
||||||
|
apiKey: $.auth.data.apiKey,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default verifyCredentials;
|
@@ -0,0 +1,9 @@
|
|||||||
|
const addAuthHeader = ($, requestConfig) => {
|
||||||
|
if ($.auth.data?.apiKey) {
|
||||||
|
requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return requestConfig;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default addAuthHeader;
|
@@ -0,0 +1,8 @@
|
|||||||
|
const getCurrentUser = async ($) => {
|
||||||
|
const response = await $.http.get('/v1/current_user');
|
||||||
|
const currentUser = response.data.current_user;
|
||||||
|
|
||||||
|
return currentUser;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getCurrentUser;
|
16
packages/backend/src/apps/pdf-monkey/index.js
Normal file
16
packages/backend/src/apps/pdf-monkey/index.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import defineApp from '../../helpers/define-app.js';
|
||||||
|
import addAuthHeader from './common/add-auth-header.js';
|
||||||
|
import auth from './auth/index.js';
|
||||||
|
|
||||||
|
export default defineApp({
|
||||||
|
name: 'PDFMonkey',
|
||||||
|
key: 'pdf-monkey',
|
||||||
|
iconUrl: '{BASE_URL}/apps/pdf-monkey/assets/favicon.svg',
|
||||||
|
authDocUrl: 'https://automatisch.io/docs/apps/pdf-monkey/connection',
|
||||||
|
supportsConnections: true,
|
||||||
|
baseUrl: 'https://pdfmonkey.io',
|
||||||
|
apiBaseUrl: 'https://api.pdfmonkey.io/api',
|
||||||
|
primaryColor: 'db2777',
|
||||||
|
beforeRequest: [addAuthHeader],
|
||||||
|
auth,
|
||||||
|
});
|
@@ -0,0 +1,10 @@
|
|||||||
|
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);
|
||||||
|
};
|
@@ -0,0 +1,34 @@
|
|||||||
|
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/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);
|
||||||
|
});
|
||||||
|
});
|
@@ -0,0 +1,11 @@
|
|||||||
|
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);
|
||||||
|
};
|
@@ -0,0 +1,39 @@
|
|||||||
|
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/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,16 +1,17 @@
|
|||||||
const authorizationList = {
|
const authorizationList = {
|
||||||
'/api/v1/users/:userId': {
|
'GET /api/v1/users/:userId': {
|
||||||
action: 'read',
|
action: 'read',
|
||||||
subject: 'User',
|
subject: 'User',
|
||||||
},
|
},
|
||||||
'/api/v1/users/': {
|
'GET /api/v1/users/': {
|
||||||
action: 'read',
|
action: 'read',
|
||||||
subject: 'User',
|
subject: 'User',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const authorizeUser = async (request, response, next) => {
|
export const authorizeUser = async (request, response, next) => {
|
||||||
const currentRoute = request.baseUrl + request.route.path;
|
const currentRoute =
|
||||||
|
request.method + ' ' + request.baseUrl + request.route.path;
|
||||||
const currentRouteRule = authorizationList[currentRoute];
|
const currentRouteRule = authorizationList[currentRoute];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -20,3 +21,13 @@ export const authorizeUser = async (request, response, next) => {
|
|||||||
return response.status(403).end();
|
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();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
9
packages/backend/src/helpers/check-is-enterprise.js
Normal file
9
packages/backend/src/helpers/check-is-enterprise.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
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 = {
|
const levels = {
|
||||||
error: 0,
|
error: 0,
|
||||||
warn: 1,
|
warn: 1,
|
||||||
info: 2,
|
http: 2,
|
||||||
http: 3,
|
info: 3,
|
||||||
debug: 4,
|
debug: 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -15,6 +15,8 @@ const renderObject = (response, object) => {
|
|||||||
let data = isPaginated(object) ? object.records : object;
|
let data = isPaginated(object) ? object.records : object;
|
||||||
const type = isPaginated(object)
|
const type = isPaginated(object)
|
||||||
? object.records[0].constructor.name
|
? object.records[0].constructor.name
|
||||||
|
: Array.isArray(object)
|
||||||
|
? object[0].constructor.name
|
||||||
: object.constructor.name;
|
: object.constructor.name;
|
||||||
|
|
||||||
const serializer = serializers[type];
|
const serializer = serializers[type];
|
||||||
|
26
packages/backend/src/routes/api/v1/saml-auth-providers.ee.js
Normal file
26
packages/backend/src/routes/api/v1/saml-auth-providers.ee.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
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;
|
@@ -5,6 +5,7 @@ import paddleRouter from './paddle.ee.js';
|
|||||||
import healthcheckRouter from './healthcheck.js';
|
import healthcheckRouter from './healthcheck.js';
|
||||||
import automatischRouter from './api/v1/automatisch.js';
|
import automatischRouter from './api/v1/automatisch.js';
|
||||||
import usersRouter from './api/v1/users.js';
|
import usersRouter from './api/v1/users.js';
|
||||||
|
import samlAuthProvidersRouter from './api/v1/saml-auth-providers.ee.js';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
@@ -14,5 +15,6 @@ router.use('/paddle', paddleRouter);
|
|||||||
router.use('/healthcheck', healthcheckRouter);
|
router.use('/healthcheck', healthcheckRouter);
|
||||||
router.use('/api/v1/automatisch', automatischRouter);
|
router.use('/api/v1/automatisch', automatischRouter);
|
||||||
router.use('/api/v1/users', usersRouter);
|
router.use('/api/v1/users', usersRouter);
|
||||||
|
router.use('/api/v1/admin/saml-auth-providers', samlAuthProvidersRouter);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
@@ -1,11 +1,13 @@
|
|||||||
import userSerializer from './user.js';
|
import userSerializer from './user.js';
|
||||||
import roleSerializer from './role.js';
|
import roleSerializer from './role.js';
|
||||||
import permissionSerializer from './permission.js';
|
import permissionSerializer from './permission.js';
|
||||||
|
import samlAuthProviderSerializer from './saml-auth-provider.ee.js';
|
||||||
|
|
||||||
const serializers = {
|
const serializers = {
|
||||||
User: userSerializer,
|
User: userSerializer,
|
||||||
Role: roleSerializer,
|
Role: roleSerializer,
|
||||||
Permission: permissionSerializer,
|
Permission: permissionSerializer,
|
||||||
|
SamlAuthProvider: samlAuthProviderSerializer,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default serializers;
|
export default serializers;
|
||||||
|
18
packages/backend/src/serializers/saml-auth-provider.ee.js
Normal file
18
packages/backend/src/serializers/saml-auth-provider.ee.js
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
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;
|
@@ -0,0 +1,32 @@
|
|||||||
|
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
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
33
packages/backend/test/factories/saml-auth-provider.ee.js
Normal file
33
packages/backend/test/factories/saml-auth-provider.ee.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
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;
|
||||||
|
};
|
@@ -0,0 +1,29 @@
|
|||||||
|
const getSamlAuthProvidersMock = 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 getSamlAuthProvidersMock;
|
@@ -0,0 +1,31 @@
|
|||||||
|
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;
|
@@ -252,6 +252,12 @@ export default defineConfig({
|
|||||||
{ text: 'Connection', link: '/apps/openai/connection' },
|
{ text: 'Connection', link: '/apps/openai/connection' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
text: 'PDFMonkey',
|
||||||
|
collapsible: true,
|
||||||
|
collapsed: true,
|
||||||
|
items: [{ text: 'Connection', link: '/apps/pdf-monkey/connection' }],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
text: 'Pipedrive',
|
text: 'Pipedrive',
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
@@ -305,7 +311,7 @@ export default defineConfig({
|
|||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Actions', link: '/apps/removebg/actions' },
|
{ text: 'Actions', link: '/apps/removebg/actions' },
|
||||||
{ text: 'Connection', link: '/apps/removebg/connection' }
|
{ text: 'Connection', link: '/apps/removebg/connection' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
11
packages/docs/pages/apps/pdf-monkey/connection.md
Normal file
11
packages/docs/pages/apps/pdf-monkey/connection.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# PDFMonkey
|
||||||
|
|
||||||
|
:::info
|
||||||
|
This page explains the steps you need to follow to set up the PDFMonkey
|
||||||
|
connection in Automatisch. If any of the steps are outdated, please let us know!
|
||||||
|
:::
|
||||||
|
|
||||||
|
1. Login to your PDFMonkey account: [https://dashboard.pdfmonkey.io/login](https://dashboard.pdfmonkey.io/login).
|
||||||
|
2. Go to **My Account** section from your profile.
|
||||||
|
3. Copy `API SECRET KEY` from the page to the `API Key` field on Automatisch.
|
||||||
|
4. Now, you can start using the PDFMonkey connection with Automatisch.
|
1487
packages/docs/pages/public/favicons/pdf-monkey.svg
Normal file
1487
packages/docs/pages/public/favicons/pdf-monkey.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 112 KiB |
Reference in New Issue
Block a user