itizawa 6 лет назад
Родитель
Сommit
9170fc85a8

+ 2 - 1
src/client/js/components/Me/DisassociateModal.jsx

@@ -20,9 +20,10 @@ class DisassociateModal extends React.Component {
 
   async onClickDisassociateBtn() {
     const { t, personalContainer } = this.props;
+    const { providerType, accountId } = this.props.accountForDisassociate;
 
     try {
-      await personalContainer.disassociateLdapAccount();
+      await personalContainer.disassociateLdapAccount({ providerType, accountId });
       this.props.onClose();
       toastSuccess(t('security_setting.updated_general_security_setting'));
     }

+ 3 - 3
src/client/js/services/PersonalContainer.js

@@ -222,7 +222,7 @@ export default class PersonalContainer extends Container {
    */
   async associateLdapAccount(account) {
     try {
-      return this.appContainer.apiv3.put('/personal-setting/associateLdap', account);
+      return this.appContainer.apiv3.put('/personal-setting/associate-ldap', account);
     }
     catch (err) {
       this.setState({ retrieveError: err });
@@ -234,9 +234,9 @@ export default class PersonalContainer extends Container {
   /**
    * Disassociate LDAP account
    */
-  async disassociateLdapAccount() {
+  async disassociateLdapAccount(account) {
     try {
-      // return this.appContainer.apiv3.put('/personal-setting/associateLdap', account);
+      return this.appContainer.apiv3.put('/personal-setting/disassociate-ldap', account);
     }
     catch (err) {
       this.setState({ retrieveError: err });

+ 17 - 3
src/server/routes/apiv3/personal-setting.js

@@ -295,14 +295,14 @@ module.exports = (crowi) => {
   });
 
   // TODO swagger
-  router.put('/associateLdap', loginRequiredStrictly, csrf, async(req, res) => {
+  router.put('/associate-ldap', loginRequiredStrictly, csrf, async(req, res) => {
     const { passportService } = crowi;
     const { user, body } = req;
     const { username } = body;
 
     if (!passportService.isLdapStrategySetup) {
       logger.error('LdapStrategy has not been set up');
-      return res.apiv3Err('update-api-token-failed', 405);
+      return res.apiv3Err('associate-ldap-account-failed', 405);
     }
 
     try {
@@ -312,9 +312,23 @@ module.exports = (crowi) => {
     }
     catch (err) {
       logger.error(err);
-      return res.apiv3Err('update-api-token-failed');
+      return res.apiv3Err('associate-ldap-account-failed');
+    }
+
+  });
+
+  // TODO swagger
+  router.put('/disassociate-ldap', loginRequiredStrictly, csrf, async(req, res) => {
+    const { user, body } = req;
+
+    const count = await ExternalAccount.count({ user });
+
+    // make sure password set or this user has two or more ExternalAccounts
+    if (user.password == null || count <= 1) {
+      return res.apiv3Err('disassociate-ldap-account-failed');
     }
 
+    return res.apiv3();
   });
 
   return router;