A free file hosting server that focuses on speed, reliability and security.

Overview
Triox logo

Triox

Next Generation cloud storage server that is secure, fast, and reliable.

Build issues dependency status codecov
AGPL License Chat

Why Triox?

☘️ Open Source - We strongly believe in collaboration and transparency.

Speed - Get the most out of your hardware! Triox runs fast, even on weak hardware.

🔒 Security - We're using state-of-the-art algorithms and authentication methods to protect your data.

⛓️ Reliability - Built on top of the strong guarantees of the Rust programming language.

🛫 Easy Setup - Triox comes with batteries included and is easy to configure.

Features

Triox is still in an early stage but is already usable. The features we'd like to add before our first release can be found in this issue.

Demo

Hosted server

Sign in with username demo_user and password demo_password.

Sadly, we can't allow users to upload files due to legal restrictions. Since we can't guarantee that no illegal data will be uploaded the demo server runs in read-only mode.

triox-demo.aaron-erhardt.de

Self-hosted:

  1. Clone the repository
git clone https://github.com/Trioxidation/triox && cd triox
  1. Build and start Triox
docker-compose up -d --build

Triox should be accessible at http://localhost:3000

Contributing

Everyone is welcome to contribute to Triox. We are always open for new ideas, features and improvements.

The easiest way to contribute changes is to fork Triox, and then create a pull request to ask us to pull your changes into our repository. You can find a list of good first issues here.

Setup

See DEPLOYMENT.md for instructions

The API is documented in API.md.

