diff --git a/packages/backend/src/apps/flowers-software/assets/favicon.svg b/packages/backend/src/apps/flowers-software/assets/favicon.svg new file mode 100644 index 00000000..55b8ed60 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/assets/favicon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/backend/src/apps/flowers-software/auth/index.ts b/packages/backend/src/apps/flowers-software/auth/index.ts new file mode 100644 index 00000000..6dd40712 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/auth/index.ts @@ -0,0 +1,43 @@ +import verifyCredentials from './verify-credentials'; +import isStillVerified from './is-still-verified'; + +export default { + fields: [ + { + key: 'username', + label: 'Username', + type: 'string' as const, + required: true, + readOnly: false, + value: null, + placeholder: null, + description: null, + clickToCopy: false, + }, + { + key: 'password', + label: 'Password', + type: 'string' as const, + required: true, + readOnly: false, + value: null, + placeholder: null, + description: null, + clickToCopy: false, + }, + { + key: 'apiKey', + label: 'API Key', + type: 'string' as const, + required: true, + readOnly: false, + value: null, + placeholder: null, + description: null, + clickToCopy: false, + }, + ], + + verifyCredentials, + isStillVerified, +}; diff --git a/packages/backend/src/apps/flowers-software/auth/is-still-verified.ts b/packages/backend/src/apps/flowers-software/auth/is-still-verified.ts new file mode 100644 index 00000000..5a2fe2ae --- /dev/null +++ b/packages/backend/src/apps/flowers-software/auth/is-still-verified.ts @@ -0,0 +1,10 @@ +import { IGlobalVariable } from '@automatisch/types'; +import verifyCredentials from './verify-credentials'; + +const isStillVerified = async ($: IGlobalVariable) => { + await verifyCredentials($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/flowers-software/auth/verify-credentials.ts b/packages/backend/src/apps/flowers-software/auth/verify-credentials.ts new file mode 100644 index 00000000..4e7a4f69 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/auth/verify-credentials.ts @@ -0,0 +1,20 @@ +import { IGlobalVariable } from '@automatisch/types'; +import getWebhooks from '../common/get-webhooks'; + +const verifyCredentials = async ($: IGlobalVariable) => { + const response = await getWebhooks($); + const successful = Array.isArray(response.data); + + if (!successful) { + throw new Error('Failed while authorizing!'); + } + + await $.auth.set({ + screenName: $.auth.data.username, + username: $.auth.data.username, + password: $.auth.data.password, + apiKey: $.auth.data.apiKey, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/flowers-software/common/add-auth-header.ts b/packages/backend/src/apps/flowers-software/common/add-auth-header.ts new file mode 100644 index 00000000..02f524fd --- /dev/null +++ b/packages/backend/src/apps/flowers-software/common/add-auth-header.ts @@ -0,0 +1,18 @@ +import { TBeforeRequest } from '@automatisch/types'; + +const addAuthHeader: TBeforeRequest = ($, requestConfig) => { + const { data } = $.auth; + + if (data?.username && data.password && data.apiKey) { + requestConfig.headers['x-api-key'] = data.apiKey as string; + + requestConfig.auth = { + username: data.username as string, + password: data.password as string, + }; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/flowers-software/common/get-webhooks.ts b/packages/backend/src/apps/flowers-software/common/get-webhooks.ts new file mode 100644 index 00000000..bb529c26 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/common/get-webhooks.ts @@ -0,0 +1,5 @@ +import type { IGlobalVariable } from "@automatisch/types"; + +export default async function getWebhooks($: IGlobalVariable) { + return await $.http.get('/v2/public/api/webhooks'); +} diff --git a/packages/backend/src/apps/flowers-software/index.d.ts b/packages/backend/src/apps/flowers-software/index.d.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/backend/src/apps/flowers-software/index.ts b/packages/backend/src/apps/flowers-software/index.ts new file mode 100644 index 00000000..52065785 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/index.ts @@ -0,0 +1,16 @@ +import defineApp from '../../helpers/define-app'; +import addAuthHeader from './common/add-auth-header'; +import auth from './auth'; + +export default defineApp({ + name: 'Flowers Software', + key: 'flowers-software', + iconUrl: '{BASE_URL}/apps/flowers-software/assets/favicon.svg', + authDocUrl: 'https://automatisch.io/docs/apps/flowers-software/connection', + supportsConnections: true, + baseUrl: 'https://flowers-software.com', + apiBaseUrl: 'https://webapp.flowers-software.com/api', + primaryColor: '02AFC7', + beforeRequest: [addAuthHeader], + auth, +});