diff --git a/lib/core-modules-glue-code/user-databases.js b/lib/core-modules-glue-code/user-databases.js index c07ca9e..946b5fb 100644 --- a/lib/core-modules-glue-code/user-databases.js +++ b/lib/core-modules-glue-code/user-databases.js @@ -3,13 +3,63 @@ module.exports = { remove: removeUserDatabase } +var async = require('async') var log = require('npmlog') +var request = require('request') -function addUserDatabase (server, account) { +function addUserDatabase (config, server, account) { log.info('Account created for %s (id: %s)', account.username, account.id) - log.error('user/%s not created: not yet implemented (/lib/core-modules-glue-code/user-databases.js)', account.id) + + async.series([ + createDatabase.bind(null, config, account), + createSecurity.bind(null, config, account) + ], function (error) { + if (error) { + log.error('user/%s not created: %s', account.id, error) + return + } + + log.info('Database user/%s created for %s', account.id, account.username) + }) } -function removeUserDatabase (server, account) { +function removeUserDatabase (config, server, account) { log.info('Account removed for %s (id: %s)', account.username, account.id) - log.error('user/%s not deleted: not yet implemented (/lib/core-modules-glue-code/user-databases.js)', account.id) + + deleteDatabase(config, account, function (error) { + if (error) { + log.error('user/%s not deleted: %s', account.id, error) + return + } + + log.info('Database user/%s deleted for %s', account.id, account.username) + }) +} + +function createDatabase (config, account, callback) { + var url = config.dbUrl + '/user%2f' + account.id + request.put(url, callback) +} + +function createSecurity (config, account, callback) { + var url = config.dbUrl + '/user%2f' + account.id + '/_security' + var security = { + admins: { + names: [], + roles: [] + }, + members: { + names: [], + roles: ['id:' + account.id] + } + } + request({ + method: 'PUT', + url: url, + body: security + }, callback) +} + +function deleteDatabase (config, account, callback) { + var url = config.dbUrl + '/user%2f' + account.id + request.del(url, callback) } diff --git a/lib/index.js b/lib/index.js index d695200..e6ecf4d 100644 --- a/lib/index.js +++ b/lib/index.js @@ -61,8 +61,8 @@ module.exports = function (options, callback) { log.error('Databases not created/deleted for accounts: server.plugins.account.api.accounts.on not yet implemented') server.plugins.account.api.accounts.on = function () {} - server.plugins.account.api.accounts.on('add', userDatabases.add.bind(null, server)) - server.plugins.account.api.accounts.on('remove', userDatabases.remove.bind(null, server)) + server.plugins.account.api.accounts.on('add', userDatabases.add.bind(null, config, server)) + server.plugins.account.api.accounts.on('remove', userDatabases.remove.bind(null, config, server)) callback(null, server, config) })