@@ -7,6 +7,7 @@ use axum::{
7
7
routing:: { get, post} ,
8
8
Json , Router ,
9
9
} ;
10
+ use axum_extra:: extract:: { rejection:: HostRejection , Host } ;
10
11
use http:: { header:: CACHE_CONTROL , HeaderValue , StatusCode } ;
11
12
use serde:: { ser:: SerializeMap , Serialize , Serializer } ;
12
13
use tracing:: { info_span, Instrument } ;
@@ -60,17 +61,17 @@ pub fn router(subpath: Option<String>, body_limit: usize) -> Router {
60
61
get ( || async { Redirect :: to ( env ! ( "CARGO_PKG_HOMEPAGE" ) ) } )
61
62
. layer ( axum:: middleware:: from_fn ( cache_control_middleware) ) ,
62
63
)
63
- . route ( "/: registry/: namespace/: package/" , get ( list_package) )
64
+ . route ( "/{ registry}/{ namespace}/{ package} /" , get ( list_package) )
64
65
. route (
65
- "/: registry/: namespace/: package/json" ,
66
+ "/{ registry}/{ namespace}/{ package} /json" ,
66
67
get ( list_package_json) ,
67
68
)
68
69
. route (
69
- "/: registry/: namespace/: package/: filename" ,
70
+ "/{ registry}/{ namespace}/{ package}/{ filename} " ,
70
71
get ( download_package) . delete ( delete_package_version) ,
71
72
)
72
73
. route (
73
- "/: registry/: namespace/" ,
74
+ "/{ registry}/{ namespace} /" ,
74
75
post ( publish_package) . layer ( DefaultBodyLimit :: max ( body_limit) ) ,
75
76
) ;
76
77
let router = match subpath {
@@ -104,7 +105,7 @@ async fn cache_control_middleware(
104
105
/// Log incoming requests
105
106
async fn accesslog_middleware (
106
107
method : axum:: http:: Method ,
107
- host : Option < axum :: extract :: Host > ,
108
+ host : Result < Host , HostRejection > ,
108
109
uri : axum:: http:: Uri ,
109
110
headers : axum:: http:: HeaderMap ,
110
111
request : axum:: extract:: Request ,
@@ -116,8 +117,9 @@ async fn accesslog_middleware(
116
117
let user_agent = headers
117
118
. get ( "user-agent" )
118
119
. map ( |ua| ua. to_str ( ) . unwrap_or ( "" ) ) ;
120
+
119
121
tracing:: info!(
120
- host = host. map( |value| value. 0 ) ,
122
+ host = host. map( |value| value. 0 ) . unwrap_or ( "" . to_string ( ) ) ,
121
123
"type" = "request" ,
122
124
status,
123
125
method = method. to_string( ) ,
0 commit comments