able to use the api upon button click

This commit is contained in:
Michael Q Larson
2015-04-08 22:42:40 -07:00
parent e3acdb9ebb
commit 9145e959de
4 changed files with 65 additions and 1 deletions

57
app.js
View File

@ -31,6 +31,7 @@ var express = require('express'),
passport = require('passport'), passport = require('passport'),
expressValidator = require('express-validator'), expressValidator = require('express-validator'),
connectAssets = require('connect-assets'), connectAssets = require('connect-assets'),
request = require('request'),
/** /**
* Controllers (route handlers). * Controllers (route handlers).
@ -46,7 +47,7 @@ var express = require('express'),
/** /**
* Stories * Stories
*/ */
storyController = require('./controllers/story'); storyController = require('./controllers/story'),
/** /**
* API keys and Passport configuration. * API keys and Passport configuration.
@ -292,6 +293,60 @@ app.post(
userController.updateProgress userController.updateProgress
); );
app.get('/api/slack', function(req, res) {
if (req.user) {
if (req.user.email) {
var invite = {
'email': req.user.email,
'token': process.env.SLACK_KEY,
'set_active': true
};
var headers = {
'User-Agent': 'Node Browser/0.0.1',
'Content-Type': 'application/x-www-form-urlencoded'
};
var options = {
url: 'https://freecode.slack.com/api/users.admin.invite',
method: 'POST',
headers: headers,
form: invite
};
request(options, function (error, response, body) {
if (!error && response.statusCode === 200) {
req.flash('success', {
msg: "We've successfully requested an invite for you. Please check your email and follow the instructions from Slack."
});
req.user.sentSlackInvite = true;
req.user.save(function(err, user) {
if (err) {
next(err);
}
return res.redirect('back');
});
} else {
req.flash('errors', {
msg: "The invitation email did not go through for some reason. Please try again or <a href='mailto:team@freecodecamp.com?subject=slack%20invite%20failed%20to%20send>email us</a>."
});
return res.redirect('back');
}
})
} else {
req.flash('notice', {
msg: "Before we can send your Slack invite, we need your email address. Please update your profile information here."
});
return res.redirect('/account');
}
} else {
req.flash('notice', {
msg: "You need to sign in to Free Code Camp before we can send you a Slack invite."
});
return res.redirect('/account');
}
});
/** /**
* Main routes. * Main routes.
*/ */

View File

@ -74,6 +74,11 @@ module.exports = {
}, },
chat: function chat(req, res) { chat: function chat(req, res) {
if (req.user) {
if (req.user.sentSlackInvite) {
res.redirect('https://freecode.slack.com/messages/general/');
}
}
res.render('resources/chat', { res.render('resources/chat', {
title: "Enter Free Code Camp's Chat Rooms" title: "Enter Free Code Camp's Chat Rooms"
}); });

View File

@ -348,6 +348,7 @@ var userSchema = new mongoose.Schema({
} }
}, },
resetPasswordToken: String, resetPasswordToken: String,
sentSlackInvite: false,
resetPasswordExpires: Date, resetPasswordExpires: Date,
uncompletedBonfires: Array, uncompletedBonfires: Array,
completedBonfires: Array, completedBonfires: Array,

View File

@ -4,6 +4,9 @@ block content
br br
.text-center .text-center
if (user) if (user)
if (!user.sentSlackInvite)
a.btn.btn-primary.signup-btn.next-challenge-button(href="/api/slack") Join our Slack Chat Room
.spacer
a.btn.btn-cta.signup-btn.next-challenge-button(href="/challenges") Take me to my next challenge a.btn.btn-cta.signup-btn.next-challenge-button(href="/challenges") Take me to my next challenge
else else
a.btn.btn-cta.signup-btn.next-challenge-button(href="/signin") Start learning to code (it's free) a.btn.btn-cta.signup-btn.next-challenge-button(href="/signin") Start learning to code (it's free)