7ebbbe5c29
Here are the main improvements: - unliked files works on windows too - the uploads are now synced on the lower speed between the SFTP client write and the upload speed to S3 This commit increase the external auth timeout to 60 seconds too
51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package httpd
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/drakkan/sftpgo/dataprovider"
|
|
"github.com/drakkan/sftpgo/logger"
|
|
"github.com/drakkan/sftpgo/sftpd"
|
|
"github.com/go-chi/render"
|
|
)
|
|
|
|
func getQuotaScans(w http.ResponseWriter, r *http.Request) {
|
|
render.JSON(w, r, sftpd.GetQuotaScans())
|
|
}
|
|
|
|
func startQuotaScan(w http.ResponseWriter, r *http.Request) {
|
|
var u dataprovider.User
|
|
err := render.DecodeJSON(r.Body, &u)
|
|
if err != nil {
|
|
sendAPIResponse(w, r, err, "", http.StatusBadRequest)
|
|
return
|
|
}
|
|
user, err := dataprovider.UserExists(dataProvider, u.Username)
|
|
if err != nil {
|
|
sendAPIResponse(w, r, err, "", http.StatusNotFound)
|
|
return
|
|
}
|
|
if sftpd.AddQuotaScan(user.Username) {
|
|
go doQuotaScan(user)
|
|
sendAPIResponse(w, r, err, "Scan started", http.StatusCreated)
|
|
} else {
|
|
sendAPIResponse(w, r, err, "Another scan is already in progress", http.StatusConflict)
|
|
}
|
|
}
|
|
|
|
func doQuotaScan(user dataprovider.User) error {
|
|
defer sftpd.RemoveQuotaScan(user.Username)
|
|
fs, err := user.GetFilesystem("")
|
|
if err != nil {
|
|
logger.Warn(logSender, "", "unable scan quota for user %#v error creating filesystem: %v", user.Username, err)
|
|
return err
|
|
}
|
|
numFiles, size, err := fs.ScanRootDirContents()
|
|
if err != nil {
|
|
logger.Warn(logSender, "", "error scanning user home dir %#v: %v", user.Username, err)
|
|
} else {
|
|
err = dataprovider.UpdateUserQuota(dataProvider, user, numFiles, size, true)
|
|
logger.Debug(logSender, "", "user home dir scanned, user: %#v, error: %v", user.Username, err)
|
|
}
|
|
return err
|
|
}
|