Sfoglia il codice sorgente

[web] Add unlinking third-party logins ability from the admin-panel (#28201)

* Add `clearThirdPartyLogins`

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* Add a confirmation modal

* Show provider name from settings

* Replace "logins" by "identifiers" for consistency with current terminology

* Hide button if user has no third-party identifiers

* Update tests

* Add test "unlinks Google account"

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: 45b9b5ce6fa2cbeba9d4daeda97cd6e500c8266c
Antoine Clausse 11 mesi fa
parent
commit
1b0b99e12e

+ 22 - 0
services/web/app/src/Features/User/UserUpdater.js

@@ -19,6 +19,7 @@ const NotificationsBuilder = require('../Notifications/NotificationsBuilder')
 const _ = require('lodash')
 const Modules = require('../../infrastructure/Modules')
 const UserSessionsManager = require('./UserSessionsManager')
+const ThirdPartyIdentityManager = require('./ThirdPartyIdentityManager')
 
 async function _sendSecurityAlertPrimaryEmailChanged(
   userId,
@@ -182,6 +183,26 @@ async function clearSAMLData(userId, auditLog, sendEmail) {
   }
 }
 
+async function clearThirdPartyIdentifiers(userId, auditLog) {
+  const user = await UserGetter.promises.getUser(userId, {
+    thirdPartyIdentifiers: 1,
+  })
+  await UserAuditLogHandler.promises.addEntry(
+    userId,
+    'clear-third-party-identifiers',
+    auditLog.initiatorId,
+    auditLog.ipAddress,
+    {}
+  )
+  for (const thirdPartyIdentifier of user.thirdPartyIdentifiers || []) {
+    await ThirdPartyIdentityManager.promises.unlink(
+      userId,
+      thirdPartyIdentifier.providerId,
+      auditLog
+    )
+  }
+}
+
 /**
  * set the default email address by setting the `email` attribute. The email
  * must be one of the user's multiple emails (`emails` attribute)
@@ -665,6 +686,7 @@ module.exports = {
     addEmailAddress,
     changeEmailAddress,
     clearSAMLData,
+    clearThirdPartyIdentifiers,
     confirmEmail,
     removeEmailAddress,
     removeReconfirmFlag,

+ 1 - 0
services/web/test/unit/src/User/UserUpdaterTests.js

@@ -135,6 +135,7 @@ describe('UserUpdater', function () {
         '../Notifications/NotificationsBuilder': this.NotificationsBuilder,
         '../../infrastructure/Modules': this.Modules,
         './UserSessionsManager': this.UserSessionsManager,
+        './ThirdPartyIdentityManager': this.ThirdPartyIdentityManager,
       },
     })