A secure private file host program. Bandwidth & request rate limiting, file sanitizing, good on resources, ShareX compatibility, and more.
Go to file
vysion 5b4b5d4b87 Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
api Update version to 1.4.0, encryption options in config 2022-03-30 11:54:17 -07:00
conf Update version to 1.4.0, encryption options in config 2022-03-30 11:54:17 -07:00
constants Update version to 1.4.0, encryption options in config 2022-03-30 11:54:17 -07:00
encryption Add DeriveKey func 2022-03-30 12:16:16 -07:00
example Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
global Minor fixes 2022-03-30 12:16:45 -07:00
logger Minor fixes 2022-03-30 12:16:45 -07:00
middleware Structured JSON responses 2022-03-30 12:17:11 -07:00
response Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
routes Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
security Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
utils Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
.gitignore update readme and gitignore 2022-03-22 20:12:05 -07:00
Dockerfile Reworked project structure 2021-09-08 16:37:19 -07:00
LICENSE update license year 2022-03-22 20:13:33 -07:00
README.md update readme 2022-04-02 21:03:41 -07:00
go.mod Update version to 1.4.0, encryption options in config 2022-03-30 11:54:17 -07:00
go.sum Update version to 1.4.0, encryption options in config 2022-03-30 11:54:17 -07:00
init.go Reintroduce zero width feature, JSON response fix 2022-04-02 21:04:20 -07:00
main.go Update init.go and main.go 2022-03-30 12:13:35 -07:00

README.md

Tytanium

Tytanium is a private file host program, meant for a single user or a small group. Here are the main highlights:

  • SHA2-512 file encryption at rest, with an encryption key unique to each file
  • Tune the server to exactly how you want with extensive customization options
  • Works well with image capture suites, such as ShareX/MagicCap
  • Good on system resources (<1MiB memory usage when idle)
  • Limit how many requests/second to certain paths to prevent DoS attacks or an overloaded server
  • Zero-width strings: make your links appear invisible! (Example: https://example.com/file.png?enc_key=X appears as https://example.com/)
  • Not written in Javascript!

Please note that files are NOT encrypted client-side; encryption is done on the server.

Setup

  1. Download the binary in the Releases tab, or build the code from source.
  2. Rename example.yml to config.yml and set the values you want, or create a config.yml from scratch.
  3. Mark the binary as executable (this can be done with chmod).

Upload & Response

Create a POST request to /upload with a file in the field "file". Put the key in the Authorization header.

Query arguments you can pass:

  • ?zerowidth=1: Zero-width links. By enabling this, you can turn a URL's path invisible (See example above in the feature list).
    • uri will be zero-width if you specified ?zerowidth=1.

Example response on success:

{
   "status": 0,
   "data": {
      "uri": "https://example.com/file.png?enc_key=ABCDEF",
      "path": "file.png?enc_key=ABCDEF",
      "file_name": "file.png",
      "encryption_key": "ABCDEF"
   }
}

If there's any error, the response will look like this. Status code 1 means a generic error, 2 means something broke internally. message will contain the error message.

{
   "status:": 1,
   "message": "Error message"
}

Optional stuff

  • You can use the Size Checker program to make the /stats path produce values other than 0 for file count and total size used. Just tell it to check your files directory. You can run it as a cron job or run it manually whenever you want to update it. (If you choose not to use it, /stats will always return 0 for some fields.)
  • If you want to change the favicon, replace routes/favicon.ico with your own image.

License

MIT License