Răsfoiți Sursa

disassociate ldap account

itizawa 6 ani în urmă
părinte
comite
6d5412d3f1

+ 1 - 0
src/client/js/components/Me/AssociateModal.jsx

@@ -47,6 +47,7 @@ class AssociateModal extends React.Component {
 
 
     try {
     try {
       await personalContainer.associateLdapAccount({ username, password });
       await personalContainer.associateLdapAccount({ username, password });
+      this.props.onClose();
       toastSuccess(t('security_setting.updated_general_security_setting'));
       toastSuccess(t('security_setting.updated_general_security_setting'));
     }
     }
     catch (err) {
     catch (err) {

+ 4 - 2
src/client/js/services/PersonalContainer.js

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

+ 12 - 5
src/server/routes/apiv3/personal-setting.js

@@ -320,15 +320,22 @@ module.exports = (crowi) => {
   // TODO swagger
   // TODO swagger
   router.put('/disassociate-ldap', loginRequiredStrictly, csrf, async(req, res) => {
   router.put('/disassociate-ldap', loginRequiredStrictly, csrf, async(req, res) => {
     const { user, body } = req;
     const { user, body } = req;
+    const { providerType, accountId } = body;
 
 
-    const count = await ExternalAccount.count({ user });
-
-    // make sure password set or this user has two or more ExternalAccounts
-    if (user.password == null || count <= 1) {
+    try {
+      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');
+      }
+      const account = await ExternalAccount.findOneAndRemove({ providerType, accountId, user });
+      return res.apiv3({ account });
+    }
+    catch (err) {
+      logger.error(err);
       return res.apiv3Err('disassociate-ldap-account-failed');
       return res.apiv3Err('disassociate-ldap-account-failed');
     }
     }
 
 
-    return res.apiv3();
   });
   });
 
 
   return router;
   return router;