lldap/model/src/lib.rs

141 lines
4.0 KiB
Rust
Raw Normal View History

2021-05-13 17:32:29 +00:00
use chrono::prelude::*;
2021-06-08 20:23:46 +00:00
use serde::{Deserialize, Serialize};
2021-05-13 17:32:29 +00:00
use std::collections::HashSet;
2021-05-09 09:52:53 +00:00
2021-06-08 20:23:46 +00:00
pub mod opaque;
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
pub struct BindRequest {
pub name: String,
pub password: String,
}
2021-06-16 17:12:41 +00:00
/// The messages for the 3-step OPAQUE login process.
pub mod login {
use super::*;
#[derive(Serialize, Deserialize, Clone)]
pub struct ClientLoginStartRequest {
pub username: String,
pub login_start_request: opaque::server::login::CredentialRequest,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct ServerLoginStartResponse {
/// A randomly-generated temporary key that corresponds to this login attempt.
pub login_key: String,
pub credential_response: opaque::client::login::CredentialResponse,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct ClientLoginFinishRequest {
/// The key returned by the server in the previous step.
pub login_key: String,
pub credential_finalization: opaque::client::login::CredentialFinalization,
}
}
/// The messages for the 3-step OPAQUE registration process.
pub mod registration {
use super::*;
#[derive(Serialize, Deserialize, Clone)]
pub struct ClientRegistrationStartRequest {
pub username: String,
pub registration_start_request: opaque::server::registration::RegistrationRequest,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct ServerRegistrationStartResponse {
/// A randomly-generated temporary key that corresponds to this registration attempt.
pub registration_key: String,
pub registration_response: opaque::client::registration::RegistrationResponse,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct ClientRegistrationFinishRequest {
/// The key returned by the server in the previous step.
pub registration_key: String,
pub registration_upload: opaque::server::registration::RegistrationUpload,
}
}
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
pub enum RequestFilter {
And(Vec<RequestFilter>),
Or(Vec<RequestFilter>),
Not(Box<RequestFilter>),
Equality(String, String),
}
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
pub struct ListUsersRequest {
pub filters: Option<RequestFilter>,
}
2021-05-09 09:52:53 +00:00
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(not(target_arch = "wasm32"), derive(sqlx::FromRow))]
pub struct User {
pub user_id: String,
pub email: String,
pub display_name: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
// pub avatar: ?,
pub creation_date: chrono::NaiveDateTime,
}
2021-05-14 08:22:50 +00:00
impl Default for User {
fn default() -> Self {
User {
user_id: String::new(),
email: String::new(),
display_name: None,
first_name: None,
last_name: None,
2021-05-14 08:22:50 +00:00
creation_date: chrono::NaiveDateTime::from_timestamp(0, 0),
}
}
}
2021-05-26 06:43:31 +00:00
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone, Default)]
pub struct CreateUserRequest {
// Same fields as User, but no creation_date, and with password.
pub user_id: String,
pub email: String,
pub display_name: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub password: Option<String>,
2021-05-26 06:43:31 +00:00
}
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone, Default)]
pub struct DeleteUserRequest {
pub user_id: String,
}
2021-05-09 09:52:53 +00:00
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
pub struct Group {
pub display_name: String,
pub users: Vec<String>,
}
2021-05-13 17:32:29 +00:00
2021-05-26 13:42:02 +00:00
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
pub struct CreateGroupRequest {
pub display_name: String,
}
2021-05-26 13:49:59 +00:00
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
pub struct AddUserToGroupRequest {
pub user_id: String,
pub group_id: i32,
}
2021-05-13 17:32:29 +00:00
#[derive(Clone, Serialize, Deserialize)]
pub struct JWTClaims {
pub exp: DateTime<Utc>,
2021-05-20 15:40:30 +00:00
pub iat: DateTime<Utc>,
2021-05-13 17:32:29 +00:00
pub user: String,
pub groups: HashSet<String>,
}