feat(odoo): add auth and create lead action (#1143)
* Add Odoo App and Icon * Add Auth for Odoo * Authorise with API key, the password would also work, but we should encourage an API key. * Odoo Verify Credentials method * Add the xmlrpc dependency so the backend can communicate with Odoo's API. * Add a port to the auth fields to establish a connection that might not be over HTTPS. * Add still verified method * Currently no need to keep uid, so remove it from the auth data. * Await the callback from the xmlrpc method call to ensure we don't verify credentials before the callback has been executed. * Add Odoo create-lead action * Provide basic functionality to create a lead. * Add Odoo type option * Let the user decide if the lead should be a "lead" or "opportunity" in the create-lead action. * Add documentation for Odoo app * Follow project standards * Change indents to 2 spaces * Use single quotes instead of double * Commonise the authentication method (DRY) * Use latest for API doc link * refactor(odoo): abstract and organize implementation --------- Co-authored-by: Ali BARIN <ali.barin53@gmail.com>
This commit is contained in:
65
packages/backend/src/apps/odoo/auth/index.ts
Normal file
65
packages/backend/src/apps/odoo/auth/index.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import verifyCredentials from './verify-credentials';
|
||||
import isStillVerified from './is-still-verified';
|
||||
|
||||
export default {
|
||||
fields: [
|
||||
{
|
||||
key: 'host',
|
||||
label: 'Host Name',
|
||||
type: 'string' as const,
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: 'Host name of your Odoo Server',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'port',
|
||||
label: 'Port',
|
||||
type: 'string' as const,
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: '443',
|
||||
placeholder: null,
|
||||
description: 'Port that the host is running on, defaults to 443 (HTTPS)',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'databaseName',
|
||||
label: 'Database Name',
|
||||
type: 'string' as const,
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: 'Name of your Odoo database',
|
||||
clickToCopy: false,
|
||||
},
|
||||
{
|
||||
key: 'email',
|
||||
label: 'Email Address',
|
||||
type: 'string' as const,
|
||||
requires: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: 'Email Address of the account that will be interacting with the database',
|
||||
clickToCopy: false
|
||||
},
|
||||
{
|
||||
key: 'apiKey',
|
||||
label: 'API Key',
|
||||
type: 'string' as const,
|
||||
required: true,
|
||||
readOnly: false,
|
||||
value: null,
|
||||
placeholder: null,
|
||||
description: 'API Key for your Odoo account',
|
||||
clickToCopy: false
|
||||
}
|
||||
],
|
||||
|
||||
verifyCredentials,
|
||||
isStillVerified
|
||||
};
|
9
packages/backend/src/apps/odoo/auth/is-still-verified.ts
Normal file
9
packages/backend/src/apps/odoo/auth/is-still-verified.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import {IGlobalVariable} from '@automatisch/types';
|
||||
import verifyCredentials from './verify-credentials';
|
||||
|
||||
const isStillVerified = async ($: IGlobalVariable) => {
|
||||
await verifyCredentials($);
|
||||
return true;
|
||||
}
|
||||
|
||||
export default isStillVerified;
|
16
packages/backend/src/apps/odoo/auth/verify-credentials.ts
Normal file
16
packages/backend/src/apps/odoo/auth/verify-credentials.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { IGlobalVariable } from '@automatisch/types';
|
||||
import { authenticate } from '../common/xmlrpc-client';
|
||||
|
||||
const verifyCredentials = async ($: IGlobalVariable) => {
|
||||
try {
|
||||
await authenticate($);
|
||||
|
||||
await $.auth.set({
|
||||
screenName: `${$.auth.data.email} @ ${$.auth.data.databaseName} - ${$.auth.data.host}`,
|
||||
});
|
||||
} catch (error) {
|
||||
throw new Error('Failed while authorizing!');
|
||||
}
|
||||
}
|
||||
|
||||
export default verifyCredentials;
|
Reference in New Issue
Block a user