From ff7c9649dc022b95306add829c31b325be7e4df5 Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Wed, 11 May 2022 16:31:24 +0200 Subject: [PATCH 1/4] fix: fix for updating the MySQL tables if upgrading from the dev build --- src/databases/mysql.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/databases/mysql.rs b/src/databases/mysql.rs index 5b6e34eb1..20052fb29 100644 --- a/src/databases/mysql.rs +++ b/src/databases/mysql.rs @@ -54,11 +54,17 @@ impl Database for MysqlDatabase { UNIQUE (`key`) );", AUTH_KEY_LENGTH as i8); + // When upgrading from < v2.3.0 + let alter_whitelist_table = "ALTER TABLE `whitelist` MODIFY `info_hash` VARCHAR(40);".to_string(); + let alter_torrents_table = "ALTER TABLE `torrents` MODIFY `info_hash` VARCHAR(40);".to_string(); + let mut conn = self.pool.get().map_err(|_| database::Error::DatabaseError)?; conn.query_drop(&create_torrents_table).expect("Could not create torrents table."); conn.query_drop(&create_keys_table).expect("Could not create keys table."); conn.query_drop(&create_whitelist_table).expect("Could not create whitelist table."); + conn.query_drop(&alter_whitelist_table).expect("Could not alter whitelist table."); + conn.query_drop(&alter_torrents_table).expect("Could not alter torrents table."); Ok(()) } From 9ec5ed23813a50202aa062d9307312ef3e1a1ff5 Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Mon, 16 May 2022 15:23:11 +0200 Subject: [PATCH 2/4] fix: fixed the max_peer_timeout, peers no longer get removed every peer_cleanup if they are within the max_peer_timeout --- Cargo.lock | 2 +- Cargo.toml | 3 +-- src/tracker/torrent.rs | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ee924fac..c328d1167 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2239,7 +2239,7 @@ dependencies = [ [[package]] name = "torrust-tracker" -version = "2.3.0" +version = "2.3.1" dependencies = [ "aquatic_udp_protocol", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 53e2949db..e07778f44 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] edition = "2021" name = "torrust-tracker" -version = "2.3.0" +version = "2.3.1" license = "AGPL-3.0" authors = ["Mick van Dijke "] description = "A feature rich BitTorrent tracker." @@ -16,7 +16,6 @@ lto = "thin" debug = 1 opt-level = 3 lto = "fat" -strip = true [dependencies] tokio = { version = "1.7", features = ["full"] } diff --git a/src/tracker/torrent.rs b/src/tracker/torrent.rs index 0c03e3f82..ce7d7b55f 100644 --- a/src/tracker/torrent.rs +++ b/src/tracker/torrent.rs @@ -74,7 +74,7 @@ impl TorrentEntry { pub fn remove_inactive_peers(&mut self, max_peer_timeout: u32) { self.peers.retain(|_, peer| { - peer.updated.elapsed() > std::time::Duration::from_secs(max_peer_timeout as u64) + peer.updated.elapsed() < std::time::Duration::from_secs(max_peer_timeout as u64) }); } } From 048d35c1172d686ce85cadaa42f77d30703ca80a Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Mon, 16 May 2022 15:27:51 +0200 Subject: [PATCH 3/4] fix: don't double count completed stat when peers announce as completed multiple times --- src/tracker/torrent.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tracker/torrent.rs b/src/tracker/torrent.rs index ce7d7b55f..0102b207b 100644 --- a/src/tracker/torrent.rs +++ b/src/tracker/torrent.rs @@ -32,9 +32,12 @@ impl TorrentEntry { AnnounceEvent::Completed => { let peer_old = self.peers.insert(peer.peer_id.clone(), peer.clone()); // Don't count if peer was not previously known - if peer_old.is_some() { - self.completed += 1; - did_torrent_stats_change = true; + if let Some(old_peer) = peer_old { + // Don't double count + if !old_peer.is_seeder() { + self.completed += 1; + did_torrent_stats_change = true; + } } } _ => { From 5aff0ba41b72df97f0ddb395834a17291546d3aa Mon Sep 17 00:00:00 2001 From: Constantin Bosse Date: Thu, 16 Jun 2022 15:25:58 +0100 Subject: [PATCH 4/4] Type: Documentation Updated the Readme format. --- README.md | 228 ++++++++++++------ ...st_Repo_Tracker_Readme_Header-20220615.jpg | Bin 0 -> 47201 bytes 2 files changed, 154 insertions(+), 74 deletions(-) create mode 100644 img/Torrust_Repo_Tracker_Readme_Header-20220615.jpg diff --git a/README.md b/README.md index beb2591ea..4ffa71250 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,182 @@ # Torrust Tracker + +![README HEADER](./img/Torrust_Repo_Tracker_Readme_Header-20220615.jpg) + ![Test](https://github.com/torrust/torrust-tracker/actions/workflows/test_build_release.yml/badge.svg) +![Open Source](https://badgen.net/badge/Open%20Source/100%25/DA2CE7) +![Cool](https://badgen.net/badge/Cool/100%25/FF7F50) +![Nautilus Sponsored](https://badgen.net/badge/Sponsor/Nautilus%20Cyberneering/red) + +## 📢Important Updates 📢 + +- No recent update [ACCESS ALL UPDATES](https://github.com/torrust/torrust-tracker/wiki/Project-Updates) + +--- + +## Index + +- [PROJECT DESCRIPTION](#project-description) +- [FEATURES](#features) +- [PROJECT ROADMAP](#project_roadmap) +- [IMPLEMENTED BEPs](#implemented-beps) +- [INSTALLATION](#installation) +- [USAGE](#usage) +- [TRACKER URL](#tracker_url) +- [BUILT IN API](#built-in-api) +- [CONTACT](#contact) +- [CREDITS](#credits) + +--- + ## Project Description -Torrust Tracker is a lightweight but incredibly powerful and feature-rich BitTorrent tracker made using Rust. +Torrust Tracker is a lightweight but incredibly powerful and feature-rich BitTorrent tracker made using Rust. ### Features -* [X] Multiple UDP server and HTTP(S) server blocks for socket binding possible -* [X] Full IPv4 and IPv6 support for both UDP and HTTP(S) -* [X] Private & Whitelisted mode -* [X] Built-in API -* [X] Torrent whitelisting -* [X] Peer authentication using time-bound keys -* [X] newTrackon check supported for both HTTP, UDP, where IPv4 and IPv6 is properly handled -* [X] SQLite3 Persistent loading and saving of the torrent hashes and completed count -* [X] MySQL support added as engine option -* [X] Periodically saving added, interval can be configured + +- [X] Multiple UDP server and HTTP(S) server blocks for socket binding possible +- [X] Full IPv4 and IPv6 support for both UDP and HTTP(S) +- [X] Private & Whitelisted mode +- [X] Built-in API +- [X] Torrent whitelisting +- [X] Peer authentication using time-bound keys +- [X] newTrackon check supported for both HTTP, UDP, where IPv4 and IPv6 is properly handled +- [X] SQLite3 Persistent loading and saving of the torrent hashes and completed count +- [X] MySQL support added as engine option +- [X] Periodically saving added, interval can be configured ### Implemented BEPs -* [BEP 3](https://www.bittorrent.org/beps/bep_0003.html): The BitTorrent Protocol -* [BEP 7](https://www.bittorrent.org/beps/bep_0007.html): IPv6 Support -* [BEP 15](http://www.bittorrent.org/beps/bep_0015.html): UDP Tracker Protocol for BitTorrent -* [BEP 23](http://bittorrent.org/beps/bep_0023.html): Tracker Returns Compact Peer Lists -* [BEP 27](http://bittorrent.org/beps/bep_0027.html): Private Torrents -* [BEP 41](http://bittorrent.org/beps/bep_0041.html): UDP Tracker Protocol Extensions -* [BEP 48](http://bittorrent.org/beps/bep_0048.html): Tracker Protocol Extension: Scrape - -## Getting Started + +- [BEP 3](https://www.bittorrent.org/beps/bep_0003.html): The BitTorrent Protocol +- [BEP 7](https://www.bittorrent.org/beps/bep_0007.html): IPv6 Support +- [BEP 15](http://www.bittorrent.org/beps/bep_0015.html): UDP Tracker Protocol for BitTorrent +- [BEP 23](http://bittorrent.org/beps/bep_0023.html): Tracker Returns Compact Peer Lists +- [BEP 27](http://bittorrent.org/beps/bep_0027.html): Private Torrents +- [BEP 41](http://bittorrent.org/beps/bep_0041.html): UDP Tracker Protocol Extensions +- [BEP 48](http://bittorrent.org/beps/bep_0048.html): Tracker Protocol Extension: Scrape + +### Roadmap + +*Coming soon.* + +--- + +## Installation + You can get the latest binaries from [releases](https://github.com/torrust/torrust-tracker/releases) or follow the install from scratch instructions below. -### Install From Scratch 1. Clone the repo. -```bash -git clone https://github.com/torrust/torrust-tracker.git -cd torrust-tracker -``` + + ```bash + git clone https://github.com/torrust/torrust-tracker.git + cd torrust-tracker + ``` 2. Build the source code. -```bash -cargo build --release -``` -### Usage -* Run the torrust-tracker once to create the `config.toml` file: -```bash -./target/release/torrust-tracker + ```bash + cargo build --release + ``` + +## Usage + +- Run the torrust-tracker once to create the `config.toml` file: + + ```bash + ./target/release/torrust-tracker + ``` + +- Edit the newly created config.toml file according to your liking, see [configuration documentation](https://torrust.github.io/torrust-documentation/torrust-tracker/config/). Eg: + + ```toml + log_level = "info" + mode = "public" + db_driver = "Sqlite3" + db_path = "data.db" + announce_interval = 120 + min_announce_interval = 120 + max_peer_timeout = 900 + on_reverse_proxy = false + external_ip = "0.0.0.0" + tracker_usage_statistics = true + persistent_torrent_completed_stat = false + inactive_peer_cleanup_interval = 600 + remove_peerless_torrents = true + + [[udp_trackers]] + enabled = false + bind_address = "0.0.0.0:6969" + + [[http_trackers]] + enabled = true + bind_address = "0.0.0.0:6969" + ssl_enabled = false + ssl_cert_path = "" + ssl_key_path = "" + + [http_api] + enabled = true + bind_address = "127.0.0.1:1212" + + [http_api.access_tokens] + admin = "MyAccessToken" + ``` + +- Run the torrust-tracker again: + + ```bash + ./target/release/torrust-tracker + ``` + +### Tracker URL + +Your tracker announce URL will be dependent on your bindings: + +```TEXT +udp://{tracker-ip:port} ``` +and/or -* Edit the newly created config.toml file according to your liking, see [configuration documentation](https://torrust.github.io/torrust-documentation/torrust-tracker/config/). Eg: -```toml -log_level = "info" -mode = "public" -db_driver = "Sqlite3" -db_path = "data.db" -announce_interval = 120 -min_announce_interval = 120 -max_peer_timeout = 900 -on_reverse_proxy = false -external_ip = "0.0.0.0" -tracker_usage_statistics = true -persistent_torrent_completed_stat = false -inactive_peer_cleanup_interval = 600 -remove_peerless_torrents = true - -[[udp_trackers]] -enabled = false -bind_address = "0.0.0.0:6969" - -[[http_trackers]] -enabled = true -bind_address = "0.0.0.0:6969" -ssl_enabled = false -ssl_cert_path = "" -ssl_key_path = "" - -[http_api] -enabled = true -bind_address = "127.0.0.1:1212" - -[http_api.access_tokens] -admin = "MyAccessToken" +```TEXT +http://{tracker-ip:port}/announce ``` +and/or -* Run the torrust-tracker again: -```bash -./target/release/torrust-tracker +```TEXT +https://{tracker-ip:port}/announce ``` -### Tracker URL -Your tracker announce URL will be **udp://{tracker-ip:port}** and/or **http://{tracker-ip:port}/announce** and/or **https://{tracker-ip:port}/announce** depending on your bindings. -In private & private_listed mode, tracker keys are added after the tracker URL like: **https://{tracker-ip:port}/announce/{key}**. +In private & private_listed mode, tracker keys are added after the tracker URL like: + +```TEXT +https://{tracker-ip:port}/announce/{key} +``` ### Built-in API + Read the API documentation [here](https://torrust.github.io/torrust-documentation/torrust-tracker/api/). +## Contact + +If you have any issues and suggestions please feel free to contact us via: + +Message `Warm Beer#3352` on Discord or email `mick@dutchbits.nl`. + +or + +[Create an issue](https://github.com/torrust/torrust-tracker/issues) + +--- + ### Credits -This project was a joint effort by [Nautilus Cyberneering GmbH](https://nautilus-cyberneering.de/) and [Dutch Bits](https://dutchbits.nl). -Also thanks to [Naim A.](https://github.com/naim94a/udpt) and [greatest-ape](https://github.com/greatest-ape/aquatic) for some parts of the code. -Further added features and functions thanks to [Power2All](https://github.com/power2all). + +This project was developed by [Dutch Bits](https://dutchbits.nl) for [Nautilus Cyberneering GmbH](https://nautilus-cyberneering.de/). + +The project has been possible through the support and contribution of both Nautilus Cyberneering, its team and collaborators, as well as that of our great open source contributors. + +Special thanks to [Naim A.](https://github.com/naim94a/udpt) and [greatest-ape](https://github.com/greatest-ape/aquatic) for some parts of the code. Also special thanks to further added features and functions by [Power2All](https://github.com/power2all). + + Thank you again to you all! diff --git a/img/Torrust_Repo_Tracker_Readme_Header-20220615.jpg b/img/Torrust_Repo_Tracker_Readme_Header-20220615.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a5c4da25092dd9d3f45a604000f777c5e3e3b26 GIT binary patch literal 47201 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ℜ4yKBBW-Htv)cto&J%y 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%0DT-qqL_Nz2cM<9N=GyZX9dB9b^|s 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 SJ@DBBpFQyZc;LdPv3~$Zu`OT# literal 0 HcmV?d00001