Skip to content

Commit fb8f9ea

Browse files
committed
initial commit, db and user creation
0 parents  commit fb8f9ea

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

index.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
'use strict';
2+
const { aql, query, db } = require("@arangodb");
3+
const createRouter = require('@arangodb/foxx/router');
4+
const users = require("@arangodb/users");
5+
6+
const router = createRouter();
7+
const joi = require('joi');
8+
9+
module.context.use(router);
10+
11+
router.post('/createDB', function (req,res) {
12+
const data = req.body;
13+
const dbName = data.dbName ? data.dbName : randomStringGenerator();
14+
const username = data.username ? data.username : randomStringGenerator();
15+
const password = data.password ? data.password : randomStringGenerator();
16+
17+
18+
// If user doesn't exist, create the user
19+
try {
20+
users.document(username);
21+
// If user does exist send error response.
22+
res.send("User already exists, please supply new username.").status(409);
23+
} catch(err) {
24+
// Handle duplicate database name.
25+
try {
26+
db._createDatabase(dbName);
27+
} catch (err) {
28+
res.send("Database already exists or invalid name supplied, please supply new dbName.").status(400);
29+
}
30+
users.save(username, password, true);
31+
// Grants user access only to newly created database
32+
users.grantDatabase(username, dbName, 'rw');
33+
res.send({dbName, username, password});
34+
}
35+
})
36+
.body(joi.object().required(), 'Creates a new database, optionally provide dbName, username, or password ')
37+
.response(joi.object().required(), 'Returns database name, username, and password.')
38+
.summary('Creates a database and returns name and login credentials.')
39+
.description('Creates a database with potentially randomly generated dbName, username, and password. ');
40+
41+
42+
function randomStringGenerator() {
43+
// Database name must start with letter.
44+
return "ML" + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
45+
}

manifest.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"engines": {
3+
"arangodb": "^3.5.0"
4+
},
5+
"main": "index.js",
6+
"scripts": {
7+
"setup": "scripts/setup.js"
8+
}
9+
}

scripts/setup.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

0 commit comments

Comments
 (0)