Skip to content

Commit

Permalink
Merge pull request #109 from 3box/release/v1.2.0
Browse files Browse the repository at this point in the history
Release v1.2.0
  • Loading branch information
derrandz committed Mar 12, 2020
2 parents 9686bc0 + d016a16 commit aba3631
Show file tree
Hide file tree
Showing 13 changed files with 217 additions and 57 deletions.
3 changes: 2 additions & 1 deletion .circleci/config.yml
Expand Up @@ -30,6 +30,7 @@ jobs:
name: deploy-to-serverless
command: |
sls package
export CODE_VERSION=${CIRCLE_SHA1:0:7}
if [ "${CIRCLE_BRANCH}" == "develop" ]; then
sls deploy --stage develop
fi
Expand All @@ -46,4 +47,4 @@ workflows:
version: 2
build-and-deploy:
jobs:
- build
- build
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
## v1.2.0 - 2020-03-12
* feat: add bunyan logger
* feat: add fetch mutliple links and root store address queries

## v1.1.6 - 2020-01-24
* fix: don't verify EOA type signature for erc1271 contracts

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.offline
Expand Up @@ -12,4 +12,4 @@ COPY serverless.yml webpack.config.js .babelrc ./

EXPOSE 3000

CMD serverless offline start --noEnvironment
CMD serverless offline start --noEnvironment --printOutput
101 changes: 92 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "3box-address-server",
"version": "1.1.6",
"version": "1.2.0",
"description": "Keeps track of the root store addresses to the user managed data platform",
"main": "index.js",
"scripts": {
Expand Down Expand Up @@ -42,6 +42,7 @@
"dependencies": {
"3id-resolver": "^0.0.5",
"aws-sdk": "^2.574.0",
"bunyan": "^1.8.12",
"cids": "0.7.1",
"did-jwt": "^0.2.0",
"did-resolver": "0.0.6",
Expand Down
1 change: 1 addition & 0 deletions serverless.yml
Expand Up @@ -19,6 +19,7 @@ provider:
SECRETS: ${self:custom.kmsSecrets.secrets.SECRETS}
IPFS_PATH: /ipfs
AWS_BUCKET_NAME: ${self:custom.awsBucketName.${self:provider.stage}}
CODE_VERSION: ${env:CODE_VERSION}

# Use the serverless-webpack plugin to transpile ES6
plugins:
Expand Down
18 changes: 18 additions & 0 deletions src/api/__tests__/root_store_addresses_post.test.js
Expand Up @@ -31,6 +31,15 @@ describe('RootStoreAddressesPost', () => {
} else if (did === did4) {
return { root_store_address: rsAddress4 }
}
}),
getMultiple: jest.fn().mockImplementation(dids => {
return dids.map((did) => {
const rsAddressRow = addressMgrMock.get(did)
if (rsAddressRow) {
rsAddressRow.did = did
return rsAddressRow
}
}).filter(rsAddressRow => !!rsAddressRow)
})
}
linkMgrMock = {
Expand All @@ -40,6 +49,15 @@ describe('RootStoreAddressesPost', () => {
} else if (addr === address2) {
return { did: did2 }
}
}),
getMultiple: jest.fn().mockImplementation(addresses => {
return addresses.map((addr) => {
const didRow = linkMgrMock.get(addr)
if (didRow) {
didRow.address = addr
return didRow
}
}).filter(didRow => !!didRow)
})
}
sut = new RootStoreAddressesPost(addressMgrMock, linkMgrMock)
Expand Down
9 changes: 7 additions & 2 deletions src/api/link_delete.js
@@ -1,7 +1,10 @@
const { createLogger } = require("../logger")

