graph_oauth/identity/
application_options.rs1use url::Url;
2use uuid::Uuid;
3
4use crate::identity::AadAuthorityAudience;
5use crate::AzureCloudInstance;
6
7#[derive(Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
9pub struct ApplicationOptions {
10 #[serde(alias = "clientId", alias = "ClientId", alias = "client_id")]
14 pub client_id: Uuid,
15 #[serde(alias = "tenantId", alias = "TenantId", alias = "tenant_id")]
20 pub tenant_id: Option<String>,
21 #[serde(
22 alias = "aadAuthorityAudience",
23 alias = "AadAuthorityAudience",
24 alias = "aad_authority_audience"
25 )]
26 pub aad_authority_audience: Option<AadAuthorityAudience>,
27 #[serde(alias = "instance", alias = "Instance")]
28 pub instance: Option<Url>,
29 #[serde(
30 alias = "azureCloudInstance",
31 alias = "AzureCloudInstance",
32 alias = "azure_cloud_instance"
33 )]
34 pub azure_cloud_instance: Option<AzureCloudInstance>,
35 #[serde(alias = "redirectUri", alias = "RedirectUri", alias = "redirect_uri")]
36 pub redirect_uri: Option<Url>,
37}
38
39impl ApplicationOptions {
40 pub fn new(client_id: impl AsRef<str>) -> ApplicationOptions {
41 ApplicationOptions {
42 client_id: Uuid::try_parse(client_id.as_ref())
43 .expect("Invalid Client Id - Must be a valid Uuid"),
44 tenant_id: None,
45 aad_authority_audience: None,
46 instance: None,
47 azure_cloud_instance: None,
48 redirect_uri: None,
49 }
50 }
51}
52
53#[cfg(test)]
54mod test {
55 use super::*;
56
57 #[test]
58 fn application_options_from_file() {
59 let file_content = include_str!("credentials/test/application_options/aad_options.json");
60 let application_options: ApplicationOptions = serde_json::from_str(file_content).unwrap();
61
62 assert_eq!(
63 application_options.aad_authority_audience,
64 Some(AadAuthorityAudience::PersonalMicrosoftAccount)
65 );
66 }
67}