diff options
| -rw-r--r-- | .bowerrc | 3 | ||||
| -rw-r--r-- | bower.json | 9 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | public/assets/javascripts/ui/signin.js | 319 | ||||
| -rw-r--r-- | server/index.js | 1 | ||||
| -rw-r--r-- | server/lib/auth.js | 20 | ||||
| -rw-r--r-- | server/lib/schemas/User.js | 8 | ||||
| -rwxr-xr-x | views/app.ejs | 2 | ||||
| -rw-r--r-- | views/controls/settings.ejs | 7 | ||||
| -rwxr-xr-x | views/home.ejs | 4 | ||||
| -rw-r--r-- | views/partials/newproject.ejs | 2 | ||||
| -rw-r--r-- | views/partials/signin.ejs | 4 | ||||
| -rw-r--r-- | views/profile.ejs | 6 |
13 files changed, 367 insertions, 19 deletions
diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..f21ed66 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "public/assets/javascripts/vendor/bower_components" +} diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..ace209e --- /dev/null +++ b/bower.json @@ -0,0 +1,9 @@ +{ + "name": "vvalls", + "version": "1.0.0", + "private": true, + "dependencies": { + "jquery": "1.11.0", + "momentjs": "~2.5.1" + } +} diff --git a/package.json b/package.json index 554a678..62197f8 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "geolib": "~1.3.5", "connect-mongo": "~0.4.1", "passport": "~0.2.0", + "passport-local": "~1.0.0", "passport-twitter": "~1.0.2", "passport-facebook": "~1.0.3", "passport.socketio": "~3.0.1", diff --git a/public/assets/javascripts/ui/signin.js b/public/assets/javascripts/ui/signin.js index e69de29..06e3d44 100644 --- a/public/assets/javascripts/ui/signin.js +++ b/public/assets/javascripts/ui/signin.js @@ -0,0 +1,319 @@ + + +var SignIn = function(){ + var base = this; + + base.init = function(){ + base.bind() + } + + base.bind = function(){ + $("[data-role='show-signup-modal']").click(function(){ + $(".mediaDrawer.signup").addClass("active"); + }) + } + + base.show = function(){ + } + + base.hide = function(){ + } + +} + +var SignUp = function(){ + var base = this; + + base.init = function(){ + base.bind() + } + + base.bind = function(){ + $("[data-role='show-signin-modal']").click(function(){ + $(".mediaDrawer.signin").addClass("active"); + }) + } + + base.show = function(){ + } + + base.hide = function(){ + } +} + + $(".close").click(function(){ + $(".mediaDrawer, .room1").removeClass("active editing"); + $("body").removeClass("noOverflow"); + }); + + + + + +/* + + +function bind () { + + if(is_mobile) { + $("html").addClass("mobile"); + } + else { + $("html").addClass("desktop"); + } + + $.fn.clickToToggle = function(fn){ + $(this).click(function(e){ + e.stopPropagation() + var isActive = ! $(this).hasClass("icon-close") + disable_mode() + fn(isActive) + $(this).toggleClass("icon-close", isActive); + }) + } + + $(".addMedia").clickToToggle(function(isActive){ + $(".mediaDrawer").toggleClass("active", isActive); + $(".fileUpload").toggleClass("active", isActive); + }); + + $(".room1 .editBtn").click(function () { + var room = $(this).parent(); + room.addClass('editing'); + $(this).siblings('.formHolder').find('[type="submit"]').one('click', function (evt) { + evt.preventDefault(); + evt.stopPropagation(); + room.removeClass('editing'); + }); + }); + + // Place media logic + var $floatingImg = $('.floatingImg'); + + function placeMedia(evt, img) { + // JULES DO YO THANG + alert('Place media at (' + evt.pageX + ', ' + evt.pageY + ')'); + } + + $('.mediaContainer img').mousedown(function(e){ + e.preventDefault() + e.stopPropagation() + }) + $('.mediaContainer img').click(function (e) { + e.stopPropagation() + $(".mediaDrawer, .fileUpload, .addMedia").removeClass("active icon-close"); + $floatingImg.attr('src', $(this).attr('src')); + function _followCursor(e) { + $floatingImg.parent().css({ + top: (e.pageY - ($floatingImg.height() / 2)) + 'px', + left: (e.pageX - ($floatingImg.width() / 2)) + 'px' + }); + } + $(window).on('mousemove', _followCursor); + $(window, this).one('click', function () { + $floatingImg.attr('src', ''); + $(window).off('mousemove', _followCursor); + $floatingImg.parent().removeClass('edit'); + }); + $floatingImg.parent().addClass('edit'); + _followCursor(e); + }); + + $(".icon-arrow-resize").clickToToggle(function(isActive){ + $(".image").toggleClass("active", isActive); + }); + $(".icon-map").click(function(){ + $("#minimap").toggleClass("hide"); + $(this).toggleClass('hidden'); + }); + $(".icon-ios7-keypad-outline").clickToToggle(function(isActive){ + $(".wallpaper").toggleClass("active", isActive); + $("body").removeClass("pastePaper"); + }); + $(".paper1").click(function(){ + $("body").toggleClass("pastePaper"); + $(this).toggleClass("active"); + }); + + $(".icon-ios7-sunny-outline").clickToToggle(function(isActive){ + $(".lightcontrol").toggleClass("active", isActive); + }); + $(".delete-image-toggle").clickToToggle(function(isActive){ + $("body").toggleClass("deleteActive", isActive); + }); + $(".icon-key").clickToToggle(function(isActive){ + $(".settings").toggleClass("active", isActive); + }); + + + + $(".edit-text-toggle").clickToToggle(function(isActive){ + $(".image").toggleClass("editText", isActive); + }); + + + + $(".foundToggle").click(function(){ + $(".foundMedia").addClass("active"); + $(".myMedia").addClass("inactive"); + $('a').removeClass("active"); + $(this).addClass("active"); + }); + + $(".yourMedia").click(function(){ + $(".foundMedia").removeClass("active"); + $(".myMedia").removeClass("inactive"); + $('a').removeClass("active"); + $(this).addClass("active"); + }); + + $("#deleteMedia").click(function(){ + $("body").toggleClass("deleteArmed"); + }); + + $("#startpoint").click(function(){ + $(this).toggleClass("active"); + $("#startText").toggleClass("hide"); + $("#moveText").toggleClass("show"); + }); + + + $(".deleteArmed .mediaContainer").click(function(){ + $(this).addClass("deleted"); + }); + + + $("#createProject").click(function(){ + $(".mediaDrawer.newProject").toggleClass("active"); + $("body").addClass("noOverflow") + }); + + $(".templates span").click(function(){ + $(".templates span").removeClass("active"); + $(this).toggleClass("active"); + }); + + $(document).on("click", ".icon-close", disable_mode) + + function disable_mode(){ + $(".icon-close").removeClass("icon-close") + $('.mediaDrawer,.fileUpload,.image,.lightcontrol,.settings,.wallpaper').removeClass("active"); + $(".image").removeClass("editText") + $("body").removeClass("deleteArmed") + } + + $("#shadow-control").on({ + mousedown: function(){ app.dragging = true }, + change: function(){ + var hex = (~~($(this).int() / 100 * 0xff)).toString(10) + if (hex.length == 1) hex = "0" + hex; + var color = "rgba(" + [hex, hex, hex, "1.0"] + ")" + $(".face").css("border-color", color) + } + }) + + $("#brightness-control").on({ + mousedown: function(){ app.dragging = true }, + change: function(){ + var hex = (~~($(this).int() / 100 * 0xff)).toString(10) + var color = "rgba(" + [hex, hex, hex, "0.9"] + ")" + $("body,.face").css("background-color", color) + } + }) + + + // + // EDIT IMAGE HOVER MENU + + var hideEditImageMenuTimeout + environment.image.el.addEventListener('mouseover', function(e){ + environment.image.el.classList.add('hover') + var offset = $(".image").offset() + offset.left = max(0, offset.left + 30) + offset.top = max(0, offset.top + 50) + $(".edit-image.menu").show().offset( offset ) + clearTimeout(hideEditImageMenuTimeout) + }) + environment.image.el.addEventListener('mouseout', function(e){ + environment.image.el.classList.remove('hover') + hideEditImageMenuTimeout = setTimeout(function(){ + $(".edit-image.menu").hide() + }, 50) + }) + $(".edit-image.menu").on({ + mouseover: function(){ + clearTimeout(hideEditImageMenuTimeout) + }, + mouseout: function(){ + hideEditImageMenuTimeout = setTimeout(function(){ + $(".edit-image.menu").hide() + }, 50) + }, + mousedown: function(e){ + e.stopPropagation() + }, + mouseup: function(e){ + e.stopPropagation() + } + }) + + + // + // EDIT VIDEO HOVER MENU + + var hideEditVideoMenuTimeout + environment.video.el.addEventListener('mouseover', function(e){ + environment.video.el.classList.add('hover') + var offset = $(".video").offset() + offset.left = max(0, offset.left + 30) + offset.top = max(0, offset.top + 50) + $(".edit-video.menu").show().offset( offset ) + clearTimeout(hideEditImageMenuTimeout) + }) + environment.video.el.addEventListener('mouseout', function(e){ + environment.video.el.classList.remove('hover') + hideEditVideoMenuTimeout = setTimeout(function(){ + $(".edit-video.menu").hide() + }, 50) + }) + $(".edit-video.menu").on({ + mouseover: function(){ + clearTimeout(hideEditVideoMenuTimeout) + }, + mouseout: function(){ + hideEditVideoMenuTimeout = setTimeout(function(){ + $(".edit-video.menu").hide() + }, 50) + }, + mousedown: function(e){ + e.stopPropagation() + }, + mouseup: function(e){ + e.stopPropagation() + } + }) + $(".icon-ios7-reload,.ios7-arrow-forward").click(function(){ + $(this).toggleClass('toggled') + }) + + // + // ALL DONE + + $('body').removeClass('loading'); +} + + +$(function(){ + + var classes = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen']; + + $(".bio").addClass(choice(classes)); + + function randomizeList(listObj) { + $(listObj).each(function() { + $(this).addClass(classes[Math.Random()*classes.size]); + }); + } +}) + +*/ diff --git a/server/index.js b/server/index.js index d5afe6e..59dc7a5 100644 --- a/server/index.js +++ b/server/index.js @@ -58,6 +58,7 @@ auth.init() // Initialize views app.get('/', views.home); app.get('/login', views.login); +app.post('/login', auth.loggedIn('local')); app.get('/logout', auth.logout); app.get('/auth/twitter', auth.login('twitter')); app.get('/auth/twitter/callback', auth.loggedIn('twitter')); diff --git a/server/lib/auth.js b/server/lib/auth.js index 22917c3..b7a2772 100644 --- a/server/lib/auth.js +++ b/server/lib/auth.js @@ -14,6 +14,8 @@ var auth = { passport.serializeUser(auth.serializeUser); passport.deserializeUser(auth.deserializeUser); + passport.use(auth.verifyLocalUser) + passport.use(new TwitterStrategy({ consumerKey: process.env.VVALLS_TWITTER_KEY || '0L5blfBIapqhpons8bCXdIoGM', consumerSecret: process.env.VVALLS_TWITTER_SECRET || '5EKW7m7inoODqYSKbp7cadBKFp1FghBl4MBDoXNcUjKtodZfuP', @@ -56,7 +58,7 @@ var auth = { accept(null, false); }, - // technically these returns the login middleware + // technically these return the login middleware login: function (strategy) { return passport.authenticate(strategy); }, @@ -83,6 +85,19 @@ var auth = { }); }, + verifyLocalUser: function (username, password, done) { + User.findOne({ username: username }, function(err, user){ + if (err) { return done(err); } + if (!user) { + return done(null, false, { message: 'Incorrect username.' }); + } + if (! user.validPassword(password)) { + return done(null, false, { message: 'Incorrect password.' }); + } + return done(null, user); + }); + }, + insertTwitterUser: function (accessToken, refreshToken, profile, done) { process.nextTick(function () { var userData = { @@ -90,7 +105,7 @@ var auth = { username: profile.username, displayName: profile.displayName, photo: profile.photos[0].value, - links: ["https://twitter.com/" + profile.username] + twitterName: profile.username, }; User.findOne({twitter_id: profile.id}, function(err, data){ @@ -114,7 +129,6 @@ var auth = { username: profile.username || profile.displayName.toLowerCase().replace(/ /g,'-'), displayName: profile.displayName, photo: "http://graph.facebook.com/" + profile.id + "/picture?type=large", - links: [profile.profileUrl] }; User.findOne({facebook_id: profile.id}, function(err, data){ diff --git a/server/lib/schemas/User.js b/server/lib/schemas/User.js index 9fd07e5..76a1255 100644 --- a/server/lib/schemas/User.js +++ b/server/lib/schemas/User.js @@ -59,12 +59,14 @@ var UserSchema = new mongoose.Schema({ type: String, default: "" }, - links: [ - { type: String, default: "" } - ], + website: String, + twitterName: String, isAdmin: { type: Boolean, default: false } }); +UserSchema.methods.validPassword = function (pw) { + return this.password !== pw +} module.exports = exports = mongoose.model('user', UserSchema); exports.schema = UserSchema; diff --git a/views/app.ejs b/views/app.ejs index 2186129..4a10915 100755 --- a/views/app.ejs +++ b/views/app.ejs @@ -9,7 +9,7 @@ <div id="scene"></div> <div class="rapper"> - <a href="/front.html" class="logo"><img src="/assets/img/logo4.svg"></a> + <a href="/" class="logo"><img src="/assets/img/logo4.svg"></a> <a href="/profile.html"><span class="icon-ios7-person-outline profile"></span></a> [[ include controls/toolbar ]] diff --git a/views/controls/settings.ejs b/views/controls/settings.ejs index 4336ddf..f92d1c7 100644 --- a/views/controls/settings.ejs +++ b/views/controls/settings.ejs @@ -23,7 +23,6 @@ <label class="radio-group__label" for="opt_1"> Everyone </label> - <input id="opt_2" class="radio-group__option" type="radio" name="opt"> <label class="radio-group__label" for="opt_2"> Just for me @@ -34,8 +33,8 @@ <button>Save</button> </div> <div class="setting subButtons"> - <a href="#">Clone </a> - <a href="#">Clear </a> - <a href="#" id="deleteRoom">Delete </a> + <a href="#">Clone</a> + <a href="#">Clear</a> + <a href="#" id="deleteRoom">Delete</a> </div> </div>
\ No newline at end of file diff --git a/views/home.ejs b/views/home.ejs index 155f2ca..3246523 100755 --- a/views/home.ejs +++ b/views/home.ejs @@ -13,8 +13,8 @@ <body class="loading"> <div class="rapper page"> <a href="/" class="logo"><img src="assets/img/logo4.svg"></a> - <a href="#" class="signUp topLink">Sign Up</span></a> - <a href="#" class="signIn topLink">Sign In</span></a> + <a href="#" data-role="show-signup-modal" class="signUp topLink">Sign Up</span></a> + <a href="#" data-role="show-signup-modal" class="signIn topLink">Sign In</span></a> <table class="demo"> <tr> <td class="video" style="background-image:url(https://s3.amazonaws.com/luckyplop/6450f5b88c5c043a4551eff8902b1728f813bd66.jpg)"> diff --git a/views/partials/newproject.ejs b/views/partials/newproject.ejs index 6f99b14..fc34295 100644 --- a/views/partials/newproject.ejs +++ b/views/partials/newproject.ejs @@ -1,5 +1,5 @@ <div class="mediaDrawer fixed animate newProject"> - <span class="bigClose">X</span> + <span class="close">X</span> <div class="box"> <div class="templates"> diff --git a/views/partials/signin.ejs b/views/partials/signin.ejs index 6d5e530..a9a2bba 100644 --- a/views/partials/signin.ejs +++ b/views/partials/signin.ejs @@ -1,5 +1,5 @@ <div class="mediaDrawer fixed animate signin"> - <span class="bigClose">X</span> + <span class="close">X</span> <div class="box"> <form id="signIn"> <a href="/auth/facebook" class="facebook"><b class="icon-social-facebook"></b><span>Sign in with Facebook</span></a> @@ -24,7 +24,7 @@ </div> <div class="mediaDrawer fixed animate signup"> - <span class="bigClose">X</span> + <span class="close">X</span> <div class="box"> <form id="signUp"> <a href="/auth/facebook" class="facebook"><b class="icon-social-facebook"></b><span>Sign up with Facebook</span></a> diff --git a/views/profile.ejs b/views/profile.ejs index 2865274..5ac75c5 100644 --- a/views/profile.ejs +++ b/views/profile.ejs @@ -6,8 +6,8 @@ </head> <body class="loading"> <div class="rapper page"> - <a href="/front.html" class="logo"><img src="assets/img/logo4.svg"></a> - <a href="/edit-profile.html" class="topLink editProfile">edit profile <span class="icon-ios7-gear-outline \"></span></a> + <a href="/" class="logo"><img src="assets/img/logo4.svg"></a> + <a href="/edit-profile.html" class="topLink editProfile">edit profile <span class="icon-ios7-gear-outline"></span></a> <table class="profilepage"> <tr> @@ -32,7 +32,7 @@ <td class="border room1"> <div class="editBtn">edit</div> <div class="formHolder fixed animate"> - <span class="bigClose">X</span> + <span class="close">X</span> <div class="formInner"> <form enctype="multipart/form-data" method="post"> <ul> |
