From ddf68b84776c7ffabeb2a542b54ec2c37c09dfde Mon Sep 17 00:00:00 2001 From: Christian Roth Date: Fri, 9 Aug 2013 11:45:29 +0200 Subject: [PATCH] Custom error handlers Some reorganization of styles and templates Updated mmh Signed-off-by: Christian Roth --- Gruntfile.coffee | 5 +- app/controllers/AuthController.coffee | 54 ++++++++++++------- app/controllers/HomeController.coffee | 2 +- assets/styl/{ => common}/animation.styl | 0 assets/styl/{ => common}/buttons.styl | 0 assets/styl/{ => common}/forms.styl | 0 assets/styl/main.styl | 23 ++++---- assets/styl/pages/error.styl | 19 +++++++ assets/styl/{ => pages}/finalize.styl | 6 +-- assets/styl/{ => structure}/content.styl | 0 assets/styl/{ => structure}/footer.styl | 2 +- assets/styl/{ => structure}/header.styl | 0 .../{ => structure}/horizontal-scroll.styl | 0 config/extensions.coffee | 12 ++++- node_modules/mmh | 2 +- package.json | 2 +- views/404.jade | 6 --- views/500.jade | 6 --- views/error.jade | 10 ++++ views/finialize.jade | 47 ++++++++-------- views/home/index.jade | 3 -- views/index.jade | 3 ++ views/layout.jade | 17 ------ views/layout/multi.jade | 15 ++++++ views/layout/single.jade | 16 ++++++ 25 files changed, 150 insertions(+), 100 deletions(-) rename assets/styl/{ => common}/animation.styl (100%) rename assets/styl/{ => common}/buttons.styl (100%) rename assets/styl/{ => common}/forms.styl (100%) create mode 100644 assets/styl/pages/error.styl rename assets/styl/{ => pages}/finalize.styl (90%) rename assets/styl/{ => structure}/content.styl (100%) rename assets/styl/{ => structure}/footer.styl (96%) rename assets/styl/{ => structure}/header.styl (100%) rename assets/styl/{ => structure}/horizontal-scroll.styl (100%) delete mode 100644 views/404.jade delete mode 100644 views/500.jade create mode 100644 views/error.jade delete mode 100644 views/home/index.jade create mode 100644 views/index.jade delete mode 100644 views/layout.jade create mode 100644 views/layout/multi.jade create mode 100644 views/layout/single.jade diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 6b534d4..5ecb2c5 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -65,7 +65,8 @@ module.exports = (grunt) -> 'include css': true files: 'public/css/main.css': 'assets/styl/main.styl' - 'public/css/finalize.css': 'assets/styl/finalize.styl' + 'public/css/finalize.css': 'assets/styl/pages/finalize.styl' + 'public/css/error.css': 'assets/styl/pages/error.styl' jade: client: @@ -141,5 +142,5 @@ module.exports = (grunt) -> ] grunt.registerTask 'dev', [ - 'clean:public', 'clean:server', 'coffee:server', 'stylus:assets', 'watch' + 'clean:public', 'clean:server', 'coffee:server', 'stylus:assets', 'jade:client', 'coffee:client', 'watch' ] \ No newline at end of file diff --git a/app/controllers/AuthController.coffee b/app/controllers/AuthController.coffee index ea622b6..96b4fe9 100644 --- a/app/controllers/AuthController.coffee +++ b/app/controllers/AuthController.coffee @@ -49,6 +49,7 @@ module.exports = class AuthController extends Mmh.Controller , (err, user) -> if err then next err else + # known user if user req.logIn user, (err) -> if err then return next err @@ -57,28 +58,41 @@ module.exports = class AuthController extends Mmh.Controller else if req.xhr then res.redirect (if req.session.returnto? then req.session.returnto else '/user/me') else res.render 'success' + # new user else - switch auth.provider.name - when 'facebook' - avatarProvider = 'facebook' - avatarUrl = "https://graph.facebook.com/#{auth.provider.id}/picture?width=150&height=150" - else - avatarProvider = 'gravatar' - avatarUrl = gravatar.url auth.info.emails[0]?.value, s: '150', r: 'x', d: 'identicon' - - user = new User - name: auth.info.displayName - email: auth.info.emails[0]?.value - username: if auth.info.username? then auth.info.username else "" - 'avatar.url': avatarUrl - 'avatar.provider':avatarProvider - 'provider.name': auth.provider.name - 'provider.id': auth.provider.id - - user.save (err) -> + # validate if user with same email exists + User.count email: auth.info.emails[0]?.value, (err, count) -> if err then return next err - else - res.render 'finialize', user.toJSON() + if count > 0 then return next new Error "User with this email (#{auth.info.emails[0]?.value}) " + + "already registered with another oauth provider" + + # ok create new user + avatarProvider = 'gravatar' + avatarUrl = gravatar.url auth.info.emails[0]?.value, s: '150', r: 'x', d: 'identicon' + + switch auth.provider.name + when 'facebook' + avatarProvider = 'facebook' + avatarUrl = "https://graph.facebook.com/#{auth.provider.id}/picture?width=150&height=150" + when 'google' + if auth.info.picture + avatarProvider = 'google' + avatarUrl = "https://plus.google.com/s2/photos/profile/#{auth.provider.id}?sz=150" + + user = new User + name: auth.info.displayName + email: auth.info.emails[0]?.value + username: auth.info.username + birthday: auth.info.birthday + 'avatar.url': avatarUrl + 'avatar.provider':avatarProvider + 'provider.name': auth.provider.name + 'provider.id': auth.provider.id + + user.save (err) -> + if err then return next err + else + res.render 'finialize', user.toJSON() diff --git a/app/controllers/HomeController.coffee b/app/controllers/HomeController.coffee index 7c8e3f6..49b6870 100644 --- a/app/controllers/HomeController.coffee +++ b/app/controllers/HomeController.coffee @@ -4,5 +4,5 @@ Mmh = require('mmh') module.exports = class HomeController extends Mmh.Controller index: ( req, res ) -> - res.render 'home' + res.render 'index' diff --git a/assets/styl/animation.styl b/assets/styl/common/animation.styl similarity index 100% rename from assets/styl/animation.styl rename to assets/styl/common/animation.styl diff --git a/assets/styl/buttons.styl b/assets/styl/common/buttons.styl similarity index 100% rename from assets/styl/buttons.styl rename to assets/styl/common/buttons.styl diff --git a/assets/styl/forms.styl b/assets/styl/common/forms.styl similarity index 100% rename from assets/styl/forms.styl rename to assets/styl/common/forms.styl diff --git a/assets/styl/main.styl b/assets/styl/main.styl index 00cc78e..d66e09e 100644 --- a/assets/styl/main.styl +++ b/assets/styl/main.styl @@ -5,14 +5,14 @@ global-reset() @import "_variables" -@import "animation" -@import "horizontal-scroll" -@import "buttons" -@import "forms" +@import "common/animation" +@import "common/buttons" +@import "common/forms" -@import "header" -@import "content" -@import "footer" +@import "structure/header" +@import "structure/content" +@import "structure/footer" +@import "structure/horizontal-scroll" @import "tpl/login" @import "tpl/search" @@ -28,17 +28,20 @@ global-reset() height: 100% body - width: 100% + width: 90% + margin: 50px auto font: 1em "Helvetica Neue", Arial, sans-serif font-weight: 100 color: $text-color background-color: $background-color - //background: url("../img/background.jpg") center center no-repeat fixed - //background-size: cover overflow: hidden +@media (min-width: 500px) and (max-width: 750px) + body + width: 500px + a color: $link-color text-decoration: none diff --git a/assets/styl/pages/error.styl b/assets/styl/pages/error.styl new file mode 100644 index 0000000..87198a1 --- /dev/null +++ b/assets/styl/pages/error.styl @@ -0,0 +1,19 @@ +@import 'nib' + +body + background: linear-gradient(top, #ECCD35, #E45635); + +p.info + margin-bottom: 2em + +pre.stack + font: 70% "Consolas" + border: 0 + margin: 0 + padding: 0 + word-wrap: break-word + overflow: scroll + height: 60% + + &:empty + display: none \ No newline at end of file diff --git a/assets/styl/finalize.styl b/assets/styl/pages/finalize.styl similarity index 90% rename from assets/styl/finalize.styl rename to assets/styl/pages/finalize.styl index 65f465d..37f0be1 100644 --- a/assets/styl/finalize.styl +++ b/assets/styl/pages/finalize.styl @@ -1,11 +1,7 @@ - @import "nib" -@import "_variables" - body - margin: 50px auto - width: 500px + background: linear-gradient(top, lighten(#80B3FF, 80%), #80B3FF); p.info margin-bottom: 2em diff --git a/assets/styl/content.styl b/assets/styl/structure/content.styl similarity index 100% rename from assets/styl/content.styl rename to assets/styl/structure/content.styl diff --git a/assets/styl/footer.styl b/assets/styl/structure/footer.styl similarity index 96% rename from assets/styl/footer.styl rename to assets/styl/structure/footer.styl index 46004f2..dd84305 100644 --- a/assets/styl/footer.styl +++ b/assets/styl/structure/footer.styl @@ -3,7 +3,7 @@ footer font-weight: 100 z-index: 999 position: fixed - bottom: 0 + bottom: 50px left: 0 width: 100% diff --git a/assets/styl/header.styl b/assets/styl/structure/header.styl similarity index 100% rename from assets/styl/header.styl rename to assets/styl/structure/header.styl diff --git a/assets/styl/horizontal-scroll.styl b/assets/styl/structure/horizontal-scroll.styl similarity index 100% rename from assets/styl/horizontal-scroll.styl rename to assets/styl/structure/horizontal-scroll.styl diff --git a/config/extensions.coffee b/config/extensions.coffee index fef3e18..29466e5 100644 --- a/config/extensions.coffee +++ b/config/extensions.coffee @@ -3,4 +3,14 @@ module.exports = passport: enabled: yes model: 'User' - provider: ['amazon', 'google', 'facebook'] \ No newline at end of file + provider: ['amazon', 'google', 'facebook'] + + facebook: + scope: ['email', 'user_birthday'] + google: + scope: [ + 'https://www.googleapis.com/auth/userinfo.profile', + 'https://www.googleapis.com/auth/userinfo.email' + ] + amazon: + scope: ['profile'] \ No newline at end of file diff --git a/node_modules/mmh b/node_modules/mmh index 88d3849..3bbcfd1 160000 --- a/node_modules/mmh +++ b/node_modules/mmh @@ -1 +1 @@ -Subproject commit 88d3849b5d2bb6e53e384e352df7e56464a933fd +Subproject commit 3bbcfd1b1f84d17b9eef7e7e1745b29b0d8e737d diff --git a/package.json b/package.json index 06e1b65..03d98af 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "node-galerie", "private": true, - "version": "0.0.2", + "version": "0.0.3", "description": "a gallery written in node, nothing more.", "main": "server.js", "directories": { diff --git a/views/404.jade b/views/404.jade deleted file mode 100644 index 8b92627..0000000 --- a/views/404.jade +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content - h2 Ooops - p A #{error.code} error occured - pre #{error.message} \ No newline at end of file diff --git a/views/500.jade b/views/500.jade deleted file mode 100644 index 8b92627..0000000 --- a/views/500.jade +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content - h2 Ooops - p A #{error.code} error occured - pre #{error.message} \ No newline at end of file diff --git a/views/error.jade b/views/error.jade new file mode 100644 index 0000000..1a767af --- /dev/null +++ b/views/error.jade @@ -0,0 +1,10 @@ +extends layout/multi + +block css + link(rel='stylesheet', href='/css/error.css') + +block body + h1= name + p.info= message + + pre.stack= stack \ No newline at end of file diff --git a/views/finialize.jade b/views/finialize.jade index 7ff9ed7..e635c64 100644 --- a/views/finialize.jade +++ b/views/finialize.jade @@ -1,36 +1,31 @@ -!!!5 -html - - head - title node-galerie - link(rel='stylesheet', href='/css/main.css') - link(rel='stylesheet', href='/css/finalize.css') +extends layout/multi - script(type='text/javascript', src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js') +block css + link(rel='stylesheet', href='/css/finalize.css') - body - h1 Hi #{name} - p.info Du meldest dich zum ersten Mal über einen externen Anbieter an. Bitte ergänze die restlichen Felder. +block body + h1 Hi #{name} + p.info Du meldest dich zum ersten Mal über einen externen Anbieter an. Bitte ergänze die restlichen Felder. - div.image - img(src="#{avatar.url}") - p avatar provided by #{avatar.provider} + div.image + img(src="#{avatar.url}") + p avatar provided by #{avatar.provider} - form(action='/auth/finalize', method='post') - div.pair - input.fullwidth(readonly, name='name', value='#{name}') + form(action='/auth/finalize', method='post') + div.pair + input.fullwidth(readonly, name='name', value='#{name}') - div.pair - input.fullwidth(readonly, type='email', required, name='email', value='#{email}', placeholder='Email-Adresse') + div.pair + input.fullwidth(readonly, type='email', required, name='email', value='#{email}', placeholder='Email-Adresse') - div.pair.hint--right(data-hint="Nickname") - input.fullwidth(id="username", name='username', required, value='#{username}', placeholder='Nickname', class="#{missing_username ? 'missing' : ''}") + div.pair.hint--right(data-hint="Nickname") + input.fullwidth(id="username", name='username', required, value='#{username ? username : ''}', placeholder='Nickname', class="#{missing_username ? 'missing' : ''}") - div.pair.hint--right(data-hint="Geburtstag") - input.fullwidth(id="birthday", name='birthday', required, type='date', value='#{birthday}', placeholder='Geburtstag', class="#{missing_birthday ? 'missing' : ''}") + div.pair.hint--right(data-hint="Geburtstag") + input.fullwidth(id="birthday", name='birthday', required, type='date', value='#{birthday}', placeholder='Geburtstag', class="#{missing_birthday ? 'missing' : ''}") - div.pair - input(name='_id', type='hidden', value='#{_id}') - button Zugang anlegen + div.pair + input(name='_id', type='hidden', value='#{_id}') + button Zugang anlegen diff --git a/views/home/index.jade b/views/home/index.jade deleted file mode 100644 index e28e6c7..0000000 --- a/views/home/index.jade +++ /dev/null @@ -1,3 +0,0 @@ -extends ../layout - -block content \ No newline at end of file diff --git a/views/index.jade b/views/index.jade new file mode 100644 index 0000000..3cbab2e --- /dev/null +++ b/views/index.jade @@ -0,0 +1,3 @@ +extends layout/single + +block content \ No newline at end of file diff --git a/views/layout.jade b/views/layout.jade deleted file mode 100644 index 0aa3542..0000000 --- a/views/layout.jade +++ /dev/null @@ -1,17 +0,0 @@ -!!! 5 -html - - head - title node-galerie - link(rel='stylesheet', href='/css/main.css') - script(type='text/javascript', src='//cdnjs.cloudflare.com/ajax/libs/spin.js/1.2.7/spin.min.js') - if !needslogin - script(type='text/javascript', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.8/require.js', 'data-main'='/js/main') - - body - //header - include includes/header.jade - - #content - - footer \ No newline at end of file diff --git a/views/layout/multi.jade b/views/layout/multi.jade new file mode 100644 index 0000000..48a2d17 --- /dev/null +++ b/views/layout/multi.jade @@ -0,0 +1,15 @@ +!!!5 +html + + head + title node-galerie + link(rel='stylesheet', href='/css/main.css') + block css + + script(type='text/javascript', src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js') + block js + + body + block body + + diff --git a/views/layout/single.jade b/views/layout/single.jade new file mode 100644 index 0000000..7440534 --- /dev/null +++ b/views/layout/single.jade @@ -0,0 +1,16 @@ +!!! 5 +html + + head + title node-galerie + link(rel='stylesheet', href='/css/main.css') + block head + script(type='text/javascript', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.8/require.js', 'data-main'='/js/main') + + body + //header + include ../includes/header.jade + + #content + + footer \ No newline at end of file