Browse Source

Reenable the export feature

Fixes #1055
Johannes Zellner 8 years ago
parent
commit
3d45c9610f
2 changed files with 33 additions and 33 deletions
  1. 11 11
      client/components/boards/boardHeader.js
  2. 22 22
      models/export.js

+ 11 - 11
client/components/boards/boardHeader.js

@@ -15,17 +15,17 @@ Template.boardMenuPopup.events({
   }),
 });
 
-// Template.boardMenuPopup.helpers({
-//  exportUrl() {
-//    const boardId = Session.get('currentBoard');
-//    const loginToken = Accounts._storedLoginToken();
-//    return FlowRouter.url(`api/boards/${boardId}?authToken=${loginToken}`);
-//  },
-//  exportFilename() {
-//    const boardId = Session.get('currentBoard');
-//    return `wekan-export-board-${boardId}.json`;
-//  },
-// });
+Template.boardMenuPopup.helpers({
+  exportUrl() {
+    const boardId = Session.get('currentBoard');
+    const loginToken = Accounts._storedLoginToken();
+    return FlowRouter.url(`api/boards/${boardId}/export?authToken=${loginToken}`);
+  },
+  exportFilename() {
+    const boardId = Session.get('currentBoard');
+    return `wekan-export-board-${boardId}.json`;
+  },
+});
 
 Template.boardChangeTitlePopup.events({
   submit(evt, tpl) {

+ 22 - 22
models/export.js

@@ -9,33 +9,33 @@ if (Meteor.isServer) {
   /*
    * This route is used to export the board FROM THE APPLICATION.
    * If user is already logged-in, pass loginToken as param "authToken":
-   * '/api/boards/:boardId?authToken=:token'
+   * '/api/boards/:boardId/export?authToken=:token'
    *
    * See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
    * for detailed explanations
    */
-  // JsonRoutes.add('get', '/api/boards/:boardId', function (req, res) {
-  //   const boardId = req.params.boardId;
-  //   let user = null;
-  //   // todo XXX for real API, first look for token in Authentication: header
-  //   // then fallback to parameter
-  //   const loginToken = req.query.authToken;
-  //   if (loginToken) {
-  //     const hashToken = Accounts._hashLoginToken(loginToken);
-  //     user = Meteor.users.findOne({
-  //       'services.resume.loginTokens.hashedToken': hashToken,
-  //     });
-  //   }
+  JsonRoutes.add('get', '/api/boards/:boardId/export', function (req, res) {
+    const boardId = req.params.boardId;
+    let user = null;
+    // todo XXX for real API, first look for token in Authentication: header
+    // then fallback to parameter
+    const loginToken = req.query.authToken;
+    if (loginToken) {
+      const hashToken = Accounts._hashLoginToken(loginToken);
+      user = Meteor.users.findOne({
+        'services.resume.loginTokens.hashedToken': hashToken,
+      });
+    }
 
-  //   const exporter = new Exporter(boardId);
-  //   if(exporter.canExport(user)) {
-  //     JsonRoutes.sendResult(res, 200, exporter.build());
-  //   } else {
-  //     // we could send an explicit error message, but on the other hand the only
-  //     // way to get there is by hacking the UI so let's keep it raw.
-  //     JsonRoutes.sendResult(res, 403);
-  //   }
-  // });
+    const exporter = new Exporter(boardId);
+    if(exporter.canExport(user)) {
+      JsonRoutes.sendResult(res, { code: 200, data: exporter.build() });
+    } else {
+      // we could send an explicit error message, but on the other hand the only
+      // way to get there is by hacking the UI so let's keep it raw.
+      JsonRoutes.sendResult(res, 403);
+    }
+  });
 }
 
 class Exporter {