mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-26 12:01:16 -08:00
🔀 Merge branch 'RicardoE105-feature/aws-s3'
This commit is contained in:
commit
63fedbdd84
|
@ -28,7 +28,7 @@ export async function awsApiRequest(this: IHookFunctions | IExecuteFunctions | I
|
|||
uri: `https://${endpoint}${signOpts.path}`,
|
||||
body: signOpts.body,
|
||||
};
|
||||
console.log('aja')
|
||||
|
||||
try {
|
||||
return await this.helpers.request!(options);
|
||||
} catch (error) {
|
||||
|
|
|
@ -1,7 +1,21 @@
|
|||
|
||||
import {
|
||||
snakeCase,
|
||||
paramCase,
|
||||
} from 'change-case';
|
||||
|
||||
import {
|
||||
createHash,
|
||||
} from 'crypto';
|
||||
|
||||
import {
|
||||
Builder,
|
||||
} from 'xml2js';
|
||||
|
||||
import {
|
||||
IExecuteFunctions,
|
||||
BINARY_ENCODING,
|
||||
} from 'n8n-core';
|
||||
IExecuteFunctions,
|
||||
} from 'n8n-core';
|
||||
|
||||
import {
|
||||
IBinaryKeyData,
|
||||
|
@ -17,13 +31,13 @@ import {
|
|||
} from './BucketDescription';
|
||||
|
||||
import {
|
||||
folderOperations,
|
||||
folderFields,
|
||||
folderFields,
|
||||
folderOperations,
|
||||
} from './FolderDescription';
|
||||
|
||||
import {
|
||||
fileOperations,
|
||||
fileFields,
|
||||
fileOperations,
|
||||
} from './FileDescription';
|
||||
|
||||
import {
|
||||
|
@ -32,17 +46,6 @@ import {
|
|||
awsApiRequestSOAPAllItems,
|
||||
} from './GenericFunctions';
|
||||
|
||||
import {
|
||||
snakeCase,
|
||||
paramCase,
|
||||
} from 'change-case';
|
||||
|
||||
import {
|
||||
createHash,
|
||||
} from 'crypto';
|
||||
|
||||
import * as js2xmlparser from 'js2xmlparser';
|
||||
|
||||
export class AwsS3 implements INodeType {
|
||||
description: INodeTypeDescription = {
|
||||
displayName: 'AWS S3',
|
||||
|
@ -74,16 +77,16 @@ export class AwsS3 implements INodeType {
|
|||
name: 'Bucket',
|
||||
value: 'bucket',
|
||||
},
|
||||
{
|
||||
name: 'Folder',
|
||||
value: 'folder',
|
||||
},
|
||||
{
|
||||
name: 'File',
|
||||
value: 'file',
|
||||
},
|
||||
{
|
||||
name: 'Folder',
|
||||
value: 'folder',
|
||||
},
|
||||
],
|
||||
default: 'bucket',
|
||||
default: 'file',
|
||||
description: 'The operation to perform.',
|
||||
},
|
||||
// BUCKET
|
||||
|
@ -136,13 +139,22 @@ export class AwsS3 implements INodeType {
|
|||
}
|
||||
|
||||
const body: IDataObject = {
|
||||
'@': {
|
||||
xmlns: 'http://s3.amazonaws.com/doc/2006-03-01/',
|
||||
},
|
||||
LocationConstraint: [credentials!.region],
|
||||
CreateBucketConfiguration: {
|
||||
'$': {
|
||||
xmlns: 'http://s3.amazonaws.com/doc/2006-03-01/',
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
const data = js2xmlparser.parse('CreateBucketConfiguration', body);
|
||||
// For some reasons does AWS not allow to supply "us-east-1" if you want to
|
||||
// create it there it has to be empty?!?!
|
||||
if (credentials!.region !== 'us-east-1') {
|
||||
// @ts-ignore
|
||||
body.CreateBucketConfiguration.LocationConstraint = [credentials!.region];
|
||||
}
|
||||
|
||||
const builder = new Builder();
|
||||
const data = builder.buildObject(body);
|
||||
|
||||
responseData = await awsApiRequestSOAP.call(this, `${name}.s3`, 'PUT', '', data, qs, headers);
|
||||
|
||||
|
@ -243,17 +255,23 @@ export class AwsS3 implements INodeType {
|
|||
} else {
|
||||
// delete everything inside the folder
|
||||
const body: IDataObject = {
|
||||
'@': {
|
||||
xmlns: 'http://s3.amazonaws.com/doc/2006-03-01/',
|
||||
Delete: {
|
||||
'$': {
|
||||
xmlns: 'http://s3.amazonaws.com/doc/2006-03-01/',
|
||||
},
|
||||
Object: [],
|
||||
},
|
||||
Object: [],
|
||||
};
|
||||
|
||||
for (const childObject of responseData) {
|
||||
(body.Object as IDataObject[]).push({
|
||||
//@ts-ignore
|
||||
(body.Delete.Object as IDataObject[]).push({
|
||||
Key: childObject.Key as string
|
||||
});
|
||||
}
|
||||
const data = js2xmlparser.parse('Delete', body);
|
||||
|
||||
const builder = new Builder();
|
||||
const data = builder.buildObject(body);
|
||||
|
||||
headers['Content-MD5'] = createHash('md5').update(data).digest('base64');
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ export const fileOperations = [
|
|||
description: 'Upload a file',
|
||||
},
|
||||
],
|
||||
default: 'copy',
|
||||
default: 'download',
|
||||
description: 'The operation to perform.',
|
||||
},
|
||||
] as INodeProperties[];
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
import {
|
||||
sign,
|
||||
} from 'aws4';
|
||||
} from 'aws4';
|
||||
|
||||
import {
|
||||
get,
|
||||
} from 'lodash';
|
||||
|
||||
import {
|
||||
OptionsWithUri,
|
||||
} from 'request';
|
||||
} from 'request';
|
||||
|
||||
import {
|
||||
parseString,
|
||||
} from 'xml2js';
|
||||
} from 'xml2js';
|
||||
|
||||
import {
|
||||
IExecuteFunctions,
|
||||
|
@ -21,10 +25,6 @@ import {
|
|||
IDataObject,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
import {
|
||||
get,
|
||||
} from 'lodash';
|
||||
|
||||
export async function awsApiRequest(this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions | IWebhookFunctions, service: string, method: string, path: string, body?: string | Buffer, query: IDataObject = {}, headers?: object, option: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
|
||||
const credentials = this.getCredentials('aws');
|
||||
if (credentials === undefined) {
|
||||
|
|
|
@ -284,7 +284,6 @@
|
|||
"gm": "^1.23.1",
|
||||
"googleapis": "~46.0.0",
|
||||
"imap-simple": "^4.3.0",
|
||||
"js2xmlparser": "^4.0.1",
|
||||
"lodash.get": "^4.4.2",
|
||||
"lodash.set": "^4.3.2",
|
||||
"lodash.unset": "^4.5.2",
|
||||
|
|
Loading…
Reference in a new issue