Skip to content

Commit 537ec39

Browse files
committed
feat: unsubscribe
1 parent b339b13 commit 537ec39

File tree

9 files changed

+39
-47
lines changed

9 files changed

+39
-47
lines changed

--output

Whitespace-only changes.

--region

Whitespace-only changes.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@
2222

2323
# Misc
2424
/.DS_Store
25+
--output
26+
--region

kms-secrets.us-east-2.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
secrets:
22
STAGING_INFURA_URL: AQICAHhGgAvqeSMcTOp7YDYdu8nxhCZ9sP3Pe3A4o55JsQLjZQH9ef886xSGwCkOVOqZXEflAAAAizCBiAYJKoZIhvcNAQcGoHsweQIBADB0BgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDLmDi148/wofuMLZfgIBEIBH/avGPWRsCg8+SOHctvUs1oG/vDRbtqg0eXOO4JSfQpIL17MGm2TvA3A916WGI1jZLyumxLxAZSAqRpcm5MHYhZkYZbRH9HI=
33
PRODUCTION_INFURA_URL: AQICAHhGgAvqeSMcTOp7YDYdu8nxhCZ9sP3Pe3A4o55JsQLjZQGtRxJO1I4ll5do7xSgQRlXAAAAjTCBigYJKoZIhvcNAQcGoH0wewIBADB2BgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDGEx9BRbqOVUdlAHJAIBEIBJXSXRCLwOTP86qdELUyZy2j+B8njcZV+IdBUjZxuduULh2dLzXSyL1fsQmtzxjpjRgwOZ28wI4Z0asmFLAttbBu5XRcJc4lDRGA==
4-
ENTROPY: AQICAHhGgAvqeSMcTOp7YDYdu8nxhCZ9sP3Pe3A4o55JsQLjZQGQSkjVNLZC528fa4nZnED+AAAAdjB0BgkqhkiG9w0BBwagZzBlAgEAMGAGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMJxF+4vAVYDOoNKc8AgEQgDPnGbrenflh1UUs/SwyQPD7Jxbf+MEQjEdppwY0nt8ROUazArparZ+p5Re9kgxrXZVNSOY=
54
STAGING_ARBITRABLE_PERMISSION_LIST_ADDRESS: '0xbefd40cd43072694555b5ec77120ce4a3a65a5d6'
65
PRODUCTION_ARBITRABLE_PERMISSION_LIST_ADDRESS: '0xb7faddf3ecd2402a7e48cea6d2637d90eeb5a7e6'
76
STAGING_ARBITRABLE_PERMISSION_LIST_BLOCK_BLOCK_NUMBER: '8784036'
@@ -10,4 +9,5 @@ secrets:
109
PRODUCTION_KLEROS_LIQUID_ADDRESS: '0x988b3a538b618c7a603e1c11ab82cd16dbe28069'
1110
STAGING_TOKEN_SALE_CONTRACT_ADDRESS: '0xC74348B7c4D9f25C26591a40AA2b712bC38F4f14'
1211
PRODUCTION_TOKEN_SALE_CONTRACT_ADDRESS: '0x5EdF42Ce9DA28d0B1790C6093103526e3bb88eF3'
12+
PRIVATE_KEY: AQICAHhGgAvqeSMcTOp7YDYdu8nxhCZ9sP3Pe3A4o55JsQLjZQE1/+LCDywrChGXhk3QqdBdAAAApTCBogYJKoZIhvcNAQcGoIGUMIGRAgEAMIGLBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDEpFNpPOKpNS3SnIXQIBEIBe7EzCwOw9G2PvTbDaO5nlBvCCt9ztmXiGKwLvwoJ9KmWBqbsnXd7DIrqQJZRurzOuKcShNlrq/T692TENRrAFKuC1zWxFeuiUwiLYab5cpWpVuCNnAYSnIETZTRRGWA==
1313
keyArn: 'arn:aws:kms:us-east-2:547511976516:key/bca002a4-c1d9-40e3-a251-6ccea1ce02f0'

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"invoke": "env-cmd ./.env serverless invoke -l -f",
1616
"build": "docker run --rm -v $PWD:/data -w /data node:10 npm rebuild scrypt",
1717
"deploy:function": "env-cmd ./.env serverless deploy function -f",
18+
"deploy:prod": "env-cmd ./.env serverless -s production deploy function -f",
1819
"deploy:staging": "env-cmd ./.env serverless deploy",
1920
"deploy": "env-cmd ./.env serverless deploy -s production"
2021
},

serverless.yml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,13 @@ functions:
356356
Action: ['dynamodb:PutItem'],
357357
Resource: 'arn:aws:dynamodb:us-east-2:547511976516:table/token-sale-locales',
358358
}
359-
postUnsubscribe:
360-
handler: src/global/unsubscribe
359+
getUnsubscribe:
360+
handler: src/global/unsubscribe.get
361361
events:
362-
- { http: { path: unsubscribe, method: post, cors: true } }
362+
- { http: { path: unsubscribe, method: get, cors: true } }
363363
environment:
364-
ENTROPY: '${self:custom.kmsSecrets.secrets.ENTROPY}'
365-
iamRoleStatementsName: 'postUnsubscribe-${self:provider.stage}-lambda-role'
364+
PRIVATE_KEY: '${self:custom.kmsSecrets.secrets.PRIVATE_KEY}'
365+
iamRoleStatementsName: 'getUnsubscribe-${self:provider.stage}-lambda-role'
366366
iamRoleStatements:
367367
- {
368368
Effect: Allow,
@@ -379,3 +379,8 @@ functions:
379379
Action: ['dynamodb:PutItem'],
380380
Resource: 'arn:aws:dynamodb:us-east-2:547511976516:table/user-settings',
381381
}
382+
- {
383+
Effect: Allow,
384+
Action: ['dynamodb:UpdateItem'],
385+
Resource: 'arn:aws:dynamodb:us-east-2:547511976516:table/user-settings',
386+
}

