Просмотр исходного кода

User status にしたがってエラー画面に飛ばすように

Sotaro KARASAWA 11 лет назад
Родитель
Сommit
79c7af4fa1
4 измененных файлов с 100 добавлено и 36 удалено
  1. 7 4
      lib/middlewares.js
  2. 33 32
      routes/index.js
  3. 17 0
      routes/login.js
  4. 43 0
      views/login/error.html

+ 7 - 4
lib/middlewares.js

@@ -79,12 +79,15 @@ exports.adminRequired = function() {
   };
   };
 };
 };
 
 
-exports.loginRequired = function() {
+exports.loginRequired = function(app) {
   return function(req, res, next) {
   return function(req, res, next) {
+    var models = app.set('models');
+
     if (req.user && '_id' in req.user) {
     if (req.user && '_id' in req.user) {
-      // TODO 移行おわったら削除
-      if (req.user.email && !req.user.password && req.route.path != '/me/password') {
-        return res.redirect('/me/password');
+      if (req.user.status === models.User.STATUS_REGISTERED) {
+        return res.redirect('/login/error/registered');
+      } else if (req.user.status === models.User.STATUS_SUSPENDED) {
+        return res.redirect('/login/error/suspended');
       }
       }
 
 
       return next();
       return next();

+ 33 - 32
routes/index.js

@@ -9,12 +9,13 @@ module.exports = function(app) {
     , installer = require('./installer')(app)
     , installer = require('./installer')(app)
     , user      = require('./user')(app);
     , user      = require('./user')(app);
 
 
-  app.get('/'                        , middleware.loginRequired() , page.pageListShow);
+  app.get('/'                        , middleware.loginRequired(app) , page.pageListShow);
 
 
   app.get('/installer'               , middleware.applicationNotInstalled() , installer.index);
   app.get('/installer'               , middleware.applicationNotInstalled() , installer.index);
   app.post('/installer/createAdmin'  , middleware.applicationNotInstalled() , form.register , installer.createAdmin);
   app.post('/installer/createAdmin'  , middleware.applicationNotInstalled() , form.register , installer.createAdmin);
   //app.post('/installer/user'         , middleware.applicationNotInstalled() , installer.createFirstUser);
   //app.post('/installer/user'         , middleware.applicationNotInstalled() , installer.createFirstUser);
 
 
+  app.get('/login/error/:reason'     , login.error);
   app.get('/login'                   , middleware.applicationInstalled()    , login.login);
   app.get('/login'                   , middleware.applicationInstalled()    , login.login);
   app.post('/login'                  , form.login                           , login.login);
   app.post('/login'                  , form.login                           , login.login);
   app.post('/register'               , form.register                        , login.register);
   app.post('/register'               , form.register                        , login.register);
@@ -25,45 +26,45 @@ module.exports = function(app) {
   app.get('/login/facebook'          , login.loginFacebook);
   app.get('/login/facebook'          , login.loginFacebook);
   app.get('/logout'                  , logout.logout);
   app.get('/logout'                  , logout.logout);
 
 
-  app.get('/admin'                      , middleware.loginRequired() , middleware.adminRequired() , admin.index);
-  app.get('/admin/app'                  , middleware.loginRequired() , middleware.adminRequired() , admin.app.index);
-  app.post('/_api/admin/settings/app'   , middleware.loginRequired() , middleware.adminRequired() , form.admin.app, admin.api.appSetting);
-  app.post('/_api/admin/settings/sec'   , middleware.loginRequired() , middleware.adminRequired() , form.admin.sec, admin.api.appSetting);
-  app.post('/_api/admin/settings/aws'   , middleware.loginRequired() , middleware.adminRequired() , form.admin.aws, admin.api.appSetting);
-  app.post('/_api/admin/settings/google', middleware.loginRequired() , middleware.adminRequired() , form.admin.google, admin.api.appSetting);
-  app.post('/_api/admin/settings/fb'    , middleware.loginRequired() , middleware.adminRequired() , form.admin.fb
+  app.get('/admin'                      , middleware.loginRequired(app) , middleware.adminRequired() , admin.index);
+  app.get('/admin/app'                  , middleware.loginRequired(app) , middleware.adminRequired() , admin.app.index);
+  app.post('/_api/admin/settings/app'   , middleware.loginRequired(app) , middleware.adminRequired() , form.admin.app, admin.api.appSetting);
+  app.post('/_api/admin/settings/sec'   , middleware.loginRequired(app) , middleware.adminRequired() , form.admin.sec, admin.api.appSetting);
+  app.post('/_api/admin/settings/aws'   , middleware.loginRequired(app) , middleware.adminRequired() , form.admin.aws, admin.api.appSetting);
+  app.post('/_api/admin/settings/google', middleware.loginRequired(app) , middleware.adminRequired() , form.admin.google, admin.api.appSetting);
+  app.post('/_api/admin/settings/fb'    , middleware.loginRequired(app) , middleware.adminRequired() , form.admin.fb
   , admin.api.appSetting);
   , admin.api.appSetting);
 
 
-  app.get('/admin/users'                , middleware.loginRequired() , middleware.adminRequired() , admin.user.index);
-  app.post('/admin/user/:id/makeAdmin'  , middleware.loginRequired() , middleware.adminRequired() , admin.user.makeAdmin);
-  app.post('/admin/user/:id/removeFromAdmin', middleware.loginRequired() , middleware.adminRequired() , admin.user.removeFromAdmin);
-  app.post('/admin/user/:id/activate'   , middleware.loginRequired() , middleware.adminRequired() , admin.user.activate);
-  app.post('/admin/user/:id/suspend'    , middleware.loginRequired() , middleware.adminRequired() , admin.user.suspend);
+  app.get('/admin/users'                , middleware.loginRequired(app) , middleware.adminRequired() , admin.user.index);
+  app.post('/admin/user/:id/makeAdmin'  , middleware.loginRequired(app) , middleware.adminRequired() , admin.user.makeAdmin);
+  app.post('/admin/user/:id/removeFromAdmin', middleware.loginRequired(app) , middleware.adminRequired() , admin.user.removeFromAdmin);
+  app.post('/admin/user/:id/activate'   , middleware.loginRequired(app) , middleware.adminRequired() , admin.user.activate);
+  app.post('/admin/user/:id/suspend'    , middleware.loginRequired(app) , middleware.adminRequired() , admin.user.suspend);
 
 
-  app.get('/me'                      , middleware.loginRequired() , me.index);
-  app.get('/me/password'             , middleware.loginRequired() , me.password);
-  app.post('/me'                     , form.me.user               , middleware.loginRequired() , me.index);
-  app.post('/me/password'            , form.me.password           , middleware.loginRequired() , me.password);
-  app.post('/me/picture/delete'      , middleware.loginRequired() , me.deletePicture);
-  app.post('/me/auth/facebook'       , middleware.loginRequired() , me.authFacebook);
-  app.post('/me/auth/google'         , middleware.loginRequired() , me.authGoogle);
-  app.get('/me/auth/google/callback' , middleware.loginRequired() , me.authGoogleCallback);
+  app.get('/me'                      , middleware.loginRequired(app) , me.index);
+  app.get('/me/password'             , middleware.loginRequired(app) , me.password);
+  app.post('/me'                     , form.me.user               , middleware.loginRequired(app) , me.index);
+  app.post('/me/password'            , form.me.password           , middleware.loginRequired(app) , me.password);
+  app.post('/me/picture/delete'      , middleware.loginRequired(app) , me.deletePicture);
+  app.post('/me/auth/facebook'       , middleware.loginRequired(app) , me.authFacebook);
+  app.post('/me/auth/google'         , middleware.loginRequired(app) , me.authGoogle);
+  app.get('/me/auth/google/callback' , middleware.loginRequired(app) , me.authGoogleCallback);
 
 
-  app.get('/_r/:id'                  , middleware.loginRequired() , page.api.redirector);
+  app.get('/_r/:id'                  , middleware.loginRequired(app) , page.api.redirector);
   app.get('/_api/check_username'     , user.api.checkUsername);
   app.get('/_api/check_username'     , user.api.checkUsername);
-  app.post('/_api/me/picture/upload' , middleware.loginRequired() , me.api.uploadPicture);
-  app.get('/_api/user/bookmarks'     , middleware.loginRequired() , user.api.bookmarks);
-  app.post('/_api/page_rename/*'     , middleware.loginRequired() , page.api.rename);
-  app.post('/_api/page/:id/like'     , middleware.loginRequired() , page.api.like);
-  app.post('/_api/page/:id/unlike'   , middleware.loginRequired() , page.api.unlike);
-  app.get('/_api/page/:id/bookmark'  , middleware.loginRequired() , page.api.isBookmarked);
-  app.post('/_api/page/:id/bookmark' , middleware.loginRequired() , page.api.bookmark);
+  app.post('/_api/me/picture/upload' , middleware.loginRequired(app) , me.api.uploadPicture);
+  app.get('/_api/user/bookmarks'     , middleware.loginRequired(app) , user.api.bookmarks);
+  app.post('/_api/page_rename/*'     , middleware.loginRequired(app) , page.api.rename);
+  app.post('/_api/page/:id/like'     , middleware.loginRequired(app) , page.api.like);
+  app.post('/_api/page/:id/unlike'   , middleware.loginRequired(app) , page.api.unlike);
+  app.get('/_api/page/:id/bookmark'  , middleware.loginRequired(app) , page.api.isBookmarked);
+  app.post('/_api/page/:id/bookmark' , middleware.loginRequired(app) , page.api.bookmark);
   //app.get('/_api/page/*'           , user.useUserData()         , page.api.get);
   //app.get('/_api/page/*'           , user.useUserData()         , page.api.get);
   //app.get('/_api/revision/:id'     , user.useUserData()         , revision.api.get);
   //app.get('/_api/revision/:id'     , user.useUserData()         , revision.api.get);
   //app.get('/_api/r/:revisionId'    , user.useUserData()         , page.api.get);
   //app.get('/_api/r/:revisionId'    , user.useUserData()         , page.api.get);
 
 
-  app.post('/*/edit'                 , form.revision              , middleware.loginRequired() , page.pageEdit);
-  app.get('/*/$'                     , middleware.loginRequired() , page.pageListShow);
-  app.get('/*'                       , middleware.loginRequired() , page.pageShow);
+  app.post('/*/edit'                 , form.revision              , middleware.loginRequired(app) , page.pageEdit);
+  app.get('/*/$'                     , middleware.loginRequired(app) , page.pageListShow);
+  app.get('/*'                       , middleware.loginRequired(app) , page.pageShow);
   //app.get('/*/edit'                , routes.edit);
   //app.get('/*/edit'                , routes.edit);
 };
 };

+ 17 - 0
routes/login.js

@@ -38,6 +38,23 @@ module.exports = function(app) {
     return res.redirect(nextAction);
     return res.redirect(nextAction);
   };
   };
 
 
+  actions.error = function(req, res) {
+    var reason = req.params.reason
+      , reasonMessage = ''
+      ;
+
+    if (reason === 'suspended') {
+      reasonMessage = 'このアカウントは停止されています。';
+    } else if (reason === 'registered') {
+      reasonMessage = '管理者の承認をお待ちください。';
+    } else {
+    }
+
+    return res.render('login/error', {
+      reasonMessage: reasonMessage
+    });
+  };
+
   actions.login = function(req, res) {
   actions.login = function(req, res) {
     var loginForm = req.body.loginForm;
     var loginForm = req.body.loginForm;
 
 

+ 43 - 0
views/login/error.html

@@ -0,0 +1,43 @@
+{% extends '../layout/single-nologin.html' %}
+
+{% block html_title %}Error · {% endblock %}
+
+{% block content_main %}
+
+<h1 class="login-page">
+  {% if config.crowi['app:title'] == 'Crowi' %}
+    <img src="/logo/135x32.png" alt="Crowi">
+  {% else %}
+    {{ config.crowi['app:title'] }}<br>
+    <img src="/logo/100x11_w.png" alt="powered by Crowi">
+  {% endif %}
+</h1>
+
+<div class="login-dialog-container flip-container col-md-5">
+
+<div class="login-dialog" id="login-dialog">
+
+  <div class="login-dialog-inner front">
+    <h2>ログインエラー</h2>
+
+    <p class="text-center">
+      <i class="fa fa-meh-o fa-3x"></i>
+    </p>
+
+    <hr>
+
+    {% if reasonMessage != '' %}
+    <div class="alert alert-danger text-center">
+      {{ reasonMessage }}
+    </div>
+    {% endif %}
+
+
+  </div>
+
+</div>
+
+</div>
+
+{% endblock %}
+