WebClient/HTTP API: ensure to check home dir, when needed, in multi-node setups

Behind a load balancer with no sticky sessions enabled is not enough to check
the home dir only when the client logs in

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino 2022-09-08 11:55:08 +02:00
parent 2d19817431
commit 836b36b816
No known key found for this signature in database
GPG key ID: 2F1FB59433D5A8CB
3 changed files with 6 additions and 0 deletions

View file

@ -96,6 +96,7 @@ func createUserDir(w http.ResponseWriter, r *http.Request) {
return return
} }
} }
connection.User.CheckFsRoot(connection.ID) //nolint:errcheck
err = connection.CreateDir(name, true) err = connection.CreateDir(name, true)
if err != nil { if err != nil {
sendAPIResponse(w, r, err, fmt.Sprintf("Unable to create directory %#v", name), getMappedStatusCode(err)) sendAPIResponse(w, r, err, fmt.Sprintf("Unable to create directory %#v", name), getMappedStatusCode(err))
@ -225,6 +226,7 @@ func uploadUserFile(w http.ResponseWriter, r *http.Request) {
} }
func doUploadFile(w http.ResponseWriter, r *http.Request, connection *Connection, filePath string) error { func doUploadFile(w http.ResponseWriter, r *http.Request, connection *Connection, filePath string) error {
connection.User.CheckFsRoot(connection.ID) //nolint:errcheck
writer, err := connection.getFileWriter(filePath) writer, err := connection.getFileWriter(filePath)
if err != nil { if err != nil {
sendAPIResponse(w, r, err, fmt.Sprintf("Unable to write file %#v", filePath), getMappedStatusCode(err)) sendAPIResponse(w, r, err, fmt.Sprintf("Unable to write file %#v", filePath), getMappedStatusCode(err))
@ -294,6 +296,7 @@ func uploadUserFiles(w http.ResponseWriter, r *http.Request) {
func doUploadFiles(w http.ResponseWriter, r *http.Request, connection *Connection, parentDir string, func doUploadFiles(w http.ResponseWriter, r *http.Request, connection *Connection, parentDir string,
files []*multipart.FileHeader, files []*multipart.FileHeader,
) int { ) int {
connection.User.CheckFsRoot(connection.ID) //nolint:errcheck
uploaded := 0 uploaded := 0
connection.User.UploadBandwidth = 0 connection.User.UploadBandwidth = 0
for _, f := range files { for _, f := range files {

View file

@ -232,6 +232,7 @@ func getCompressedFileName(username string, files []string) string {
func renderCompressedFiles(w http.ResponseWriter, conn *Connection, baseDir string, files []string, func renderCompressedFiles(w http.ResponseWriter, conn *Connection, baseDir string, files []string,
share *dataprovider.Share, share *dataprovider.Share,
) { ) {
conn.User.CheckFsRoot(conn.ID) //nolint:errcheck
w.Header().Set("Content-Type", "application/zip") w.Header().Set("Content-Type", "application/zip")
w.Header().Set("Accept-Ranges", "none") w.Header().Set("Accept-Ranges", "none")
w.Header().Set("Content-Transfer-Encoding", "binary") w.Header().Set("Content-Transfer-Encoding", "binary")
@ -326,6 +327,7 @@ func checkDownloadFileFromShare(share *dataprovider.Share, info os.FileInfo) err
func downloadFile(w http.ResponseWriter, r *http.Request, connection *Connection, name string, func downloadFile(w http.ResponseWriter, r *http.Request, connection *Connection, name string,
info os.FileInfo, inline bool, share *dataprovider.Share, info os.FileInfo, inline bool, share *dataprovider.Share,
) (int, error) { ) (int, error) {
connection.User.CheckFsRoot(connection.ID) //nolint:errcheck
err := checkDownloadFileFromShare(share, info) err := checkDownloadFileFromShare(share, info)
if err != nil { if err != nil {
return http.StatusBadRequest, err return http.StatusBadRequest, err

View file

@ -954,6 +954,7 @@ func (s *httpdServer) handleClientEditFile(w http.ResponseWriter, r *http.Reques
return return
} }
connection.User.CheckFsRoot(connection.ID) //nolint:errcheck
reader, err := connection.getFileReader(name, 0, r.Method) reader, err := connection.getFileReader(name, 0, r.Method)
if err != nil { if err != nil {
s.renderClientMessagePage(w, r, fmt.Sprintf("Unable to get a reader for the file %#v", name), "", s.renderClientMessagePage(w, r, fmt.Sprintf("Unable to get a reader for the file %#v", name), "",