1
0
Fork 0

Merge branch 'devel' of github.com:triAGENS/ArangoDB into devel

This commit is contained in:
a-brandt 2013-02-01 10:52:53 +01:00
commit 9b793d4b63
8 changed files with 154 additions and 13 deletions

View File

@ -434,7 +434,7 @@ unittests-import:
################################################################################
### @brief DATAFILE DEBUGGER TESTS
### @brief DATAFILE DEBUGGER TESTS
###
### this test just checks whether the dfdb starts.
### we will send an EOT signal to the dfdb process to stop it right away.

View File

@ -111,6 +111,10 @@
"ERROR_TRANSACTION_NESTED" : { "code" : 1652, "message" : "nested transactions detected" },
"ERROR_TRANSACTION_INTERNAL" : { "code" : 1653, "message" : "internal transaction error" },
"ERROR_TRANSACTION_UNREGISTERED_COLLECTION" : { "code" : 1654, "message" : "unregistered collection used in transaction" },
"ERROR_USER_INVALID_NAME" : { "code" : 1700, "message" : "invalid user name" },
"ERROR_USER_INVALID_PASSWORD" : { "code" : 1701, "message" : "invalid password" },
"ERROR_USER_DUPLICATE" : { "code" : 1702, "message" : "duplicate user" },
"ERROR_USER_NOT_FOUND" : { "code" : 1703, "message" : "user not found" },
"ERROR_KEYVALUE_INVALID_KEY" : { "code" : 1800, "message" : "invalid key declaration" },
"ERROR_KEYVALUE_KEY_EXISTS" : { "code" : 1801, "message" : "key already exists" },
"ERROR_KEYVALUE_KEY_NOT_FOUND" : { "code" : 1802, "message" : "key not found" },

View File

