summaryrefslogtreecommitdiff
path: root/src/auth.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/auth.rs')
-rw-r--r--src/auth.rs49
1 files changed, 15 insertions, 34 deletions
diff --git a/src/auth.rs b/src/auth.rs
index eb4d1bf..22f87e7 100644
--- a/src/auth.rs
+++ b/src/auth.rs
@@ -1,49 +1,30 @@
1use axum::http::{StatusCode, HeaderValue}; 1use axum::http::HeaderValue;
2use axum::http::header::ToStrError; 2use tracing::{debug, trace};
3use tracing::{debug, error, trace};
4use crate::auth::Error::{MissingSecret, WrongSecret};
5use crate::config::Config; 3use crate::config::Config;
4use crate::error::Error;
6 5
7pub fn auth(config: &Config, secret: Option<&HeaderValue>) -> Result<bool, Error> { 6pub fn auth(config: &Config, secret: Option<&HeaderValue>) -> Result<Response, Error> {
8 debug!("auth request with secret {:?}", secret); 7 debug!("auth request with secret {:?}", secret);
9 if let Some(value) = secret { 8 let res = if let Some(value) = secret {
10 trace!("value exists"); 9 trace!("auth value exists");
11 let key = &config.apikey; 10 let key = &config.apikey;
12 if value.to_str()? == key.as_str() { 11 if value.to_str()? == key.as_str() {
13 debug!("successful auth"); 12 debug!("successful auth");
14 Ok(true) 13 Response::Success
15 } else { 14 } else {
16 debug!("unsuccessful auth (wrong secret)"); 15 debug!("unsuccessful auth (wrong secret)");
17 Err(WrongSecret) 16 Response::WrongSecret
18 } 17 }
19 } else { 18 } else {
20 debug!("unsuccessful auth (no secret)"); 19 debug!("unsuccessful auth (no secret)");
21 Err(MissingSecret) 20 Response::MissingSecret
22 } 21 };
22 Ok(res)
23} 23}
24 24
25#[derive(Debug, thiserror::Error)] 25#[derive(Debug)]
26pub enum Error { 26pub enum Response {
27 #[error("wrong secret")] 27 Success,
28 WrongSecret, 28 WrongSecret,
29 #[error("missing secret")] 29 MissingSecret
30 MissingSecret,
31 #[error("parse error: {source}")]
32 HeaderToStr {
33 #[from]
34 source: ToStrError
35 }
36}
37
38impl Error {
39 pub fn get(self) -> (StatusCode, &'static str) {
40 match self {
41 Self::WrongSecret => (StatusCode::UNAUTHORIZED, "Wrong credentials"),
42 Self::MissingSecret => (StatusCode::BAD_REQUEST, "Missing credentials"),
43 Self::HeaderToStr { source } => {
44 error!("auth: {}", source);
45 (StatusCode::INTERNAL_SERVER_ERROR, "Server Error")
46 },
47 }
48 }
49} 30}