Skip to content
This repository was archived by the owner on May 12, 2020. It is now read-only.

Commit 924ab34

Browse files
committed
Fixed stuff
1 parent d5d25cc commit 924ab34

File tree

6 files changed

+1248
-76
lines changed

6 files changed

+1248
-76
lines changed

package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
"scripts": {
33
"start": "npm run local",
44
"local": "serverless offline",
5-
"deploy": "serverless deploy -v"
5+
"deploy": "serverless deploy -v",
6+
"test": "standard --fix --verbose | snazzy"
67
},
78
"devDependencies": {
89
"serverless": "^1.24.1",
9-
"serverless-offline": "^3.16.0"
10+
"serverless-offline": "^3.16.0",
11+
"standard": "^10.0.3"
1012
},
1113
"dependencies": {
1214
"aws-sdk": "^2.149.0",
15+
"bcrypt": "^1.0.3",
1316
"file-type": "^7.2.0",
1417
"lodash": "^4.17.4",
18+
"snazzy": "^7.0.0",
1519
"uuid": "^3.1.0"
1620
}
1721
}

serverless.yml

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
service: screenshottr-service
22

3+
plugins:
4+
- serverless-offline
35

46
provider:
57
name: aws
@@ -8,10 +10,8 @@ provider:
810
stage: dev
911
region: eu-west-1
1012

11-
12-
plugins:
13-
- serverless-offline
14-
13+
environment:
14+
SS_STAGE: ${self:provider.stage}
1515

