@@ -2,6 +2,7 @@ use std::time::Duration;
22
33use axum:: extract:: { Path , State } ;
44use axum:: response:: IntoResponse ;
5+ use axum:: routing:: MethodRouter ;
56use http:: header:: CONTENT_TYPE ;
67use http:: StatusCode ;
78use serde:: { Deserialize , Serialize } ;
@@ -64,12 +65,12 @@ impl<'de> serde::Deserialize<'de> for IdentityForUrl {
6465
6566#[ derive( Deserialize ) ]
6667pub struct GetDatabasesParams {
67- identity : IdentityForUrl ,
68+ pub identity : IdentityForUrl ,
6869}
6970
7071#[ derive( Debug , Clone , Serialize , Deserialize ) ]
7172pub struct GetDatabasesResponse {
72- identities : Vec < Identity > ,
73+ pub identities : Vec < Identity > ,
7374}
7475
7576pub async fn get_databases < S : ControlStateDelegate > (
@@ -135,15 +136,46 @@ pub async fn get_public_key<S: NodeDelegate>(State(ctx): State<S>) -> axum::resp
135136 ) )
136137}
137138
138- pub fn router < S > ( ) -> axum:: Router < S >
139+ /// A struct to allow customization of the `/identity` routes.
140+ pub struct IdentityRoutes < S > {
141+ /// POST /identity
142+ pub create_post : MethodRouter < S > ,
143+ /// GET /identity/public-key
144+ pub public_key_get : MethodRouter < S > ,
145+ /// POST /identity/websocket-tocken
146+ pub websocket_token_post : MethodRouter < S > ,
147+ /// GET /identity/:identity/verify
148+ pub verify_get : MethodRouter < S > ,
149+ /// GET /identity/:identity/databases
150+ pub databases_get : MethodRouter < S > ,
151+ }
152+
153+ impl < S > Default for IdentityRoutes < S >
154+ where
155+ S : NodeDelegate + ControlStateDelegate + Clone + ' static ,
156+ {
157+ fn default ( ) -> Self {
158+ use axum:: routing:: { get, post} ;
159+ Self {
160+ create_post : post ( create_identity :: < S > ) ,
161+ public_key_get : get ( get_public_key :: < S > ) ,
162+ websocket_token_post : post ( create_websocket_token :: < S > ) ,
163+ verify_get : get ( validate_token) ,
164+ databases_get : get ( get_databases :: < S > ) ,
165+ }
166+ }
167+ }
168+
169+ impl < S > IdentityRoutes < S >
139170where
140171 S : NodeDelegate + ControlStateDelegate + Clone + ' static ,
141172{
142- use axum:: routing:: { get, post} ;
143- axum:: Router :: new ( )
144- . route ( "/" , post ( create_identity :: < S > ) )
145- . route ( "/public-key" , get ( get_public_key :: < S > ) )
146- . route ( "/websocket-token" , post ( create_websocket_token :: < S > ) )
147- . route ( "/:identity/verify" , get ( validate_token) )
148- . route ( "/:identity/databases" , get ( get_databases :: < S > ) )
173+ pub fn into_router ( self ) -> axum:: Router < S > {
174+ axum:: Router :: new ( )
175+ . route ( "/" , self . create_post )
176+ . route ( "/public-key" , self . public_key_get )
177+ . route ( "/websocket-token" , self . websocket_token_post )
178+ . route ( "/:identity/verify" , self . verify_get )
179+ . route ( "/:identity/databases" , self . databases_get )
180+ }
149181}
0 commit comments