Skip to content

Commit 5b7e28f

Browse files
authored
Merge pull request #337 from umccr/fix/elsa-integration
fix: authorization JSON structure and user-agent
2 parents 54c9615 + ed4164b commit 5b7e28f

File tree

31 files changed

+375
-125
lines changed

31 files changed

+375
-125
lines changed

htsget-actix/src/handlers/get.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub async fn reads<H: HtsGet + Clone + Send + Sync + 'static>(
3434
request,
3535
Endpoint::Reads,
3636
app_state.auth.clone(),
37+
app_state.package_info.as_ref(),
3738
extension.map(|extension| extension.into_inner()),
3839
)
3940
.await,
@@ -59,6 +60,7 @@ pub async fn variants<H: HtsGet + Clone + Send + Sync + 'static>(
5960
request,
6061
Endpoint::Variants,
6162
app_state.auth.clone(),
63+
app_state.package_info.as_ref(),
6264
extension.map(|extension| extension.into_inner()),
6365
)
6466
.await,

htsget-actix/src/handlers/post.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ pub async fn reads<H: HtsGet + Clone + Send + Sync + 'static>(
3535
request,
3636
Endpoint::Reads,
3737
app_state.auth.clone(),
38+
app_state.package_info.as_ref(),
3839
extension.map(|extension| extension.into_inner()),
3940
)
4041
.await,
@@ -62,6 +63,7 @@ pub async fn variants<H: HtsGet + Clone + Send + Sync + 'static>(
6263
request,
6364
Endpoint::Variants,
6465
app_state.auth.clone(),
66+
app_state.package_info.as_ref(),
6567
extension.map(|extension| extension.into_inner()),
6668
)
6769
.await,

htsget-actix/src/lib.rs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use actix_cors::Cors;
77
use actix_web::dev::Server;
88
use actix_web::{App, HttpRequest, HttpServer, Responder, web};
99
use htsget_config::config::advanced::cors::CorsConfig;
10-
use htsget_config::config::service_info::ServiceInfo;
10+
use htsget_config::config::service_info::{PackageInfo, ServiceInfo};
1111
use htsget_config::config::ticket_server::TicketServerConfig;
1212
pub use htsget_config::config::{Config, USAGE};
1313
use htsget_http::error::HtsGetError;
@@ -25,6 +25,7 @@ pub struct AppState<H: HtsGet> {
2525
pub htsget: H,
2626
pub config_service_info: ServiceInfo,
2727
pub auth: Option<Auth>,
28+
pub package_info: Option<PackageInfo>,
2829
}
2930

3031
/// Configure the query server.
@@ -33,12 +34,14 @@ pub fn configure_server<H: HtsGet + Clone + Send + Sync + 'static>(
3334
htsget: H,
3435
config_service_info: ServiceInfo,
3536
auth: Option<Auth>,
37+
package_info: Option<PackageInfo>,
3638
) {
3739
service_config
3840
.app_data(web::Data::new(AppState {
3941
htsget,
4042
config_service_info,
4143
auth,
44+
package_info,
4245
}))
4346
.service(
4447
web::scope("/reads")
@@ -135,16 +138,26 @@ pub fn run_server<H: HtsGet + Clone + Send + Sync + 'static>(
135138
htsget: H,
136139
config: TicketServerConfig,
137140
service_info: ServiceInfo,
141+
package_info: PackageInfo,
138142
) -> io::Result<Server> {
139-
let app =
140-
|htsget: H, config: TicketServerConfig, service_info: ServiceInfo, auth: Option<Auth>| {
141-
App::new()
142-
.configure(|service_config: &mut web::ServiceConfig| {
143-
configure_server(service_config, htsget, service_info, auth);
144-
})
145-
.wrap(configure_cors(config.cors().clone()))
146-
.wrap(TracingLogger::default())
147-
};
143+
let app = |htsget: H,
144+
config: TicketServerConfig,
145+
service_info: ServiceInfo,
146+
auth: Option<Auth>,
147+
package_info: PackageInfo| {
148+
App::new()
149+
.configure(|service_config: &mut web::ServiceConfig| {
150+
configure_server(
151+
service_config,
152+
htsget,
153+
service_info,
154+
auth,
155+
Some(package_info),
156+
);
157+
})
158+
.wrap(configure_cors(config.cors().clone()))
159+
.wrap(TracingLogger::default())
160+
};
148161

149162
let auth = config
150163
.auth()
@@ -160,6 +173,7 @@ pub fn run_server<H: HtsGet + Clone + Send + Sync + 'static>(
160173
config_copy.clone(),
161174
service_info.clone(),
162175
auth.clone(),
176+
package_info.clone(),
163177
)
164178
});
165179

