nidus-sync/platform/file/userfile.go
Eli Ribble 44c4f17f32
Massive rework of platform layer user/organization
The goal of this rework is to make it so I can pass around platform.User
instead of a pair of models.Organization and models.User. This is useful
for reason I kind of forget now, but it started with working on
notifications and ballooned massively from there into refactoring a
number of things that were bugging me.

This also includes a tiny amount of work on server-side events (SSE).

 * background stuff lives inside the platform now, which I need for
   having it push updates through SSE
 * userfile now lives in the platform, under file, so other platform
   functions can safely use it
 * oauth is broken into pieces and inside platform because other stuff
   was calling it already, but badly.
 * notifications go into the platform as well
2026-03-12 23:49:16 +00:00

50 lines
1.3 KiB
Go

package file
import (
"fmt"
"io"
//"net/http"
"os"
"github.com/Gleipnir-Technology/nidus-sync/config"
"github.com/google/uuid"
"github.com/rs/zerolog/log"
)
func CreateDirectories() error {
for _, subdir := range collectionToSubdir {
path := config.FilesDirectory + "/" + subdir
_, err := os.Stat(path)
if err == nil {
continue
}
err = os.MkdirAll(path, 0750)
if err != nil {
return fmt.Errorf("Failed to create userfile directory '%s': %w", path, err)
}
}
return nil
}
func FileContentWrite(body io.Reader, collection Collection, uid uuid.UUID) error {
// Create file in configured directory
filepath := fileContentPath(collection, uid)
dst, err := os.Create(filepath)
if err != nil {
log.Error().Err(err).Str("filepath", filepath).Msg("Failed to create upload file")
return fmt.Errorf("Failed to create upload file at %s: %v", filepath, err)
}
defer dst.Close()
// Copy rest of request body to file
_, err = io.Copy(dst, body)
if err != nil {
return fmt.Errorf("Unable to save file to copy file content to %s: %v", filepath, err)
}
log.Info().Str("filepath", filepath).Msg("Save upload file content")
return nil
}
func NewFileReader(collection Collection, uid uuid.UUID) (io.Reader, error) {
path := fileContentPath(collection, uid)
return os.Open(path)
}