[guadec-web-regcfp/develop] Rework user reg system



commit 28873c0a6c05334c1f361944c97852dc157ce6a7
Author: Patrick Uiterwijk <puiterwijk redhat com>
Date:   Thu May 21 14:31:49 2015 +0200

    Rework user reg system

 routes/auth.js          |   37 +++++++++++++++++++++++++++++++++++++
 routes/papers.js        |   21 +++++++++++++++++++--
 utils.js                |   23 +++++++++++++++++++++++
 views/auth/register.hbs |    7 +++++++
 views/index/index.hbs   |    3 +++
 views/papers/submit.hbs |    4 ----
 views/papers/vote.hbs   |   15 +++++++++++++++
 7 files changed, 104 insertions(+), 6 deletions(-)
---
diff --git a/routes/auth.js b/routes/auth.js
index b575b3b..40f76d1 100644
--- a/routes/auth.js
+++ b/routes/auth.js
@@ -3,6 +3,9 @@ var router = express.Router();
 
 var browserid = require('browserid-verify')();
 
+var models = require('../models');
+var User = models.User;
+
 var env       = process.env.NODE_ENV || "development";
 var persona_audience    = require(__dirname + '/../config/config.json')[env]['persona_audience'];
 if(!!process.env.OPENSHIFT_APP_NAME)
@@ -58,4 +61,38 @@ router.post('/logout', function(req, res, next) {
   res.send('Logged out');
 });
 
+router.get('/register', function(req, res, next) {
+  res.render('auth/register', { origin: req.query.origin });
+});
+router.post('/register', function(req, res, next) {
+  var fullname = req.body.fullname.trim();
+  var origin = req.body.origin;
+  if(origin == null || origin[0] != '/') {
+    origin = '/';
+  };
+
+  User.find({
+    where: {
+      email: req.session.currentUser
+    }
+  })
+  .complete(function(err, user) {
+    if(!!err) {
+      res.status(500).send('Error retrieving user object');
+    } else if(!user) {
+      // Create the user
+      var user = User.create({
+        email: req.session.currentUser,
+        name: fullname
+      }).complete(function(err, user) {
+        res.redirect(origin);
+      });
+    } else {
+      // The user already existed...
+      res.redirect(302, '/');
+    }
+  });
+
+});
+
 module.exports = router;
diff --git a/routes/papers.js b/routes/papers.js
index 19b0a4e..a00e8e5 100644
--- a/routes/papers.js
+++ b/routes/papers.js
@@ -6,7 +6,9 @@ var utils = require('../utils');
 var models = require('../models');
 var User = models.User;
 var Paper = models.Paper;
+var PaperVote = models.PaperVote;
 