@@ -195,6 +209,7 @@ mod tests {
195209

196210
use crate::Config;
197211
use htsget_axum::server::BindServer;
212+
use htsget_config::package_info;
198213
use htsget_config::storage::file::default_path;
199214
use htsget_config::types::JsonResponse;
200215
use htsget_http::middleware::auth::AuthBuilder;
@@ -346,6 +361,7 @@ mod tests {
346361
self.config.clone().into_locations(),
347362
self.config.service_info().clone(),
348363
self.auth.clone(),
364+
Some(package_info!()),
349365
);
350366
})
351367
.wrap(configure_cors(self.config.ticket_server().cors().clone()));

htsget-actix/src/main.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,39 @@ async fn main() -> io::Result<()> {
1717

1818
if let Some(path) = Config::parse_args_with_command(command!())? {
1919
let mut config = Config::from_path(&path)?;
20-
20+
config.set_package_info(package_info!())?;
2121
config.setup_tracing()?;
2222

23-
let service_info = config.service_info_mut();
24-
service_info.set_from_package_info(package_info!())?;
25-
2623
debug!(config = ?config, "config parsed");
2724

2825
if let DataServerEnabled::Some(data_server) = config.data_server() {
2926
let local_server = data::join_handle(data_server.clone()).await?;
3027

3128
let ticket_server_config = config.ticket_server().clone();
3229
let service_info = config.service_info().clone();
30+
let package_info = config.package_info().clone();
3331

3432
select! {
3533
local_server = local_server => Ok(local_server??),
3634
actix_server = run_server(
3735
config.into_locations(),
3836
ticket_server_config,
39-
service_info
37+
service_info,
38+
package_info,
4039
)? => actix_server
4140
}
4241
} else {
4342
let ticket_server_config = config.ticket_server().clone();
4443
let service_info = config.service_info().clone();
45-
46-
run_server(config.into_locations(), ticket_server_config, service_info)?.await
44+
let package_info = config.package_info().clone();
45+
46+
run_server(
47+
config.into_locations(),
48+
ticket_server_config,
49+
service_info,
50+
package_info,
51+
)?
52+
.await
4753
}
4854
} else {
4955
Ok(())

htsget-axum/src/handlers/get.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub async fn reads<H: HtsGet + Send + Sync + 'static>(
2626
request,
2727
Endpoint::Reads,
2828
app_state.auth_middleware,
29+
app_state.package_info.as_ref(),
2930
extension.map(|extension| extension.0),
3031
)
3132
.await,
@@ -48,6 +49,7 @@ pub async fn variants<H: HtsGet + Send + Sync + 'static>(
4849
request,
4950
Endpoint::Variants,
5051
app_state.auth_middleware,
52+
app_state.package_info.as_ref(),
5153
extension.map(|extension| extension.0),
5254
)
5355
.await,

htsget-axum/src/handlers/post.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ pub async fn reads<H: HtsGet + Clone + Send + Sync + 'static>(
2828
request,
2929
Endpoint::Reads,
3030
app_state.auth_middleware,
31+
app_state.package_info.as_ref(),
3132
extension.map(|extension| extension.0),
3233
)
3334
.await,
@@ -52,6 +53,7 @@ pub async fn variants<H: HtsGet + Clone + Send + Sync + 'static>(
5253
request,
5354
Endpoint::Variants,
5455
app_state.auth_middleware,
56+
app_state.package_info.as_ref(),
5557
extension.map(|extension| extension.0),
5658
)
5759
.await,

