🔀 Merge branch 'RicardoE105-feature/aws-s3'

This commit is contained in:
Jan Oberhauser 2020-04-20 20:45:45 +02:00
commit 63fedbdd84
5 changed files with 58 additions and 41 deletions

View file

@ -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) {

View file

@ -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');

View file

@ -41,7 +41,7 @@ export const fileOperations = [
description: 'Upload a file',
},
],
default: 'copy',
default: 'download',
description: 'The operation to perform.',
},
] as INodeProperties[];

View file

@ -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) {

View file

@ -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",