+1
server/src/auth.rs
+1
server/src/auth.rs
+6
-8
server/src/handlers.rs
+6
-8
server/src/handlers.rs
···
22
22
};
23
23
24
24
// todo check
25
-
let pub_key = match VerifyingKey::from_bytes(
26
-
&pub_key_bytes
27
-
.try_into()
28
-
.map_err(|_| SrvErr("Invalid pubkey length".into()))?,
29
-
) {
30
-
Ok(pk) => pk,
31
-
Err(_) => ReqBail!("Invalid public key bytes"),
32
-
};
25
+
let pub_key_arr: [u8; 32] = pub_key_bytes
26
+
.as_slice()
27
+
.try_into()
28
+
.map_err(|_| SrvErr!("Invalid pubkey length"))?;
29
+
let pub_key = VerifyingKey::from_bytes(&pub_key_arr)
30
+
.map_err(|e| SrvErr!("Invalid public key bytes", e))?;
33
31
34
32
let user_id = nanoid!(5);
35
33
let mut is_admin = false;
+23
-20
server/src/types.rs
+23
-20
server/src/types.rs
···
126
126
}
127
127
128
128
#[derive(Debug)]
129
-
pub struct SrvErr(pub String);
129
+
pub struct SrvErr {
130
+
pub msg: String,
131
+
pub cause: Option<String>,
132
+
}
130
133
131
134
impl IntoResponse for SrvErr {
132
135
fn into_response(self) -> Response {
133
-
(StatusCode::INTERNAL_SERVER_ERROR, self.0).into_response()
136
+
// Log once here (this runs only for real errors)
137
+
match &self.cause {
138
+
Some(c) => eprintln!("[ERR] {} | cause: {}", self.msg, c),
139
+
None => eprintln!("[ERR] {}", self.msg),
140
+
}
141
+
142
+
let body = if cfg!(debug_assertions) {
143
+
match &self.cause {
144
+
Some(c) => format!("{} | cause: {}", self.msg, c),
145
+
None => self.msg.clone(),
146
+
}
147
+
} else {
148
+
self.msg.clone()
149
+
};
150
+
151
+
(StatusCode::INTERNAL_SERVER_ERROR, body).into_response()
134
152
}
135
153
}
136
154
137
155
/// Central policy: what gets logged, what gets returned.
138
156
pub fn mk_srv_err(msg: impl Into<String>, cause: Option<String>) -> SrvErr {
139
-
let msg = msg.into();
140
-
141
-
match cause {
142
-
Some(c) => {
143
-
// Always log server-side
144
-
eprintln!("[ERR] {msg} | cause: {c}");
145
-
146
-
// Only include cause in client response in debug builds
147
-
if cfg!(debug_assertions) {
148
-
SrvErr(format!("{msg} | cause: {c}"))
149
-
} else {
150
-
SrvErr(msg)
151
-
}
152
-
}
153
-
None => {
154
-
eprintln!("[ERR] {msg}");
155
-
SrvErr(msg)
156
-
}
157
+
SrvErr {
158
+
msg: msg.into(),
159
+
cause,
157
160
}
158
161
}
159
162