Commit graph

30 commits

Author SHA1 Message Date
Gabriel Simmer e7f3d5402e Deletion support for S3. 2021-05-29 19:57:49 +01:00
Gabriel Simmer 4aae9887e1 Fix referencing for S3 providers.
S3 providers would overwrite each other depending on the order they're
initialized.
2021-05-29 19:53:03 +01:00
Gabriel Simmer 8fff6da76b Add support for custom endpoints and keys for S3. 2021-05-29 19:37:45 +01:00
Gabriel Simmer 550e722a53 Implement SendFile() and ObjectInfo() for S3.
Also removed a now useless parameter for file providers, which used to
be for writing directly to the HTTP response.
2021-05-29 10:48:32 +01:00
Gabriel Simmer 22e1df4bc7 Starting on basic S3 support. 2021-05-28 22:43:30 +01:00
Gabriel Simmer 06dd0f6dec Implement new colour palette.
Pink #F06DF2
Black #02060D
Dark Blue #081226
Blue #04ADBF
Yellow #F2E307

Also fixed minor bug where first 512 bytes of files are sometimes cut
off when determining content type.
2021-05-23 21:04:24 +01:00
Gabriel Simmer b90abd8779 Remove old file path function. 2021-05-23 14:46:28 +01:00
Gabriel Simmer 54fe5f9c5c Simplify file serving from local or remote.
Prior, we would decide how to serve a file based on whether it was local
or remote at a router level. This moves everything to an io.Copy call in
the router with the Provider returning an io.Reader.
2021-05-23 14:43:27 +01:00
Gabriel Simmer ce4ee64509
Minor linting fixes & move to CircleCI/UPX orb.
Some minor linting fixes and general style/scope changes, which should
have no impact on the overall application. Also moved to the offical
CircleCI UPX Orb, rather than my own (which is still maintained by me).
2020-04-24 09:01:53 +01:00
Gabriel Simmer 5e85a600d8
Simplify file router, add documenting comments.
The file router was starting to get out of hand, so I've done my best to
simplify it and get ahead of more spaghetti. As part of this, tidied up
some other code and added some much-needed comments and constants to
make things more readable. ObjectInfo() is much more useful as well,
determing if a file exists, if it's a directory and the location.

Feeling other bits of the project can be simplified, but mostly been
focused on the file providers and associated router.
2020-04-15 23:19:33 +01:00
Gabriel Simmer 8db4a35994
Better handling of serving files, frontend tweaks.
Implemented a few new functions to handle the differences between local
and remote files - local files will be served (best it can be) with
ServeContent(), while remote files will be passed through from the
response body directly to the response writer. This isn't a very elegant
solution right now, but hoping to refactor this approach and simplify
the decision logic. However, serving files from local disks is much
better, including improvements to video files and generally better
handling of metadata.

Also some small tweaks to the frontned to align things a little nicer.
2020-04-15 12:16:27 +01:00
Gabriel Simmer e1b8c50d55
Delete files and create directories.
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.
2020-04-12 22:10:51 +01:00
Gabriel Simmer c28851fcc3
Tests & CI, io.Reader > Multipart file.
Making some improvements to the future maintainability of the project,
namely in the form of tests. Also implemented a new "dist" command to
the Makefile that packs up the binaries, and will eventually be expanded
to do more legwork when prepping for a release.

Updated file providers to use io.Reader over an explicit multipart file,
and removed the handler in favour of a plain filename, since that was
it's primary purpose.
2020-04-03 13:26:06 +01:00
Gabriel Simmer c183003953
Resolve upload logic for frontend.
Frontend logic for routing was a bit broken when generating links for
directories, appending an extra / to the start. Resolved this to
properly link - interestingly, the file listing could still be served,
but the uploading was broken?

Also enforced regex for provider of directory listings and tidied up
some other string handling.
2020-04-03 02:51:38 +01:00
Gabriel Simmer 207676d4a7
Correct config provider, no backblaze goroutine.
Addressing a bug where the configuration would try to interpret the
provider name from the entry in the configuration, rather than the
explicit `provider`. Also removed background uploading from Backblaze
(was worth a shot).
2020-04-02 15:31:30 +01:00
Gabriel Simmer d86ed1233f
Implemented uploading for Backblaze & Disk (v1)
Implemented file uploading for both the disk and Backblaze providers.
Also implements a UI element and frontend logic for doing so from the
frontend.

