diff --git a/app.js b/app.js index e3e6ec2..f94ef50 100644 --- a/app.js +++ b/app.js @@ -1,17 +1,11 @@ var express = require('express'); -var session = require('express-session'); -var MongoStore = require('connect-mongo')(session); -var path = require('path'); -var logger = require('morgan'); -var cookieParser = require('cookie-parser'); -var bodyParser = require('body-parser'); -var passport = require('passport'); -var LocalStrategy = require('passport-local'); -var mongoose = require('mongoose'); -var connect = process.env.MONGODB_URI; - -var REQUIRED_ENV = "SECRET MONGODB_URI".split(" "); +var google = require('googleapis'); +var OAuth2 = google.auth.OAuth2; +var { User, Reminder } = require('./models'); +var axios = require('axios'); +// REQUIRED SOURCE CHECKS +var REQUIRED_ENV = "SLACK_SECRET MONGODB_URI GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET DOMAIN".split(" "); REQUIRED_ENV.forEach(function(el) { if (!process.env[el]){ console.error("Missing required env var " + el); @@ -19,107 +13,318 @@ REQUIRED_ENV.forEach(function(el) { } }); +// RUNNING SERVER +var app = express(); +var bodyParser = require('body-parser'); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); -mongoose.connect(connect); +/* BOT CODE */ +// CONNECTING TO MONGO_DB +var mongoose = require('mongoose'); +mongoose.connect(process.env.MONGODB_URI); +var { RtmClient, WebClient, CLIENT_EVENTS, RTM_EVENTS } = require('@slack/client'); -var models = require('./models'); +function imReply(data) { + return ({"attachments": [ + { + "text": `Creating a reminder for '${data.result.parameters.subject}' on ${data.result.parameters.date}`, + "fallback": "You are unable to create reminder", + "callback_id": "reminder", + "color": "#3AA3E3", + "attachment_type": "default", + "actions": [ + { + "name": "confrim", + "text": "Yes", + "type": "button", + "value": "yes" + }, + { + "name": "confirm", + "text": "No", + "type": "button", + "value": "no" + }, + ] + } + ]}) +} -var routes = require('./routes/routes'); -var auth = require('./routes/auth'); -var app = express(); +var token = process.env.SLACK_SECRET || ''; +var web = new WebClient(token); +var rtm = new RtmClient(token); +rtm.start(); -// view engine setup -var hbs = require('express-handlebars')({ - defaultLayout: 'main', - extname: '.hbs' -}); -app.engine('hbs', hbs); -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'hbs'); +rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (rtmStartData) => { + console.log(`logged in as ${rtmStartData.self.name} of team ${rtmStartData.team.name}, but not yet connected to a channel`); +}) -app.use(logger('tiny')); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); -app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public'))); +var pendingState = { + subject: "", + date: "" +}; -// Passport -app.use(session({ - secret: process.env.SECRET, - store: new MongoStore({ mongooseConnection: mongoose.connection }) -})); +rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) { + var dm = rtm.dataStore.getDMByUserId(message.user); + console.log("DM--------", dm, "MESSAGE-------", message); + if (!dm || dm.id !== message.channel || message.type !== 'message') { + console.log('Message not send to DM, ignoring'); + return; + } + //CHECK IF THEY ARE IN MONGO AS HAVING REGISTERED GOOGLE + var u = rtm.dataStore.getUserById(message.user); + //CHECK FOR USER OR CREATE ONE + User.findOne({slack_ID: message.user}) + .then(function(user){ + //SET UP INITIAL SLACK INFO IN MONGO + if(!user){ + return new User({ + default_meeting_len: 30, + slack_ID: message.user, + slack_DM_ID: message.channel, + slack_Username: u.profile.real_name, + slack_Email: u.profile.email, + }).save(); + } + return user; + }) + .then(function(user){ + console.log("USER IS", user); + if(!user.googleAccount){ + //submit the link to grant Google access + rtm.sendMessage("Hello This is Scheduler bot. In order to schedule reminders for you, I need access to you Google calendar", message.channel); + web.chat.postMessage(message.channel, + 'Use this link to give access to your google cal account http://localhost:3000/connect?auth_id=' + + user._id); + return; + } + axios.get('https://api.api.ai/api/query', { + params: { + v: 20150910, + lang: 'en', + // timezone: '2017-07-17T16:58:21-0700', + query: message.text, + sessionId: message.user + }, + headers: { + Authorization: `Bearer ${process.env.API_AI_TOKEN}` + } + }) + .then(function( { data } ) { + console.log("DATA", data, "DATA-messages", data.result.fulfillment.messages); + if(!data.result.actionIncomplete && data.result.parameters.date && data.result.parameters.subject ) { + // rtm.sendMessage(data.result.fulfillment.speech, message.channel); + pendingState = data.result.parameters; + web.chat.postMessage(message.channel, 'Chill homie', imReply(data), function(err, res) { + if (err) { + console.log('Error:', err); + } else { + console.log('Message sent: ', res); + } + }); + } else if(data.result.parameters.date && !data.result.parameters.subject){ + console.log('NO SUBJECT'); + pendingState.date = data.result.parameters.date; + rtm.sendMessage(data.result.fulfillment.speech, message.channel); + } else if(data.result.parameters.subject && !data.result.parameters.date){ + console.log('NO DATE'); + pendingState.subject = data.result.parameters.subject; + rtm.sendMessage(data.result.fulfillment.speech, message.channel); + } else { + rtm.sendMessage(data.result.fulfillment.speech, message.channel); + } + console.log("HOW IS PENDING STATE LOOKING RIGHT NOW? HMM?", pendingState); + return pendingState; + }) + .catch(function(err) { + console.log("ERROR", err); + }) -app.use(passport.initialize()); -app.use(passport.session()); + }); + }); -passport.serializeUser(function(user, done) { - done(null, user._id); -}); + rtm.on(RTM_EVENTS.REACTION_ADDED, function handleRtmReactionAdded(reaction) { + console.log('Reaction added:', reaction); + }); -passport.deserializeUser(function(id, done) { - models.User.findById(id, done); -}); + rtm.on(RTM_EVENTS.REACTION_REMOVED, function handleRtmReactionRemoved(reaction) { + console.log('Reaction removed:', reaction); + }); + + +function getGoogleAuth() { + return new OAuth2( + process.env.GOOGLE_CLIENT_ID, + process.env.GOOGLE_CLIENT_SECRET, + process.env.DOMAIN + '/connect/callback' //redirect url + ); +} + +app.get('/connect', function(req, res){ + var userId = req.query.auth_id; + if (!userId) { + res.status(400).send("Missing user id"); + } else { + User.findById(userId) + .then(function(user){ + if (!user) { + res.status(404).send("Cannot find user"); + } else { + var googleAuth = getGoogleAuth(); + var url = googleAuth.generateAuthUrl({ + access_type: 'offline', //'online' (default) or 'offline' (gets refresh_token) + prompt: 'consent', + scope: [ + 'https://www.googleapis.com/auth/userinfo.profile', + 'https://www.googleapis.com/auth/calendar' + ], // generate a url that asks permissions for Google+ and Google Calendar scopes + // state: encodeURIComponent(JSON.stringify({ + // auth_id: req.query.auth_id + // })) // Optional property that passes state parameters to redirect URI + state: userId + }); + res.redirect(url); + } + }) + } +}) -// passport strategy -passport.use(new LocalStrategy(function(username, password, done) { - // Find the user with the given username - models.User.findOne({ username: username }, function (err, user) { - // if there's an error, finish trying to authenticate (auth failed) +app.get('/connect/callback', function(req, res){ + var googleAuth = getGoogleAuth(); + googleAuth.getToken(req.query.code, function (err, tokens) { + console.log("HERE ARE THE TOKENS", tokens); // Now tokens contains an access_token and an optional refresh_token. Save them. if (err) { - console.error('Error fetching user in LocalStrategy', err); - return done(err); - } - // if no user present, auth failed - if (!user) { - return done(null, false, { message: 'Incorrect username.' }); - } - // if passwords do not match, auth failed - if (user.password !== password) { - return done(null, false, { message: 'Incorrect password.' }); + res.status(500).json({error: err}); + } else { + googleAuth.setCredentials(tokens); + var plus = google.plus('v1'); + plus.people.get({auth: googleAuth, userId: 'me'}, function(err, googleUser) { + console.log("GOOGLEUSER! ME!", googleUser); + if (err) { + res.status(500).json({error: err}); + } else { + User.findById(req.query.state) + .then(function(mongoUser){ + mongoUser.googleAccount = tokens; + mongoUser.googleAccount.profile_ID = googleUser.id; + mongoUser.googleAccount.profile_name = googleUser.displayName; + return mongoUser.save(); + }) + .then(function(mongoUser){ + res.send('You are connected to Google Calendar'); //To /connect/callback webpage + rtm.sendMessage('You are connected to Google Calendar. Now set your first reminder by talking to me!', mongoUser.slack_DM_ID) //To slack channel + }) + } + }) } - // auth has has succeeded - return done(null, user); }); -} -)); +}) -app.use('/', auth(passport)); -app.use('/', routes); +app.post('/slack/interactive', function(req, res){ + var payload = JSON.parse(req.body.payload); + console.log("PAYLOAD", payload); + if(payload.actions[0].value === 'yes') { + // Manually delete user from MongoDB + // User.remove({slack_DM_ID: payload.channel.id}, function(err) { + // if(err){ + // console.log("error removing user", err); + // } + // }) -// catch 404 and forward to error handler -app.use(function(req, res, next) { - var err = new Error('Not Found'); - err.status = 404; - next(err); -}); + res.send('Created reminder :white_check_mark:'); -// error handlers + // CONNECT TO API.AI NOW THAT YOU HAVE SET UP GOOGLE SHIT + var curTime = Date.now(); + console.log("CURRENT TIME " + curTime); + //FIND MONGODB ENTRY TO GET TOKENS AND EXPIRY DATE (maybe this goes in a route too) + User.findOne({slack_DM_ID: payload.channel.id}) + .then(function(user){ + console.log("HERE HERE HERE HERE USER IS HERE", user); + //console.log("time now ", curTime); + if(curTime > user.googleAccount.expiry_date){ + console.log("access_token has expired"); + var googleAuth = getGoogleAuth(); + googleAuth.setCredentials(user.googleAccount); + googleAuth.refreshAccessToken(function(err, tokens) { + console.log("enters this function first...", tokens); + user.googleAccount = tokens; + user.save(function(err) { + if(err){ + console.log("blah blah err", err); + } else { + console.log("no error"); + } + return user; + }) + }) + .then(function(user){ + console.log("this is second console before final console", user); + return user; + }) + //return user; + } else { + console.log('token still good homie'); + return user; + } + }) + .then(function(user){ + //POST MESSAGE TO GOOGLE CALENDAR + console.log("final console", user); + if(user){ + console.log("CHECK PENDING STATE", pendingState); + //create calendar event here + var new_event = { + "end": { + "date": pendingState.date + }, + "start": { + "date": pendingState.date + }, + "description": "you are a gawd", + "summary": pendingState.subject + } -// development error handler -// will print stacktrace -if (app.get('env') === 'development') { - app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: err - }); - }); -} + axios.post(`https://www.googleapis.com/calendar/v3/calendars/primary/events?access_token=${user.googleAccount.access_token}`, new_event) + .then(function(response){ + console.log('SUCCESSFULLY POSTED TO CALENDAR'); + console.log('THIS IS THE INFORMATION THE USER HAS', user); + console.log('this is the state', pendingState); + var reminder = new Reminder({ + subject: pendingState.subject, + day: pendingState.date, + googCalID: user.googleAccount.profile_ID, + reqID: user.slack_ID + }) + console.log('this is the REMINDER', reminder); + reminder.save(function(err) { + if(err) { + console.log("Error saving reminder, I cry", err); + } + }); + //reset pendingState + pendingState = { + date: '', + subject: '' + } + }) + .catch(function(err){ + console.log(err); + }) + } + }) + } else { + res.send('Cancelled :x: :pray: :100: :fire:'); + } +}) -// production error handler -// no stacktraces leaked to user -app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: {} - }); -}); var port = process.env.PORT || 3000; app.listen(port); console.log('Express started. Listening on port %s', port); -module.exports = app; + +module.exports = { + app, rtm +}; diff --git a/bot.js b/bot.js index 6072700..1cd9954 100644 --- a/bot.js +++ b/bot.js @@ -1,73 +1,142 @@ - -var RtmClient = require('@slack/client').RtmClient; -var RTM_EVENTS = require('@slack/client').RTM_EVENTS; -var WebClient = require('@slack/client').WebClient; - -var obj = { - "text": "Would you like to play a game?", - "attachments": [ - { - "text": "Choose a game to play", - "fallback": "You are unable to choose a game", - "callback_id": "wopr_game", - "color": "#3AA3E3", - "attachment_type": "default", - "actions": [ - { - "name": "game", - "text": "Chess", - "type": "button", - "value": "chess" - }, - { - "name": "game", - "text": "Falken's Maze", - "type": "button", - "value": "maze" - }, - { - "name": "game", - "text": "Thermonuclear War", - "style": "danger", - "type": "button", - "value": "war", - "confirm": { - "title": "Are you sure?", - "text": "Wouldn't you prefer a good game of chess?", - "ok_text": "Yes", - "dismiss_text": "No" - } - } - ] - } - ] -} - - -var token = process.env.SLACK_SECRET || ''; -var web = new WebClient(token); -var rtm = new RtmClient(token); -rtm.start(); - -rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) { - console.log('Message:', message); - if(message.message.sub_type==='bot_message') { - return; - } - rtm.sendMessage("hello i am seeing and replytin to your meesage", message.channel); - web.chat.postMessage(message.channel, 'Hello there', obj, function(err, res) { - if (err) { - console.log('Error:', err); - } else { - console.log('Message sent: ', res); - } - }); -}); - -rtm.on(RTM_EVENTS.REACTION_ADDED, function handleRtmReactionAdded(reaction) { - console.log('Reaction added:', reaction); -}); - -rtm.on(RTM_EVENTS.REACTION_REMOVED, function handleRtmReactionRemoved(reaction) { - console.log('Reaction removed:', reaction); -}); +// var app = require('./app'); +// +// // CONNECTING TO MONGO_DB +// var mongoose = require('mongoose'); +// mongoose.connect(process.env.MONGODB_URI); +// var { User } = require('./models'); +// var { RtmClient, WebClient, CLIENT_EVENTS, RTM_EVENTS } = require('@slack/client'); +// var axios = require('axios'); +// +// function imReply(data) { +// return ({"attachments": [ +// { +// "text": `Creating a reminder for '${data.result.parameters.subject}' on ${data.result.parameters.date}`, +// "fallback": "You are unable to create reminder", +// "callback_id": "reminder", +// "color": "#3AA3E3", +// "attachment_type": "default", +// "actions": [ +// { +// "name": "confrim", +// "text": "Yes", +// "type": "button", +// "value": "yes" +// }, +// { +// "name": "confirm", +// "text": "No", +// "type": "button", +// "value": "no" +// }, +// ] +// } +// ]}) +// } +// +// var token = process.env.SLACK_SECRET || ''; +// var web = new WebClient(token); +// var rtm = new RtmClient(token); +// rtm.start(); +// +// rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (rtmStartData) => { +// console.log(`logged in as ${rtmStartData.self.name} of team ${rtmStartData.team.name}, but not yet connected to a channel`); +// }) +// +// var pendingState = { +// subject: "", +// date: "" +// }; +// +// rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) { +// var dm = rtm.dataStore.getDMByUserId(message.user); +// console.log("DM--------", dm, "MESSAGE-------", message); +// if (!dm || dm.id !== message.channel || message.type !== 'message') { +// console.log('Message not send to DM, ignoring'); +// return; +// } +// //CHECK IF THEY ARE IN MONGO AS HAVING REGISTERED GOOGLE +// var u = rtm.dataStore.getUserById(message.user); +// //CHECK FOR USER OR CREATE ONE +// User.findOne({slack_ID: message.user}) +// .then(function(user){ +// //SET UP INITIAL SLACK INFO IN MONGO +// if(!user){ +// return new User({ +// default_meeting_len: 30, +// slack_ID: message.user, +// slack_DM_ID: message.channel, +// slack_Username: u.profile.real_name, +// slack_Email: u.profile.email, +// }).save(); +// } +// return user; +// }) +// .then(function(user){ +// console.log("USER IS", user); +// if(!user.googleAccount){ +// //submit the link to grant Google access +// rtm.sendMessage("Hello This is Scheduler bot. In order to schedule reminders for you, I need access to you Google calendar", message.channel); +// web.chat.postMessage(message.channel, +// 'Use this link to give access to your google cal account http://localhost:3000/connect?auth_id=' +// + user._id); +// return; +// } +// +// axios.get('https://api.api.ai/api/query', { +// params: { +// v: 20150910, +// lang: 'en', +// // timezone: '2017-07-17T16:58:21-0700', +// query: message.text, +// sessionId: message.user +// }, +// headers: { +// Authorization: `Bearer ${process.env.API_AI_TOKEN}` +// } +// }) +// .then(function( { data } ) { +// console.log("DATA", data, "DATA-messages", data.result.fulfillment.messages); +// if(!data.result.actionIncomplete && data.result.parameters.date && data.result.parameters.subject ) { +// // rtm.sendMessage(data.result.fulfillment.speech, message.channel); +// pendingState = data.result.parameters; +// web.chat.postMessage(message.channel, 'Chill homie', imReply(data), function(err, res) { +// if (err) { +// console.log('Error:', err); +// } else { +// console.log('Message sent: ', res); +// } +// }); +// } else if(data.result.parameters.date && !data.result.parameters.subject){ +// console.log('NO SUBJECT'); +// pendingState.date = data.result.parameters.date; +// rtm.sendMessage(data.result.fulfillment.speech, message.channel); +// } else if(data.result.parameters.subject && !data.result.parameters.date){ +// console.log('NO DATE'); +// pendingState.subject = data.result.parameters.subject; +// rtm.sendMessage(data.result.fulfillment.speech, message.channel); +// } else { +// rtm.sendMessage(data.result.fulfillment.speech, message.channel); +// } +// console.log("HOW IS PENDING STATE LOOKING RIGHT NOW? HMM?", pendingState); +// return pendingState; +// }) +// .catch(function(err) { +// console.log("ERROR", err); +// }) +// +// }); +// }); +// +// rtm.on(RTM_EVENTS.REACTION_ADDED, function handleRtmReactionAdded(reaction) { +// console.log('Reaction added:', reaction); +// }); +// +// rtm.on(RTM_EVENTS.REACTION_REMOVED, function handleRtmReactionRemoved(reaction) { +// console.log('Reaction removed:', reaction); +// }); +// +// +// module.exports = { +// rtm: rtm, +// pendingState: pendingState // this doesn't work!!! +// }; diff --git a/cronjob.js b/cronjob.js new file mode 100644 index 0000000..927a3c6 --- /dev/null +++ b/cronjob.js @@ -0,0 +1,49 @@ +var mongoose = require('mongoose'); +mongoose.connect(process.env.MONGODB_URI); + +var { User, Reminder } = require('./models'); +var { rtm } = require('./app'); + +Reminder.find({}, function(err, reminders) { + console.log("REMINDERS", reminders); + if(err) { + console.log('There was an error with finding the reminders'); + } else { + // reminders is an array of reminder JSONs + // const curDate = new Date().toLocaleDateString(); + const curDate = new Date().toISOString().split('T')[0]; + // sets up the next day + const tomDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000).toISOString().split('T')[0]; + // const tomDay = parseInt(curDate.split('/')[1]) + 1; + // let tomDate = curDate.split('/') + // tomDate[1] = parseInt(tomDate[1]) + 1; + // tomDate = tomDate.join('/') + console.log("TODAY DATE", curDate, "TOMORROW DATE", tomDate); + + User.find({}, function(err, users) { + console.log("YO! I FOUND USERS!", users); + }); + + reminders.forEach(function(reminder) { + if( curDate === reminder.day ) { //On due day of reminder, send Slack msg & delete the reminder doc + console.log("Reminder now", reminder); + console.log('need to send RTM message here'); + User.findOne({slack_ID: reminder.reqID}, function(err, user) { + console.log("TODAY, USER iS", user); + rtm.sendMessage(`Reminder! You gotta remember to ${reminder.subject} today bro!`, user.slack_DM_ID) + if(!err) { + Reminder.remove({reqID: reminder.reqID}, function(err) { + if(err) { + console.log("Error removing reminder for today!"); + } + }) + } + }) + } else if ( tomDate === reminder.day ) { //On day before due day of reminder, send Slack msg to app user + User.findOne({slack_ID: reminder.reqID}, function(err, user) { + rtm.sendMessage(`Reminder! You gotta remember to ${reminder.subject} tomorrow bro!`, user.slack_DM_ID) + }) + } + }) + } +}) diff --git a/index.js b/index.js deleted file mode 100644 index 72d15a1..0000000 --- a/index.js +++ /dev/null @@ -1,20 +0,0 @@ - -var RtmClient = require('@slack/client').RtmClient; -var RTM_EVENTS = require('@slack/client').RTM_EVENTS; - -var token = process.env.SLACK_API_TOKEN || ''; - -var rtm = new RtmClient(token, { logLevel: 'debug' }); -rtm.start(); - -rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) { - console.log('Message:', message); -}); - -rtm.on(RTM_EVENTS.REACTION_ADDED, function handleRtmReactionAdded(reaction) { - console.log('Reaction added:', reaction); -}); - -rtm.on(RTM_EVENTS.REACTION_REMOVED, function handleRtmReactionRemoved(reaction) { - console.log('Reaction removed:', reaction); -}); diff --git a/models.js b/models.js index 292ab37..414a3ba 100644 --- a/models.js +++ b/models.js @@ -1,15 +1,45 @@ var mongoose = require('mongoose'); +mongoose.Promise = global.Promise; +mongoose.connect(process.env.MONGODB_URI); var userSchema = mongoose.Schema({ - username: String, - password: String, - phone: String + // googleAccount: { + // access_token: String, + // refresh_token: String, + // profile_ID: String, + // profile_name: String + // }, + googleAccount: {}, + slack_ID: { + type: String, + required: true + }, + slack_DM_ID: { + type: String, + required: true + }, + slack_Username: String, + slack_Email: String }); +var reminderSchema = mongoose.Schema({ + // slack_DM_ID: String, + subject: { + required: true, + type: String + }, + day: { + required: true, + type: String + }, + googCalID: String, + reqID: String +}) - -User = mongoose.model('User', userSchema); +var User = mongoose.model('User', userSchema); +var Reminder = mongoose.model('Reminder', reminderSchema); module.exports = { - User:User + User: User, + Reminder: Reminder }; diff --git a/package.json b/package.json index 1a11d4d..1aa3567 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,18 @@ }, "dependencies": { "@slack/client": "^3.10.0", - "body-parser": "~1.13.2", + "axios": "^0.16.2", + "body-parser": "^1.13.3", + "client-oauth2": "^4.1.0", "connect-mongo": "^1.3.2", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "express": "~4.13.1", "express-handlebars": "^3.0.0", "express-session": "^1.13.0", + "googleapis": "^20.1.0", "hbs": "~3.1.0", - "mongoose": "^4.5.1", + "mongoose": "^4.11.3", "mongoose-findorcreate": "^0.1.2", "morgan": "~1.6.1", "multer": "^1.1.0", diff --git a/public/scripts/script.js b/public/scripts/script.js deleted file mode 100644 index 8057ee3..0000000 --- a/public/scripts/script.js +++ /dev/null @@ -1 +0,0 @@ -// YOUR JS CODE FOR ALL PAGES GOES HERE diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css deleted file mode 100644 index 3b08471..0000000 --- a/public/stylesheets/style.css +++ /dev/null @@ -1,5 +0,0 @@ -body { - min-height: 75rem; - padding-top: 6.5rem; - font: 14px "Open Sans", Helvetica, Arial, sans-serif; -} diff --git a/routes/auth.js b/routes/auth.js deleted file mode 100644 index f3fb38a..0000000 --- a/routes/auth.js +++ /dev/null @@ -1,53 +0,0 @@ -// Add Passport-related auth routes here. -var express = require('express'); -var router = express.Router(); -var models = require('../models'); - -module.exports = function(passport) { - - // GET registration page - router.get('/signup', function(req, res) { - res.render('signup'); - }); - - router.post('/signup', function(req, res) { - // validation step - if (req.body.password!==req.body.passwordRepeat) { - return res.render('signup', { - error: "Passwords don't match." - }); - } - var u = new models.User({ - username: req.body.username, - password: req.body.password - }); - u.save(function(err, user) { - if (err) { - console.log(err); - res.status(500).redirect('/register'); - return; - } - console.log(user); - res.redirect('/login'); - }); - }); - - // GET Login page - router.get('/login', function(req, res) { - res.render('login'); - }); - - // POST Login page - router.post('/login', passport.authenticate('local',{ - successRedirect: '/protected', - failureRedirect: '/login' - })); - - // GET Logout page - router.get('/logout', function(req, res) { - req.logout(); - res.redirect('/'); - }); - - return router; -}; diff --git a/routes/routes.js b/routes/routes.js deleted file mode 100644 index 170b699..0000000 --- a/routes/routes.js +++ /dev/null @@ -1,39 +0,0 @@ -var express = require('express'); -var router = express.Router(); -var models = require('../models'); -var User = models.User; - - - -//////////////////////////////// PUBLIC ROUTES //////////////////////////////// -// Users who are not logged in can see these routes - -router.get('/', function(req, res, next) { - res.render('home'); -}); - -///////////////////////////// END OF PUBLIC ROUTES ///////////////////////////// - -router.use(function(req, res, next){ - if (!req.user) { - res.redirect('/login'); - } else { - return next(); - } -}); - -//////////////////////////////// PRIVATE ROUTES //////////////////////////////// -// Only logged in users can see these routes - -router.get('/protected', function(req, res, next) { - res.render('protectedRoute', { - username: req.user.username, - }); -}); - -///////////////////////////// END OF PRIVATE ROUTES ///////////////////////////// - - -router.post('') - -module.exports = router; diff --git a/views/error.hbs b/views/error.hbs deleted file mode 100644 index 0659765..0000000 --- a/views/error.hbs +++ /dev/null @@ -1,3 +0,0 @@ -

