Skip to content

Commit 3c4522f

Browse files
committed
Merge #614: 448 move authorization logic to new layer
478e234 feat: [#448] new authorization service implemented in the other services (Mario) 9ebd7b5 feat: [#448] new authorization service (Mario) b1d5536 feat: [#448] new user repository trait (Mario) a2ce990 feat: [#448] added mockall dependency (Mario) Pull request description: Resolves #448. Replaces #520. ACKs for top commit: josecelano: ACK478e2349f159da7d08b60382fd80a3f236067637 Tree-SHA512: ec93e9d95ff8b934397bd1bb13cc76077b33d2abd962bad0b667b134768066ed33aced0b174830eea7947a0e9f53273fe062147ee15342eaf1db8a5dfaaa3cfd
2 parents 6d4a955 + 478e234 commit 3c4522f

File tree

13 files changed

+348
-80
lines changed

13 files changed

+348
-80
lines changed

Cargo.lock

Lines changed: 72 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ hyper = "1"
5656
hyper-util = { version = "0.1.3", features = ["http1", "http2", "tokio"] }
5757
indexmap = "2"
5858
jsonwebtoken = "9"
59+
mockall = "0.12.1"
5960
lazy_static = "1.4.0"
6061
lettre = { version = "0", features = [
6162
"builder",

src/app.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use crate::services::torrent::{
1616
DbCanonicalInfoHashGroupRepository, DbTorrentAnnounceUrlRepository, DbTorrentFileRepository, DbTorrentInfoRepository,
1717
DbTorrentListingGenerator, DbTorrentRepository, DbTorrentTagRepository,
1818
};
19-
use crate::services::user::{self, DbBannedUserList, DbUserProfileRepository, DbUserRepository};
20-
use crate::services::{proxy, settings, torrent};
19+
use crate::services::user::{self, DbBannedUserList, DbUserProfileRepository, DbUserRepository, Repository};
20+
use crate::services::{authorization, proxy, settings, torrent};
2121
use crate::tracker::statistics_importer::StatisticsImporter;
2222
use crate::web::api::server::signals::Halted;
2323
use crate::web::api::server::v1::auth::Authentication;
@@ -74,7 +74,7 @@ pub async fn run(configuration: Configuration, api_version: &Version) -> Running
7474
// Repositories
7575
let category_repository = Arc::new(DbCategoryRepository::new(database.clone()));
7676
let tag_repository = Arc::new(DbTagRepository::new(database.clone()));
77-
let user_repository = Arc::new(DbUserRepository::new(database.clone()));
77+
let user_repository: Arc<Box<dyn Repository>> = Arc::new(Box::new(DbUserRepository::new(database.clone())));
7878
let user_authentication_repository = Arc::new(DbUserAuthenticationRepository::new(database.clone()));
7979
let user_profile_repository = Arc::new(DbUserProfileRepository::new(database.clone()));
8080
let torrent_repository = Arc::new(DbTorrentRepository::new(database.clone()));
@@ -87,15 +87,19 @@ pub async fn run(configuration: Configuration, api_version: &Version) -> Running
8787
let banned_user_list = Arc::new(DbBannedUserList::new(database.clone()));
8888

8989
// Services
90+
let authorization_service = Arc::new(authorization::Service::new(user_repository.clone()));
9091
let tracker_service = Arc::new(tracker::service::Service::new(configuration.clone(), database.clone()).await);
9192
let tracker_statistics_importer =
9293
Arc::new(StatisticsImporter::new(configuration.clone(), tracker_service.clone(), database.clone()).await);
9394
let mailer_service = Arc::new(mailer::Service::new(configuration.clone()).await);
9495
let image_cache_service: Arc<ImageCacheService> = Arc::new(ImageCacheService::new(configuration.clone()).await);
95-
let category_service = Arc::new(category::Service::new(category_repository.clone(), user_repository.clone()));
96-
let tag_service = Arc::new(tag::Service::new(tag_repository.clone(), user_repository.clone()));
96+
let category_service = Arc::new(category::Service::new(
97+
category_repository.clone(),
98+
authorization_service.clone(),
99+
));
100+
let tag_service = Arc::new(tag::Service::new(tag_repository.clone(), authorization_service.clone()));
97101
let proxy_service = Arc::new(proxy::Service::new(image_cache_service.clone(), user_repository.clone()));
98-
let settings_service = Arc::new(settings::Service::new(configuration.clone(), user_repository.clone()));
102+
let settings_service = Arc::new(settings::Service::new(configuration.clone(), authorization_service.clone()));
99103
let torrent_index = Arc::new(torrent::Index::new(
100104
configuration.clone(),
101105
tracker_statistics_importer.clone(),

src/common.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ use crate::services::torrent::{
1010
DbCanonicalInfoHashGroupRepository, DbTorrentAnnounceUrlRepository, DbTorrentFileRepository, DbTorrentInfoRepository,
1111
DbTorrentListingGenerator, DbTorrentRepository, DbTorrentTagRepository,
1212
};
13-
use crate::services::user::{self, DbBannedUserList, DbUserProfileRepository, DbUserRepository};
13+
use crate::services::user::{self, DbBannedUserList, DbUserProfileRepository, Repository};
1414
use crate::services::{proxy, settings, torrent};
1515
use crate::tracker::statistics_importer::StatisticsImporter;
1616
use crate::web::api::server::v1::auth::Authentication;
1717
use crate::{mailer, tracker};
18+
1819
pub type Username = String;
1920

2021
pub struct AppData {
@@ -30,7 +31,7 @@ pub struct AppData {
3031
// Repositories
3132
pub category_repository: Arc<DbCategoryRepository>,
3233
pub tag_repository: Arc<DbTagRepository>,
33-
pub user_repository: Arc<DbUserRepository>,
34+
pub user_repository: Arc<Box<dyn Repository>>,
3435
pub user_authentication_repository: Arc<DbUserAuthenticationRepository>,
3536
pub user_profile_repository: Arc<DbUserProfileRepository>,
3637
pub torrent_repository: Arc<DbTorrentRepository>,
@@ -66,7 +67,7 @@ impl AppData {
6667
// Repositories
6768
category_repository: Arc<DbCategoryRepository>,
6869
tag_repository: Arc<DbTagRepository>,
69-
user_repository: Arc<DbUserRepository>,
70+
user_repository: Arc<Box<dyn Repository>>,
7071
user_authentication_repository: Arc<DbUserAuthenticationRepository>,
7172
user_profile_repository: Arc<DbUserProfileRepository>,
7273
torrent_repository: Arc<DbTorrentRepository>,

src/services/authentication.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@ use argon2::{Argon2, PasswordHash, PasswordVerifier};
55
use jsonwebtoken::{decode, encode, Algorithm, DecodingKey, EncodingKey, Header, Validation};
66
use pbkdf2::Pbkdf2;
77

8-
use super::user::{DbUserProfileRepository, DbUserRepository};
8+
use super::user::DbUserProfileRepository;
99
use crate::config::Configuration;
1010
use crate::databases::database::{Database, Error};
1111
use crate::errors::ServiceError;
1212
use crate::models::user::{UserAuthentication, UserClaims, UserCompact, UserId};
13+
use crate::services::user::Repository;
1314
use crate::utils::clock;
1415

1516
pub struct Service {
1617
configuration: Arc<Configuration>,
1718
json_web_token: Arc<JsonWebToken>,
18-
user_repository: Arc<DbUserRepository>,
19+
user_repository: Arc<Box<dyn Repository>>,
1920
user_profile_repository: Arc<DbUserProfileRepository>,
2021
user_authentication_repository: Arc<DbUserAuthenticationRepository>,
2122
}
@@ -24,7 +25,7 @@ impl Service {
2425
pub fn new(
2526
configuration: Arc<Configuration>,
2627
json_web_token: Arc<JsonWebToken>,
27-
user_repository: Arc<DbUserRepository>,
28+
user_repository: Arc<Box<dyn Repository>>,
2829
user_profile_repository: Arc<DbUserProfileRepository>,
2930
user_authentication_repository: Arc<DbUserAuthenticationRepository>,
3031
) -> Self {

0 commit comments

Comments
 (0)