src/global/unsubscribe.js

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
1-
const _web3 = require('../utils/web3')
1+
const Web3 = require('web3')
22
const dynamoDB = require('../utils/dynamo-db')
3-
const getEnvVars = require('../get-env-vars')
3+
const getEnvVars = require('../utils/get-env-vars')
44
const whitelist = require('../utils/whitelist')
55

6-
module.exports.post = async (event, _context, callback) => {
6+
module.exports.get = async (event, _context, callback) => {
77
// Initialize web3
8-
const web3 = await _web3()
8+
const web3 = new Web3()
9+
10+
account = event.queryStringParameters.account
11+
console.log(account)
12+
signature = event.queryStringParameters.signature
13+
dapp = event.queryStringParameters.dapp
914

1015
// Validate signature
11-
const payload = JSON.parse(event.body).payload
1216
try {
13-
const account = await web3.eth.accounts.recover(
14-
JSON.stringify(payload.email),
15-
payload.signature
17+
const recoveredAccount = await web3.eth.accounts.recover(
18+
account,
19+
signature
1620
)
17-
const { ENTROPY } = await getEnvVars(['ENTROPY'])
18-
const lambdaAccount = web3.eth.accounts.create(ENTROPY)
21+
const { PRIVATE_KEY } = await getEnvVars(['PRIVATE_KEY'])
22+
const lambdaAccount = web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY.replace(/^\s+|\s+$/g, ''))
1923
if (
20-
account !== lambdaAccount.address
24+
recoveredAccount !== lambdaAccount.address
2125
)
2226
throw new Error('Signature does not match for this email address. Email contact.kleros.io.')
2327
} catch (err) {
@@ -33,18 +37,18 @@ module.exports.post = async (event, _context, callback) => {
3337

3438
// Update settings for DApp
3539
const updateKeys = whitelist.filter(k => {
36-
if (payload.dapp)
37-
return k.includes(payload.dapp)
40+
if (dapp)
41+
return k.includes(dapp)
3842
return false
3943
})
4044
await dynamoDB.updateItem({
41-
Key: { address: { S: payload.address } },
45+
Key: { address: { S: account } },
4246
TableName: 'user-settings',
4347
UpdateExpression: `SET ${updateKeys
4448
.map(k => `${k} = :_${k}`)
4549
.join(', ')}`,
4650
ExpressionAttributeValues: updateKeys.reduce((acc, k) => {
47-
acc[`:_${k}`] = false
51+
acc[`:_${k}`] = {"BOOL": false}
4852
return acc
4953
}, {})
5054
})
@@ -53,7 +57,7 @@ module.exports.post = async (event, _context, callback) => {
5357
statusCode: 200,
5458
headers: { 'Access-Control-Allow-Origin': '*' },
5559
body: JSON.stringify({
56-
payload: `Unsubscribed from Kleros ${payload.dapp} notifications.`
60+
payload: `Unsubscribed from Kleros ${dapp} notifications.`
5761
})
5862
})
5963
}

src/global/user-settings.js

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,6 @@
11
const _web3 = require('../utils/web3')
22
const dynamoDB = require('../utils/dynamo-db')
3-
4-
const whitelist = [
5-
'email',
6-
'dogecoinAddress',
7-
'fullName',
8-
'phone',
9-
'derivedAccountAddress',
10-
'courtNotificationSettingAppeal',
11-
'courtNotificationSettingDraw',
12-
'courtNotificationSettingLose',
13-
'courtNotificationSettingWin',
14-
'centralizedArbitratorDashboardNotificationSettingDisputes',
15-
'centralizedArbitratorDashboardNotificationSettingEvidence',
16-
't2crNotificationSettingDispute',
17-
't2crNotificationSettingRulingGiven',
18-
'escrowNotificationSettingDispute',
19-
'escrowNotificationSettingAppeal',
20-
'escrowNotificationSettingRulingGiven'
21-
]
3+
const whitelist = require('../utils/whitelist')
224

235
module.exports.get = async (event, _context, callback) => {
246
// Initialize web3

src/utils/whitelist.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ const whitelist = [
1414
't2crNotificationSettingRulingGiven',
1515
'escrowNotificationSettingDispute',
1616
'escrowNotificationSettingAppeal',
17-
'escrowNotificationSettingRulingGiven'
17+
'escrowNotificationSettingRulingGiven',
18+
'pushNotifications',
19+
'pushNotificationsURI'
1820
]
1921

20-
const emailWhitelist = [
21-
22-
]
23-
24-
export default whitelist
22+
module.exports = whitelist

0 commit comments

Comments
 (0)