1616
iamRoleStatements:
1717
- Effect: Allow
@@ -21,36 +21,48 @@ provider:
2121
- Effect: Allow
2222
Action:
2323
- s3:*
24-
Resource: arn:aws:s3:::screenshottr-service-images-saved/*
24+
Resource: arn:aws:s3:::screenshottr-service-images-saved-dev/*
25+
- Effect: Allow
26+
Action:
27+
- dynamodb:*
28+
Resource: "arn:aws:dynamodb:eu-west-1:660773155982:table/screenshottr-service-uploads-dev"
2529
- Effect: Allow
2630
Action:
2731
- dynamodb:*
28-
Resource: "arn:aws:dynamodb:eu-west-1:660773155982:table/screenshottr-service-uploads"
32+
Resource: "arn:aws:dynamodb:eu-west-1:660773155982:table/screenshottr-service-user-dev"
2933

3034
functions:
3135
getSignedS3URL:
3236
handler: src/getSignedS3URL.getSignedS3URL
3337
events:
3438
- http: GET api/getSignedS3URL
39+
memorySize: 128
3540
processUpload:
3641
handler: src/processUpload.processUpload
3742
events:
3843
- s3: screenshottr-service-images-unprocessed-dev
44+
memorySize: 256
3945
getMetadata:
4046
handler: src/getMetadata.getMetadata
4147
events:
4248
- http: GET api/getImageMetadata
49+
memorySize: 128
50+
createUser:
51+
handler: src/createUser.createUser
52+
events:
53+
- http: GET api/user/createUser
54+
memorySize: 128
4355

4456
resources:
4557
Resources:
4658
storageBucket:
4759
Type: AWS::S3::Bucket
4860
Properties:
49-
BucketName: screenshottr-service-images-saved
61+
BucketName: screenshottr-service-images-saved-dev
5062
entriesDynamo:
5163
Type: AWS::DynamoDB::Table
5264
Properties:
53-
TableName: screenshottr-service-uploads
65+
TableName: screenshottr-service-uploads-dev
5466
AttributeDefinitions:
5567
- AttributeName: image_id
5668
AttributeType: S
@@ -60,3 +72,16 @@ resources:
6072
ProvisionedThroughput:
6173
ReadCapacityUnits: 5
6274
WriteCapacityUnits: 5
75+
usersDynamo:
76+
Type: AWS::DynamoDB::Table
77+
Properties:
78+
TableName: screenshottr-service-user-dev
79+
AttributeDefinitions:
80+
- AttributeName: user_name
81+
AttributeType: S
82+
KeySchema:
83+
- AttributeName: user_name
84+
KeyType: HASH
85+
ProvisionedThroughput:
86+
ReadCapacityUnits: 5
87+
WriteCapacityUnits: 5

src/getMetadata.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ const aws = require('aws-sdk')
33
const dynamo = new aws.DynamoDB.DocumentClient()
44

55
module.exports.getMetadata = (event, context, callback) => {
6-
const image_id = event.queryStringParameters.image_id
6+
const imageId = event.queryStringParameters.image_id
77
let response = {}
88

99
const dynamoParams = {
10-
TableName: 'screenshottr-service-uploads',
10+
TableName: `screenshottr-service-uploads-${process.env.SS_STAGE}`,
1111
Key: {
12-
'image_id': image_id
12+
'image_id': imageId
1313
}
1414
}
1515

16-
dynamo.get(dynamoParams, function(error, data) {
16+
dynamo.get(dynamoParams, function (error, data) {
1717
if (error) {
1818
response = {
1919
statusCode: 500,
@@ -35,5 +35,4 @@ module.exports.getMetadata = (event, context, callback) => {
3535
}
3636
callback(null, response)
3737
})
38-
3938
}

src/getSignedS3URL.js

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,51 @@ const s3 = new aws.S3()
77
const dynamo = new aws.DynamoDB.DocumentClient()
88

99
module.exports.getSignedS3URL = (event, context, callback) => {
10-
const date = new Date
10+
let imageOwner
11+
if (event.queryStringParameters && event.queryStringParameters.user_name && event.queryStringParameters.token) {
12+
const dynamoParams = {
13+
TableName: `screenshottr-service-user-${process.env.SS_STAGE}`,
14+
Key: {
15+
'user_name': event.queryStringParameters.user_name
16+
}
17+
}
18+
19+
dynamo.get(dynamoParams, function (error, data) {
20+
if (error) {
21+
console.log(error)
22+
} else {
23+
if (data.Item.token && data.Item.token === event.queryStringParameters.token) {
24+
imageOwner = event.queryStringParameters.user_name
25+
} else {
26+
imageOwner = '0'
27+
}
28+
}
29+
})
30+
} else {
31+
imageOwner = '0'
32+
}
1133
const key = uuidv4()
1234
const S3params = {
13-
Bucket: 'screenshottr-service-images-unprocessed-dev',
35+
Bucket: `screenshottr-service-images-unprocessed-${process.env.SS_STAGE}`,
1436
Key: key,
1537
ACL: 'public-read',
1638
Expires: 250,
1739
ContentType: 'binary/octet-stream'
1840
}
1941
const dynamoParams = {
20-
TableName: 'screenshottr-service-uploads',
42+
TableName: `screenshottr-service-uploads-${process.env.SS_STAGE}`,
2143
Item: {
2244
image_id: key,
2345
image_status: 'not_yet_uploaded',
2446
dates: {
2547
created: Date.now()
2648
},
27-
deleted: false
49+
deleted: false,
50+
image_owner: imageOwner
2851
}
2952
}
3053

31-
dynamo.put(dynamoParams, function(error, data) {
54+
dynamo.put(dynamoParams, function (error, data) {
3255
if (error) {
3356
console.log(error)
3457
}
@@ -42,9 +65,9 @@ module.exports.getSignedS3URL = (event, context, callback) => {
4265
success: false
4366
})
4467
}
45-
callback(null, response)
68+
callback(null, response)
4669
} else {
47-
console.log("URL", url)
70+
console.log('URL', url)
4871
const response = {
4972
statusCode: 200,
5073
body: JSON.stringify({

src/processUpload.js

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
'use strict';
1+
'use strict'
22
const _ = require('lodash')
33
const fileType = require('file-type')
44
const aws = require('aws-sdk')
55
const s3 = new aws.S3()
66
const dynamo = new aws.DynamoDB.DocumentClient()
77

88
module.exports.processUpload = (event, context, callback) => {
9-
109
_.map(event.Records, (event) => {
1110
let filename = ''
1211
let mimeType = ''
@@ -23,19 +22,19 @@ module.exports.processUpload = (event, context, callback) => {
2322
callback(null, {})
2423
} else {
2524
const dynamoParams = {
26-
TableName: 'screenshottr-service-uploads',
25+
TableName: `screenshottr-service-uploads-${process.env.SS_STAGE}`,
2726
Key: {
2827
image_id: event.s3.object.key
2928
},
30-
UpdateExpression: "set dates.deletedAt = :deletedTime, image_status = :image_status, delete_reason = :delete_reason, deleted = :deleted",
29+
UpdateExpression: 'set dates.deletedAt = :deletedTime, image_status = :image_status, delete_reason = :delete_reason, deleted = :deleted',
3130
ExpressionAttributeValues: {
32-
":deletedTime": Date.now(),
33-
":image_status": 'image_deleted',
34-
":deleted": true,
35-
":delete_reason": 'image_too_large'
31+
':deletedTime': Date.now(),
32+
':image_status': 'image_deleted',
33+
':deleted': true,
34+
':delete_reason': 'image_too_large'
3635
}
3736
}
38-
dynamo.update(dynamoParams, function(error, data) {
37+
dynamo.update(dynamoParams, function (error, data) {
3938
if (error) {
4039
console.log(error)
4140
}
@@ -52,13 +51,13 @@ module.exports.processUpload = (event, context, callback) => {
5251
} else {
5352
const image = data.Body
5453
const fileMeta = fileType(image)
55-
const fileExtensions = ["png", "jpg", "jpeg", "svg", "gif", "tiff"]
54+
const fileExtensions = ['png', 'jpg', 'jpeg', 'svg', 'gif', 'tiff']
5655
if (fileMeta !== null && typeof fileMeta.ext !== 'undefined' && fileExtensions.indexOf(fileMeta.ext) > -1) {
5756
filename = `${event.s3.object.key}.${fileMeta.ext}`
5857
mimeType = fileMeta.mime
5958
const putParams = {
6059
Body: image,
61-
Bucket: 'screenshottr-service-images-saved',
60+
Bucket: `screenshottr-service-images-saved-${process.env.SS_STAGE}`,
6261
Key: filename,
6362
ContentType: mimeType,
6463
ACL: 'public-read'
@@ -70,44 +69,42 @@ module.exports.processUpload = (event, context, callback) => {
7069
callback(null, {})
7170
} else {
7271
const dynamoParams = {
73-
TableName: 'screenshottr-service-uploads',
72+
TableName: `screenshottr-service-uploads-${process.env.SS_STAGE}`,
7473
Key: {
7574
image_id: event.s3.object.key
7675
},
77-
UpdateExpression: "set dates.uploaded_at = :modifiedTime, image_url = :image_url, fileMeta = :fileMeta, filename = :filename, image_status = :image_status, image_owner = :image_owner",
76+
UpdateExpression: 'set dates.uploaded_at = :modifiedTime, image_url = :image_url, fileMeta = :fileMeta, filename = :filename, image_status = :image_status',
7877
ExpressionAttributeValues: {
79-
":modifiedTime": Date.now(),
80-
":image_url": `https://i.screenshottr.us/${filename}`,
81-
":fileMeta": fileMeta,
82-
":filename": filename,
83-
":image_status": 'image_uploaded',
84-
":image_owner": 0
78+
':modifiedTime': Date.now(),
79+
':image_url': `https://i.screenshottr.us/${filename}`,
80+
':fileMeta': fileMeta,
81+
':filename': filename,
82+
':image_status': 'image_uploaded'
8583
}
8684
}
87-
dynamo.update(dynamoParams, function(error, data) {
85+
dynamo.update(dynamoParams, function (error, data) {
8886
if (error) {
8987
console.log(error)
9088
}
9189
})
9290
console.log(`PUT ${event.s3.object.key}`)
9391
}
9492
})
95-
9693
} else {
9794
const dynamoParams = {
98-
TableName: 'screenshottr-service-uploads',
95+
TableName: `screenshottr-service-uploads-${process.env.SS_STAGE}`,
9996
Key: {
10097
image_id: event.s3.object.key
10198
},
102-
UpdateExpression: "set dates.deletedAt = :deletedTime, image_status = :image_status, delete_reason = :delete_reason, deleted = :deleted",
99+
UpdateExpression: 'set dates.deletedAt = :deletedTime, image_status = :image_status, delete_reason = :delete_reason, deleted = :deleted',
103100
ExpressionAttributeValues: {
104-
":deletedTime": Date.now(),
105-
":image_status": 'image_deleted',
106-
":deleted": true,
107-
":delete_reason": 'file_type_not_allowed'
101+
':deletedTime': Date.now(),
102+
':image_status': 'image_deleted',
103+
':deleted': true,
104+
':delete_reason': 'file_type_not_allowed'
108105
}
109106
}
110-
dynamo.update(dynamoParams, function(error, data) {
107+
dynamo.update(dynamoParams, function (error, data) {
111108
if (error) {
112109
console.log(error)
113110
}

0 commit comments

Comments
 (0)