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;
|
|
|
|
|
2021-05-09 10:06:58 +00:00
|
|
|
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
|
2021-05-08 09:34:55 +00:00
|
|
|
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::*;
|
|
|
|
|
2021-06-23 18:33:36 +00:00
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
|
|
pub struct ServerData {
|
|
|
|
pub username: String,
|
|
|
|
pub server_login: opaque::server::login::ServerLogin,
|
|
|
|
}
|
|
|
|
|
2021-06-16 17:12:41 +00:00
|
|
|
#[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 {
|
2021-06-23 18:33:36 +00:00
|
|
|
/// Base64, encrypted ServerData to be passed back to the server.
|
|
|
|
pub server_data: String,
|
2021-06-16 17:12:41 +00:00
|
|
|
pub credential_response: opaque::client::login::CredentialResponse,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
|
|
pub struct ClientLoginFinishRequest {
|
2021-06-23 18:33:36 +00:00
|
|
|
/// Encrypted ServerData from the previous step.
|
|
|
|
pub server_data: String,
|
2021-06-16 17:12:41 +00:00
|
|
|
pub credential_finalization: opaque::client::login::CredentialFinalization,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// The messages for the 3-step OPAQUE registration process.
|
|
|
|
pub mod registration {
|
|
|
|
use super::*;
|
|
|
|
|
2021-06-23 18:33:36 +00:00
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
|
|
pub struct ServerData {
|
|
|
|
pub username: String,
|
|
|
|
}
|
|
|
|
|
2021-06-16 17:12:41 +00:00
|
|
|
#[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 {
|
2021-06-23 18:33:36 +00:00
|
|
|
/// Base64, encrypted ServerData to be passed back to the server.
|
|
|
|
pub server_data: String,
|
2021-06-16 17:12:41 +00:00
|
|
|
pub registration_response: opaque::client::registration::RegistrationResponse,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
|
|
pub struct ClientRegistrationFinishRequest {
|
2021-06-23 18:33:36 +00:00
|
|
|
/// Encrypted ServerData from the previous step.
|
|
|
|
pub server_data: String,
|
2021-06-16 17:12:41 +00:00
|
|
|
pub registration_upload: opaque::server::registration::RegistrationUpload,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-05-09 10:06:58 +00:00
|
|
|
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
|
2021-05-08 09:34:55 +00:00
|
|
|
pub enum RequestFilter {
|
|
|
|
And(Vec<RequestFilter>),
|
|
|
|
Or(Vec<RequestFilter>),
|
|
|
|
Not(Box<RequestFilter>),
|
|
|
|
Equality(String, String),
|
|
|
|
}
|
|
|
|
|
2021-05-09 10:06:58 +00:00
|
|
|
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
|
2021-05-08 09:34:55 +00:00
|
|
|
pub struct ListUsersRequest {
|
|
|
|
pub filters: Option<RequestFilter>,
|
|
|
|
}
|
|
|
|
|
2021-05-09 09:52:53 +00:00
|
|
|
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
|
2021-05-09 08:10:17 +00:00
|
|
|
#[cfg_attr(not(target_arch = "wasm32"), derive(sqlx::FromRow))]
|
2021-05-08 09:34:55 +00:00
|
|
|
pub struct User {
|
|
|
|
pub user_id: String,
|
|
|
|
pub email: String,
|
2021-05-26 06:42:05 +00:00
|
|
|
pub display_name: Option<String>,
|
|
|
|
pub first_name: Option<String>,
|
|
|
|
pub last_name: Option<String>,
|
2021-05-08 09:34:55 +00:00
|
|
|
// 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(),
|
2021-05-26 06:42:05 +00:00
|
|
|
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>,
|
2021-06-14 14:32:10 +00:00
|
|
|
pub password: Option<String>,
|
2021-05-26 06:43:31 +00:00
|
|
|
}
|
|
|
|
|
2021-05-30 19:11:13 +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)]
|
2021-05-08 09:34:55 +00:00
|
|
|
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>,
|
|
|
|
}
|