Compare commits

...

4 Commits

7 changed files with 414 additions and 266 deletions

658
server/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -14,13 +14,14 @@ hex = "0.4"
lazy_static = "1" lazy_static = "1"
lodestone-scraper = { git = "https://git.anna.lgbt/anna/lodestone-scraper.git" } lodestone-scraper = { git = "https://git.anna.lgbt/anna/lodestone-scraper.git" }
log = "0.4" log = "0.4"
mimalloc = "0.1"
parking_lot = "0.12" parking_lot = "0.12"
prefixed-api-key = { git = "https://git.anna.lgbt/anna/prefixed-api-key.git" } prefixed-api-key = { git = "https://git.anna.lgbt/anna/prefixed-api-key.git" }
rand = "0.8" rand = "0.8"
regex = "1" regex = "1"
reqwest = { version = "0.11", default-features = false } reqwest = { version = "0.12", default-features = false }
rmp-serde = "1" rmp-serde = "1"
rustyline = { version = "13", default-features = false } rustyline = { version = "14", default-features = false }
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
serde_bytes = "0.11" serde_bytes = "0.11"
serde_repr = "0.1" serde_repr = "0.1"

View File

@ -9,7 +9,7 @@ use crate::util::send;
pub async fn disband(state: Arc<RwLock<State>>, client_state: Arc<RwLock<ClientState>>, conn: &mut WsStream, number: u32, req: DisbandRequest) -> Result<()> { pub async fn disband(state: Arc<RwLock<State>>, client_state: Arc<RwLock<ClientState>>, conn: &mut WsStream, number: u32, req: DisbandRequest) -> Result<()> {
match client_state.read().await.get_rank(req.channel, &state).await? { match client_state.read().await.get_rank(req.channel, &state).await? {
Some(rank) if rank == Rank::Admin => {} Some(Rank::Admin) => {}
_ => return send(conn, number, ErrorResponse::new(req.channel, "not in channel/not enough permissions")).await, _ => return send(conn, number, ErrorResponse::new(req.channel, "not in channel/not enough permissions")).await,
} }

View File

@ -66,7 +66,7 @@ pub async fn register(state: Arc<RwLock<State>>, _client_state: Arc<RwLock<Clien
None | Some(_) if generate => { None | Some(_) if generate => {
let mut rand_bytes = [0; 32]; let mut rand_bytes = [0; 32];
rand::thread_rng().fill_bytes(&mut rand_bytes); rand::thread_rng().fill_bytes(&mut rand_bytes);
let challenge = hex::encode(&rand_bytes); let challenge = hex::encode(rand_bytes);
sqlx::query!( sqlx::query!(
// language=sqlite // language=sqlite

View File

@ -9,7 +9,7 @@ use crate::util::send;
pub async fn update(state: Arc<RwLock<State>>, client_state: Arc<RwLock<ClientState>>, conn: &mut WsStream, number: u32, req: UpdateRequest) -> Result<()> { pub async fn update(state: Arc<RwLock<State>>, client_state: Arc<RwLock<ClientState>>, conn: &mut WsStream, number: u32, req: UpdateRequest) -> Result<()> {
match client_state.read().await.get_rank(req.channel, &state).await? { match client_state.read().await.get_rank(req.channel, &state).await? {
Some(rank) if rank == Rank::Admin => {} Some(Rank::Admin) => {}
_ => return send(conn, number, ErrorResponse::new(req.channel, "not in that channel")).await, _ => return send(conn, number, ErrorResponse::new(req.channel, "not in that channel")).await,
} }

View File

@ -50,6 +50,9 @@ pub mod updater;
pub mod logging; pub mod logging;
pub mod influx; pub mod influx;
#[global_allocator]
static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc;
pub type WsStream = WebSocketStream<TcpStream>; pub type WsStream = WebSocketStream<TcpStream>;
pub struct State { pub struct State {
@ -174,7 +177,7 @@ async fn main() -> Result<()> {
quit_tx.blocking_send(()).ok(); quit_tx.blocking_send(()).ok();
return; return;
} }
"announce" => { "announce" | "say" => {
if command.len() == 2 { if command.len() == 2 {
let msg = command[1].to_string(); let msg = command[1].to_string();
announce_tx.blocking_send(msg).ok(); announce_tx.blocking_send(msg).ok();

View File

@ -32,7 +32,7 @@ pub fn spawn(state: Arc<RwLock<State>>, mut rx: UnboundedReceiver<i64>) -> JoinH
tokio::time::sleep(left).await; tokio::time::sleep(left).await;
} }
match update(&*state, &lodestone, id).await { match update(&state, &lodestone, id).await {
Ok(()) => debug!("updated user {}", id), Ok(()) => debug!("updated user {}", id),
Err(e) => error!("error updating user {}: {:?}", id, e), Err(e) => error!("error updating user {}: {:?}", id, e),
} }
@ -66,11 +66,11 @@ async fn update(state: &RwLock<State>, lodestone: &LodestoneScraper, lodestone_i
if let Some(user) = client_state { if let Some(user) = client_state {
trace!(" [updater] before user write"); trace!(" [updater] before user write");
if let Some(user) = user.write().await.user.as_mut() { if let Some(user) = user.write().await.user.as_mut() {
user.name = info.name.clone(); user.name = info.name;
user.world = info.world; user.world = info.world;
} }
trace!(" [updater] after user write"); trace!(" [updater] after user write");
} }
Ok(()) Ok(())
} }