diff --git a/.gitignore b/.gitignore index ac09275..93552ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .now node_modules +.env +.serverless # Environment Variables .env diff --git a/.serverless/cloudformation-template-update-stack.json b/.serverless/cloudformation-template-update-stack.json index 5b01926..ea5d2c5 100644 --- a/.serverless/cloudformation-template-update-stack.json +++ b/.serverless/cloudformation-template-update-stack.json @@ -161,12 +161,12 @@ "S3Bucket": { "Ref": "ServerlessDeploymentBucket" }, - "S3Key": "serverless/localstack-lambda/dev/1620056787473-2021-05-03T15:46:27.473Z/localstack-lambda.zip" + "S3Key": "serverless/localstack-lambda/dev/1620092918879-2021-05-04T01:48:38.879Z/localstack-lambda.zip" }, "Handler": "api/server.handler", "Runtime": "nodejs12.x", "FunctionName": "localstack-lambda-dev-app", - "MemorySize": 128, + "MemorySize": 512, "Timeout": 6, "Role": { "Fn::GetAtt": [ @@ -179,14 +179,14 @@ "AppLogGroup" ] }, - "AppLambdaVersionpKt6OvdECa0w3L8STXgnFAZzVQXb1lv1UQDQyHZmwu8": { + "AppLambdaVersionuvewJZYompWGhR7PreRGORUZWWNhF3zGn5TtfgsWIs": { "Type": "AWS::Lambda::Version", "DeletionPolicy": "Retain", "Properties": { "FunctionName": { "Ref": "AppLambdaFunction" }, - "CodeSha256": "ti9O4pTltT2kEw78OJXfrJVusyoy/3C+KWaYQByAA20=" + "CodeSha256": "3b8ZgXd14AZAi3l2N89aVQ4LE9Ty39V8tHZhL6Q1t3w=" } }, "ApiGatewayRestApi": { @@ -305,7 +305,7 @@ "MethodResponses": [] } }, - "ApiGatewayDeployment1620056783201": { + "ApiGatewayDeployment1620092914902": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "RestApiId": { @@ -368,7 +368,7 @@ "AppLambdaFunctionQualifiedArn": { "Description": "Current Lambda function version", "Value": { - "Ref": "AppLambdaVersionpKt6OvdECa0w3L8STXgnFAZzVQXb1lv1UQDQyHZmwu8" + "Ref": "AppLambdaVersionuvewJZYompWGhR7PreRGORUZWWNhF3zGn5TtfgsWIs" }, "Export": { "Name": "sls-localstack-lambda-dev-AppLambdaFunctionQualifiedArn" diff --git a/.serverless/localstack-lambda.zip b/.serverless/localstack-lambda.zip index 0182e71..2f23b2f 100644 Binary files a/.serverless/localstack-lambda.zip and b/.serverless/localstack-lambda.zip differ diff --git a/.serverless/serverless-state.json b/.serverless/serverless-state.json index c8445d5..2d1b62b 100644 --- a/.serverless/serverless-state.json +++ b/.serverless/serverless-state.json @@ -9,7 +9,7 @@ "runtime": "nodejs12.x", "stage": "dev", "region": "us-east-1", - "memorySize": 128, + "memorySize": 512, "variableSyntax": "\\${([^{}:]+?(?:\\(|:)(?:[^:{}][^{}]*?)?)}", "versionFunctions": true, "compiledCloudFormationTemplate": { @@ -175,12 +175,12 @@ "S3Bucket": { "Ref": "ServerlessDeploymentBucket" }, - "S3Key": "serverless/localstack-lambda/dev/1620056787473-2021-05-03T15:46:27.473Z/localstack-lambda.zip" + "S3Key": "serverless/localstack-lambda/dev/1620092918879-2021-05-04T01:48:38.879Z/localstack-lambda.zip" }, "Handler": "api/server.handler", "Runtime": "nodejs12.x", "FunctionName": "localstack-lambda-dev-app", - "MemorySize": 128, + "MemorySize": 512, "Timeout": 6, "Role": { "Fn::GetAtt": [ @@ -193,14 +193,14 @@ "AppLogGroup" ] }, - "AppLambdaVersionpKt6OvdECa0w3L8STXgnFAZzVQXb1lv1UQDQyHZmwu8": { + "AppLambdaVersionuvewJZYompWGhR7PreRGORUZWWNhF3zGn5TtfgsWIs": { "Type": "AWS::Lambda::Version", "DeletionPolicy": "Retain", "Properties": { "FunctionName": { "Ref": "AppLambdaFunction" }, - "CodeSha256": "ti9O4pTltT2kEw78OJXfrJVusyoy/3C+KWaYQByAA20=" + "CodeSha256": "3b8ZgXd14AZAi3l2N89aVQ4LE9Ty39V8tHZhL6Q1t3w=" } }, "ApiGatewayRestApi": { @@ -319,7 +319,7 @@ "MethodResponses": [] } }, - "ApiGatewayDeployment1620056783201": { + "ApiGatewayDeployment1620092914902": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "RestApiId": { @@ -382,7 +382,7 @@ "AppLambdaFunctionQualifiedArn": { "Description": "Current Lambda function version", "Value": { - "Ref": "AppLambdaVersionpKt6OvdECa0w3L8STXgnFAZzVQXb1lv1UQDQyHZmwu8" + "Ref": "AppLambdaVersionuvewJZYompWGhR7PreRGORUZWWNhF3zGn5TtfgsWIs" }, "Export": { "Name": "sls-localstack-lambda-dev-AppLambdaFunctionQualifiedArn" @@ -514,11 +514,11 @@ ], "name": "localstack-lambda-dev-app", "package": {}, - "memory": 128, + "memory": 512, "timeout": 6, "runtime": "nodejs12.x", "vpc": {}, - "versionLogicalId": "AppLambdaVersionpKt6OvdECa0w3L8STXgnFAZzVQXb1lv1UQDQyHZmwu8" + "versionLogicalId": "AppLambdaVersionuvewJZYompWGhR7PreRGORUZWWNhF3zGn5TtfgsWIs" } }, "configValidationMode": "warn", @@ -540,7 +540,7 @@ "artifact": "/Users/duncanphelps/Documents/Learning/Javascript/sheetaki/sheetaki/.serverless/localstack-lambda.zip" }, "package": { - "artifactDirectoryName": "serverless/localstack-lambda/dev/1620056787473-2021-05-03T15:46:27.473Z", + "artifactDirectoryName": "serverless/localstack-lambda/dev/1620092918879-2021-05-04T01:48:38.879Z", "artifact": "localstack-lambda.zip" } } \ No newline at end of file diff --git a/api/file/index.js b/api/file/index.js index b1f3bb1..488ff16 100644 --- a/api/file/index.js +++ b/api/file/index.js @@ -1,27 +1,13 @@ const URL = require('url'); -const do_wb = require('../../src/util'); fs = require('fs'); -const AWS = require('aws-sdk'); +const { getFile } = require('../s3'); module.exports = function (req, res) { res.setHeader('Access-Control-Allow-Origin', '*'); const url = URL.parse(req.url, true); - // const s3 = new AWS.S3({ endpoint: 'http://localhost:4566', s3ForcePathStyle: true }); - const s3 = new AWS.S3(); - - const getFile = (filename) => { - s3.getObject({ Bucket: 'sheetaki-test', Key: filename }, function (err, data) { - if (err) return res.status(500).send(err.message || err); - do_wb(req, data.Body, url, res); - }); - } if (!url.query.filename) return res.status(400).send("Must specify filename"); if (url.query.filename){ - getFile(url.query.filename); - // fs.readFile(url.query.filename, (err, body) => { - // if (err) return res.status(500).send(err.message || err); - // do_wb(req, body, url, res); - // }); + getFile(req, res, url, url.query.filename); } }; \ No newline at end of file diff --git a/api/s3.js b/api/s3.js new file mode 100644 index 0000000..d456204 --- /dev/null +++ b/api/s3.js @@ -0,0 +1,38 @@ +require('dotenv').config(); +const S3 = require('aws-sdk/clients/s3'); +const do_wb = require('../src/util'); + +const bucketName = process.env.AWS_BUCKET_NAME +const region = process.env.AWS_BUCKET_REGION +const secretAccessKey = process.env.AWS_SECRET_KEY +const accessKeyId = process.env.AWS_ACCESS_KEY + +const s3 = new S3({ + region, + accessKeyId, + secretAccessKey +}) + +function uploadFile(filename, file){ + filename = filename.split("/"); + filename = filename[filename.length - 1] + const uploadParams = { + Bucket: bucketName, + Key: filename, + Body: file + }; + return s3.upload(uploadParams).promise() +} +exports.uploadFile = uploadFile; + +function getFile(req, res, url, filename){ + const params = { + Key: filename, + Bucket: bucketName, + } + s3.getObject(params, function (err, data) { + if (err) return res.status(500).send(err.message || err); + do_wb(req, data.Body, url, res); + }); +} +exports.getFile = getFile; \ No newline at end of file diff --git a/api/save/index.js b/api/save/index.js index a7bc7ae..8efd2dd 100644 --- a/api/save/index.js +++ b/api/save/index.js @@ -3,6 +3,7 @@ const do_wb = require('../../src/util'); const formidable = require('formidable-serverless'); const tmp = require('tmp'); const AWS = require('aws-sdk'); +const { uploadFile } = require('../s3'); module.exports = function (req, res) { res.setHeader('Access-Control-Allow-Origin', '*'); @@ -19,28 +20,6 @@ module.exports = function (req, res) { return tmpobj.name; } - // const writeFile = (filename, file) => { - // fs.writeFile(filename, file, (err) => { - // if (err) return res.status(500).send(err.message || err); - // res.status(201).send(filename); - // }); - // } - - //upload file to s3 bucket - const uploadFile = (filename, file) => { - filename = filename.split("/"); - filename = filename[filename.length-1] - const params = { - Bucket: "sheetaki-test", - Key: filename, - Body: file - }; - s3.putObject(params, function (err, data) { - if (err) return res.status(500).send(err.message || err); - res.status(201).send(filename); - }); - }; - // form.parse(req, (err, fields, files) => { if (err) return res.status(400).send(err.message || err); if (!url.query) url.query = fields; @@ -54,11 +33,12 @@ module.exports = function (req, res) { /* read file */ const file = fentries[0][1]; - fs.readFile(file.path, (err, body) => { + fs.readFile(file.path, async (err, body) => { if (err) return res.status(500).send(err.message || err); const tmpFile = newFile(); - uploadFile(tmpFile, body); - //writeFile(tmpFile, body); + const result = await uploadFile(tmpFile, body); + console.log(result); + res.send(result.key); }); }); }; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8fb2470..16ac28a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "aws-sdk": "^2.896.0", "body-parser": "^1.19.0", + "dotenv": "^8.2.0", "express": "^4.17.1", "formidable-serverless": "", "request": "", @@ -373,6 +374,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "engines": { + "node": ">=8" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1596,6 +1605,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", diff --git a/package.json b/package.json index 7de9d30..d3b6b4e 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "dependencies": { "aws-sdk": "^2.896.0", "body-parser": "^1.19.0", + "dotenv": "^8.2.0", "express": "^4.17.1", "formidable-serverless": "", "request": "", diff --git a/serverless.yml b/serverless.yml index b0e53b9..1b12f2b 100755 --- a/serverless.yml +++ b/serverless.yml @@ -19,7 +19,7 @@ provider: runtime: nodejs12.x stage: dev region: us-east-1 - memorySize: 128 + memorySize: 512 functions: app: handler: api/server.handler