mirror of
https://github.com/oceanprotocol/commons.git
synced 2023-03-15 18:03:00 +01:00
backend routes
This commit is contained in:
parent
82906093e6
commit
cdf9609e1d
2574
server/package-lock.json
generated
2574
server/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,7 @@
|
||||
"test:watch": "jest --coverage --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@oceanprotocol/squid": "^0.5.5",
|
||||
"body-parser": "^1.18.3",
|
||||
"color-js": "^1.0.5",
|
||||
"compression": "^1.7.4",
|
||||
@ -22,7 +23,8 @@
|
||||
"morgan": "^1.9.1",
|
||||
"multer": "^1.4.1",
|
||||
"request": "^2.88.0",
|
||||
"uuid": "^3.3.2"
|
||||
"uuid": "^3.3.2",
|
||||
"web3": "^1.0.0-beta.52"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/body-parser": "^1.17.0",
|
||||
|
@ -1,6 +1,26 @@
|
||||
const config = {
|
||||
app: {
|
||||
port: 4000
|
||||
port: 4000,
|
||||
serviceScheme: 'http',
|
||||
serviceHost: 'localhost',
|
||||
servicePort: 4000,
|
||||
nodeScheme: 'http',
|
||||
nodeHost: 'localhost',
|
||||
nodePort: 8545,
|
||||
aquariusScheme: 'http',
|
||||
aquariusHost: 'aquarius',
|
||||
aquariusPort: 5000,
|
||||
brizoScheme: 'http',
|
||||
brizoHost: 'localhost',
|
||||
brizoPort: 8030,
|
||||
brizoAddress: '0x376817c638d2a04f475a73af37f7b51a2862d567',
|
||||
parityScheme: 'http',
|
||||
parityHost: 'localhost',
|
||||
parityPort: 8545,
|
||||
secretStoreScheme: 'http',
|
||||
secretStoreHost: 'localhost',
|
||||
secretStorePort: 12001,
|
||||
verbose: true
|
||||
}
|
||||
}
|
||||
|
||||
|
65
server/src/routes/RetireRouter.ts
Normal file
65
server/src/routes/RetireRouter.ts
Normal file
@ -0,0 +1,65 @@
|
||||
import { Router, Request, Response } from 'express'
|
||||
import { getProviders } from '../utils'
|
||||
|
||||
export class RetireRouter {
|
||||
public router: Router
|
||||
|
||||
/**
|
||||
* Initialize the RetireRouter
|
||||
*/
|
||||
public constructor() {
|
||||
this.router = Router()
|
||||
}
|
||||
|
||||
public async retireDid(req: Request, res: Response) {
|
||||
if (!req.body.did || !req.body.signature) {
|
||||
return res.send({
|
||||
status: 'error',
|
||||
message: 'Missing did or signature'
|
||||
})
|
||||
}
|
||||
const providers = await getProviders()
|
||||
try {
|
||||
const userAccount = await providers.web3.eth.personal.ecRecover(
|
||||
`You are retiring ${req.body.did}`,
|
||||
req.body.signature
|
||||
)
|
||||
const events = await providers.ocean.keeper.didRegistry.contract.getPastEvents(
|
||||
'DIDAttributeRegistered',
|
||||
{
|
||||
filter: {
|
||||
_owner: userAccount,
|
||||
_did: req.body.did.replace('did:op:', '0x')
|
||||
},
|
||||
fromBlock: 0,
|
||||
toBlock: 'latest'
|
||||
}
|
||||
)
|
||||
if (events.length > 0) {
|
||||
// TODO: retire asset in Aquarius
|
||||
res.send({ status: 'success' })
|
||||
} else {
|
||||
return res.send({
|
||||
status: 'error',
|
||||
message: 'Not owner of asset'
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
return res.send({ status: 'error' })
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Take each handler, and attach to one of the Express.Router's
|
||||
* endpoints.
|
||||
*/
|
||||
public init() {
|
||||
this.router.post('/', this.retireDid)
|
||||
}
|
||||
}
|
||||
|
||||
// Create the retireRouter, and export its configured Express.Router
|
||||
const retireRouter = new RetireRouter()
|
||||
retireRouter.init()
|
||||
|
||||
export default retireRouter.router
|
65
server/src/routes/UpdateRouter.ts
Normal file
65
server/src/routes/UpdateRouter.ts
Normal file
@ -0,0 +1,65 @@
|
||||
import { Router, Request, Response } from 'express'
|
||||
import { getProviders } from '../utils'
|
||||
|
||||
export class UpdateRouter {
|
||||
public router: Router
|
||||
|
||||
/**
|
||||
* Initialize the UpdateRouter
|
||||
*/
|
||||
public constructor() {
|
||||
this.router = Router()
|
||||
}
|
||||
|
||||
public async updateDid(req: Request, res: Response) {
|
||||
if (!req.body.did || !req.body.signature) {
|
||||
return res.send({
|
||||
status: 'error',
|
||||
message: 'Missing did or signature'
|
||||
})
|
||||
}
|
||||
const providers = await getProviders()
|
||||
try {
|
||||
const userAccount = await providers.web3.eth.personal.ecRecover(
|
||||
`You are retiring ${req.body.did}`,
|
||||
req.body.signature
|
||||
)
|
||||
const events = await providers.ocean.keeper.didRegistry.contract.getPastEvents(
|
||||
'DIDAttributeRegistered',
|
||||
{
|
||||
filter: {
|
||||
_owner: userAccount,
|
||||
_did: req.body.did.replace('did:op:', '0x')
|
||||
},
|
||||
fromBlock: 0,
|
||||
toBlock: 'latest'
|
||||
}
|
||||
)
|
||||
if (events.length > 0) {
|
||||
// TODO: update asset in Aquarius
|
||||
res.send({ status: 'success' })
|
||||
} else {
|
||||
return res.send({
|
||||
status: 'error',
|
||||
message: 'Not owner of asset'
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
return res.send({ status: 'error' })
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Take each handler, and attach to one of the Express.Router's
|
||||
* endpoints.
|
||||
*/
|
||||
public init() {
|
||||
this.router.post('/', this.updateDid)
|
||||
}
|
||||
}
|
||||
|
||||
// Create the updateRouter, and export its configured Express.Router
|
||||
const updateRouter = new UpdateRouter()
|
||||
updateRouter.init()
|
||||
|
||||
export default updateRouter.router
|
@ -11,7 +11,7 @@ export class UrlCheckRouter {
|
||||
this.router = Router()
|
||||
}
|
||||
|
||||
public checkUrl(req: Request, res: Response, next: NextFunction) {
|
||||
public checkUrl(req: Request, res: Response) {
|
||||
if (!req.body.url) {
|
||||
return res.send({ status: 'error', message: 'missing url' })
|
||||
}
|
||||
|
@ -6,6 +6,8 @@ import bodyParser from 'body-parser'
|
||||
|
||||
// routes
|
||||
import UrlCheckRouter from './routes/UrlCheckRouter'
|
||||
import UpdateRouter from './routes/UpdateRouter'
|
||||
import RetireRouter from './routes/RetireRouter'
|
||||
|
||||
// config
|
||||
import config from './config/config'
|
||||
@ -51,9 +53,11 @@ app.use(bodyParser.urlencoded({ extended: false }))
|
||||
app.use(compression())
|
||||
// routes
|
||||
app.use('/api/v1/urlcheck', UrlCheckRouter)
|
||||
app.use('/api/v1/updateDdo', UpdateRouter)
|
||||
app.use('/api/v1/retireDdo', RetireRouter)
|
||||
|
||||
/// catch 404
|
||||
app.use((req, res, next) => {
|
||||
app.use((req, res) => {
|
||||
res.status(404).send()
|
||||
})
|
||||
|
||||
|
39
server/src/utils.ts
Normal file
39
server/src/utils.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import Web3 from 'web3'
|
||||
import { Ocean } from '@oceanprotocol/squid'
|
||||
import config from './config/config'
|
||||
|
||||
export function getProviders() {
|
||||
return new Promise<any>(async (resolve, reject) => {
|
||||
const nodeUri = `${config.app.nodeScheme}://${config.app.nodeHost}:${
|
||||
config.app.nodePort
|
||||
}`
|
||||
const aquariusUri = `${config.app.aquariusScheme}://${
|
||||
config.app.aquariusHost
|
||||
}:${config.app.aquariusPort}`
|
||||
const brizoUri = `${config.app.brizoScheme}://${config.app.brizoHost}:${
|
||||
config.app.brizoPort
|
||||
}`
|
||||
const parityUri = `${config.app.parityScheme}://${
|
||||
config.app.parityHost
|
||||
}:${config.app.parityPort}`
|
||||
const secretStoreUri = `${config.app.secretStoreScheme}://${
|
||||
config.app.secretStoreHost
|
||||
}:${config.app.secretStorePort}`
|
||||
const web3 = new Web3(nodeUri)
|
||||
const oceanConfig = {
|
||||
web3Provider: web3,
|
||||
nodeUri,
|
||||
aquariusUri,
|
||||
brizoUri,
|
||||
brizoAddress: config.app.brizoAddress,
|
||||
parityUri,
|
||||
secretStoreUri,
|
||||
verbose: config.app.verbose
|
||||
}
|
||||
const ocean = await Ocean.getInstance(oceanConfig)
|
||||
resolve({
|
||||
ocean,
|
||||
web3
|
||||
})
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user