75 lines
2 KiB
JavaScript
Executable file
75 lines
2 KiB
JavaScript
Executable file
// License: LGPL-3.0-or-later
|
|
var request = require('../common/super-agent-promise')
|
|
var format_err = require('../common/format_response_error')
|
|
|
|
module.exports = create_bank_account
|
|
|
|
function create_bank_account(form_data, el) {
|
|
return new Promise((resolve, reject) =>{
|
|
appl.def('new_bank_account', {loading: true, error: ''})
|
|
return confirm_auth(form_data)
|
|
.then(tokenize_with_stripe)
|
|
.then(create_record)
|
|
.then(complete)
|
|
.catch(display_err)
|
|
})
|
|
}
|
|
|
|
|
|
// Post to confirm user's password
|
|
function confirm_auth(form_data) {
|
|
|
|
return request.post('/users/confirm_auth').send({password: form_data.user_password})
|
|
.perform()
|
|
.then((resp) =>{ return {token: resp.body.token, form: form_data}})
|
|
|
|
|
|
}
|
|
|
|
|
|
// Post to stripe to get back a stripe_bank_account_token
|
|
function tokenize_with_stripe(data) {
|
|
return new Promise(function(resolve, reject) {
|
|
Stripe.bankAccount.createToken(data.form, function(status, resp) {
|
|
data.stripe_resp = resp
|
|
if(resp.error) reject(resp.error.message)
|
|
else resolve(data)
|
|
})
|
|
})
|
|
}
|
|
|
|
|
|
// 'data' must have a stripe response as '.stripe_resp' and a user password confirmation token as '.token
|
|
function create_record(data) {
|
|
return request.post('/nonprofits/' + app.nonprofit_id + '/bank_account')
|
|
.send({
|
|
pw_token: data.token,
|
|
bank_account: {
|
|
stripe_bank_account_token: data.stripe_resp.id,
|
|
stripe_bank_account_id: data.stripe_resp.bank_account.id,
|
|
name: data.stripe_resp.bank_account.bank_name + ' *' + data.stripe_resp.bank_account.last4,
|
|
email: app.user.email
|
|
}
|
|
})
|
|
.perform()
|
|
}
|
|
|
|
function complete() {
|
|
appl.is_loading()
|
|
appl.reload()
|
|
}
|
|
|
|
function display_err(resp) {
|
|
|
|
var error_message = null;
|
|
|
|
if (typeof resp == 'string')
|
|
error_message = resp
|
|
else
|
|
error_message = format_err(resp)
|
|
|
|
appl.def('new_bank_account', {error: error_message, loading: false})
|
|
}
|
|
|
|
|
|
|