Skip to content

Commit cfb2664

Browse files
authored
Merge pull request #44 from Power2All/v4.0.3
Library update & Sentry interation v4.0.3
2 parents dd78b72 + 17f90d2 commit cfb2664

File tree

9 files changed

+1290
-426
lines changed

9 files changed

+1290
-426
lines changed

Cargo.lock

+915-115
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "torrust-actix"
3-
version = "4.0.2"
3+
version = "4.0.3"
44
edition = "2021"
55
license = "AGPL-3.0"
66
authors = [
@@ -31,7 +31,7 @@ byteorder = "^1.5"
3131
chrono = "^0.4"
3232
clap = { version = "^4.5", features = ["derive"] }
3333
clap_builder = "^4.5"
34-
fern = { version = "^0.6", features = ["colored"] }
34+
fern = { version = "^0.7", features = ["colored"] }
3535
futures-util = "^0.3"
3636
hex = "^0.4"
3737
log = "^0.4"
@@ -42,13 +42,15 @@ rcgen = "^0.13"
4242
regex = "^1.11"
4343
rustls = { version = "^0.23", default-features = false, features = ["std", "ring"] }
4444
rustls-pemfile = "^2.2"
45+
sentry = "0.34.0"
46+
sentry-actix = "0.34.0"
4547
serde = { version = "^1.0", features = ["derive"] }
4648
serde_json = { version = "^1.0", features = ["preserve_order"] }
4749
serde_millis = "^0.1"
4850
sha1 = "^0.10"
4951
sqlx = { version = "^0.8", features = ["mysql", "postgres", "sqlite", "runtime-tokio-rustls"] }
50-
thiserror = "^1.0"
51-
tokio = { version = "^1.40", features = ["full"] }
52+
thiserror = "^2.0"
53+
tokio = { version = "^1.41", features = ["full"] }
5254
tokio-shutdown = "^0.1"
5355
toml = "^0.8"
5456
utoipa = { version = "^5", features = ["actix_extras"] }

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ Swagger UI is introduced, and when enabled in the configuration, is accessible t
5656

5757
### ChangeLog
5858

59+
#### v4.0.3
60+
* Fixing announce and scrape paths, since it is the wrong way.
61+
* Fixing various smaller bugs that isn't app-breaking, but should be handled better.
62+
* Preparing work for version v4.1.0, which will introduce LUA support for middleware.
63+
5964
#### v4.0.2
6065
* Added option that the system will remove data from database.
6166
* Added updates variables for the white/black list and keys tables.

docker/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ FROM rust:alpine
22

33
RUN apk add git musl-dev curl
44
RUN git clone https://github.com/Power2All/torrust-actix.git /tmp/torrust-actix
5-
RUN cd /tmp/torrust-actix && git checkout tags/v4.0.2
5+
RUN cd /tmp/torrust-actix && git checkout tags/v4.0.3
66
WORKDIR /tmp/torrust-actix
77
RUN cd /tmp/torrust-actix
88
RUN cargo build --release && rm -Rf target/release/.fingerprint target/release/build target/release/deps target/release/examples target/release/incremental

src/api/api.rs

+25-8
Original file line numberDiff line numberDiff line change
@@ -140,22 +140,38 @@ pub async fn api_service(
140140
exit(1);
141141
}
142142

143-
let key_file = &mut BufReader::new(File::open(api_server_object.ssl_key.clone().unwrap()).unwrap());
144-
let certs_file = &mut BufReader::new(File::open(api_server_object.ssl_cert.clone().unwrap()).unwrap());
143+
let key_file = &mut BufReader::new(match File::open(match api_server_object.ssl_key.clone() {
144+
None => { panic!("[APIS] SSL key not set!"); }
145+
Some(data) => { data }
146+
}) {
147+
Ok(data) => { data }
148+
Err(data) => { panic!("[APIS] SSL key unreadable: {}", data); }
149+
});
150+
let certs_file = &mut BufReader::new(match File::open(match api_server_object.ssl_cert.clone() {
151+
None => { panic!("[APIS] SSL cert not set!"); }
152+
Some(data) => { data }
153+
}) {
154+
Ok(data) => { data }
155+
Err(data) => { panic!("[APIS] SSL cert unreadable: {}", data); }
156+
});
145157

146-
let tls_certs = rustls_pemfile::certs(certs_file).collect::<Result<Vec<_>, _>>().unwrap();
158+
let tls_certs = match rustls_pemfile::certs(certs_file).collect::<Result<Vec<_>, _>>() {
159+
Ok(data) => { data }
160+
Err(data) => { panic!("[APIS] SSL cert couldn't be extracted: {}", data); }
161+
};
147162
let tls_key = match rustls_pemfile::pkcs8_private_keys(key_file).next().unwrap() {
148-
Err(_) => { exit(1); }
149163
Ok(data) => { data }
164+
Err(data) => { panic!("[APIS] SSL key couldn't be extracted: {}", data); }
150165
};
151166

152-
let tls_config = rustls::ServerConfig::builder()
153-
.with_no_client_auth()
154-
.with_single_cert(tls_certs, rustls::pki_types::PrivateKeyDer::Pkcs8(tls_key))
155-
.unwrap();
167+
let tls_config = match rustls::ServerConfig::builder().with_no_client_auth().with_single_cert(tls_certs, rustls::pki_types::PrivateKeyDer::Pkcs8(tls_key)) {
168+
Ok(data) => { data }
169+
Err(data) => { panic!("[APIS] SSL config couldn't be created: {}", data); }
170+
};
156171

157172
let server = HttpServer::new(move || {
158173
App::new()
174+
.wrap(sentry_actix::Sentry::new())
159175
.wrap(api_service_cors())
160176
.configure(api_service_routes(Arc::new(ApiServiceData {
161177
torrent_tracker: data.clone(),
@@ -177,6 +193,7 @@ pub async fn api_service(
177193
info!("[API] Starting server listener on {}", addr);
178194
let server = HttpServer::new(move || {
179195
App::new()
196+
.wrap(sentry_actix::Sentry::new())
180197
.wrap(api_service_cors())
181198
.configure(api_service_routes(Arc::new(ApiServiceData {
182199
torrent_tracker: data.clone(),

src/config/impls/configuration.rs

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ impl Configuration {
3737
peers_cleanup_interval: Some(900),
3838
total_downloads: 0,
3939
swagger: Some(false),
40+
sentry: Some(false),
41+
sentry_url: None
4042
}),
4143
database: Some(DatabaseConfig {
4244
engine: Some(DatabaseDrivers::sqlite3),

src/config/structs/tracker_config.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ pub struct TrackerConfig {
1313
pub peers_timeout: Option<u64>,
1414
pub peers_cleanup_interval: Option<u64>,
1515
pub total_downloads: u64,
16-
pub swagger: Option<bool>
16+
pub swagger: Option<bool>,
17+
pub sentry: Option<bool>,
18+
pub sentry_url: Option<String>
1719
}

src/http/http.rs

+28-11
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ pub fn http_service_routes(data: Arc<HttpServiceData>) -> Box<dyn Fn(&mut Servic
4242
cfg.service(web::resource("/announce")
4343
.route(web::get().to(http_service_announce))
4444
);
45-
cfg.service(web::resource("/announce/{key}")
45+
cfg.service(web::resource("/{key/announce")
4646
.route(web::get().to(http_service_announce_key))
4747
);
48-
cfg.service(web::resource("/announce/{key}/{userkey}")
48+
cfg.service(web::resource("/{key}/{userkey}announce")
4949
.route(web::get().to(http_service_announce_userkey))
5050
);
5151
cfg.service(web::resource("/scrape")
5252
.route(web::get().to(http_service_scrape))
5353
);
54-
cfg.service(web::resource("/scrape/{key}")
54+
cfg.service(web::resource("/{key}/scrape")
5555
.route(web::get().to(http_service_scrape_key))
5656
);
5757
cfg.default_service(web::route().to(http_service_not_found));
@@ -76,22 +76,38 @@ pub async fn http_service(
7676
exit(1);
7777
}
7878

79-
let key_file = &mut BufReader::new(File::open(http_server_object.ssl_key.clone().unwrap()).unwrap());
80-
let certs_file = &mut BufReader::new(File::open(http_server_object.ssl_cert.clone().unwrap()).unwrap());
79+
let key_file = &mut BufReader::new(match File::open(match http_server_object.ssl_key.clone() {
80+
None => { panic!("[HTTPS] SSL key not set!"); }
81+
Some(data) => { data }
82+
}) {
83+
Ok(data) => { data }
84+
Err(data) => { panic!("[HTTPS] SSL key unreadable: {}", data); }
85+
});
86+
let certs_file = &mut BufReader::new(match File::open(match http_server_object.ssl_cert.clone() {
87+
None => { panic!("[HTTPS] SSL cert not set!"); }
88+
Some(data) => { data }
89+
}) {
90+
Ok(data) => { data }
91+
Err(data) => { panic!("[HTTPS] SSL cert unreadable: {}", data); }
92+
});
8193

82-
let tls_certs = rustls_pemfile::certs(certs_file).collect::<Result<Vec<_>, _>>().unwrap();
94+
let tls_certs = match rustls_pemfile::certs(certs_file).collect::<Result<Vec<_>, _>>() {
95+
Ok(data) => { data }
96+
Err(data) => { panic!("[HTTPS] SSL cert couldn't be extracted: {}", data); }
97+
};
8398
let tls_key = match rustls_pemfile::pkcs8_private_keys(key_file).next().unwrap() {
84-
Err(_) => { exit(1); }
8599
Ok(data) => { data }
100+
Err(data) => { panic!("[HTTPS] SSL key couldn't be extracted: {}", data); }
86101
};
87102

88-
let tls_config = rustls::ServerConfig::builder()
89-
.with_no_client_auth()
90-
.with_single_cert(tls_certs, rustls::pki_types::PrivateKeyDer::Pkcs8(tls_key))
91-
.unwrap();
103+
let tls_config = match rustls::ServerConfig::builder().with_no_client_auth().with_single_cert(tls_certs, rustls::pki_types::PrivateKeyDer::Pkcs8(tls_key)) {
104+
Ok(data) => { data }
105+
Err(data) => { panic!("[HTTPS] SSL config couldn't be created: {}", data); }
106+
};
92107

93108
let server = HttpServer::new(move || {
94109
App::new()
110+
.wrap(sentry_actix::Sentry::new())
95111
.wrap(http_service_cors())
96112
.configure(http_service_routes(Arc::new(HttpServiceData {
97113
torrent_tracker: data.clone(),
@@ -113,6 +129,7 @@ pub async fn http_service(
113129
info!("[HTTP] Starting server listener on {}", addr);
114130
let server = HttpServer::new(move || {
115131
App::new()
132+
.wrap(sentry_actix::Sentry::new())
116133
.wrap(http_service_cors())
117134
.configure(http_service_routes(Arc::new(HttpServiceData {
118135
torrent_tracker: data.clone(),

0 commit comments

Comments
 (0)