revolt_database/tasks/
authifier_relay.rs

1use async_std::channel::{unbounded, Receiver, Sender};
2use authifier::AuthifierEvent;
3use once_cell::sync::Lazy;
4
5use crate::events::client::EventV1;
6
7static Q: Lazy<(Sender<AuthifierEvent>, Receiver<AuthifierEvent>)> = Lazy::new(unbounded);
8
9/// Get sender
10pub fn sender() -> Sender<AuthifierEvent> {
11    Q.0.clone()
12}
13
14/// Start a new worker
15pub async fn worker() {
16    loop {
17        let event = Q.1.recv().await.unwrap();
18        match &event {
19            AuthifierEvent::CreateSession { .. } | AuthifierEvent::CreateAccount { .. } => {
20                EventV1::Auth(event).global().await
21            }
22            AuthifierEvent::DeleteSession { user_id, .. }
23            | AuthifierEvent::DeleteAllSessions { user_id, .. } => {
24                let id = user_id.to_string();
25                EventV1::Auth(event).private(id).await
26            }
27        }
28    }
29}