|
| 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 | +} |
0 commit comments