e1b8c50d55
Added DELETE handler to files endpoint for deleting files and directories, along with new handling for creating directories, as specified with the `X-NAS-Type` header - if this is set to "directory", a new directory is created with the path of the request. Otherwise, an attempt to parse the file from form data is done as before. Also added buttons to interact with the new functionality in the default frontend. |
||
---|---|---|
.circleci | ||
assets | ||
files | ||
router | ||
.gitignore | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README.md | ||
webserver.go |
nas
bringing filesystems together
about
this project aims to be an easy-to-manage web application that allows the management of cloud storage, whether it be on the host machine or part of a remote api. this is intended mostly for my own use, but i am documenting it in a way that i hope allows others to pick it up and improve on it down the line.
if something is unclear, feel free to open an issue :)
configuration
unlike the initial version of this project, the current build uses providers to determine how to handle various
functions related to files. currently, two are implemented, disk
and backblaze
, since they are the primary providers
i use myself. the providers you would like to use can be added to providers.yml
alongside the binary.
for example, here is a sample configuration implementing both of them:
disk:
provider: disk
path: /tmp/nas
backblaze:
provider: backblaze
config:
appKeyId: APP_KEY_ID
appId: APP_ID
bucket: BUCKET_ID
(read more here: #providers)
running
after adding the providers you would like to use, the application can be run simply with ./nas
. it will attach to port
:3000
.
building
this project uses go modules and a makefile, so building should be relatively straightforward.
make
will build the project for your system's architecture.make run
will run the project withgo run
make pi
will build the project with theGOOS=linux GOARCH=arm GOARM=5 go
flags set for raspberry pis.
providers
"providers" provide a handful of functions to interact nicely with a filesystem, whether it be on local disk or on a remote server via an api. best-effort is done to keep these performant, up to date and minimal.
there are a few built-in providers, and more can be added by opening a pull request.
name | service | configuration example |
---|---|---|
disk | local filesystem | assets/config_examples/disk.yml |
backblaze | backblaze b2 | assets/config_examples/backblaze.yml |
you can find a full configuration file under assets/config_examples/providers.yml
custom provider
custom file providers can be implemented by adding a new go file to the files
module. it should
implement the FileProviderInterface
interface.
icons
SVG Icons provided by Paweł Kuna: https://github.com/tabler/tabler-icons (see assets/web/icons/README.md)