Skip to content

Commit 9c1b33b

Browse files
authored
Merge pull request #42 from Power2All/v4.0.2
V4.0.2
2 parents 8876d2d + 8f59500 commit 9c1b33b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2786
-1771
lines changed

Cargo.lock

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

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "torrust-actix"
3-
version = "4.0.1"
3+
version = "4.0.2"
44
edition = "2021"
55
license = "AGPL-3.0"
66
authors = [

README.md

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

5757
### ChangeLog
5858

59+
#### v4.0.2
60+
* Added option that the system will remove data from database.
61+
* Added updates variables for the white/black list and keys tables.
62+
* Renaming the "database" naming which should be "tables".
63+
* A lot of fixes and bugs I stumbled upon.
64+
5965
#### v4.0.0
6066
* Completely rebuilt of the tracker code, for readability.
6167
* Moved to Actix v4, thus versioning this software to v4.0.0 as well.

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.1
5+
RUN cd /tmp/torrust-actix && git checkout tags/v4.0.2
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

+53-29
Original file line numberDiff line numberDiff line change
@@ -49,44 +49,68 @@ pub fn api_service_routes(data: Arc<ApiServiceData>) -> Box<dyn Fn(&mut ServiceC
4949
);
5050

5151
// Torrents API Routing
52-
cfg.service(web::resource("api/torrent/{info_hash}").route(web::get().to(api_service_torrent_get)));
53-
cfg.service(web::resource("api/torrents").route(web::get().to(api_service_torrents_get)));
52+
cfg.service(web::resource("api/torrent/{info_hash}")
53+
.route(web::get().to(api_service_torrent_get))
54+
.route(web::delete().to(api_service_torrent_delete))
55+
);
5456
cfg.service(web::resource("api/torrent/{info_hash}/{completed}").route(web::post().to(api_service_torrent_post)));
55-
cfg.service(web::resource("api/torrents").route(web::post().to(api_service_torrents_post)));
56-
cfg.service(web::resource("api/torrent/{info_hash}").route(web::delete().to(api_service_torrent_delete)));
57-
cfg.service(web::resource("api/torrents").route(web::delete().to(api_service_torrents_delete)));
57+
cfg.service(web::resource("api/torrents")
58+
.route(web::get().to(api_service_torrents_get))
59+
.route(web::post().to(api_service_torrents_post))
60+
.route(web::delete().to(api_service_torrents_delete))
61+
);
5862

5963
// Whitelist API Routing
60-
cfg.service(web::resource("api/whitelist/{info_hash}").route(web::get().to(api_service_whitelist_get)));
61-
cfg.service(web::resource("api/whitelists").route(web::get().to(api_service_whitelists_get)));
62-
cfg.service(web::resource("api/whitelist/{info_hash}").route(web::post().to(api_service_whitelist_post)));
63-
cfg.service(web::resource("api/whitelists").route(web::post().to(api_service_whitelists_post)));
64-
cfg.service(web::resource("api/whitelist/{info_hash}").route(web::delete().to(api_service_whitelist_delete)));
65-
cfg.service(web::resource("api/whitelists").route(web::delete().to(api_service_whitelists_delete)));
64+
cfg.service(web::resource("api/whitelist/{info_hash}")
65+
.route(web::get().to(api_service_whitelist_get))
66+
.route(web::post().to(api_service_whitelist_post))
67+
.route(web::delete().to(api_service_whitelist_delete))
68+
);
69+
cfg.service(web::resource("api/whitelists")
70+
.route(web::get().to(api_service_whitelists_get))
71+
.route(web::post().to(api_service_whitelists_post))
72+
.route(web::delete().to(api_service_whitelists_delete))
73+
);
6674

6775
// Blacklist API Routing
68-
cfg.service(web::resource("api/blacklist/{info_hash}").route(web::get().to(api_service_blacklist_get)));
69-
cfg.service(web::resource("api/blacklists").route(web::get().to(api_service_blacklists_get)));
70-
cfg.service(web::resource("api/blacklist/{info_hash}").route(web::post().to(api_service_blacklist_post)));
71-
cfg.service(web::resource("api/blacklists").route(web::post().to(api_service_blacklists_post)));
72-
cfg.service(web::resource("api/blacklist/{info_hash}").route(web::delete().to(api_service_blacklist_delete)));
73-
cfg.service(web::resource("api/blacklists").route(web::delete().to(api_service_blacklists_delete)));
76+
cfg.service(web::resource("api/blacklist/{info_hash}")
77+
.route(web::get().to(api_service_blacklist_get))
78+
.route(web::post().to(api_service_blacklist_post))
79+
.route(web::delete().to(api_service_blacklist_delete))
80+
);
81+
cfg.service(web::resource("api/blacklists")
82+
.route(web::get().to(api_service_blacklists_get))
83+
.route(web::post().to(api_service_blacklists_post))
84+
.route(web::delete().to(api_service_blacklists_delete))
85+
);
7486

7587
// Keys API Routing
76-
cfg.service(web::resource("api/key/{key_hash}").route(web::get().to(api_service_key_get)));
77-
cfg.service(web::resource("api/keys").route(web::get().to(api_service_keys_get)));
78-
cfg.service(web::resource("api/key/{key_hash}/{timeout}").route(web::post().to(api_service_key_post)));
79-
cfg.service(web::resource("api/keys").route(web::post().to(api_service_keys_post)));
80-
cfg.service(web::resource("api/key/{info_hash}").route(web::delete().to(api_service_key_delete)));
81-
cfg.service(web::resource("api/keys").route(web::delete().to(api_service_keys_delete)));
88+
cfg.service(web::resource("api/key/{key_hash}")
89+
.route(web::get().to(api_service_key_get))
90+
.route(web::delete().to(api_service_key_delete))
91+
);
92+
cfg.service(web::resource("api/key/{key_hash}/{timeout}")
93+
.route(web::post().to(api_service_key_post))
94+
);
95+
cfg.service(web::resource("api/keys")
96+
.route(web::get().to(api_service_keys_get))
97+
.route(web::post().to(api_service_keys_post))
98+
.route(web::delete().to(api_service_keys_delete))
99+
);
82100

83101
// Users API Routing (SHA1 ID/UUID hashed key)
84-
cfg.service(web::resource("api/user/{id}").route(web::get().to(api_service_user_get)));
85-
cfg.service(web::resource("api/users").route(web::get().to(api_service_users_get)));
86-
cfg.service(web::resource("api/user/{id}/{key}/{uploaded}/{downloaded}/{completed}/{updated}/{active}").route(web::post().to(api_service_user_post)));
87-
cfg.service(web::resource("api/keys").route(web::post().to(api_service_users_post)));
88-
cfg.service(web::resource("api/key/{info_hash}").route(web::delete().to(api_service_user_delete)));
89-
cfg.service(web::resource("api/keys").route(web::delete().to(api_service_users_delete)));
102+
cfg.service(web::resource("api/user/{id}")
103+
.route(web::get().to(api_service_user_get))
104+
.route(web::delete().to(api_service_user_delete))
105+
);
106+
cfg.service(web::resource("api/user/{id}/{key}/{uploaded}/{downloaded}/{completed}/{updated}/{active}")
107+
.route(web::post().to(api_service_user_post))
108+
);
109+
cfg.service(web::resource("api/users")
110+
.route(web::get().to(api_service_users_get))
111+
.route(web::post().to(api_service_users_post))
112+
.route(web::delete().to(api_service_users_delete))
113+
);
90114

91115
// Swagger UI Routing
92116
if data.torrent_tracker.config.tracker_config.clone().unwrap().swagger.unwrap_or(false) {

src/api/api_blacklists.rs

+17
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::api::api::{api_parse_body, api_service_token, api_validation};
88
use crate::api::structs::api_service_data::ApiServiceData;
99
use crate::api::structs::query_token::QueryToken;
1010
use crate::common::common::hex2bin;
11+
use crate::tracker::enums::updates_action::UpdatesAction;
1112
use crate::tracker::structs::info_hash::InfoHash;
1213

1314
pub async fn api_service_blacklist_get(request: HttpRequest, path: web::Path<String>, data: Data<Arc<ApiServiceData>>) -> HttpResponse
@@ -88,6 +89,10 @@ pub async fn api_service_blacklist_post(request: HttpRequest, path: web::Path<St
8889
Err(_) => { return HttpResponse::BadRequest().content_type(ContentType::json()).json(json!({"status": format!("invalid info_hash {}", info)})); }
8990
};
9091

92+
if data.torrent_tracker.config.database.clone().unwrap().persistent {
93+
let _ = data.torrent_tracker.add_blacklist_update(info_hash, UpdatesAction::Add);
94+
}
95+
9196
return match data.torrent_tracker.add_blacklist(info_hash) {
9297
true => { HttpResponse::Ok().content_type(ContentType::json()).json(json!({"status": "ok"})) }
9398
false => { HttpResponse::NotModified().content_type(ContentType::json()).json(json!({"status": format!("info_hash updated {}", info)})) }
@@ -124,6 +129,10 @@ pub async fn api_service_blacklists_post(request: HttpRequest, payload: web::Pay
124129
Err(_) => { return HttpResponse::BadRequest().content_type(ContentType::json()).json(json!({"status": format!("invalid info_hash {}", info)})) }
125130
};
126131

132+
if data.torrent_tracker.config.database.clone().unwrap().persistent {
133+
let _ = data.torrent_tracker.add_blacklist_update(info_hash, UpdatesAction::Add);
134+
}
135+
127136
match data.torrent_tracker.add_blacklist(info_hash) {
128137
true => { blacklists_output.insert(info_hash, json!({"status": "ok"})); }
129138
false => { blacklists_output.insert(info_hash, json!({"status": "info_hash updated"})); }
@@ -153,6 +162,10 @@ pub async fn api_service_blacklist_delete(request: HttpRequest, path: web::Path<
153162
Err(_) => { return HttpResponse::BadRequest().content_type(ContentType::json()).json(json!({"status": format!("invalid info_hash {}", info)})); }
154163
};
155164

165+
if data.torrent_tracker.config.database.clone().unwrap().persistent {
166+
let _ = data.torrent_tracker.add_blacklist_update(info_hash, UpdatesAction::Remove);
167+
}
168+
156169
return match data.torrent_tracker.remove_blacklist(info_hash) {
157170
true => { HttpResponse::Ok().content_type(ContentType::json()).json(json!({"status": "ok"})) }
158171
false => { HttpResponse::NotModified().content_type(ContentType::json()).json(json!({"status": format!("unknown info_hash {}", info)})) }
@@ -189,6 +202,10 @@ pub async fn api_service_blacklists_delete(request: HttpRequest, payload: web::P
189202
Err(_) => { return HttpResponse::BadRequest().content_type(ContentType::json()).json(json!({"status": format!("invalid info_hash {}", info)})) }
190203
};
191204

205+
if data.torrent_tracker.config.database.clone().unwrap().persistent {
206+
let _ = data.torrent_tracker.add_blacklist_update(info_hash, UpdatesAction::Remove);
207+
}
208+
192209
match data.torrent_tracker.remove_blacklist(info_hash) {
193210
true => { blacklists_output.insert(info_hash, json!({"status": "ok"})); }
194211
false => { blacklists_output.insert(info_hash, json!({"status": "unknown info_hash"})); }

0 commit comments

Comments
 (0)