@@ -22,6 +22,16 @@ struct ApiKeyResponse {
2222 api_key : String ,
2323}
2424
25+ #[ derive( Deserialize ) ]
26+ struct ReverseLookupRequest {
27+ api_key : String ,
28+ }
29+
30+ #[ derive( Serialize ) ]
31+ struct HexStringResponse {
32+ hex_string : String ,
33+ }
34+
2535// Error handling
2636#[ derive( thiserror:: Error , Debug ) ]
2737enum AppError {
@@ -272,6 +282,30 @@ async fn rotate_api_key(
272282 Ok ( HttpResponse :: Ok ( ) . json ( ApiKeyResponse { api_key : new_api_key } ) )
273283}
274284
285+ async fn reverse_lookup_hex (
286+ data : web:: Json < ReverseLookupRequest > ,
287+ app_state : web:: Data < Arc < AppState > > ,
288+ ) -> Result < impl Responder , AppError > {
289+ let api_key = & data. api_key ;
290+ info ! ( "Received request to reverse lookup hex string from API key" ) ;
291+
292+ let db = app_state. db . lock ( ) . map_err ( |e| {
293+ error ! ( "Failed to acquire DB lock: {}" , e) ;
294+ AppError :: InternalError ( "Database lock error" . into ( ) )
295+ } ) ?;
296+
297+ let hex_string: String = db. query_row (
298+ "SELECT hex_string FROM api_keys WHERE api_key = ?" ,
299+ params ! [ api_key] ,
300+ |row| row. get ( 0 ) ,
301+ ) . map_err ( |e| match e {
302+ rusqlite:: Error :: QueryReturnedNoRows => AppError :: NotFound ,
303+ other => AppError :: DbError ( other) ,
304+ } ) ?;
305+
306+ Ok ( HttpResponse :: Ok ( ) . json ( HexStringResponse { hex_string } ) )
307+ }
308+
275309#[ actix_web:: main]
276310async fn main ( ) -> std:: io:: Result < ( ) > {
277311 env_logger:: init_from_env ( env_logger:: Env :: new ( ) . default_filter_or ( "info" ) ) ;
@@ -301,6 +335,7 @@ async fn main() -> std::io::Result<()> {
301335 . route ( "/gen-api-key" , web:: post ( ) . to ( create_api_key) )
302336 . route ( "/get-api-key" , web:: get ( ) . to ( get_api_key) )
303337 . route ( "/rotate-api-key" , web:: post ( ) . to ( rotate_api_key) )
338+ . route ( "/reverse-lookup" , web:: post ( ) . to ( reverse_lookup_hex) )
304339 } )
305340 . bind ( "127.0.0.1:8081" ) ? // Change to match the port in your error message
306341 . run ( )
0 commit comments