Fix plugin /public handling for subpaths (#21886)
* Fix plugin /public handling for subpaths Plugins support a `public` folder in the bundle automatically being accessible at `<site_url>/plugins/<plugin_id/public/`, but it seems support for a `site_url` with a subpath has been broken for some time. I tried to figure out when this stopped working, but gave up after a while and just focussed on the requisite changes plus tests. * simplify comment * more testing coverage, and simpler diff * try cleaning up plugins after tests * skip TestServePluginPublicRequest to isolate build issue * Revert "skip TestServePluginPublicRequest to isolate build issue" This reverts commit 62d0e4e427c7cf7b7f9b09202ce10cd5f1a56bca. * do th.TearDown last by using t.Cleanup vs. defer Co-authored-by: Mattermod <mattermod@users.noreply.github.com> Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
3ed9381aca
Коммит
41c028e346
@@ -5,7 +5,6 @@ package app
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"path"
|
||||
@@ -93,7 +92,7 @@ func (ch *Channels) ServePluginPublicRequest(w http.ResponseWriter, r *http.Requ
|
||||
return
|
||||
}
|
||||
|
||||
// Should be in the form of /$PLUGIN_ID/public/{anything} by the time we get here
|
||||
// Should be in the form of /(subpath/)?/plugins/{plugin_id}/public/* by the time we get here
|
||||
vars := mux.Vars(r)
|
||||
pluginID := vars["plugin_id"]
|
||||
|
||||
@@ -111,8 +110,13 @@ func (ch *Channels) ServePluginPublicRequest(w http.ResponseWriter, r *http.Requ
|
||||
return
|
||||
}
|
||||
|
||||
subpath, err := utils.GetSubpathFromConfig(ch.cfgSvc.Config())
|
||||
if err != nil {
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
publicFilePath := path.Clean(r.URL.Path)
|
||||
prefix := fmt.Sprintf("/plugins/%s/public/", pluginID)
|
||||
prefix := path.Join(subpath, "plugins", pluginID, "public")
|
||||
if !strings.HasPrefix(publicFilePath, prefix) {
|
||||
http.NotFound(w, r)
|
||||
return
|
||||
|
||||
Ссылка в новой задаче
Block a user