Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions src/controllers/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ class AuthController {
if (!isValid) {
return res.status(401).send({
status: "fail",
data: {
"auth": "Invalid credentials or auth token"
}
message: "Invalid credentials or auth token"
});
}

Expand Down
49 changes: 43 additions & 6 deletions src/controllers/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class UserController {
} catch (err) {
return res.status(400).send({
status: "fail",
message: err.error + ": " + err.reason
message: err.message
});
}
}
Expand Down Expand Up @@ -92,7 +92,7 @@ class UserController {
} catch (err) {
return res.status(500).send({
status: "fail",
message: err.error + ": " + err.reason
message: err.message
});
}
}
Expand Down Expand Up @@ -159,13 +159,12 @@ class UserController {
} catch (err) {
return res.status(500).send({
status: "fail",
message: err.error + ": " + err.reason
message: err.message
});
}
}

async databases(req, res) {
const databaseName = req.body.databaseName;
const did = req.tokenData.did
const contextName = req.tokenData.contextName

Expand All @@ -188,7 +187,7 @@ class UserController {
} catch (err) {
return res.status(500).send({
status: "fail",
message: err.error + ": " + err.reason
message: err.message
});
}
}
Expand Down Expand Up @@ -229,7 +228,45 @@ class UserController {
} catch (err) {
return res.status(500).send({
status: "fail",
message: err.error + ": " + err.reason
message: err.message
});
}
}

async usage(req, res) {
const did = req.tokenData.did
const contextName = req.tokenData.contextName

if (!did || !contextName) {
return res.status(401).send({
status: "fail",
message: "Permission denied"
});
}

try {
const databases = await DbManager.getUserDatabases(did, contextName)

const result = {
databases: 0,
bytes: 0
}

for (let d in databases) {
const database = databases[d]
const dbInfo = await DbManager.getUserDatabase(did, contextName, database.databaseName)
result.databases++
result.bytes += dbInfo.info.sizes.file
}

return Utils.signedResponse({
status: "success",
result
}, res);
} catch (err) {
return res.status(500).send({
status: "fail",
message: err.message
});
}
}
Expand Down
1 change: 1 addition & 0 deletions src/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ router.post('/user/deleteDatabase', UserController.deleteDatabase);
router.post('/user/deleteDatabases', UserController.deleteDatabases);
router.post('/user/databases', UserController.databases);
router.post('/user/databaseInfo', UserController.databaseInfo);
router.post('/user/usage', UserController.usage);

export default router;
21 changes: 19 additions & 2 deletions test/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ describe("Server tests", function() {
signature
});

assert.equal(response.data.status, 'success', 'Successfull device invalidation response from server')
assert.equal(response.data.status, 'success', 'Successful device invalidation response from server')

const pendingConnect = new Promise((resolve) => {
const request = Axios.post(`${SERVER_URL}/auth/connect`, {
Expand Down Expand Up @@ -233,7 +233,6 @@ describe("Server tests", function() {
});

assert.ok(TestUtils.verifySignature(response), 'Have a valid signature in response')

assert.equal(response.data.status, "success", "Successful database info response")

const result = response.data.result
Expand All @@ -242,6 +241,24 @@ describe("Server tests", function() {
assert.ok(result.info, 'Have an info response')
})

it('Gets usage stats for user and context', async () => {
const response = await Axios.post(`${SERVER_URL}/user/usage`, {
did: accountInfo.did,
contextName: CONTEXT_NAME
}, {
headers: {
Authorization: `Bearer ${accessToken}`
}
});

assert.ok(TestUtils.verifySignature(response), 'Have a valid signature in response')
assert.equal(response.data.status, "success", "Successful usage response")

const result = response.data.result
assert.equal(result.databases, 2, 'Expected number of databases')
assert.ok(result.bytes > 0, 'More than 0 bytes used')
})

// @todo: updates

it("Deletes database", async () => {
Expand Down