use crate::prelude2::*;
use serde::Deserialize;
use std::collections::HashMap;
use crate::commons;
#[derive(Deserialize)]
pub struct QueryParams {
counts: String,
}
pub async fn gretting(req: HttpRequest) -> impl Responder {
let name = req.match_info().get("name").unwrap_or("World");
format!("Hello {}!", &name)
}
pub async fn format_durations(query: web::Query<QueryParams>) -> Result<HttpResponse> {
let counts = &query.counts;
let counts_u64 = commons::string_to_number::<u64>(counts)?;
Ok(HttpResponse::Ok().body(commons::format_duration_nanos(counts_u64)))
}
pub async fn base64_string(query: web::Query<HashMap<String, String>>) -> Result<HttpResponse> {
let val = query
.get("val")
.ok_or_else(|| Error::invalid_request("Missing query string parameter: val"))?;
Ok(HttpResponse::Ok().body(commons::base64encode(&val.to_string())))
}
pub async fn compute_password_hash(
query: web::Query<HashMap<String, String>>,
) -> Result<HttpResponse> {
let passwd = query.get("passwd").cloned().unwrap_or_default();
let l = commons::compute_password_hash(&passwd)
.map_err(|e| Error::throw("Cound not hash password", Some(e)))?;
Ok(HttpResponse::Ok().body(l))
}
pub async fn verify_password_hash(
query: web::Query<HashMap<String, String>>,
expected_password_hash: web::Bytes,
) -> Result<HttpResponse> {
let passwd = query
.get("passwd")
.ok_or_else(|| Error::invalid_request("Missing query string parameter: passwd"))?;
let expected_password_hash = commons::bytes_to_string(expected_password_hash.to_vec())?;
let l = commons::verify_password(passwd.to_string(), expected_password_hash)
.map_err(|e| Error::throw("Cound not verify password", Some(e)))?;
Ok(HttpResponse::Ok().body(format!("{}", l)))
}