+router.all('/submit', utils.require_user);
 router.all('/submit', utils.require_permission('papers/submit'));
 router.get('/submit', function(req, res, next) {
   User
@@ -81,7 +83,7 @@ router.post('/submit', function(req, res, next) {
           res.status(500).send('Error retrieving user object');
         } else if(!user) {
             // Create new user
-            var submitter_name = req.body.submitter_name;
+            var submitter_name = req.body.submitter_name.trim();
             
             var user = User.create({
               email: req.session.currentUser,
@@ -96,6 +98,7 @@ router.post('/submit', function(req, res, next) {
     });
 });
 
+router.all('/list/own', utils.require_user);
 router.all('/list/own', utils.require_permission('papers/list/own'));
 router.get('/list/own', function(req, res, next) {
   User
@@ -133,14 +136,28 @@ router.get('/list', function(req, res, next) {
     });
 });
 
+router.all('/admin/list', utils.require_user);
 router.all('/admin/list', utils.require_permission('papers/list/all'));
 router.get('/admin/list', function(req, res, next) {
-  Paper.findAll({include: [User]})
+  Paper.findAll({include: [User, PaperVote]})
     .complete(function(err, papers) {
       res.render('papers/list', { description: 'All',
                                   showAuthors: true,
+                                  showVotes: true,
                                   papers: papers });
     });
 });
 
+router.all('/admin/vote', utils.require_user);
+router.all('/admin/vote', utils.require_permission('papers/vote'));
+router.get('/admin/vote', function(req, res, next) {
+  Paper.findAll({include: [User, PaperVote]})
+    .complete(function(err, papers) {
+      res.render('papers/vote', { papers: papers});
+    });
+});
+
+router.post('/admin/vote', function(req, res, next) {
+});
+
 module.exports = router;
diff --git a/utils.js b/utils.js
index e8949ad..5699eea 100644
--- a/utils.js
+++ b/utils.js
@@ -3,6 +3,9 @@ var utils = {}
 var env = process.env.NODE_ENV || "development";
 var config = require(__dirname + '/config/config.json')[env];
 
+var models = require('./models');
+var User = models.User;
+
 function get_permission_checker(permission) {
   var required = permission.split('/');
   var allowed = config.permissions;
@@ -58,4 +61,24 @@ utils.require_permission = function(permission) {
   };
 };
 
+utils.require_user = function(req, res, next) {
+  User.find({
+    where: {
+      email: req.session.currentUser
+    }
+  })
+  .complete(function(err, user) {
+    if(!!err) {
+      res.status(500).send('Error retrieving user object');
+    } else if(!user) {
+      // Redirect to register
+      res.redirect(302, '/auth/register?origin=' + req.originalUrl);
+    } else {
+      req.user = user;
+      res.locals.user = user;
+      next();
+    }
+  });
+};
+
 module.exports = utils;
diff --git a/views/auth/register.hbs b/views/auth/register.hbs
new file mode 100644
index 0000000..3f52f03
--- /dev/null
+++ b/views/auth/register.hbs
@@ -0,0 +1,7 @@
+You tried to visit a page that requires you to provide some additional information.
+
+<form action="/auth/register" method="POST">
+<input type="hidden" name="origin" value="{{ origin }}">
+Please enter your full name: <input type="text" name="fullname"><br />
+<input type="submit" value="Register">
+</form>
diff --git a/views/index/index.hbs b/views/index/index.hbs
index ece8dc4..7247e46 100644
--- a/views/index/index.hbs
+++ b/views/index/index.hbs
@@ -41,6 +41,9 @@ Hello, please login, or choose an option below.
 {{#has_permission "papers/list/all"}}
 <div class="button"><a href="/papers/admin/list">View all talks</a></div>
 {{/has_permission}}
+{{#has_permission "papers/vote"}}
+<div class="button"><a href="/papers/admin/vote">Vote on talks</a></div>
+{{/has_permission}}
 </div>
 
 <h3>Registration</h3>
diff --git a/views/papers/submit.hbs b/views/papers/submit.hbs
index 5d1538f..fad79fd 100644
--- a/views/papers/submit.hbs
+++ b/views/papers/submit.hbs
@@ -5,11 +5,7 @@
 <form action="/papers/submit" method="post">
 <table class="submission-form">
 <tr><td>Submitter:</td><td><input type="text" value="{{session.currentUser}}" disabled /></td></tr>
-{{#if submitter_name_found}}
 <tr><td>Your name:</td><td><input type="text" name="submitter_name" value="{{submitter_name}}" disabled 
/></td></tr>
-{{else}}
-<tr><td>Your name</td><td><input type="text" name="submitter_name" value="{{submitter_name}}" /></td></tr>
-{{/if}}
 <tr><td>Paper title:</td><td><input type="text" name="paper_title" value="{{paper_title}}" maxlength=50 
/></td></tr>
 
 <tr><td>Paper summary:</td>
diff --git a/views/papers/vote.hbs b/views/papers/vote.hbs
new file mode 100644
index 0000000..65e27f3
--- /dev/null
+++ b/views/papers/vote.hbs
@@ -0,0 +1,15 @@
+{{description}} submitted papers:<br /><br />
+
+You: "{{user}}"
+
+{{#each papers}}
+    <b>{{ this.title }}</b>
+    {{#if ../showAuthors}}
+      ({{ this.User.name }} &lt;{{ this.User.email }}&gt;)
+    {{/if}}
+    - 
+    {{ breaklines this.summary }}
+
+    <br />
+    <br />
+{{/each}}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]