@ -32,10 +32,9 @@ var internal = require("internal"); // OK: encodePassword, reloadAuth
var encodePassword = internal.encodePassword;
var reloadAuth = internal.reloadAuth;
var arangodb = require("org/arangodb");
var db = arangodb.db;
var ArangoError = require("org/arangodb/arango-error").ArangoError;
// -----------------------------------------------------------------------------
// --SECTION-- module "org/arangodb/users"
@ -55,8 +54,12 @@ var db = arangodb.db;
////////////////////////////////////////////////////////////////////////////////
var validateName = function (username) {
if (typeof username !== 'string' || ! username.match(/^[a-zA-Z0-9\-_]+$/)) {
throw "username must be a string";
if (typeof username !== 'string' || username === '') {
var err = new ArangoError();
err.errorNum = arangodb.errors.ERROR_USER_INVALID_NAME.code;
err.errorMessage = arangodb.errors.ERROR_USER_INVALID_NAME.message;
throw err;
}
};
@ -66,7 +69,11 @@ var validateName = function (username) {
var validatePassword = function (passwd) {
if (typeof passwd !== 'string') {
throw "password must be a string";
var err = new ArangoError();
err.errorNum = arangodb.errors.ERROR_USER_INVALID_PASSWORD.code;
err.errorMessage = arangodb.errors.ERROR_USER_INVALID_PASSWORD.message;
throw err;
}
};
@ -78,7 +85,11 @@ var getStorage = function () {
var users = db._collection("_users");
if (users === null) {
throw "collection _users does not exist.";
var err = new ArangoError();
err.errorNum = arangodb.errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code;
err.errorMessage = "collection _users not found";
throw err;
}
return users;
@ -124,6 +135,10 @@ var getStorage = function () {
////////////////////////////////////////////////////////////////////////////////
exports.save = function (username, passwd) {
if (passwd === null || passwd === undefined) {
passwd = "";
}
// validate input
validateName(username);
validatePassword(passwd);
@ -135,8 +150,12 @@ exports.save = function (username, passwd) {
var hash = encodePassword(passwd);
return users.save({ user: username, password: hash, active: true });
}
var err = new ArangoError();
err.errorNum = arangodb.errors.ERROR_USER_DUPLICATE.code;
err.errorMessage = arangodb.errors.ERROR_USER_DUPLICATE.message;
throw "cannot create user: user already exists.";
throw err;
};
////////////////////////////////////////////////////////////////////////////////
@ -169,6 +188,10 @@ exports.save = function (username, passwd) {
exports.replace =
exports.update = function (username, passwd) {
if (passwd === null || passwd === undefined) {
passwd = "";
}
// validate input
validateName(username);
validatePassword(passwd);
@ -177,7 +200,11 @@ exports.update = function (username, passwd) {
var user = users.firstExample({ user: username });
if (user === null) {
throw "cannot update user: user does not exist.";
var err = new ArangoError();
err.errorNum = arangodb.errors.ERROR_USER_NOT_FOUND.code;
err.errorMessage = arangodb.errors.ERROR_USER_NOT_FOUND.message;
throw err;
}
var hash = encodePassword(passwd);
@ -217,7 +244,11 @@ exports.remove = function (username) {
var user = users.firstExample({ user: username });
if (user === null) {
throw "cannot delete: user does not exist.";
var err = new ArangoError();
err.errorNum = arangodb.errors.ERROR_USER_NOT_FOUND.code;
err.errorMessage = arangodb.errors.ERROR_USER_NOT_FOUND.message;
throw err;
}
return users.remove(user._id);

View File

@ -53,9 +53,15 @@ function UsersSuite () {
try {
users.remove(username);
}
catch (err) {
catch (e1) {
}
}
try {
users.remove("hackers@arangodb.org");
}
catch (e2) {
}
};
return {
@ -81,7 +87,7 @@ function UsersSuite () {
////////////////////////////////////////////////////////////////////////////////
testInvalidNames : function () {
var usernames = [ " ", "", "******", "#", "'", "\"", "d d", "d " ];
var usernames = [ null, 1, 2, 3, [ ], { }, false, true, "" ];
for (var i = 0; i < usernames.length; ++i) {
var username = usernames[i];
@ -92,6 +98,7 @@ function UsersSuite () {
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_USER_INVALID_NAME.code, err.errorNum);
}
}
},
@ -126,9 +133,45 @@ function UsersSuite () {
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_USER_DUPLICATE.code, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test save no passwd
////////////////////////////////////////////////////////////////////////////////
testSavePasswdEmpty : function () {
var username = "users-1";
var passwd = "";
users.save(username, passwd);
assertEqual(username, c.firstExample({ user: username }).user);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test save no passwd
////////////////////////////////////////////////////////////////////////////////
testSavePasswdMissing : function () {
var username = "users-1";
users.save(username);
assertEqual(username, c.firstExample({ user: username }).user);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test save w/ email address pattern
////////////////////////////////////////////////////////////////////////////////
testSaveWithEmailAddressName : function () {
var username = "hackers@arangodb.org";
var passwd = "arangodb-loves-you";
users.save(username, passwd);
assertEqual(username, c.firstExample({ user: username }).user);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test update method
////////////////////////////////////////////////////////////////////////////////
@ -156,6 +199,7 @@ function UsersSuite () {
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_USER_NOT_FOUND.code, err.errorNum);
}
},
@ -184,6 +228,7 @@ function UsersSuite () {
fail();
}
catch (err) {
assertEqual(ERRORS.ERROR_USER_NOT_FOUND.code, err.errorNum);
}
},

View File

@ -152,6 +152,15 @@ ERROR_TRANSACTION_NESTED,1652,"nested transactions detected","Will be raised whe
ERROR_TRANSACTION_INTERNAL,1653,"internal transaction error","Will be raised when a wrong usage of transactions is detected. this is an internal error and indicates a bug in ArangoDB."
ERROR_TRANSACTION_UNREGISTERED_COLLECTION,1654,"unregistered collection used in transaction","Will be raised when a collection is used in the middle of a transaction but was not registered at transaction start."
################################################################################
## User management
################################################################################
ERROR_USER_INVALID_NAME,1700,"invalid user name","Will be raised when an invalid user name is used"
ERROR_USER_INVALID_PASSWORD,1701,"invalid password","Will be raised when an invalid password is used"
ERROR_USER_DUPLICATE,1702,"duplicate user","Will be raised when a user name already exists"
ERROR_USER_NOT_FOUND,1703,"user not found","Will be raised when a user name is updated that does not exist"
################################################################################
## Key value access
################################################################################

View File

@ -62,7 +62,7 @@
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief initialises a vector
/// @brief initialises a vector
////////////////////////////////////////////////////////////////////////////////
void TRI_InitVector (TRI_vector_t* vector, TRI_memory_zone_t* zone, size_t elementSize) {

View File

@ -107,6 +107,10 @@ void TRI_InitialiseErrorMessages (void) {
REG_ERROR(ERROR_TRANSACTION_NESTED, "nested transactions detected");
REG_ERROR(ERROR_TRANSACTION_INTERNAL, "internal transaction error");
REG_ERROR(ERROR_TRANSACTION_UNREGISTERED_COLLECTION, "unregistered collection used in transaction");
REG_ERROR(ERROR_USER_INVALID_NAME, "invalid user name");
REG_ERROR(ERROR_USER_INVALID_PASSWORD, "invalid password");
REG_ERROR(ERROR_USER_DUPLICATE, "duplicate user");
REG_ERROR(ERROR_USER_NOT_FOUND, "user not found");
REG_ERROR(ERROR_KEYVALUE_INVALID_KEY, "invalid key declaration");
REG_ERROR(ERROR_KEYVALUE_KEY_EXISTS, "key already exists");
REG_ERROR(ERROR_KEYVALUE_KEY_NOT_FOUND, "key not found");

View File

@ -237,6 +237,14 @@ extern "C" {
/// - 1654: @LIT{unregistered collection used in transaction}
/// Will be raised when a collection is used in the middle of a transaction
/// but was not registered at transaction start.
/// - 1700: @LIT{invalid user name}
/// Will be raised when an invalid user name is used
/// - 1701: @LIT{invalid password}
/// Will be raised when an invalid password is used
/// - 1702: @LIT{duplicate user}
/// Will be raised when a user name already exists
/// - 1703: @LIT{user not found}
/// Will be raised when a user name is updated that does not exist
/// - 1800: @LIT{invalid key declaration}
/// Will be raised when an invalid key specification is passed to the server
/// - 1801: @LIT{key already exists}
@ -1342,6 +1350,46 @@ void TRI_InitialiseErrorMessages (void);
#define TRI_ERROR_TRANSACTION_UNREGISTERED_COLLECTION (1654)
////////////////////////////////////////////////////////////////////////////////
/// @brief 1700: ERROR_USER_INVALID_NAME
///
/// invalid user name
///
/// Will be raised when an invalid user name is used
////////////////////////////////////////////////////////////////////////////////
#define TRI_ERROR_USER_INVALID_NAME (1700)
////////////////////////////////////////////////////////////////////////////////
/// @brief 1701: ERROR_USER_INVALID_PASSWORD
///
/// invalid password
///
/// Will be raised when an invalid password is used
////////////////////////////////////////////////////////////////////////////////
#define TRI_ERROR_USER_INVALID_PASSWORD (1701)
////////////////////////////////////////////////////////////////////////////////
/// @brief 1702: ERROR_USER_DUPLICATE
///
/// duplicate user
///
/// Will be raised when a user name already exists
////////////////////////////////////////////////////////////////////////////////
#define TRI_ERROR_USER_DUPLICATE (1702)
////////////////////////////////////////////////////////////////////////////////
/// @brief 1703: ERROR_USER_NOT_FOUND
///
/// user not found
///
/// Will be raised when a user name is updated that does not exist
////////////////////////////////////////////////////////////////////////////////
#define TRI_ERROR_USER_NOT_FOUND (1703)
////////////////////////////////////////////////////////////////////////////////
/// @brief 1800: ERROR_KEYVALUE_INVALID_KEY
///