Comments
  • slqx migration, credential processing and cookie authentication

    slqx migration, credential processing and cookie authentication

    This PR is massive and I apologize for that. The sqlx migration work touched various areas so I figured I'd refactor those areas as well.

    Changes:

    • sqlx migration
    • credential processing with argon2-creds
    • jwt to cookie-based authentication based
    • tests for authentication module
    • CI now runs integration tests against a live Postgres database
    • actix-governor is disabled. I don't know how to enable it also I found that a new middleware instance was created for each service so does that mean that each service gets its own counter or is there a shared counter? Please feel free to make necessary changes.
    opened by realaravinth 6
  • add basic get service tests

    add basic get service tests

    Hi, I have written some tests for get service. Right now only cases where request fails.

    For OK case where file is found and authorization is successful I think we need to create an user(this is risky because db could be polluted with such test users if test panics) or mock db related stuff(this will require some refactoring). I'm new to actix, so maybe you'll have some better ideas.

    opened by boleaczek 3
  • meta routes: health and build details

    meta routes: health and build details

    • /api/v1/meta/health: pings database and returns result
    • /api/v1/meta/build/ returns package version and git commit hash at which the package was built
    opened by realaravinth 2
  • Dockerfile, update readme links and updated authors in `cargo.toml`

    Dockerfile, update readme links and updated authors in `cargo.toml`

    • Dockerfile
    • docker-compose for quickly trying out Triox
    • Updated links in readme to point to this repo
    • Added my name to authors list in cargo.tom.
    • Added new badges for license, code coverage and the matrix community
    • Readme formatting. Please see my copy for the rendered version
    opened by realaravinth 2
  • [Community] Matrix or Discord for the project?

    [Community] Matrix or Discord for the project?

    Github issues send out emails every time there's activity so what do you think about creating a Matrix room or a Discord equivalent for regular discussions?

    For instance, I'm working on setting up CI workflows for running tests and code coverage over at my fork of this project and there are a bunch of things that I wish to discuss with you/other devs.

    Personally, I prefer Matrix but this your project :)

    opened by realaravinth 2
  • Tests for files app

    Tests for files app

    Tests for the file API (more in API.md) would be great to make sure that the file app does it's job correctly. It should be possible to write most tests for this using Actix web's integrated testing tools, similar to src/tests/auth_test.rs.

    Possibly, some tests might require more flexibility than Actix can cover. In this case I suggest using Reqwest. Note that before testing with Reqwest you need to start the triox server.

    Every service should be checked whether it works as expected and how it handles bad or malicious input.

    List of services that need tests:

    • [x] get
    • [x] list
    • [ ] upload
    • [x] create_dir
    • [x] remove
    • [x] copy
    • [x] move
    enhancement good first issue 
    opened by AaronErhardt 2
  • Update tokio requirement from 0.2 to 1.0

    Update tokio requirement from 0.2 to 1.0

    Updates the requirements on tokio to permit the latest version.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.0.3

    Fixed

    • io: memory leak during shutdown (#3477).
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    dependencies 
    opened by dependabot[bot] 1
  • Update tokio requirement from 0.2 to 1.4

    Update tokio requirement from 0.2 to 1.4

    Updates the requirements on tokio to permit the latest version.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.4.0

    Added

    • macros: introduce biased argument for select! (#3603)
    • runtime: add Handle::block_on (#3569)

    Fixed

    • runtime: avoid unnecessary polling of block_on future (#3582)
    • runtime: fix memory leak/growth when creating many runtimes (#3564)
    • runtime: mark EnterGuard with must_use (#3609)

    Documented

    • chore: mention fix for building docs in contributing guide (#3618)
    • doc: add link to PollSender (#3613)
    • doc: alias sleep to delay (#3604)
    • sync: improve Mutex FIFO explanation (#3615)
    • timer: fix double newline in module docs (#3617)

    #3564: tokio-rs/tokio#3564 #3613: tokio-rs/tokio#3613 #3618: tokio-rs/tokio#3618 #3617: tokio-rs/tokio#3617 #3582: tokio-rs/tokio#3582 #3615: tokio-rs/tokio#3615 #3603: tokio-rs/tokio#3603 #3609: tokio-rs/tokio#3609 #3604: tokio-rs/tokio#3604 #3569: tokio-rs/tokio#3569

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Update tokio requirement from 0.2 to 1.3

    Update tokio requirement from 0.2 to 1.3

    Updates the requirements on tokio to permit the latest version.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.3.0

    Added

    • coop: expose an unconstrained() opt-out (#3547)
    • net: add into_std for net types without it (#3509)
    • sync: add same_channel method to mpsc::Sender (#3532)
    • sync: add {try_,}acquire_many_owned to Semaphore (#3535)
    • sync: add back RwLockWriteGuard::map and RwLockWriteGuard::try_map (#3348)

    Fixed

    • sync: allow oneshot::Receiver::close after successful try_recv (#3552)
    • time: do not panic on timeout(Duration::MAX) (#3551)

    Documented

    • doc: doc aliases for pre-1.0 function names (#3523)
    • io: fix typos (#3541)
    • io: note the EOF behaviour of read_until (#3536)
    • io: update AsyncRead::poll_read doc (#3557)
    • net: update UdpSocket splitting doc (#3517)
    • runtime: add link to LocalSet on new_current_thread (#3508)
    • runtime: update documentation of thread limits (#3527)
    • sync: do not recommend join_all for Barrier (#3514)
    • sync: documentation for oneshot (#3592)
    • sync: rename notify to notify_one (#3526)
    • time: fix typo in Sleep doc (#3515)
    • time: sync interval.rs and time/mod.rs docs (#3533)
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Update tokio requirement from 0.2 to 1.2

    Update tokio requirement from 0.2 to 1.2

    Updates the requirements on tokio to permit the latest version.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.2.0

    Added

    • signal: make Signal::poll_recv method public (#3383)

    Fixed

    • time: make test-util paused time fully deterministic (#3492)

    Documented

    • sync: link to new broadcast and watch wrappers (#3504)
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Update tokio requirement from 0.2 to 1.1

    Update tokio requirement from 0.2 to 1.1

    Updates the requirements on tokio to permit the latest version.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.1.0

    Added

    • net: add try_read_buf and try_recv_buf (#3351)
    • mpsc: Add Sender::try_reserve function (#3418)
    • sync: add RwLock try_read and try_write methods (#3400)
    • io: add ReadBuf::inner_mut (#3443)

    Changed

    • macros: improve select! error message (#3352)
    • io: keep track of initialized bytes in read_to_end (#3426)
    • runtime: consolidate errors for context missing (#3441)

    Fixed

    • task: wake LocalSet on spawn_local (#3369)
    • sync: fix panic in broadcast::Receiver drop (#3434)

    Documented

    • stream: link to new Stream wrappers in tokio-stream (#3343)
    • docs: mention that test-util feature is not enabled with full (#3397)
    • process: add documentation to process::Child fields (#3437)
    • io: clarify AsyncFd docs about changes of the inner fd (#3430)
    • net: update datagram docs on splitting (#3448)
    • time: document that Sleep is not Unpin (#3457)
    • sync: add link to PollSemaphore (#3456)
    • task: add LocalSet example (#3438)
    • sync: improve bounded mpsc documentation (#3458)
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Roadmap for first release

    Roadmap for first release

    Issue for tracking all features planned to be included in the first release of Triox. Feel free to comment and to suggest or contribute new features.

    Contributions are welcome! Also the list can be extended if you feel like we're missing a feature :)

    We use the term apps to refer to modules that add certain services to Triox (similar to Nextcloud apps). We move services into apps to keep our code better organized.

    Planned core apps

    • [x] Auth
    • [x] Files
    • [ ] Settings (user settings and admin panel)
    • [ ] WebDAV

    Additional features

    • [x] Rate limiting
    • [ ] Email verification on sign up
    • [ ] Allow file sharing
    • [ ] Unify app interfaces and modularize the code
    • [ ] Improve database code
    • [ ] Further front-end improvements
    • [ ] More tests
    • [ ] Custom error type

    Nice to have

    • [ ] WASM based front-end
    • [ ] Add a Matrix app (for a matrix chat service)
    • [ ] Add file sync app
    • [ ] Support different databases (especially PostgreSQL)
    • [ ] File encryption
    • [ ] Linux package
    enhancement help wanted 
    opened by AaronErhardt 0
  • Add WASM based Frontent

    Add WASM based Frontent

    The backend is already in a good shape with basic functionality, but we still need a frontend for the server! We implemented a basic frontend in JavaScript to have an orientation for the actual frontend. But now we'd like to use something more efficient and also something written in Rust.

    Currently the following functionality needs to be added:

    • [ ] Sign in + Sign up
    • [ ] Listing + Downloading + Uploading files

    Any help on this issue would be much appreciated!

    enhancement 
    opened by AaronErhardt 2
Owner
Triox
Next Generation cloud storage server that is secure, fast, and reliable
Triox
Implements the free and open audio codec Opus in Rust.

opus-native Overview Implements the free and open audio codec Opus in Rust. Status This crate is under heavy development. Most functionality is not wo

Nils Hasenbanck 9 Nov 28, 2022
Midnote is a terminal application that reads a MIDI file and displays you its notes bar-by-bar, while playing it.

MIDNOTE Midnote is a terminal application that reads a MIDI file and displays you its notes bar-by-bar, while playing it. Goals As a blind musician my

null 4 Oct 30, 2022
Simple personal server to serve audiofiles files from folders.

Simple personal server to serve audio files from directories. Intended primarily for audio books, but anything with decent directories structure will do. Focus here is on simplicity and minimalistic design.

Ivan Zderadicka 571 Dec 29, 2022
Symphonia is a pure Rust audio decoding and media demuxing library supporting AAC, FLAC, MP3, MP4, OGG, Vorbis, and WAV.

Pure Rust multimedia format demuxing, tag reading, and audio decoding library

Philip Deljanov 1k Jan 2, 2023
A library and application for lossless, format-preserving, two-pass optimization and repair of Vorbis data, reducing its size without altering any audio information.

OptiVorbis A library and application for lossless, format-preserving, two-pass optimization and repair of Vorbis data, reducing its size without alter

OptiVorbis 27 Jan 3, 2023
Program to check if stereo wav files have identical channels (faux-stereo) and convert them to mono.

zrtstr Command line application for checking WAV-files for identical channels, detecting faux-stereo files generated by some audio-editing software an

Kirill 22 Nov 6, 2022
Idiomatic Rust bindings for OpenAL 1.1 and extensions (including EFX).

alto alto provides idiomatic Rust bindings for OpenAL 1.1 and extensions (including EFX). WARNING Because Alto interacts with global C state via dynam

null 80 Aug 7, 2022
High-level PortMidi bindings and wrappers for Rust

portmidi-rs High-level PortMidi bindings for Rust. PortMidi website: http://portmedia.sourceforge.net/portmidi/ Installation Add this to your Cargo.to

Philippe Delrieu 69 Dec 1, 2022
PortAudio bindings and wrappers for Rust.

rust-portaudio PortAudio bindings and wrappers for Rust. PortAudio is a free, cross-platform, open-source, audio I/O library. rust-portaudio is still

null 331 Dec 23, 2022
A Rust environment for sound synthesis and algorithmic composition.

Sorceress A Rust environment for sound synthesis and algorithmic composition, powered by SuperCollider. Overview Sorceress is a Rust crate that provid

Wesley Merkel 82 Dec 26, 2022
An open-source and fully-featured Digital Audio Workstation, made by musicians, for musicians

Meadowlark An open-source and fully-featured Digital Audio Workstation, made by musicians, for musicians. *Current design mockup, not a functioning pr

Meadowlark 1k Jan 7, 2023
A next-generation music player and manager

ouverture A next-generation music player and manager Very much at Work-In-Planning stage now Planned features GUI (localizable) Backend (something lik

Michael B 9 Nov 17, 2022
Auritia is a DAW coded in Rust and Vue in hopes of having cross platform compatability, while also providing enough features for anyone to use professionally

Steps Install WebView if you're not on Windows 11 Install Node deps npm i To run the dev server do npm run tauri dev Compiling Linux You will need to

Auritia 20 Aug 27, 2022
Random music in Annil and stream as a radio station.

anni-radio anni-radio is an audio streaming client for Project Anni. Installation cargo install --git https://github.com/project-anni/radio Dependency

Project Anni 2 Dec 16, 2021
Loopers is graphical live looper, written in Rust, designed for ease of use and rock-solid stability

Loopers Loopers is a graphical live looper, written in Rust, designed for ease of use and rock-solid stability. It can be used as a practice tool, com

Micah Wylde 81 Dec 29, 2022
Simple examples to demonstrate full-stack Rust audio plugin dev with baseplug and iced_audio

iced baseplug examples Simple examples to demonstrate full-stack Rust audio plugin dev with baseplug and iced_audio WIP (The GUI knobs do nothing curr

Billy Messenger 10 Sep 12, 2022
A wav encoding and decoding library in Rust

Hound A wav encoding and decoding library in Rust. Hound can read and write the WAVE audio format, an ubiquitous format for raw, uncompressed audio. T

Ruud van Asseldonk 345 Dec 27, 2022
Rust task runner and build tool.

cargo-make Rust task runner and build tool. Overview Installation Binary Release Usage Simple Example Tasks, Dependencies and Aliases Commands, Script

Sagie Gur-Ari 1.8k Jan 7, 2023
VanillaWindowsTools - Tools for parsing and playing

VanillaWindowsTools - Tools for parsing and playing

Matthew Seyer 7 Dec 2, 2022