{{message}}

-

{{error.status}}

-
{{error.stack}}
diff --git a/views/home.hbs b/views/home.hbs deleted file mode 100644 index dace7f8..0000000 --- a/views/home.hbs +++ /dev/null @@ -1,6 +0,0 @@ -

Home

-

Everyone visiting your site will be able to see this page, no login required

- -
- -Visit a page that requires you to be logged in Here diff --git a/views/layouts/main.hbs b/views/layouts/main.hbs deleted file mode 100644 index 7d66a84..0000000 --- a/views/layouts/main.hbs +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - TITLE OF YOUR APP HERE - - - - - - - - - - - - - -
- {{{body}}} -
- - - - - - - - - - - - diff --git a/views/login.hbs b/views/login.hbs deleted file mode 100644 index cad3680..0000000 --- a/views/login.hbs +++ /dev/null @@ -1,22 +0,0 @@ -{{#if error}} - -{{/if}} -
-

Login

-
- - -
-
- - -
-
- - Register -
-
diff --git a/views/protectedRoute.hbs b/views/protectedRoute.hbs deleted file mode 100644 index ccbc694..0000000 --- a/views/protectedRoute.hbs +++ /dev/null @@ -1,8 +0,0 @@ -

Protected Route!

-

Only logged in people will be able to see this route

- -

You are {{username}}

- -
- -Logout diff --git a/views/signup.hbs b/views/signup.hbs deleted file mode 100644 index 48b907a..0000000 --- a/views/signup.hbs +++ /dev/null @@ -1,25 +0,0 @@ -{{#if error}} - -{{/if}} -
-

Register

-
- - -
-
- - -
-
- - -
-
- -
-