Guest User

Untitled

a guest
Sep 16th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. exports.postNewUserPlan = function(req, res, next){
  2. var plan = req.user.company.stripe.plan;
  3. var coupon = null;
  4. var stripeToken = null;
  5. plan = plan.toLowerCase();
  6.  
  7. if(req.body.stripeToken){
  8. stripeToken = req.body.stripeToken;
  9. }
  10.  
  11. User.findById(req.user.id, function(err, user) {
  12. if (err) return next(err);
  13. var quantity = user.company.subUserCount + 1;
  14. user.setPlan(plan, coupon, quantity, stripeToken, function (err) {
  15. var msg;
  16.  
  17. if (err) {
  18. if(err.code && err.code == 'card_declined'){
  19. msg = 'Your card was declined. Please provide a valid card.';
  20. } else if(err && err.message) {
  21. msg = err.message;
  22. } else {
  23. msg = 'An unexpected error occurred.';
  24. }
  25. req.flash('errors', msg);
  26. return res.redirect('/user/create');
  27. }
  28. });
  29. });
  30. next();
  31. };
  32.  
  33. passport.use('signup-sub', new LocalStrategy({
  34. usernameField: 'email',
  35. passReqToCallback : true
  36. },
  37. function(req, email, password, done) {
  38. User.findOne({ email: req.body.email }, function(err, existingUser) {
  39. if(err){
  40. console.log(err);
  41. }
  42. if (existingUser) {
  43. req.flash('form', {
  44. email: req.body.email
  45. });
  46. return done(null, false, req.flash('error', 'An account with that email address already exists.'));
  47. }
  48.  
  49. // setting value for email using company domain name
  50. email = req.body.email + req.user.company.companyDomain;
  51.  
  52. var user = new User({
  53. email: email,
  54. password: req.body.password, // user schema pre save task hashes this password
  55. role: role,
  56. companyID: req.user.companyID
  57. });
  58. user.save(function(err) {
  59. if (err) return done(err, false, req.flash('error', 'Error saving user.'));
  60. return done(null, user, req.flash('success', `Your new ${role} has been created.`));
  61. });
  62. });
  63.  
  64. })
  65. );
  66.  
  67. schema.methods.setPlan = function(plan, coupon, quantity, stripe_token, cb) {
  68. var user = this;
  69.  
  70. var subscriptionHandler = function(err, subscription) {
  71. if(err) return cb(err);
  72.  
  73. user.company.stripe.plan = plan;
  74. user.company.stripe.subscriptionId = subscription.id;
  75. user.company.subUserCount = quantity;
  76. user.save(function(err){
  77. if (err) return cb(err);
  78. return cb(null);
  79. });
  80. };
  81.  
  82. var createSubscription = function(){
  83. stripe.customers.createSubscription(
  84. user.company.stripe.customerId,
  85. {plan: plan, coupon: coupon, quantity: quantity},
  86. subscriptionHandler
  87. );
  88. };
  89.  
  90. if(stripe_token) {
  91. user.setCard(stripe_token, function(err){
  92. if (err) return cb(err);
  93. createSubscription();
  94. });
  95. } else {
  96. if (user.company.stripe.subscriptionId){
  97. // update subscription
  98. stripe.customers.updateSubscription(
  99. user.company.stripe.customerId,
  100. user.company.stripe.subscriptionId,
  101. { plan: plan, coupon: coupon, quantity: quantity },
  102. subscriptionHandler
  103. );
  104. } else {
  105. createSubscription();
  106. }
  107. }
  108. };
  109.  
  110. var UserSchema = new mongoose.Schema({
  111. email: String,
  112. password: String,
  113. companyID: String,
  114.  
  115. company: {
  116. companyDomain: String,
  117. subUserCount: { type: Number, default: 1},
  118. stripe: {
  119. customerId: String,
  120. subscriptionId: String,
  121. last4: String,
  122. plan: String,
  123. isCoupon: {
  124. type: Boolean,
  125. default: false
  126. }
  127. },
  128. }
  129.  
  130. });
  131.  
  132.  
  133. var stripeOptions = config.stripeOptions;
  134.  
  135.  
  136. UserSchema.plugin(passportLocalMongoose, { usernameField : 'email' });
  137. UserSchema.plugin(stripeCustomer, stripeOptions);
Add Comment
Please, Sign In to add comment