Add identity endpoint

This commit is contained in:
Jon Staab
2026-03-26 16:10:24 -07:00
parent 9da5e027a7
commit a2f9ca9688
9 changed files with 129 additions and 38 deletions
+37
View File
@@ -100,6 +100,7 @@ impl Api {
};
Router::new()
.route("/identity", get(get_identity))
.route("/plans", get(list_plans))
.route("/plans/:id", get(get_plan))
.route("/tenants", get(list_tenants).post(create_tenant))
@@ -292,6 +293,13 @@ struct UpdateTenantBillingRequest {
nwc_url: String,
}
#[derive(Serialize)]
struct IdentityResponse {
pubkey: String,
is_admin: bool,
is_tenant: bool,
}
#[derive(Deserialize)]
struct CreateRelayRequest {
tenant: String,
@@ -351,6 +359,35 @@ async fn list_plans(
Ok(ok(StatusCode::OK, Repo::list_plans()))
}
async fn get_identity(
State(state): State<AppState>,
headers: HeaderMap,
) -> std::result::Result<Response, ApiError> {
let pubkey = state.api.extract_auth_pubkey(&headers)?;
let is_admin = state.api.admins.iter().any(|a| a == &pubkey);
let is_tenant = match state.api.repo.get_tenant(&pubkey).await {
Ok(Some(_)) => true,
Ok(None) => false,
Err(e) => {
return Ok(err(
StatusCode::INTERNAL_SERVER_ERROR,
"internal",
&e.to_string(),
));
}
};
Ok(ok(
StatusCode::OK,
IdentityResponse {
pubkey,
is_admin,
is_tenant,
},
))
}
async fn get_plan(
State(state): State<AppState>,
headers: HeaderMap,