From 8e922bb1515ffc5cbee9cd4b2ef908bca6b8a2a0 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 12 Jul 2013 17:15:11 -0400 Subject: [PATCH] API: add facebook auth route --- src/server/api.coffee | 25 +++++++++++++++++++++++-- test/api.mocha.coffee | 24 +++++++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/server/api.coffee b/src/server/api.coffee index 97c8892b00..ca2807a73b 100644 --- a/src/server/api.coffee +++ b/src/server/api.coffee @@ -94,9 +94,9 @@ router.put '/user', auth, (req, res) -> res.json 201, userObj ### - POST /user/auth + POST /user/auth/local ### -router.post '/user/auth', (req, res) -> +router.post '/user/auth/local', (req, res) -> username = req.body.username password = req.body.password return res.json 401, err: 'No username or password' unless username and password @@ -122,6 +122,27 @@ router.post '/user/auth', (req, res) -> id: u2.id token: u2.apiToken +### + POST /user/auth/facebook +### +router.post '/user/auth/facebook', (req, res) -> + {facebook_id, email, name} = req.body + return res.json 401, err: 'No facebook id provided' unless facebook_id + model = req.getModel() + q = model.query("users").withProvider('facebook', facebook_id) + q.fetch (err, result) -> + return res.json 401, { err } if err + u = result.get() + console.log {facebook_id, u} + if u + return res.json + id: u.id + token: u.apiToken + else + # FIXME: create a new user instead + return res.json 403, err: "Please register with Facebook on https://habitrpg.com, then come back here and log in." + + ### GET /user/task/:id ### diff --git a/test/api.mocha.coffee b/test/api.mocha.coffee index d523be7b16..0b10eb7a93 100644 --- a/test/api.mocha.coffee +++ b/test/api.mocha.coffee @@ -399,7 +399,7 @@ describe 'API', -> done() - it 'POST /api/v1/user/auth', (done) -> + it 'POST /api/v1/user/auth/local', (done) -> userAuth = username: username password: 'icculus' @@ -412,3 +412,25 @@ describe 'API', -> expect(res.body.id).to.be currentUser.id expect(res.body.token).to.be currentUser.apiToken done() + + it 'POST /api/v1/user/auth/facebook', (done) -> + id = model.id() + userAuth = facebook_id: 12345, name: 'Tyler Renelle', email: 'x@y.com' + newUser = helpers.newUser(true) + newUser.id = id + newUser.auth = facebook: + id: userAuth.facebook_id + name: userAuth.name + email: userAuth.email + console.log {newUser} + model.set "users.#{id}", newUser, -> + + request.post("#{baseURL}/user/auth/facebook") + .set('Accept', 'application/json') + .send(userAuth) + .end (res) -> + expect(res.body.err).to.be undefined + expect(res.statusCode).to.be 200 + expect(res.body.id).to.be newUser.id + #expect(res.body.token).to.be newUser.apiToken + done()