diff --git a/a51/synth.js b/a51/synth.js new file mode 100644 index 0000000..6e4db7f --- /dev/null +++ b/a51/synth.js @@ -0,0 +1,9 @@ +var baudio = require('baudio'); + +var n = 0; +var b = baudio(function (t) { + var x = Math.sin(t * 262 + Math.sin(n)); + n += Math.sin(t); + return x; +}); +b.play(); diff --git a/a51/violent-theremin b/a51/violent-theremin new file mode 160000 index 0000000..c9e406b --- /dev/null +++ b/a51/violent-theremin @@ -0,0 +1 @@ +Subproject commit c9e406b3be030383c62c5c0b79caaac923ba9024 diff --git a/app.js b/app.js index e77590c..b4175a8 100644 --- a/app.js +++ b/app.js @@ -1,20 +1,39 @@ - /** * Module dependencies. */ +var mongoose = require('mongoose'); +var http = require('http'); var express = require('express'); +var passport = require('passport'); var routes = require('./routes'); -var http = require('http'); +var controller = require('./controller'); var path = require('path'); +var config = require('./config'); +var twitter = require('ntwitter'); + +mongoose.connect(config.db); var app = express(); +var http = require('http').Server(app); +var io = require('socket.io')(http); + +var twit = new twitter({ + consumer_key: config.consumer_key, + consumer_secret: config.consumer_secret, + access_token_key: config.ac_key, + access_token_secret: config.ac_secret +}); // all environments -app.set('port', process.env.PORT || 8080); +app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); +app.use(express.cookieParser()); +app.use(express.session({ secret: config.session_secret })); +app.use(passport.initialize()); +app.use(passport.session()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); @@ -26,8 +45,58 @@ if ('development' == app.get('env')) { app.use(express.errorHandler()); } +//Routes app.get('/', routes.index); -http.createServer(app).listen(app.get('port'), function(){ - console.log('Express server listening on port ' + app.get('port')); +app.get('/tweet/:msg', routes.tweet) + +app.get('/auth/twitter', +passport.authenticate('twitter'), +routes.auth); + +app.get('/auth/twitter/callback', +passport.authenticate('twitter', { failureRedirect: '/login' }), +routes.auth_cb); + +app.get('/logout', routes.logout); + +//Middlewear +function ensureAuthenticated(req, res, next) { + if (req.isAuthenticated()) { return next(); } + res.redirect('/') +} + +http.listen(app.get('port'), function(){ + console.log('MM0DM server listening on port ' + app.get('port')); +}); + +//Socket.io & Twitter Stream API +var users = [] +io.on('connection', function (socket) { + users.push(socket); +}); + +var watch = ['#MMODrumMachine']; + +twit.verifyCredentials(function (err, data) { + if(err) console.log(err); +}) +.stream('user', {track:watch}, function(stream) { + console.log("Twitter stream is ready and waiting for inc tweets..."); + stream.on('data', function (data) { + if (data.text !== undefined) { + var name = data.user.screen_name; + + var tweet_txt = data.text.split("#"); + var notes = tweet_txt[0].split(""); + notes.pop(); + console.log(notes) + //socket.emit('notes', notes); + + } + }); + + stream.on('error', function (err, code) { + console.log("err: "+err+" "+code) + }); }); diff --git a/config.js b/config.js new file mode 100644 index 0000000..bbd090b --- /dev/null +++ b/config.js @@ -0,0 +1,12 @@ +/** +* Change configuration here.duh. +*/ +module.exports = { + consumer_key: 'twitter_consumer_key', + consumer_secret: 'twitter_consumer_secret', + ac_key:'twitter_access_token_key', + ac_secret:'twitter_access_token_secret', + cb_url:'twitter_callback_url', + db:'mongodb://localhost/dbname', + session_secret:'session_secret' +} diff --git a/controller.js b/controller.js new file mode 100644 index 0000000..684b650 --- /dev/null +++ b/controller.js @@ -0,0 +1,47 @@ +/** +* Conroller module: Logins with passport Twitter and stores new user. +*/ + +var mongoose = require('mongoose'); +var passport = require('passport'); +var TwitterStrategy = require('passport-twitter').Strategy; +var mode = require('./model'); +var config = require('./config'); + +User = mongoose.model('User'); + +var User = mongoose.model('User'); + +passport.use(new TwitterStrategy({ + consumerKey: config.consumer_key, + consumerSecret: config.consumer_secret, + callbackURL: config.cb_url +}, +function(token, tokenSecret, profile, done) { + User.findOne({uid: profile.id}, function(err, user) { + if(user) { + done(null, user); + } else { + var user = new User(); + user.provider = "twitter"; + user.uid = profile.id; + user.name = profile.displayName; + user.image = profile._json.profile_image_url; + user.save(function(err) { + if(err) { throw err; } + done(null, user); + }); + } + }) + } +)); + +passport.serializeUser(function(user, done) { + done(null, user.uid); +}); + +passport.deserializeUser(function(uid, done) { + User.findOne({uid: uid}, function (err, user) { + done(err, user); + }); +}); diff --git a/model.js b/model.js new file mode 100644 index 0000000..4b467f1 --- /dev/null +++ b/model.js @@ -0,0 +1,17 @@ +/** +* Model Module: Mongoose: MongoDB ODM. +*/ + +var mongoose = require('mongoose'); +var Schema = mongoose.Schema; + +var UserSchema = new Schema({ + provider: String, + uid: String, + name: String, + image: String, + created: {type: Date, default: Date.now} +}); + + +mongoose.model('User',UserSchema); diff --git a/package.json b/package.json index 8fa2b27..6e44b93 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,11 @@ }, "dependencies": { "express": "3.3.6", - "jade": "*" + "jade": "*", + "mongoose": "^3.8.20", + "ntwitter": "^0.5.0", + "passport": "^0.2.1", + "passport-twitter": "^1.0.2", + "socket.io": "^1.2.1" } } diff --git a/routes/index.js b/routes/index.js index 45c48a6..1ef9744 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,8 +1,32 @@ /* - * GET home page. + * Das Routes. */ exports.index = function(req, res){ - res.render('index', { title: 'MMODM' }); + res.render('index', { title: 'MMODM', user: req.user }); }; + +exports.logout = function(req, res){ + req.logout(); + res.redirect('/'); +} + +exports.auth_cb = function(req, res) { + res.redirect('/'); +} + +exports.auth = function(req, res){ + // The request will be redirected to Twitter for authentication, so this + // function will not be called. +} + +exports.tweet = function(req, res){ + twit.verifyCredentials(function (err, data) { + }) + .updateStatus("#"+req.params.msg+" "+ new Date().getTime(), + function (err, data) { + res.send(200); + } +); +}