Merge pull request #9 from koodiklinikka/remove-stripe-payment

remove stripe payment
This commit is contained in:
Cihan Bebek
2018-10-29 22:34:45 +00:00
committed by GitHub
4 changed files with 636 additions and 682 deletions

View File

@@ -1,8 +1,5 @@
{ {
"development": { "development": {
"stripe": {
"secretKey": ""
},
"slack": { "slack": {
"token": "", "token": "",
"privateChannel": "", "privateChannel": "",
@@ -24,9 +21,6 @@
} }
}, },
"production": { "production": {
"stripe": {
"secretKey": ""
},
"slack": { "slack": {
"token": "", "token": "",
"privateChannel": "", "privateChannel": "",
@@ -42,6 +36,5 @@
"tokenSecret": "" "tokenSecret": ""
} }
}, },
"all": { "all": {}
}
} }

1161
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,10 +33,9 @@
"morgan": "^1.5.1", "morgan": "^1.5.1",
"newrelic": "^1.18.0", "newrelic": "^1.18.0",
"node-twitter": "0.5.2", "node-twitter": "0.5.2",
"stripe": "^4.23.1", "snyk": "^1.38.1",
"superagent": "^2.0.0", "superagent": "^2.0.0",
"validator": "^3.27.0", "validator": "^3.27.0"
"snyk": "^1.38.1"
}, },
"snyk": true "snyk": true
} }

View File

@@ -1,14 +1,13 @@
'use strict'; 'use strict';
var Promise = require('bluebird'); var Promise = require('bluebird');
var GoogleSpreadsheet = require('google-spreadsheet'); var GoogleSpreadsheet = require('google-spreadsheet');
var async = require('async'); var async = require('async');
var moment = require('moment'); var moment = require('moment');
var Joi = require('joi'); var Joi = require('joi');
var slack = require('../services/slack'); var slack = require('../services/slack');
var config = require('../lib/config'); var config = require('../lib/config');
var stripe = require('stripe')(config.stripe.secretKey);
var validateRequest = require('../utils/validateRequest'); var validateRequest = require('../utils/validateRequest');
function log(message) { function log(message) {
@@ -17,45 +16,54 @@ function log(message) {
} }
function addNewMemberToSheets(data, callback) { function addNewMemberToSheets(data, callback) {
var {name, email, address, postcode, city, handle} = data; var { name, email, address, postcode, city, handle } = data;
var doc = new GoogleSpreadsheet(config.google.spreadsheetId); var doc = new GoogleSpreadsheet(config.google.spreadsheetId);
async.waterfall([ async.waterfall(
function setAuth(cb) { [
console.log('Start Google Spreadsheed auth.'); function setAuth(cb) {
doc.useServiceAccountAuth({ console.log('Start Google Spreadsheed auth.');
client_email: config.google.clientEmail, doc.useServiceAccountAuth(
private_key: config.google.privateKey {
}, (err) => cb(err)); client_email: config.google.clientEmail,
}, private_key: config.google.privateKey,
function getInfoAndWorksheets(cb) { },
console.log('Start Google Spreadsheet info fetch.'); err => cb(err),
doc.getInfo(function(err, info) { );
if(err) { },
cb(err); function getInfoAndWorksheets(cb) {
} else { console.log('Start Google Spreadsheet info fetch.');
cb(null, info.worksheets[0]); doc.getInfo(function(err, info) {
} if (err) {
}); cb(err);
}, } else {
function addRow(sheet, cb) { cb(null, info.worksheets[0]);
console.log('Start Google Spreadsheet row write.'); }
sheet.addRow({ });
'jäsenmaksu': true, },
'koko nimi': name, function addRow(sheet, cb) {
'liittymispäivä': moment().format('DD.MM.YYYY'), console.log('Start Google Spreadsheet row write.');
'lisääjä': 'Koodiklinikka.fi-api', sheet.addRow(
'katuosoite': address, {
'postinumero': postcode, jäsenmaksu: false,
'paikkakunta': city, 'koko nimi': name,
'slack': handle, liittymispäivä: moment().format('DD.MM.YYYY'),
'sähköposti': email lisääjä: 'Koodiklinikka.fi-api',
}, cb); katuosoite: address,
} postinumero: postcode,
], callback); paikkakunta: city,
slack: handle,
sähköposti: email,
},
cb,
);
},
],
callback,
);
} }
module.exports = function (app) { module.exports = function(app) {
/* /*
* POST /membership * POST /membership
* Endpoint for adding a new member to the association * Endpoint for adding a new member to the association
@@ -68,50 +76,27 @@ module.exports = function (app) {
handle: Joi.string().required(), handle: Joi.string().required(),
address: Joi.string().required(), address: Joi.string().required(),
city: Joi.string().required(), city: Joi.string().required(),
postcode: Joi.string().required() postcode: Joi.string().required(),
}), }),
stripeToken: Joi.string().required() });
})
app.post('/membership', validateRequest(schema), function(req, res, next) { app.post('/membership', validateRequest(schema), function(req, res, next) {
console.log(
`Start membership addition with body: ${JSON.stringify(req.body)}`,
);
console.log(`Start membership addition with body: ${JSON.stringify(req.body)}`); addNewMemberToSheets(req.body.userInfo, err => {
const { handle, name, email } = req.body.userInfo
const createCustomer = (callback) =>
stripe.customers.create({
description: `${handle} - ${name}`,
email: email,
source: req.body.stripeToken,
metadata: req.body.userInfo
}, callback)
const createSubscription = (customer, callback) =>
stripe.subscriptions.create({
customer: customer.id,
plan: 'koodiklinikka'
}, callback)
async.waterfall([
createCustomer,
createSubscription
], (err) => {
if (err) { if (err) {
log(`Membership payment FAILED for: ${JSON.stringify(req.body.userInfo.email)}. Reason: ${err.message}`); log(
res.status(500).send('payment_error'); `Storing membership info FAILED for: ${JSON.stringify(
req.body.userInfo.email,
)}. Reason: ${err.message}`,
);
res.status(200).send('membership_storage_error');
return; return;
} }
res.status(200).send('membership_added');
log(`Membership payment SUCCESSFUL for: ${JSON.stringify(req.body.userInfo.email)}`); return;
addNewMemberToSheets(req.body.userInfo, (err) => {
if(err) {
log(`Storing membership info FAILED for: ${JSON.stringify(req.body.userInfo.email)}. Reason: ${err.message}`);
res.status(500).send('membership_storage_error');
return;
}
res.status(200).send('payment_success');
});
}); });
}); });
}; };