[AI assisted]: MM-62914: Added MFA authentication for plugin requests as well (#30160)

We wipe the token if MFA authentication is enabled. Also added a test case
to lock in the functionality.

https://mattermost.atlassian.net/browse/MM-62914

```release-note
NONE
```
Этот коммит содержится в:
Agniva De Sarker
2025-02-17 12:20:21 +05:30
коммит произвёл GitHub
родитель 4750df98c2
Коммит e7a246c065
5 изменённых файлов: 164 добавлений и 45 удалений

Просмотреть файл

@@ -5,7 +5,6 @@ package web
import (
"net/http"
"path"
"regexp"
"strings"
@@ -158,46 +157,8 @@ func (c *Context) RemoteClusterTokenRequired() {
}
func (c *Context) MfaRequired() {
// Must be licensed for MFA and have it configured for enforcement
if license := c.App.Channels().License(); license == nil || !*license.Features.MFA || !*c.App.Config().ServiceSettings.EnableMultifactorAuthentication || !*c.App.Config().ServiceSettings.EnforceMultifactorAuthentication {
return
}
// OAuth integrations are excepted
if c.AppContext.Session().IsOAuth {
return
}
user, err := c.App.GetUser(c.AppContext.Session().UserId)
if err != nil {
c.Err = model.NewAppError("MfaRequired", "api.context.get_user.app_error", nil, "", http.StatusUnauthorized).Wrap(err)
return
}
if user.IsGuest() && !*c.App.Config().GuestAccountsSettings.EnforceMultifactorAuthentication {
return
}
// Only required for email and ldap accounts
if user.AuthService != "" &&
user.AuthService != model.UserAuthServiceEmail &&
user.AuthService != model.UserAuthServiceLdap {
return
}
// Special case to let user get themself
subpath, _ := utils.GetSubpathFromConfig(c.App.Config())
if c.AppContext.Path() == path.Join(subpath, "/api/v4/users/me") {
return
}
// Bots are exempt
if user.IsBot {
return
}
if !user.MfaActive {
c.Err = model.NewAppError("MfaRequired", "api.context.mfa_required.app_error", nil, "", http.StatusForbidden)
return
if appErr := c.App.MFARequired(c.AppContext); appErr != nil {
c.Err = appErr
}
}