فهرست منبع

Add @api pages.get

Sotaro KARASAWA 10 سال پیش
والد
کامیت
b5f52fdd9f
4فایلهای تغییر یافته به همراه67 افزوده شده و 3 حذف شده
  1. 14 0
      lib/models/user.js
  2. 5 3
      lib/routes/index.js
  3. 29 0
      lib/routes/page.js
  4. 19 0
      lib/util/middlewares.js

+ 14 - 0
lib/models/user.js

@@ -290,6 +290,20 @@ module.exports = function(crowi) {
     });
   };
 
+  userSchema.statics.findUserByApiToken = function(apiToken) {
+    var self = this;
+
+    return new Promise(function(resolve, reject) {
+      self.findOne({apiToken: apiToken}, function (err, userData) {
+        if (err) {
+          return reject(err);
+        } else {
+          return resolve(userData);
+        }
+      });
+    });
+  };
+
   userSchema.statics.findUserByFacebookId = function(fbId, callback) {
     this.findOne({userId: fbId}, function (err, userData) {
       callback(err, userData);

+ 5 - 3
lib/routes/index.js

@@ -10,6 +10,7 @@ module.exports = function(crowi, app) {
     , user      = require('./user')(crowi, app)
     , attachment= require('./attachment')(crowi, app)
     , loginRequired = middleware.loginRequired
+    , accessTokenParser = middleware.accessTokenParser
     ;
 
   app.get('/'                        , loginRequired(crowi, app) , page.pageListShow);
@@ -38,8 +39,7 @@ module.exports = function(crowi, app) {
   app.post('/_api/admin/settings/mail'  , loginRequired(crowi, app) , middleware.adminRequired() , form.admin.mail, admin.api.appSetting);
   app.post('/_api/admin/settings/aws'   , loginRequired(crowi, app) , middleware.adminRequired() , form.admin.aws, admin.api.appSetting);
   app.post('/_api/admin/settings/google', loginRequired(crowi, app) , middleware.adminRequired() , form.admin.google, admin.api.appSetting);
-  app.post('/_api/admin/settings/fb'    , loginRequired(crowi, app) , middleware.adminRequired() , form.admin.fb
-  , admin.api.appSetting);
+  app.post('/_api/admin/settings/fb'    , loginRequired(crowi, app) , middleware.adminRequired() , form.admin.fb , admin.api.appSetting);
 
   app.get('/admin/users'                , loginRequired(crowi, app) , middleware.adminRequired() , admin.user.index);
   app.post('/admin/user/invite'         , form.admin.userInvite ,  loginRequired(crowi, app) , middleware.adminRequired() , admin.user.invite);
@@ -74,7 +74,9 @@ module.exports = function(crowi, app) {
   app.post('/_api/page/:id/unlike'    , loginRequired(crowi, app) , page.api.unlike);
   app.get( '/_api/page/:id/bookmark'  , loginRequired(crowi, app) , page.api.isBookmarked);
   app.post('/_api/page/:id/bookmark'  , loginRequired(crowi, app) , page.api.bookmark);
-  //app.get('/_api/page/*'           , user.useUserData()         , page.api.get);
+
+  // HTTP RPC Styled API (に徐々に移行していいこうと思う)
+  app.get('/_api/pages.get'           , accessTokenParser(crowi, app) , loginRequired(crowi, app) , page.api.get);
   //app.get('/_api/revision/:id'     , user.useUserData()         , revision.api.get);
   //app.get('/_api/r/:revisionId'    , user.useUserData()         , page.api.get);
 

+ 29 - 0
lib/routes/page.js

@@ -204,6 +204,35 @@ module.exports = function(crowi, app) {
     });
   };
 
+  /**
+   * @api pages.get
+   * @param page /page/path
+   * @param page_id XXXXX
+   */
+  api.get = function(req, res){
+    var pagePath = req.query.page;
+    var revision = req.query.revision;
+    var options = {};
+
+    Page.findPage(pagePath, req.user, revision, options, function(err, pageData) {
+      var result = {};
+      if (err) {
+        result = {
+          ok: false,
+          message: err.toString()
+        };
+      }
+      if (pageData) {
+        result = {
+          ok: true,
+          page: pageData
+        };
+      }
+
+      return res.json(result);
+    });
+  };
+
   /**
    * page bookmark
    */

+ 19 - 0
lib/util/middlewares.js

@@ -104,6 +104,25 @@ exports.loginRequired = function(crowi, app) {
   };
 };
 
+exports.accessTokenParser = function(crowi, app) {
+  return function(req, res, next) {
+    var accessToken = req.query.access_token;
+    if (!accessToken) {
+      return next();
+    }
+
+    var User = crowi.model('User')
+
+    User.findUserByApiToken(accessToken)
+    .then(function(userData) {
+      req.user = userData;
+      next();
+    }).catch(function(err) {
+      next();
+    });
+  };
+};
+
 // this is for Installer
 exports.applicationNotInstalled = function() {
   return function(req, res, next) {