Added UsergridUser.resetPassword(), defaulted authFallback=NONE
diff --git a/lib/auth.js b/lib/auth.js
index 06033c2..3a20da3 100644
--- a/lib/auth.js
+++ b/lib/auth.js
@@ -42,4 +42,8 @@
}
}
-module.exports = UsergridAuth
\ No newline at end of file
+module.exports = UsergridAuth
+module.exports.AuthFallback = {
+ APP: 'APP',
+ NONE: 'NONE'
+}
\ No newline at end of file
diff --git a/lib/client.js b/lib/client.js
index 4f8e927..f15e340 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -5,18 +5,15 @@
helpers = require('../helpers'),
UsergridResponse = require('./response'),
UsergridResponseError = require('./responseError'),
+ UsergridAuth = require('./auth'),
UsergridAppAuth = require('./appAuth'),
UsergridUserAuth = require('./userAuth'),
_ = require('lodash')
-var AuthFallback = {
- APP: 'APP',
- NONE: 'NONE',
-}
-
+console.log(UsergridAuth.AuthFallback)
var defaultOptions = {
baseUrl: 'https://api.usergrid.com',
- authFallback: AuthFallback.NONE,
+ authFallback: UsergridAuth.AuthFallback.NONE
}
var UsergridClient = function(options) {
@@ -68,10 +65,6 @@
DELETE: function() {
return new UsergridRequest(helpers.build.DELETE(this, Array.prototype.slice.call(arguments)))
},
- connections: {
- DIRECTION_IN: "IN",
- DIRECTION_OUT: "OUT"
- },
connect: function() {
var Usergrid = require('../usergrid')
if (this === Usergrid && !Usergrid.isInitialized) {
@@ -164,4 +157,8 @@
}
}
-module.exports = UsergridClient
\ No newline at end of file
+module.exports = UsergridClient
+module.exports.Connections = {
+ DIRECTION_IN: "IN",
+ DIRECTION_OUT: "OUT"
+}
\ No newline at end of file
diff --git a/lib/request.js b/lib/request.js
index 67a35de..86fd853 100644
--- a/lib/request.js
+++ b/lib/request.js
@@ -5,6 +5,7 @@
UsergridResponse = require('../lib/response'),
UsergridQuery = require('../lib/query'),
util = require('util'),
+ ok = require('objectkit'),
_ = require('lodash')
var UsergridRequest = function(options) {
@@ -14,11 +15,20 @@
var headers = helpers.userAgent
- if (options.client.appAuth && options.client.appAuth.isValid) {
+ var UsergridAuth = require('../lib/auth')
+
+ if (ok(options).getIfExists('auth.isValid')) {
+ // Checks if an auth param was passed to the request and uses the token if applicable
+ _.assign(headers, {
+ authorization: util.format("Bearer %s", options.auth.token)
+ })
+ } else if (options.client.authFallback === UsergridAuth.AuthFallback.APP && ok(options).getIfExists('client.appAuth.isValid')) {
+ // If auth-fallback is set to APP, this request will make a call using the application token
_.assign(headers, {
authorization: util.format("Bearer %s", options.client.appAuth.token)
})
}
+
request(helpers.build.url(options.client, options), {
headers: headers,
body: options.body,
diff --git a/lib/user.js b/lib/user.js
index b3d5719..d43a3d2 100644
--- a/lib/user.js
+++ b/lib/user.js
@@ -66,7 +66,6 @@
})
}
var client = helpers.client.validate(args)
- var path
var revokeAll = _.first(args.filter(_.isBoolean)) || false
var userId = _.first([self.uuid, self.username, self.email].filter(_.isString))
var url = util.format("%s%s/revoketoken%s", helpers.build.url(client, {
@@ -94,7 +93,37 @@
var args = Array.prototype.slice.call(arguments)
args.unshift(true)
return this.logout.apply(this, args)
- }
+ },
+ resetPassword: function() {
+ var self = this
+ var args = _.flatten(Array.prototype.slice.call(arguments), true)
+ var callback = helpers.cb(_.last(args.filter(_.isFunction)))
+ var client = helpers.client.validate(args)
+ var body = {
+ oldpassword: _.isPlainObject(args[0]) ? args[0].oldPassword : _.isString(args[0]) ? args[0] : undefined,
+ newpassword: _.isPlainObject(args[0]) ? args[0].newPassword : _.isString(args[1]) ? args[1] : undefined,
+ }
+ if (!body.oldpassword || !body.newpassword) {
+ throw new Error('"oldPassword" and "newPassword" properties are required when resetting a user password')
+ }
+ var userId = _.first([self.uuid, self.username, self.email].filter(_.isString))
+ var url = util.format("%s%s/password", helpers.build.url(client, {
+ type: 'user'
+ }), userId)
+ request(url, {
+ headers: helpers.userAgent,
+ json: true,
+ method: 'PUT',
+ body: body
+ }, function(error, response) {
+ var UsergridResponse = require('./response'),
+ usergridResponse = new UsergridResponse(response)
+ if (usergridResponse.statusCode >= 400) {
+ error = new UsergridResponseError(response.body)
+ }
+ callback(error || usergridResponse.error, usergridResponse, (usergridResponse.statusCode < 400))
+ })
+ },
}
util.inherits(UsergridUser, UsergridEntity)
diff --git a/tests/lib/client.connections.test.js b/tests/lib/client.connections.test.js
index c1a8036..6f4c9a9 100644
--- a/tests/lib/client.connections.test.js
+++ b/tests/lib/client.connections.test.js
@@ -48,7 +48,7 @@
client.connect(entity1, relationship, entity2, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -68,7 +68,7 @@
client.connect(entity1, relationship, entity2.uuid, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -88,7 +88,7 @@
client.connect(entity1.type, entity1.uuid, relationship, entity2.uuid, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -108,7 +108,7 @@
client.connect(entity1.type, entity1.name, relationship, entity2.type, entity2.name, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -132,7 +132,7 @@
client.connect(options, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[options.relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -176,7 +176,7 @@
var relationship = "foos"
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -196,7 +196,7 @@
var relationship = "foos"
- client.getConnections(client.connections.DIRECTION_IN, entity2, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_IN, entity2, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connections[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -234,7 +234,7 @@
client.disconnect(entity1, relationship, entity2, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
@@ -249,7 +249,7 @@
client.disconnect(entity1.type, entity1.uuid, relationship, entity2.uuid, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
@@ -264,7 +264,7 @@
client.disconnect(entity1.type, entity1.name, relationship, entity2.type, entity2.name, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
@@ -283,7 +283,7 @@
client.disconnect(options, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, options.relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
diff --git a/tests/lib/entity.test.js b/tests/lib/entity.test.js
index 47aa8fb..faee854 100644
--- a/tests/lib/entity.test.js
+++ b/tests/lib/entity.test.js
@@ -414,7 +414,7 @@
entity1.connect(relationship, entity2, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -434,7 +434,7 @@
entity1.connect(relationship, entity2.uuid, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -454,7 +454,7 @@
entity1.connect(relationship, entity2.type, entity2.name, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -498,7 +498,7 @@
var relationship = "foos"
- entity1.getConnections(client.connections.DIRECTION_OUT, relationship, function(err, usergridResponse) {
+ entity1.getConnections(UsergridClient.Connections.DIRECTION_OUT, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connecting[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -518,7 +518,7 @@
var relationship = "foos"
- entity2.getConnections(client.connections.DIRECTION_IN, relationship, function(err, usergridResponse) {
+ entity2.getConnections(UsergridClient.Connections.DIRECTION_IN, relationship, function(err, usergridResponse) {
usergridResponse.first.metadata.connections[relationship].should.equal(urljoin(
"/",
config.test.collection,
@@ -556,7 +556,7 @@
entity1.disconnect(relationship, entity2, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
@@ -571,7 +571,7 @@
entity1.disconnect(relationship, entity2.uuid, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
@@ -586,7 +586,7 @@
client.disconnect(entity1.type, entity1.name, relationship, entity2.type, entity2.name, function(err, usergridResponse) {
usergridResponse.statusCode.should.equal(200)
- client.getConnections(client.connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
+ client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, relationship, function(err, usergridResponse) {
usergridResponse.entities.should.be.an.Array().with.lengthOf(0)
done()
})
diff --git a/tests/lib/user.test.js b/tests/lib/user.test.js
index 8a853b6..43151b9 100644
--- a/tests/lib/user.test.js
+++ b/tests/lib/user.test.js
@@ -133,12 +133,53 @@
it("it should return an error when attempting to log out a user that does not have a valid token", function(done) {
_user1.logout(function(err, response, success) {
err.should.containDeep({
- name: 'no_valid_token'
- })
- // cleanup
- _user1.remove(function(err, response) {
+ name: 'no_valid_token'
+ })
+ done()
+ })
+ })
+})
+
+describe('resetPassword()', function() {
+
+ this.slow(_slow)
+ this.timeout(_timeout)
+
+ it(util.format("it should reset the password for '%s' by passing parameters", _username1), function(done) {
+ _user1.resetPassword(config.test.password, '2cool4u', function(err, response, success) {
+ response.statusCode.should.equal(200)
+ response.body.action.should.equal("set user password")
+ done()
+ })
+ })
+
+ it(util.format("it should reset the password for '%s' by passing an object", _username1), function(done) {
+ _user1.resetPassword({
+ oldPassword: '2cool4u',
+ newPassword: config.test.password
+ }, function(err, response, success) {
+ response.statusCode.should.equal(200)
+ response.body.action.should.equal("set user password")
+ done()
+ })
+ })
+
+ it(util.format("it should not reset the password for '%s' when passing a bad old password", _username1), function(done) {
+ _user1.resetPassword({
+ oldPassword: 'BADOLDPASSWORD',
+ newPassword: config.test.password
+ }, function(err, response, success) {
+ response.statusCode.should.be.greaterThanOrEqual(400)
+ err.name.should.equal('auth_invalid_username_or_password')
+ _user1.remove(function(err, response) {
done()
})
})
})
+
+ it("it should return an error when attempting to reset a password with missing arguments", function() {
+ should(function() {
+ _user1.resetPassword('NEWPASSWORD', function() {})
+ }).throw()
+ })
})
\ No newline at end of file