Skip to content

Commit ea5f0e7

Browse files
feat(auth): add reverse lookup function for API key verification (#1)
Signed-off-by: vincent <vincent@secondstate.io>
1 parent 2d425ce commit ea5f0e7

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/main.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]
2737
enum 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]
276310
async 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

Comments
 (0)