Made use of cmd arguments.
This commit is contained in:
parent
11dfbfbc23
commit
931f98d12e
@ -19,7 +19,7 @@ import (
|
|||||||
var configPath *string = flag.String("conf", "config.yaml", "path to configuration file")
|
var configPath *string = flag.String("conf", "config.yaml", "path to configuration file")
|
||||||
var listenAddress *string = flag.String("listen", "/var/run/dwelling-upload/sock", "listen address (ip:port|unix_path)")
|
var listenAddress *string = flag.String("listen", "/var/run/dwelling-upload/sock", "listen address (ip:port|unix_path)")
|
||||||
var uploadDir *string = flag.String("upload-dir", "/srv/uploads", "path to a directory where uploaded files are stored")
|
var uploadDir *string = flag.String("upload-dir", "/srv/uploads", "path to a directory where uploaded files are stored")
|
||||||
var keepFileForHours *int64 = flag.Int64("keep-for", 36, "keep files for this much hours")
|
var keepFileForHours *int = flag.Int("keep-for", 36, "keep files for this much hours")
|
||||||
var limitStorage *int64 = flag.Int64("storage", 102400, "storage size in MiB for uploads")
|
var limitStorage *int64 = flag.Int64("storage", 102400, "storage size in MiB for uploads")
|
||||||
var limitFileSize *int64 = flag.Int64("file-size", 128, "max. size in MiB for uploaded files")
|
var limitFileSize *int64 = flag.Int64("file-size", 128, "max. size in MiB for uploaded files")
|
||||||
var showVersion *bool = flag.Bool("v", false, "show version")
|
var showVersion *bool = flag.Bool("v", false, "show version")
|
||||||
@ -54,6 +54,11 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hashSalt, err := os.ReadFile(path.Join(os.Getenv("CREDENTIALS_DIRECTORY"), "salt"))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("failed to read hash salt file:", err)
|
||||||
|
}
|
||||||
|
|
||||||
logFilePath := path.Join(os.Getenv("LOGS_DIRECTORY"), "file.log")
|
logFilePath := path.Join(os.Getenv("LOGS_DIRECTORY"), "file.log")
|
||||||
logFile, err := logging.New(logFilePath)
|
logFile, err := logging.New(logFilePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -79,7 +84,8 @@ func main() {
|
|||||||
|
|
||||||
watcha.WatchForMask(uploadDirNotify, watcher.CrDelMask)
|
watcha.WatchForMask(uploadDirNotify, watcher.CrDelMask)
|
||||||
|
|
||||||
hand := http.NewUploadHandlers(config, logFile, &uploadDirSize)
|
hand := http.NewUploadHandlers(logFile, *uploadDir, &uploadDirSize, string(hashSalt),
|
||||||
|
*keepFileForHours, *limitStorage, *limitFileSize)
|
||||||
srv := http.NewHttpServer()
|
srv := http.NewHttpServer()
|
||||||
|
|
||||||
srv.SetNotFoundHandler(http.NotFound)
|
srv.SetNotFoundHandler(http.NotFound)
|
||||||
|
@ -2,7 +2,6 @@ package http
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"dwelling-upload/internal/configuration"
|
|
||||||
"dwelling-upload/pkg/logging"
|
"dwelling-upload/pkg/logging"
|
||||||
"dwelling-upload/pkg/utils"
|
"dwelling-upload/pkg/utils"
|
||||||
"dwelling-upload/web"
|
"dwelling-upload/web"
|
||||||
@ -20,17 +19,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type UploadHandlers struct {
|
type UploadHandlers struct {
|
||||||
conf *configuration.Configuration
|
|
||||||
logFile *logging.Logger
|
logFile *logging.Logger
|
||||||
|
|
||||||
|
uploadDir string
|
||||||
uploadDirSize *int64
|
uploadDirSize *int64
|
||||||
|
|
||||||
|
hashSalt string
|
||||||
|
|
||||||
|
keepForHours int
|
||||||
|
limitStorage int64
|
||||||
|
limitFileSize int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUploadHandlers(conf *configuration.Configuration, lFile *logging.Logger, uploadDirSize *int64) *UploadHandlers {
|
func NewUploadHandlers(lFile *logging.Logger, uploadDir string, uploadDirSize *int64,
|
||||||
|
hashSalt string, keepForHours int, limStorage, limFileSz int64) *UploadHandlers {
|
||||||
return &UploadHandlers{
|
return &UploadHandlers{
|
||||||
conf: conf,
|
|
||||||
logFile: lFile,
|
logFile: lFile,
|
||||||
uploadDirSize: uploadDirSize}
|
uploadDir: uploadDir,
|
||||||
|
uploadDirSize: uploadDirSize,
|
||||||
|
hashSalt: hashSalt,
|
||||||
|
keepForHours: keepForHours,
|
||||||
|
limitStorage: limStorage,
|
||||||
|
limitFileSize: limFileSz}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*UploadHandlers) AssetsFS() http.FileSystem {
|
func (*UploadHandlers) AssetsFS() http.FileSystem {
|
||||||
@ -38,20 +48,20 @@ func (*UploadHandlers) AssetsFS() http.FileSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *UploadHandlers) Index(w http.ResponseWriter, r *http.Request) {
|
func (h *UploadHandlers) Index(w http.ResponseWriter, r *http.Request) {
|
||||||
var storCapacity int64 = h.conf.Uploads.Limits.Storage << 20
|
var storCapacity int64 = h.limitStorage << 20
|
||||||
var fMaxSize int64 = h.conf.Uploads.Limits.FileSize << 20
|
var fMaxSize int64 = h.limitFileSize << 20
|
||||||
|
|
||||||
_, _, capStr := utils.ConvertFileSize(storCapacity)
|
_, _, capStr := utils.ConvertFileSize(storCapacity)
|
||||||
_, _, usedStr := utils.ConvertFileSize(*h.uploadDirSize)
|
_, _, usedStr := utils.ConvertFileSize(*h.uploadDirSize)
|
||||||
_, _, availStr := utils.ConvertFileSize(storCapacity - *h.uploadDirSize)
|
_, _, availStr := utils.ConvertFileSize(storCapacity - *h.uploadDirSize)
|
||||||
_, _, fMaxSzStr := utils.ConvertFileSize(fMaxSize)
|
_, _, fMaxSzStr := utils.ConvertFileSize(fMaxSize)
|
||||||
|
|
||||||
web.Index(utils.MainSite(r.Host), storCapacity, *h.uploadDirSize, h.conf.Uploads.Limits.KeepForHours, fMaxSzStr, usedStr, capStr, availStr, w)
|
web.Index(utils.MainSite(r.Host), storCapacity, *h.uploadDirSize, h.keepForHours, fMaxSzStr, usedStr, capStr, availStr, w)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
||||||
var fMaxSizeBytes int64 = h.conf.Uploads.Limits.FileSize << 20
|
var fMaxSizeBytes int64 = h.limitFileSize << 20
|
||||||
var storCapacity int64 = h.conf.Uploads.Limits.Storage << 20
|
var storCapacity int64 = h.limitStorage << 20
|
||||||
|
|
||||||
r.Body = http.MaxBytesReader(w, r.Body, fMaxSizeBytes)
|
r.Body = http.MaxBytesReader(w, r.Body, fMaxSizeBytes)
|
||||||
|
|
||||||
@ -89,12 +99,12 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fHash := hex.EncodeToString(s256.Sum(nil))
|
fHash := hex.EncodeToString(s256.Sum(nil))
|
||||||
s256.Write([]byte(h.conf.HashSalt))
|
s256.Write([]byte(h.hashSalt))
|
||||||
fSaltedHash := base64.RawURLEncoding.EncodeToString(s256.Sum(nil))
|
fSaltedHash := base64.RawURLEncoding.EncodeToString(s256.Sum(nil))
|
||||||
|
|
||||||
f.Seek(0, io.SeekStart)
|
f.Seek(0, io.SeekStart)
|
||||||
|
|
||||||
fPath := path.Join(h.conf.Uploads.Directory, fSaltedHash)
|
fPath := path.Join(h.uploadDir, fSaltedHash)
|
||||||
|
|
||||||
_, err = os.Stat(fPath)
|
_, err = os.Stat(fPath)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
@ -143,13 +153,13 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
web.Uploaded(utils.MainSite(r.Host), site, downloadURLParsed.String(), h.conf.Uploads.Limits.KeepForHours, w)
|
web.Uploaded(utils.MainSite(r.Host), site, downloadURLParsed.String(), h.keepForHours, w)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *UploadHandlers) Download(w http.ResponseWriter, r *http.Request) {
|
func (h *UploadHandlers) Download(w http.ResponseWriter, r *http.Request) {
|
||||||
saltedHash := GetURLParam(r, "hash")
|
saltedHash := GetURLParam(r, "hash")
|
||||||
|
|
||||||
path := path.Join(h.conf.Uploads.Directory, saltedHash)
|
path := path.Join(h.uploadDir, saltedHash)
|
||||||
|
|
||||||
stat, err := os.Stat(path)
|
stat, err := os.Stat(path)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
@ -185,7 +195,7 @@ func (h *UploadHandlers) Delete(w http.ResponseWriter, r *http.Request) {
|
|||||||
saltedHash = r.FormValue("hash")
|
saltedHash = r.FormValue("hash")
|
||||||
}
|
}
|
||||||
|
|
||||||
path := path.Join(h.conf.Uploads.Directory, saltedHash)
|
path := path.Join(h.uploadDir, saltedHash)
|
||||||
|
|
||||||
_, err := os.Stat(path)
|
_, err := os.Stat(path)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user