WESEEK Kaito 6 лет назад
Родитель
Сommit
9acf0c6289

+ 1 - 0
src/client/js/components/Admin/Users/ManageExternalAccount.jsx

@@ -4,6 +4,7 @@ import { withTranslation } from 'react-i18next';
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import AppContainer from '../../../services/AppContainer';
+import AdminExternalAccountsContainer from '../../../services/AdminExternalAccountsContainer';
 
 
 class ManageExternalAccount extends React.Component {

+ 26 - 0
src/client/js/services/AdminExternalAccountsContainer.js

@@ -19,6 +19,9 @@ export default class AdminExternalAccountContainer extends Container {
 
     this.state = {
       exteranalAccounts: JSON.parse(document.getElementById('admin-external-account-setting').getAttribute('external-account')) || [],
+      totalAccounts: 0,
+      activePage: 1,
+      pagingLimit: Infinity,
     };
 
   }
@@ -30,6 +33,29 @@ export default class AdminExternalAccountContainer extends Container {
     return 'AdminExternalAccountsContainer';
   }
 
+  /**
+   * syncExternalAccounts of selectedPage
+   * @memberOf AdminExternalAccountsContainer
+   * @param {number} selectedPage
+   */
+  async retrieveUsersByPagingNum(selectedPage) {
+
+    const params = { page: selectedPage };
+    const response = await this.appContainer.apiv3.get('/users/external-accounts', params);
+
+    const users = response.data.exteranalAccounts;
+    const totalUsers = response.data.totalAccounts;
+    const pagingLimit = response.data.pagingLimit;
+
+    this.setState({
+      users,
+      totalUsers,
+      pagingLimit,
+      activePage: selectedPage,
+    });
+
+  }
+
   /**
    * remove external account
    *

+ 0 - 75
src/server/routes/apiv3/external-account.js

@@ -1,75 +0,0 @@
-const loggerFactory = require('@alias/logger');
-
-const logger = loggerFactory('growi:routes:apiv3:external-account');
-
-const express = require('express');
-
-const router = express.Router();
-
-const { param } = require('express-validator/check');
-
-
-const validator = {};
-
-/**
- * @swagger
- *  tags:
- *    name: ExtenralAccount
- */
-
-
-module.exports = (crowi) => {
-  const loginRequiredStrictly = require('../../middleware/login-required')(crowi);
-  const adminRequired = require('../../middleware/admin-required')(crowi);
-  const csrf = require('../../middleware/csrf')(crowi);
-
-  const { ErrorV3, ExternalAccount } = crowi.models;
-
-  validator.delete = [
-    param('id').trim().exists({ checkFalsy: true }),
-  ];
-  const { ApiV3FormValidator } = crowi.middlewares;
-
-  /**
-   * @swagger
-   *
-   *  paths:
-   *    /_api/v3/users/external-accounts/{id}/remove:
-   *      delete:
-   *        tags: [ExternalAccount]
-   *        description: Delete ExternalAccount
-   *        parameters:
-   *          - name: id
-   *            in: path
-   *            required: true
-   *            description: id of userGroup
-   *            schema:
-   *              type: string
-   *        responses:
-   *          200:
-   *            description:  External Account is removed
-   *            content:
-   *              application/json:
-   *                schema:
-   *                  properties:
-   *                    externalAccount:
-   *                      type: object
-   *                      description: A result of `ExtenralAccount.findByIdAndRemove`
-   */
-  router.delete('/:id/remove', loginRequiredStrictly, adminRequired, csrf, validator.delete, ApiV3FormValidator, async(req, res) => {
-    const { id: deleteExtenralAccountId } = req.params;
-
-    try {
-      const externalAccount = await ExternalAccount.findByIdAndRemove(deleteExtenralAccountId);
-
-      return res.apiv3({ externalAccount });
-    }
-    catch (err) {
-      const msg = 'Error occurred in deleting a external account';
-      logger.error(msg, err);
-      return res.apiv3Err(new ErrorV3(msg, 'extenral-account-delete-failed'));
-    }
-  });
-
-
-};

+ 0 - 2
src/server/routes/apiv3/index.js

@@ -21,8 +21,6 @@ module.exports = (crowi) => {
 
   router.use('/user-group-relations', require('./user-group-relation')(crowi));
 
-  router.use('/external-accounts', require('./external-account')(crowi));
-
   router.use('/mongo', require('./mongo')(crowi));
 
   router.use('/export', require('./export')(crowi));

+ 75 - 0
src/server/routes/apiv3/users.js

@@ -326,5 +326,80 @@ module.exports = (crowi) => {
     }
   });
 
+  /**
+   * @swagger
+   *
+   *  paths:
+   *    /_api/v3/users:
+   *      get:
+   *        tags: [Users]
+   *        description: Get external-account
+   *        responses:
+   *          200:
+   *            description: external-account are fetched
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  properties:
+   *                    external-account:
+   *                      type: object
+   *                      description: a result of `ExternalAccount.find`
+   */
+  router.get('/external-accounts/', loginRequiredStrictly, adminRequired, async(req, res) => {
+    try {
+      const page = parseInt(req.query.page) || 1;
+      const result = await ExternalAccount.findUsersWithPagination({ page });
+      const { docs: extenralAccounts, total: totalAccounts, limit: pagingLimit } = result;
+      return res.apiv3({ extenralAccounts, totalAccounts, pagingLimit });
+    }
+    catch (err) {
+      const msg = 'Error occurred in fetching user group list';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'external-account-list-fetch-failed'));
+    }
+  });
+
+
+  /**
+   * @swagger
+   *
+   *  paths:
+   *    /_api/v3/users/external-accounts/{id}/remove:
+   *      delete:
+   *        tags: [Users]
+   *        description: Delete ExternalAccount
+   *        parameters:
+   *          - name: id
+   *            in: path
+   *            required: true
+   *            description: id of userGroup
+   *            schema:
+   *              type: string
+   *        responses:
+   *          200:
+   *            description:  External Account is removed
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  properties:
+   *                    externalAccount:
+   *                      type: object
+   *                      description: A result of `ExtenralAccount.findByIdAndRemove`
+   */
+
+  router.delete('/:id/remove', loginRequiredStrictly, adminRequired, csrf, validator.delete, ApiV3FormValidator, async(req, res) => {
+    const { id: deleteExtenralAccountId } = req.params;
+
+    try {
+      const externalAccount = await ExternalAccount.findByIdAndRemove(deleteExtenralAccountId);
+
+      return res.apiv3({ externalAccount });
+    }
+    catch (err) {
+      const msg = 'Error occurred in deleting a external account';
+      logger.error(msg, err);
+      return res.apiv3Err(new ErrorV3(msg, 'extenral-account-delete-failed'));
+    }
+  });
   return router;
 };

+ 1 - 1
src/server/views/admin/external-accounts.html

@@ -39,7 +39,7 @@
     </div>
 
     <!-- TODO reactify admin -->
-    <div class="col-md-9">
+    <div class="col-md-9" id="admin-external-account-setting">
       <p>
         <a class="btn btn-default" href="/admin/users">
           <i class="icon-fw ti-arrow-left" aria-hidden="true"></i>