Disk will write directly to disk, while the Backblaze provider will
attempt to stream the file from memory directly to the POST body. This
could introduce some problems down the line, so caching to disk then
uploading in the background may need to be implemented. It also
performs the final upload using a goroutine so the end client can
continue on it's merry way.

Backblaze proved a bit tricky to do, and considering switching to using
a library for managing Backblaze going forward.
2020-03-30 20:51:26 +01:00
Gabriel Simmer 9cd7ab75e8
Better error messages for Backblaze, int64.
Ran into an issue when running on a Raspberry Pi - occaisonally, the
int size for the files being provided from Backblaze (which is in
bytes) will be too large. This is fixed by upgrading the int to int64.
As a part of this debugging process, I upgraded the error handling when
fetching the Backblaze file listing to actually print the errors rather
than failing silently.
2020-03-23 10:53:58 +00:00
Gabriel Simmer 49dba732d3
Implement Setup() function for providers, cleanup
Implemented a much-needed Setup() function for providers to implement,
which (as demonstrated in the backblaze provider) allows for
authentication in advance of needing to make calls to remote locations.
This could also be used to create a directory or perform some other
sanity check required for the provider to work. So far, haven't noticed
any performance impacts from this approach, besides not needing to auth
each time we make a request.
2020-03-21 00:31:24 +00:00
Gabriel Simmer c2171d00c9
io.Copy rather than ioutil.ReadAll
Should offer some speed boost, copying the file contents rather than
reading it all to memory then writing it back out. Should theoretically
be able to handle larger files as well, although some benchmarks
are TBD around filesize limits.
2020-03-19 10:13:38 +00:00
Gabriel Simmer ea1075cb5b
Rewrite file provider to proxy data download (rather than redirect)
Reworked the fileprovider to proxy data directly from the provider
rather than attempt to funkily redirect when needed, since it was overly
complex and wouldn't work well in the long run. Temporarily added "file"
as constant return for determining the filetype through Backblaze.

Added a Makefile to make life easier as well, and rewrote the README to
reflect the refactor/rewrite and new approach to providers.
2020-03-15 23:49:00 +00:00
Gabriel Simmer bf1f06b79c Refactoring file storage to enable different providers
Expanding this as we go, currently have POC Backblaze B2 support and
basic 'disk' provider as well. Still WIP, but functional for the most
part. Also moving to simplified YAML configuration.

Overall, simplifying things to be extensible down the line. Still work
to be done, but coming along nicely.
2020-02-24 18:07:47 +00:00
Gabriel Simmer 6524726357 Directory listing in new frontend 2019-07-27 21:43:05 -07:00
Gabriel Simmer 9ab5f248a9 Rewriting frontend in react, refactoring of routes. 2019-07-13 20:19:28 -07:00
Gabriel Simmer 88e0d6c7b1
Add disk usage statistics to index & API.
Update README.md

Add disk usage statistics to index & API.
2019-04-01 22:45:33 -07:00
Gabriel Simmer a2a1e0e573
Begin work on API, decouple frontend to be more dynamic. 2019-03-02 17:41:13 -08:00
Gabriel Simmer 8b49d75077
Fix bug where file upload location was not respected. 2019-02-24 14:53:55 -08:00
Gabriel Simmer 23177b6b54
Implement basic file uploading ('hot' tier only) 2019-02-24 14:42:21 -08:00
Gabriel Simmer f9023d0c4d
Use common readandservefile function (can handle large files) 2019-02-24 11:16:40 -08:00
Gabriel Simmer 4bd60c6c1d
Add basic styling to listing page, fix previous directory link. 2019-02-24 01:02:03 -08:00
Gabriel Simmer 7b091438d4
Initial commit of basic functional file listing 2019-02-24 00:25:39 -08:00