fix: whitelist status code

closes https://github.com/v0l/route96/issues/5
This commit is contained in:
kieran 2024-12-06 19:26:10 +00:00
parent 5bebb71f4d
commit ff423e8dd9
No known key found for this signature in database
GPG Key ID: DE71CEB3925BE941
2 changed files with 30 additions and 15 deletions

View File

@ -1,6 +1,3 @@
use std::collections::HashMap;
use std::fs;
use log::error; use log::error;
use nostr::prelude::hex; use nostr::prelude::hex;
use nostr::{Alphabet, SingleLetterTag, TagKind}; use nostr::{Alphabet, SingleLetterTag, TagKind};
@ -10,6 +7,8 @@ use rocket::response::Responder;
use rocket::serde::json::Json; use rocket::serde::json::Json;
use rocket::{routes, Data, Request, Response, Route, State}; use rocket::{routes, Data, Request, Response, Route, State};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fs;
use crate::auth::blossom::BlossomAuth; use crate::auth::blossom::BlossomAuth;
use crate::db::{Database, FileUpload}; use crate::db::{Database, FileUpload};
@ -84,6 +83,9 @@ enum BlossomResponse {
BlobDescriptorList(Json<Vec<BlobDescriptor>>), BlobDescriptorList(Json<Vec<BlobDescriptor>>),
StatusOnly(Status), StatusOnly(Status),
#[response(status = 403)]
Forbidden(Json<BlossomError>),
} }
impl BlossomResponse { impl BlossomResponse {
@ -269,7 +271,9 @@ async fn process_upload(
// check whitelist // check whitelist
if let Some(wl) = &settings.whitelist { if let Some(wl) = &settings.whitelist {
if !wl.contains(&auth.event.pubkey.to_hex()) { if !wl.contains(&auth.event.pubkey.to_hex()) {
return BlossomResponse::error("Not on whitelist"); return BlossomResponse::Forbidden(Json(BlossomError::new(
"Not on whitelist".to_string(),
)));
} }
} }
match fs match fs

View File

@ -76,23 +76,18 @@ enum Nip96Response {
#[response(status = 200)] #[response(status = 200)]
FileList(Json<PagedResult<Nip94Event>>), FileList(Json<PagedResult<Nip94Event>>),
#[response(status = 403)]
Forbidden(Json<Nip96UploadResult>),
} }
impl Nip96Response { impl Nip96Response {
pub(crate) fn error(msg: &str) -> Self { pub(crate) fn error(msg: &str) -> Self {
Nip96Response::GenericError(Json(Nip96UploadResult { Nip96Response::GenericError(Json(Nip96UploadResult::error(msg)))
status: "error".to_string(),
message: Some(msg.to_string()),
..Default::default()
}))
} }
fn success(msg: &str) -> Self { fn success(msg: &str) -> Self {
Nip96Response::UploadResult(Json(Nip96UploadResult { Nip96Response::UploadResult(Json(Nip96UploadResult::success(msg)))
status: "success".to_string(),
message: Some(msg.to_string()),
..Default::default()
}))
} }
} }
@ -116,6 +111,22 @@ impl Nip96UploadResult {
..Default::default() ..Default::default()
} }
} }
pub fn success(msg: &str) -> Self {
Nip96UploadResult {
status: "error".to_string(),
message: Some(msg.to_string()),
..Default::default()
}
}
pub fn error(msg: &str) -> Self {
Nip96UploadResult {
status: "error".to_string(),
message: Some(msg.to_string()),
..Default::default()
}
}
} }
#[derive(FromForm)] #[derive(FromForm)]
@ -194,7 +205,7 @@ async fn upload(
// check whitelist // check whitelist
if let Some(wl) = &settings.whitelist { if let Some(wl) = &settings.whitelist {
if !wl.contains(&auth.event.pubkey.to_hex()) { if !wl.contains(&auth.event.pubkey.to_hex()) {
return Nip96Response::error("Not on whitelist"); return Nip96Response::Forbidden(Json(Nip96UploadResult::error("Not on whitelist")));
} }
} }
match fs match fs