mirror of
https://git.alemi.dev/guestbook.rs.git
synced 2024-12-19 02:54:52 +01:00
feat: add date, md5, url server-side on insertion
This commit is contained in:
parent
4943339964
commit
7aee304b70
2 changed files with 29 additions and 2 deletions
|
@ -16,9 +16,12 @@ serde_json = "1.0.107"
|
||||||
tokio = { version = "1.33.0", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.33.0", features = ["macros", "rt-multi-thread"] }
|
||||||
tracing = "0.1.39"
|
tracing = "0.1.39"
|
||||||
tracing-subscriber = "0.3.17"
|
tracing-subscriber = "0.3.17"
|
||||||
|
thiserror = "1.0.51"
|
||||||
|
chrono = { version = "0.4.31", features = ["serde"] }
|
||||||
|
uuid = { version = "1.6.1", features = ["v4", "fast-rng"] }
|
||||||
|
md-5 = "0.10.6"
|
||||||
# telegram provider
|
# telegram provider
|
||||||
teloxide = { version = "0.12.2", features = ["macros"], optional = true }
|
teloxide = { version = "0.12.2", features = ["macros"], optional = true }
|
||||||
thiserror = "1.0.51"
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use axum::{http::StatusCode, Json, Form, Router, routing::{put, post, get}, extract::{State, Query}, response::IntoResponse};
|
use axum::{http::StatusCode, Json, Form, Router, routing::{put, post, get}, extract::{State, Query}, response::IntoResponse};
|
||||||
|
use chrono::Utc;
|
||||||
|
use md5::{Md5, Digest};
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{notifications::NotificationProcessor, model::{GuestBookPage, Acknowledgement, PageOptions, Insertion}, storage::StorageStrategy};
|
use crate::{notifications::NotificationProcessor, model::{GuestBookPage, Acknowledgement, PageOptions, Insertion}, storage::StorageStrategy};
|
||||||
|
|
||||||
|
@ -37,7 +40,28 @@ impl Context {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_suggestion(payload: Suggestion, state: SafeContext) -> impl IntoResponse {
|
async fn send_suggestion(payload: Insertion, state: SafeContext) -> impl IntoResponse {
|
||||||
|
let mut hasher = Md5::new();
|
||||||
|
let id = payload.contact.clone().unwrap_or(Uuid::new_v4().to_string());
|
||||||
|
hasher.update(id.as_bytes());
|
||||||
|
let avatar = hasher.finalize();
|
||||||
|
let page = GuestBookPage {
|
||||||
|
avatar: format!("{:x}", avatar),
|
||||||
|
author: payload.author.map(|x| x[..25].to_string()), // TODO don't hardcode char limits!
|
||||||
|
contact: payload.contact.clone().map(|x| x[..50].to_string()),
|
||||||
|
body: payload.body,
|
||||||
|
date: Utc::now(),
|
||||||
|
url: match payload.contact {
|
||||||
|
None => None,
|
||||||
|
Some(c) => if c.starts_with("http") {
|
||||||
|
Some(c)
|
||||||
|
} else if c.contains('@') {
|
||||||
|
Some(format!("mailto:{}", c))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
let mut lock = state.write().await;
|
let mut lock = state.write().await;
|
||||||
lock.process(&page).await;
|
lock.process(&page).await;
|
||||||
match lock.storage.archive(page).await {
|
match lock.storage.archive(page).await {
|
||||||
|
|
Loading…
Reference in a new issue