From 4c004eab9af661fb73da9eeae9edd07c77df3699 Mon Sep 17 00:00:00 2001 From: vysion <77179954+vysiondev@users.noreply.github.com> Date: Tue, 22 Mar 2022 20:12:05 -0700 Subject: [PATCH] update readme and gitignore --- .gitignore | 3 ++- README.md | 42 ++++++++++++++++++++++++------------------ logger/logger.go | 1 + routes/favicon.ico | Bin 4685 -> 4142 bytes 4 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 logger/logger.go diff --git a/.gitignore b/.gitignore index 3e84b99..6cb85af 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.json *.yml !example.yml -files/ \ No newline at end of file +files/ +*.txt \ No newline at end of file diff --git a/README.md b/README.md index ebac965..fbc6358 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,40 @@ -![](https://i.imgur.com/jkB0XlM.png) +![](https://i.imgur.com/AHHWH3z.png) # Tytanium -A simple file host server, intended for personal or small group use. +A durable and secure private file host solution. Intended for personal or small group use. ## Features - Tune the server to exactly how you want with extensive customization options -- Built with [fasthttp](https://github.com/vayala/fasthttp) for performance and built-in anti-DoS features -- Whitelist/blacklist checks done via file headers rather than extensions -- Sanitize files to prevent against phishing attacks (Change their Content-Type to text/plain) -- Zero-width file IDs in URLs - paste invisible but functional links! -- File ID collision checking +- Built with [fasthttp](https://github.com/vayala/fasthttp) for optimal performance instead of the native http module +- File whitelist/blacklist type checks done via file headers rather than extensions +- Sanitize file type from rendering in HTML/other types to mitigate phishing attacks (Change their Content-Type to text/plain) +- Option to return a zero-width file IDs in a URL after upload - paste invisible but functional links! - 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 - Not written in Javascript! ### Setup -- Download the binary or build this program -- Rename `example.yml` to `config.yml` and set the values you want -- Start the binary -- Done -- **Optional stuff** - - You can use the [Size Checker](https://github.com/vysiondev/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 every field.) - - If you want to change the favicon, replace `routes/favicon.ico` with your own image. +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. Start the binary with your method of choice. +4. Done! -### How to Upload +### How to Use -Create a POST request to `/upload` with a file in the field "file". Put the key in the `Authorization` header. +1. Create a POST request to `/upload` with a file in the field "file". Put the key in the `Authorization` header. +2. Set `?omitdomain=1`, if you don't want the host's original domain appended before the file name in the response. For example: `a.png` instead of `https://a.com/a.png`. This is useful if you have vanity/proxy domains you want to use. +3. Add `?zerowidth=1` and set it to `1` to make your image URLs appear "zero-width". If you don't get what that means, try it, and see what happens. +4. The server will respond with a link to the file (or just the file name if you set `?omitdomain=1`). It will be just text so no need to parse any JSON. -Set `?omitdomain=1`, if you don't want the host's original domain appended before the file name in the response. For example: `a.png` instead of `https://a.com/a.png` +### Optional stuff -Add `?zerowidth=1` and set it to `1` to make your image URLs appear "zero-width". If you don't get what that means, try it, and see what happens. \ No newline at end of file +- You can use the [Size Checker](https://github.com/vysiondev/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](LICENSE) \ No newline at end of file diff --git a/logger/logger.go b/logger/logger.go new file mode 100644 index 0000000..90c66f6 --- /dev/null +++ b/logger/logger.go @@ -0,0 +1 @@ +package logger diff --git a/routes/favicon.ico b/routes/favicon.ico index 74670ffc372fe1d1a6cb0c590a6dfb2d8eeb3a6d..21664ccd050c69a18adc13a9977cda875de21b0f 100644 GIT binary patch literal 4142 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 literal 4685 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 P00000NkvXXu0mjf61&8x