mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-07 23:00:55 +03:00
actions: add pre-download and pre-upload
Downloads and uploads can be denied based on hook response
This commit is contained in:
13
sftpd/scp.go
13
sftpd/scp.go
@@ -219,6 +219,13 @@ func (c *scpCommand) handleUploadFile(fs vfs.Fs, resolvedPath, filePath string,
|
||||
c.sendErrorMessage(fs, err)
|
||||
return err
|
||||
}
|
||||
err := common.ExecutePreAction(&c.connection.User, common.OperationPreUpload, resolvedPath, requestPath, c.connection.GetProtocol(), fileSize)
|
||||
if err != nil {
|
||||
c.connection.Log(logger.LevelDebug, "upload for file %#v denied by pre action: %v", requestPath, err)
|
||||
err = c.connection.GetPermissionDeniedError()
|
||||
c.sendErrorMessage(fs, err)
|
||||
return err
|
||||
}
|
||||
|
||||
maxWriteSize, _ := c.connection.GetMaxWriteSize(quotaResult, false, fileSize, fs.IsUploadResumeSupported())
|
||||
|
||||
@@ -507,6 +514,12 @@ func (c *scpCommand) handleDownload(filePath string) error {
|
||||
return common.ErrPermissionDenied
|
||||
}
|
||||
|
||||
if err := common.ExecutePreAction(&c.connection.User, common.OperationPreDownload, p, filePath, c.connection.GetProtocol(), 0); err != nil {
|
||||
c.connection.Log(logger.LevelDebug, "download for file %#v denied by pre action: %v", filePath, err)
|
||||
c.sendErrorMessage(fs, common.ErrPermissionDenied)
|
||||
return common.ErrPermissionDenied
|
||||
}
|
||||
|
||||
file, r, cancelFn, err := fs.Open(p, 0)
|
||||
if err != nil {
|
||||
c.connection.Log(logger.LevelError, "could not open file %#v for reading: %v", p, err)
|
||||
|
||||
Reference in New Issue
Block a user