class LinkDeleteHandler {
constructor(uPortMgr, linkMgr) {
this.uPortMgr = uPortMgr
this.linkMgr = linkMgr
this.logger = createLogger({ name: "api.link_delete" })
}

async handle(event, context, cb) {
Expand All @@ -26,8 +29,10 @@ class LinkDeleteHandler {
let token = await this.uPortMgr.verifyToken(body.delete_token)
payload = token.payload
} catch (error) {
console.log('Error on this.uportMgr.verifyToken')
console.log(error)
this.logger.error({
msg: 'Error verifying the token',
err: error,
})
cb({ code: 401, message: 'Invalid JWT' })
return
}
Expand Down
11 changes: 8 additions & 3 deletions src/api/root_store_address_post.js
@@ -1,7 +1,10 @@
class RootStoreAddressPost {
const { createLogger } = require("../logger")

class RootStoreAddressPost{
constructor (uPortMgr, addressMgr) {
this.uPortMgr = uPortMgr
this.addressMgr = addressMgr
this.logger = createLogger({ name: "api.root_store_address_post" })
}

async handle (event, context, cb) {
Expand All @@ -25,8 +28,10 @@ class RootStoreAddressPost {
let dtoken = await this.uPortMgr.verifyToken(body.address_token)
payload = dtoken.payload
} catch (error) {
console.log('Error on this.uportMgr.verifyToken')
console.log(error)
this.logger.error({
msg: 'Error verifying the token',
err: error,
})
cb({ code: 401, message: 'Invalid JWT' })
return
}
Expand Down
75 changes: 35 additions & 40 deletions src/api/root_store_addresses_post.js
Expand Up @@ -19,53 +19,48 @@ class RootStoreAddressesPostHandler {
return
}

let promises = []
let resultObj = {}
const getRootStoreFromId = async id => {
const did = await this.getDID(id)
if (did) {
const rootStoreAddress = await this.getRootStore(did)
if (rootStoreAddress) {
resultObj[id] = rootStoreAddress
}
const idDidMap = await this.getDIDs(body.identities)
const didRootStoreMap = await this.getRootStores(Object.values(idDidMap))

const rootStoreAddresses = Object.keys(idDidMap).reduce((acc, id) => {
if (didRootStoreMap[idDidMap[id]]) {
acc[id] = didRootStoreMap[idDidMap[id]]
}
}
body.identities.forEach(id => {
promises.push(getRootStoreFromId(id))
})
await Promise.all(promises)
cb(null, { rootStoreAddresses: resultObj })
return acc
}, {})
cb(null, { rootStoreAddresses })
}

async getRootStore(did) {
// Get rsAddress for did from db
const rsAddress = await this.addressMgr.get(did)
if (!rsAddress) {
return null
} else {
return rsAddress.root_store_address
async getRootStores(dids) {
if (!dids || !dids.length) {
return {}
}
// Get rsAddress for did from db
const rsAddressRows = await this.addressMgr.getMultiple(dids)
return rsAddressRows.reduce((acc, row) => {
acc[row.did] = row.root_store_address
return acc
}, {})
}

async getDID(id) {
// Check if id is an address or a did
let did
if (id.startsWith('0x')) {
const { error } = hexString.validate(id)
if (error) {
return null
}
const didRow = await this.linkMgr.get(id)
if (!didRow) {
return null
}
did = didRow.did
} else if (id.startsWith('did:')) {
did = id
} else {
return null
async getDIDs(ids) {
if (!ids || !ids.length) {
return {}
}
return did
const { dids, addresses } = ids.reduce((acc, id) => {
if (id.startsWith('0x') && !hexString.validate(id).error) {
acc.addresses.push(id)
} else if (id.startsWith('did:')) {
acc.dids.push(id)
}
return acc
}, { dids: [], addresses: [] })
const didRows = addresses.length == 0 ? [] : await this.linkMgr.getMultiple(addresses)

const results = {}
didRows.forEach(row => results[row.address] = row.did)
dids.forEach(did => results[did] = did)
return results
}
}
module.exports = RootStoreAddressesPostHandler

0 comments on commit aba3631

Please sign in to comment.