Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- exports.postNewUserPlan = function(req, res, next){
- var plan = req.user.company.stripe.plan;
- var coupon = null;
- var stripeToken = null;
- plan = plan.toLowerCase();
- if(req.body.stripeToken){
- stripeToken = req.body.stripeToken;
- }
- User.findById(req.user.id, function(err, user) {
- if (err) return next(err);
- var quantity = user.company.subUserCount + 1;
- user.setPlan(plan, coupon, quantity, stripeToken, function (err) {
- var msg;
- if (err) {
- if(err.code && err.code == 'card_declined'){
- msg = 'Your card was declined. Please provide a valid card.';
- } else if(err && err.message) {
- msg = err.message;
- } else {
- msg = 'An unexpected error occurred.';
- }
- req.flash('errors', msg);
- return res.redirect('/user/create');
- }
- });
- });
- next();
- };
- passport.use('signup-sub', new LocalStrategy({
- usernameField: 'email',
- passReqToCallback : true
- },
- function(req, email, password, done) {
- User.findOne({ email: req.body.email }, function(err, existingUser) {
- if(err){
- console.log(err);
- }
- if (existingUser) {
- req.flash('form', {
- email: req.body.email
- });
- return done(null, false, req.flash('error', 'An account with that email address already exists.'));
- }
- // setting value for email using company domain name
- email = req.body.email + req.user.company.companyDomain;
- var user = new User({
- email: email,
- password: req.body.password, // user schema pre save task hashes this password
- role: role,
- companyID: req.user.companyID
- });
- user.save(function(err) {
- if (err) return done(err, false, req.flash('error', 'Error saving user.'));
- return done(null, user, req.flash('success', `Your new ${role} has been created.`));
- });
- });
- })
- );
- schema.methods.setPlan = function(plan, coupon, quantity, stripe_token, cb) {
- var user = this;
- var subscriptionHandler = function(err, subscription) {
- if(err) return cb(err);
- user.company.stripe.plan = plan;
- user.company.stripe.subscriptionId = subscription.id;
- user.company.subUserCount = quantity;
- user.save(function(err){
- if (err) return cb(err);
- return cb(null);
- });
- };
- var createSubscription = function(){
- stripe.customers.createSubscription(
- user.company.stripe.customerId,
- {plan: plan, coupon: coupon, quantity: quantity},
- subscriptionHandler
- );
- };
- if(stripe_token) {
- user.setCard(stripe_token, function(err){
- if (err) return cb(err);
- createSubscription();
- });
- } else {
- if (user.company.stripe.subscriptionId){
- // update subscription
- stripe.customers.updateSubscription(
- user.company.stripe.customerId,
- user.company.stripe.subscriptionId,
- { plan: plan, coupon: coupon, quantity: quantity },
- subscriptionHandler
- );
- } else {
- createSubscription();
- }
- }
- };
- var UserSchema = new mongoose.Schema({
- email: String,
- password: String,
- companyID: String,
- company: {
- companyDomain: String,
- subUserCount: { type: Number, default: 1},
- stripe: {
- customerId: String,
- subscriptionId: String,
- last4: String,
- plan: String,
- isCoupon: {
- type: Boolean,
- default: false
- }
- },
- }
- });
- var stripeOptions = config.stripeOptions;
- UserSchema.plugin(passportLocalMongoose, { usernameField : 'email' });
- UserSchema.plugin(stripeCustomer, stripeOptions);
Add Comment
Please, Sign In to add comment