htsget-axum/src/main.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@ async fn main() -> io::Result<()> {
1818
Config::parse_args_with_command(command!()).expect("expected valid command parsing")
1919
{
2020
let mut config = Config::from_path(&path)?;
21-
21+
config.set_package_info(package_info!())?;
2222
config.setup_tracing()?;
2323

24-
let service_info = config.service_info_mut();
25-
service_info.set_from_package_info(package_info!())?;
26-
2724
debug!(config = ?config, "config parsed");
2825

2926
if let DataServerEnabled::Some(data_server) = config.data_server() {

htsget-axum/src/server/data.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ impl From<DataServerConfig> for BindServer {
8383
let auth = config.auth().cloned();
8484

8585
match config.into_tls() {
86-
None => Self::new(addr, cors, auth),
87-
Some(tls) => Self::new_with_tls(addr, cors, auth, tls),
86+
None => Self::new(addr, cors, auth, None),
87+
Some(tls) => Self::new_with_tls(addr, cors, auth, tls, None),
8888
}
8989
}
9090
}
@@ -251,6 +251,7 @@ mod tests {
251251
"127.0.0.1:8080".parse().unwrap(),
252252
CorsConfig::default(),
253253
None,
254+
None,
254255
);
255256
assert_eq!(formatter.get_scheme(), &Scheme::Http);
256257
}
@@ -262,8 +263,12 @@ mod tests {
262263

263264
#[tokio::test]
264265
async fn get_addr_local_addr() {
265-
let mut formatter =
266-
BindServer::new("127.0.0.1:0".parse().unwrap(), CorsConfig::default(), None);
266+
let mut formatter = BindServer::new(
267+
"127.0.0.1:0".parse().unwrap(),
268+
CorsConfig::default(),
269+
None,
270+
None,
271+
);
267272
let server = formatter.bind_server().await.unwrap();
268273
assert_eq!(formatter.get_addr(), server.local_addr().unwrap());
269274
}
@@ -312,6 +317,7 @@ mod tests {
312317
CorsConfig::default(),
313318
None,
314319
server_config,
320+
None,
315321
)
316322
}
317323

htsget-axum/src/server/mod.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use axum::Router;
1616
use axum::extract::Request;
1717
use htsget_config::config::advanced::auth::AuthConfig;
1818
use htsget_config::config::advanced::cors::CorsConfig;
19-
use htsget_config::config::service_info::ServiceInfo;
19+
use htsget_config::config::service_info::{PackageInfo, ServiceInfo};
2020
use htsget_config::http::TlsServerConfig;
2121
use htsget_config::types::Scheme;
2222
use htsget_http::middleware::auth::Auth;
@@ -39,15 +39,22 @@ pub struct AppState<H: HtsGet> {
3939
pub(crate) htsget: H,
4040
pub(crate) service_info: ServiceInfo,
4141
pub(crate) auth_middleware: Option<Auth>,
42+
pub(crate) package_info: Option<PackageInfo>,
4243
}
4344

4445
impl<H: HtsGet> AppState<H> {
4546
/// Create a new app state.
46-
pub fn new(htsget: H, service_info: ServiceInfo, auth_middleware: Option<Auth>) -> Self {
47+
pub fn new(
48+
htsget: H,
49+
service_info: ServiceInfo,
50+
auth_middleware: Option<Auth>,
51+
package_info: Option<PackageInfo>,
52+
) -> Self {
4753
Self {
4854
htsget,
4955
service_info,
5056
auth_middleware,
57+
package_info,
5158
}
5259
}
5360
}
@@ -125,17 +132,24 @@ pub struct BindServer {
125132
scheme: Scheme,
126133
cors: CorsConfig,
127134
auth: Option<AuthConfig>,
135+
package_info: Option<PackageInfo>,
128136
}
129137

130138
impl BindServer {
131139
/// Create a new bind server instance.
132-
pub fn new(addr: SocketAddr, cors: CorsConfig, auth: Option<AuthConfig>) -> Self {
140+
pub fn new(
141+
addr: SocketAddr,
142+
cors: CorsConfig,
143+
auth: Option<AuthConfig>,
144+
package_info: Option<PackageInfo>,
145+
) -> Self {
133146
Self {
134147
addr,
135148
cert_key_pair: None,
136149
scheme: Scheme::Http,
137150
cors,
138151
auth,
152+
package_info,
139153
}
140154
}
141155

@@ -145,13 +159,15 @@ impl BindServer {
145159
cors: CorsConfig,
146160
auth: Option<AuthConfig>,
147161
tls: TlsServerConfig,
162+
package_info: Option<PackageInfo>,
148163
) -> Self {
149164
Self {
150165
addr,
151166
cert_key_pair: Some(tls),
152167
scheme: Scheme::Https,
153168
cors,
154169
auth,
170+
package_info,
155171
}
156172
}
157173

@@ -197,6 +213,7 @@ impl BindServer {
197213
service_info,
198214
self.cors.clone(),
199215
self.auth.clone(),
216+
self.package_info.clone(),
200217
))
201218
}
202219

0 commit comments

Comments
 (0)