Skip to content

Commit 1ac11d6

Browse files
committed
More oauth
1 parent 3ea01e2 commit 1ac11d6

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

src/channel.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use serde::{Deserialize, Serialize};
22

33
use tonic_openssl_lnd::lnrpc::{self, channel_point};
44

5+
use crate::auth::AuthUser;
56
use crate::{AppState, MAX_SEND_AMOUNT};
67

78
#[derive(Clone, Deserialize)]
@@ -20,6 +21,7 @@ pub struct ChannelResponse {
2021
pub async fn open_channel(
2122
state: &AppState,
2223
x_forwarded_for: &str,
24+
user: Option<&AuthUser>,
2325
payload: ChannelRequest,
2426
) -> anyhow::Result<String> {
2527
if payload.capacity > MAX_SEND_AMOUNT.try_into()? {
@@ -90,7 +92,7 @@ pub async fn open_channel(
9092

9193
state
9294
.payments
93-
.add_payment(x_forwarded_for, None, None, payload.capacity as u64)
95+
.add_payment(x_forwarded_for, None, user, payload.capacity as u64)
9496
.await;
9597

9698
Ok(txid)

src/lightning.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use nostr::{EventBuilder, Filter, JsonUtil, Kind, Metadata, UncheckedUrl};
1111
use std::str::FromStr;
1212
use tonic_openssl_lnd::lnrpc;
1313

14+
use crate::auth::AuthUser;
1415
use crate::nostr_dms::RELAYS;
1516
use crate::{AppState, MAX_SEND_AMOUNT};
1617

@@ -27,6 +28,7 @@ pub struct LightningResponse {
2728
pub async fn pay_lightning(
2829
state: &AppState,
2930
x_forwarded_for: &str,
31+
user: Option<&AuthUser>,
3032
bolt11: &str,
3133
) -> anyhow::Result<String> {
3234
let params = PaymentParams::from_str(bolt11).map_err(|_| anyhow::anyhow!("invalid bolt 11"))?;
@@ -110,7 +112,7 @@ pub async fn pay_lightning(
110112
.add_payment(
111113
x_forwarded_for,
112114
None,
113-
None,
115+
user,
114116
invoice.amount_milli_satoshis().unwrap_or(0) / 1000,
115117
)
116118
.await;

src/main.rs

+23-7
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,17 @@ async fn main() -> anyhow::Result<()> {
8787
"/api/onchain",
8888
post(onchain_handler).route_layer(middleware::from_fn(auth_middleware)),
8989
)
90-
.route("/api/lightning", post(lightning_handler))
90+
.route(
91+
"/api/lightning",
92+
post(lightning_handler).route_layer(middleware::from_fn(auth_middleware)),
93+
)
9194
.route("/api/lnurlw", get(lnurlw_handler))
9295
.route("/api/lnurlw/callback", get(lnurlw_callback_handler))
9396
.route("/api/bolt11", post(bolt11_handler))
94-
.route("/api/channel", post(channel_handler))
97+
.route(
98+
"/api/channel",
99+
post(channel_handler).route_layer(middleware::from_fn(auth_middleware)),
100+
)
95101
.fallback(fallback)
96102
.layer(Extension(state.clone()))
97103
.layer(
@@ -274,6 +280,7 @@ async fn onchain_handler(
274280
#[axum::debug_handler]
275281
async fn lightning_handler(
276282
Extension(state): Extension<AppState>,
283+
Extension(user): Extension<AuthUser>,
277284
headers: HeaderMap,
278285
Json(payload): Json<LightningRequest>,
279286
) -> Result<Json<LightningResponse>, AppError> {
@@ -283,11 +290,15 @@ async fn lightning_handler(
283290
.and_then(|x| HeaderValue::to_str(x).ok())
284291
.unwrap_or("Unknown");
285292

286-
if state.payments.get_total_payments(x_forwarded_for).await > MAX_SEND_AMOUNT * 10 {
293+
if state
294+
.payments
295+
.verify_payments(x_forwarded_for, None, Some(&user))
296+
.await
297+
{
287298
return Err(AppError::new("Too many payments"));
288299
}
289300

290-
let payment_hash = pay_lightning(&state, x_forwarded_for, &payload.bolt11).await?;
301+
let payment_hash = pay_lightning(&state, x_forwarded_for, Some(&user), &payload.bolt11).await?;
291302

292303
Ok(Json(LightningResponse { payment_hash }))
293304
}
@@ -329,7 +340,7 @@ async fn lnurlw_callback_handler(
329340
return Err(Json(json!({"status": "ERROR", "reason": "Incorrect k1"})));
330341
}
331342

332-
pay_lightning(&state, x_forwarded_for, &payload.pr)
343+
pay_lightning(&state, x_forwarded_for, None, &payload.pr)
333344
.await
334345
.map_err(|e| Json(json!({"status": "ERROR", "reason": format!("{e}")})))?;
335346
Ok(Json(json!({"status": "OK"})))
@@ -351,6 +362,7 @@ async fn bolt11_handler(
351362
#[axum::debug_handler]
352363
async fn channel_handler(
353364
Extension(state): Extension<AppState>,
365+
Extension(user): Extension<AuthUser>,
354366
headers: HeaderMap,
355367
Json(payload): Json<ChannelRequest>,
356368
) -> Result<Json<ChannelResponse>, AppError> {
@@ -360,11 +372,15 @@ async fn channel_handler(
360372
.and_then(|x| HeaderValue::to_str(x).ok())
361373
.unwrap_or("Unknown");
362374

363-
if state.payments.get_total_payments(x_forwarded_for).await > MAX_SEND_AMOUNT * 10 {
375+
if state
376+
.payments
377+
.verify_payments(x_forwarded_for, None, Some(&user))
378+
.await
379+
{
364380
return Err(AppError::new("Too many payments"));
365381
}
366382

367-
let txid = open_channel(&state, x_forwarded_for, payload).await?;
383+
let txid = open_channel(&state, x_forwarded_for, Some(&user), payload).await?;
368384

369385
Ok(Json(ChannelResponse { txid }))
370386
}

0 commit comments

Comments
 (0)