Skip to content
This repository has been archived by the owner on Apr 3, 2019. It is now read-only.

Commit

Permalink
Merge pull request #984 from mozilla/phil/issue-961
Browse files Browse the repository at this point in the history
fix(api): accept service as a query parameter
  • Loading branch information
philbooth committed Jul 17, 2015
2 parents 0b47de8 + 3d49b51 commit eec574c
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 11 deletions.
11 changes: 7 additions & 4 deletions lib/routes/account.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ module.exports = function (
function (response) {
if (!response.account.emailVerified) {
mailer.sendVerifyCode(response.account, response.account.emailCode, {
service: form.service,
service: form.service || request.query.service,
redirectTo: form.redirectTo,
resume: form.resume,
acceptLanguage: request.app.acceptLanguage
Expand Down Expand Up @@ -221,6 +221,7 @@ module.exports = function (
var form = request.payload
var email = form.email
var authPW = Buffer(form.authPW, 'hex')
var service = request.payload.service || request.query.service
customs.check(
request.app.clientAddress,
email,
Expand Down Expand Up @@ -290,7 +291,7 @@ module.exports = function (
)
.then(
function (tokens) {
if (request.payload.service === 'sync' && request.payload.reason === 'signin') {
if (service === 'sync' && request.payload.reason === 'signin') {
return mailer.sendNewSyncDeviceNotification(
emailRecord.email,
{
Expand Down Expand Up @@ -440,6 +441,7 @@ module.exports = function (
handler: function (request, reply) {
log.begin('Account.RecoveryEmailResend', request)
var sessionToken = request.auth.credentials
var service = request.payload.service || request.query.service
if (sessionToken.emailVerified ||
Date.now() - sessionToken.verifierSetAt < resendBlackoutPeriod) {
return reply({})
Expand All @@ -454,7 +456,7 @@ module.exports = function (
sessionToken,
sessionToken.emailCode,
{
service: request.payload.service,
service: service,
redirectTo: request.payload.redirectTo,
resume: request.payload.resume,
acceptLanguage: request.app.acceptLanguage
Expand Down Expand Up @@ -524,6 +526,7 @@ module.exports = function (
log.begin('Account.UnlockCodeResend', request)
var email = request.payload.email
var emailRecord
var service = request.payload.service || request.query.service

customs.check(
request.app.clientAddress,
Expand All @@ -548,7 +551,7 @@ module.exports = function (
emailRecord,
unlockCode,
{
service: request.payload.service,
service: service,
redirectTo: request.payload.redirectTo,
resume: request.payload.resume,
acceptLanguage: request.app.acceptLanguage
Expand Down
6 changes: 4 additions & 2 deletions lib/routes/password.js
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ module.exports = function (
handler: function (request, reply) {
log.begin('Password.forgotSend', request)
var email = request.payload.email
var service = request.payload.service || request.query.service
customs.check(
request.app.clientAddress,
email,
Expand All @@ -217,7 +218,7 @@ module.exports = function (
passwordForgotToken,
passwordForgotToken.passCode,
{
service: request.payload.service,
service: service,
redirectTo: request.payload.redirectTo,
resume: request.payload.resume,
acceptLanguage: request.app.acceptLanguage
Expand Down Expand Up @@ -272,6 +273,7 @@ module.exports = function (
handler: function (request, reply) {
log.begin('Password.forgotResend', request)
var passwordForgotToken = request.auth.credentials
var service = request.payload.service || request.query.service
customs.check(
request.app.clientAddress,
passwordForgotToken.email,
Expand All @@ -282,7 +284,7 @@ module.exports = function (
passwordForgotToken,
passwordForgotToken.passCode,
{
service: request.payload.service,
service: service,
redirectTo: request.payload.redirectTo,
resume: request.payload.resume,
acceptLanguage: request.app.acceptLanguage
Expand Down
23 changes: 18 additions & 5 deletions test/client/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,7 @@ ClientApi.prototype.doRequest = function (method, url, token, payload, headers)
*/
ClientApi.prototype.accountCreate = function (email, authPW, options) {
options = options || {}
var url = this.baseURL + '/account/create'
if (options.keys) { url += '?keys=true' }
var url = this.baseURL + '/account/create' + getQueryString(options)
return this.doRequest(
'POST',
url,
Expand All @@ -116,7 +115,7 @@ ClientApi.prototype.accountLogin = function (email, authPW, opts) {
}
return this.doRequest(
'POST',
this.baseURL + '/account/login' + (opts.keys ? '?keys=true' : ''),
this.baseURL + '/account/login' + getQueryString(opts),
null,
{
email: email,
Expand Down Expand Up @@ -298,7 +297,7 @@ ClientApi.prototype.passwordForgotSendCode = function (email, options) {
options = options || {}
return this.doRequest(
'POST',
this.baseURL + '/password/forgot/send_code',
this.baseURL + '/password/forgot/send_code' + getQueryString(options),
null,
{
email: email,
Expand All @@ -316,7 +315,7 @@ ClientApi.prototype.passwordForgotResendCode = function (passwordForgotTokenHex,
function (token) {
return this.doRequest(
'POST',
this.baseURL + '/password/forgot/resend_code',
this.baseURL + '/password/forgot/resend_code' + getQueryString(options),
token,
{
email: email,
Expand Down Expand Up @@ -427,4 +426,18 @@ ClientApi.heartbeat = function (origin) {
return (new ClientApi(origin)).doRequest('GET', origin + '/__heartbeat__')
}

function getQueryString (options) {
var qs = '?'

if (options.keys) {
qs += 'keys=true&'
}

if (options.serviceQuery) {
qs += 'service=' + options.serviceQuery
}

return qs
}

module.exports = ClientApi
14 changes: 14 additions & 0 deletions test/remote/account_create_tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,20 @@ TestServer.start(config)
}
)

test(
'create account with service query parameter',
function (t) {
var email = server.uniqueEmail()
return Client.create(config.publicUrl, email, 'foo', { serviceQuery: 'bar' })
.then(function () {
return server.mailbox.waitForEmail(email)
})
.then(function (emailData) {
t.equal(emailData.headers['x-service-id'], 'bar', 'service query parameter was propagated')
})
}
)

test(
'teardown',
function (t) {
Expand Down
30 changes: 30 additions & 0 deletions test/remote/password_forgot_tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,36 @@ TestServer.start(config)
}
)

test(
'forgot password with service query parameter',
function (t) {
var email = server.uniqueEmail()
var options = {
redirectTo: 'https://sync.firefox.com',
serviceQuery: 'sync'
}
var client
return Client.create(config.publicUrl, email, 'wibble', options)
.then(function (c) {
client = c
})
.then(function () {
return server.mailbox.waitForEmail(email)
})
.then(function () {
return client.forgotPassword()
})
.then(function () {
return server.mailbox.waitForEmail(email)
})
.then(function (emailData) {
var link = emailData.headers['x-link']
var query = url.parse(link, true).query
t.equal(query.service, options.serviceQuery, 'service is in link')
})
}
)

test(
'teardown',
function (t) {
Expand Down

0 comments on commit eec574c

Please sign in to comment.