2023-10-04 09:24:12 +02:00
|
|
|
use crate::constants::{
|
|
|
|
CONTENT_TYPE_GIF, CONTENT_TYPE_JPG, CONTENT_TYPE_PNG, CONTENT_TYPE_SVG, CONTENT_TYPE_WEBP,
|
|
|
|
};
|
2023-07-05 01:13:06 +02:00
|
|
|
use crate::v1::ApiTokenPurpose;
|
2022-11-17 01:06:13 +01:00
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use url::Url;
|
2023-11-07 02:35:17 +01:00
|
|
|
use utoipa::ToSchema;
|
2023-07-05 01:13:06 +02:00
|
|
|
use uuid::Uuid;
|
2022-11-17 01:06:13 +01:00
|
|
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
|
|
|
/// This is a description of a linked or connected application for a user. This is
|
|
|
|
/// used in the UI to render applications on the dashboard for a user to access.
|
|
|
|
pub enum AppLink {
|
|
|
|
Oauth2 {
|
2022-11-21 02:59:47 +01:00
|
|
|
name: String,
|
2022-11-17 01:06:13 +01:00
|
|
|
display_name: String,
|
|
|
|
redirect_url: Url,
|
2022-11-21 02:59:47 +01:00
|
|
|
// Where the icon can be retrieved from.
|
|
|
|
icon: Option<Url>,
|
|
|
|
},
|
2022-11-17 01:06:13 +01:00
|
|
|
}
|
2023-07-05 01:13:06 +02:00
|
|
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
|
|
|
#[serde(rename_all = "lowercase")]
|
|
|
|
pub struct ScimSyncToken {
|
|
|
|
// uuid of the token?
|
|
|
|
pub token_id: Uuid,
|
|
|
|
#[serde(with = "time::serde::timestamp")]
|
|
|
|
pub issued_at: time::OffsetDateTime,
|
|
|
|
#[serde(default)]
|
|
|
|
pub purpose: ApiTokenPurpose,
|
|
|
|
}
|
2023-08-16 13:02:48 +02:00
|
|
|
|
|
|
|
// State machine states and transitions for the identity verification system feature!
|
2023-11-07 02:35:17 +01:00
|
|
|
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, ToSchema)]
|
2023-08-16 13:02:48 +02:00
|
|
|
pub enum IdentifyUserRequest {
|
|
|
|
Start,
|
|
|
|
SubmitCode { other_totp: u32 },
|
|
|
|
DisplayCode,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
|
|
|
|
pub enum IdentifyUserResponse {
|
|
|
|
IdentityVerificationUnavailable,
|
|
|
|
IdentityVerificationAvailable,
|
|
|
|
ProvideCode { step: u32, totp: u32 },
|
|
|
|
WaitForCode,
|
|
|
|
Success,
|
|
|
|
CodeFailure,
|
|
|
|
InvalidUserId,
|
|
|
|
}
|
2023-10-04 09:24:12 +02:00
|
|
|
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Hash, Ord, PartialOrd)]
|
|
|
|
#[serde(rename_all = "lowercase")]
|
|
|
|
pub enum ImageType {
|
|
|
|
Png,
|
|
|
|
Jpg,
|
|
|
|
Gif,
|
|
|
|
Svg,
|
|
|
|
Webp,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl TryFrom<&str> for ImageType {
|
|
|
|
type Error = &'static str;
|
|
|
|
/// ```
|
|
|
|
/// use kanidm_proto::internal::ImageType;
|
|
|
|
/// assert_eq!(ImageType::try_from("png").unwrap(), ImageType::Png);
|
|
|
|
/// assert!(ImageType::try_from("krabs").is_err());
|
|
|
|
/// ```
|
|
|
|
fn try_from(value: &str) -> Result<Self, &'static str> {
|
|
|
|
#[allow(clippy::panic)]
|
|
|
|
match value {
|
|
|
|
"png" => Ok(Self::Png),
|
|
|
|
"jpg" => Ok(Self::Jpg),
|
|
|
|
"jpeg" => Ok(Self::Jpg), // ugh I hate this
|
|
|
|
"gif" => Ok(Self::Gif),
|
|
|
|
"svg" => Ok(Self::Svg),
|
|
|
|
"webp" => Ok(Self::Webp),
|
|
|
|
_ => Err("Invalid image type!"),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ImageType {
|
|
|
|
pub fn try_from_content_type(content_type: &str) -> Result<Self, String> {
|
|
|
|
let content_type = content_type.to_lowercase();
|
|
|
|
match content_type.as_str() {
|
|
|
|
CONTENT_TYPE_JPG => Ok(ImageType::Jpg),
|
|
|
|
CONTENT_TYPE_PNG => Ok(ImageType::Png),
|
|
|
|
CONTENT_TYPE_GIF => Ok(ImageType::Gif),
|
|
|
|
CONTENT_TYPE_WEBP => Ok(ImageType::Webp),
|
|
|
|
CONTENT_TYPE_SVG => Ok(ImageType::Svg),
|
|
|
|
_ => Err(format!("Invalid content type: {}", content_type)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn as_content_type_str(&self) -> &'static str {
|
|
|
|
match &self {
|
|
|
|
ImageType::Jpg => CONTENT_TYPE_JPG,
|
|
|
|
ImageType::Png => CONTENT_TYPE_PNG,
|
|
|
|
ImageType::Gif => CONTENT_TYPE_GIF,
|
|
|
|
ImageType::Webp => CONTENT_TYPE_WEBP,
|
|
|
|
ImageType::Svg => CONTENT_TYPE_SVG,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug, PartialOrd, Ord, Hash)]
|
|
|
|
pub struct ImageValue {
|
|
|
|
pub filename: String,
|
|
|
|
pub filetype: ImageType,
|
|
|
|
pub contents: Vec<u8>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl TryFrom<&str> for ImageValue {
|
|
|
|
type Error = String;
|
|
|
|
fn try_from(s: &str) -> Result<Self, String> {
|
|
|
|
serde_json::from_str(s)
|
|
|
|
.map_err(|e| format!("Failed to decode ImageValue from {} - {:?}", s, e))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ImageValue {
|
|
|
|
pub fn new(filename: String, filetype: ImageType, contents: Vec<u8>) -> Self {
|
|
|
|
Self {
|
|
|
|
filename,
|
|
|
|
filetype,
|
|
|
|
contents,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-10-31 10:15:35 +01:00
|
|
|
|
|
|
|
#[repr(u32)]
|
|
|
|
#[derive(Debug, Copy, Clone, Deserialize, Default, Eq, PartialEq)]
|
|
|
|
#[serde(rename_all = "lowercase")]
|
|
|
|
/// Filesystem type object, used for tuning database parameters.
|
|
|
|
pub enum FsType {
|
|
|
|
Zfs = 65536,
|
|
|
|
#[default]
|
|
|
|
#[serde(other)]
|
|
|
|
/// The default setting, if not set to "zfs"
|
|
|
|
Generic = 4096,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl FsType {
|
|
|
|
pub fn checkpoint_pages(&self) -> u32 {
|
|
|
|
match self {
|
|
|
|
FsType::Generic => 2048,
|
|
|
|
FsType::Zfs => 256,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-16 01:44:12 +01:00
|
|
|
impl TryFrom<&str> for FsType {
|
|
|
|
type Error = ();
|
2023-10-31 10:15:35 +01:00
|
|
|
|
2024-01-16 01:44:12 +01:00
|
|
|
fn try_from(s: &str) -> Result<Self, Self::Error> {
|
2023-10-31 10:15:35 +01:00
|
|
|
match s {
|
2024-01-16 01:44:12 +01:00
|
|
|
"zfs" => Ok(FsType::Zfs),
|
|
|
|
"generic" => Ok(FsType::Generic),
|
|
|
|
_ => Err(()),
|
2023-10-31 10:15:35 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-16 01:44:12 +01:00
|
|
|
#[derive(Debug, Serialize, Deserialize, Clone, Copy)]
|
|
|
|
pub enum Oauth2ClaimMapJoin {
|
|
|
|
#[serde(rename = "csv")]
|
|
|
|
Csv,
|
|
|
|
#[serde(rename = "ssv")]
|
|
|
|
Ssv,
|
|
|
|
#[serde(rename = "array")]
|
|
|
|
Array,
|
|
|
|
}
|
|
|
|
|
2024-02-06 11:01:06 +01:00
|
|
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
|
|
|
pub struct DomainInfo {
|
|
|
|
pub name: String,
|
|
|
|
pub displayname: String,
|
|
|
|
pub uuid: Uuid,
|
|
|
|
pub level: u32,
|
|
|
|
}
|
|
|
|
|
2023-10-31 10:15:35 +01:00
|
|
|
#[test]
|
|
|
|
fn test_fstype_deser() {
|
2024-01-16 01:44:12 +01:00
|
|
|
assert_eq!(FsType::try_from("zfs"), Ok(FsType::Zfs));
|
|
|
|
assert_eq!(FsType::try_from("generic"), Ok(FsType::Generic));
|
|
|
|
assert_eq!(FsType::try_from(" "), Err(()));
|
|
|
|
assert_eq!(FsType::try_from("crab🦀"), Err(()));
|
2023-10-31 10:15:35 +01:00
|
|
|
}
|