1use url::Url;
2use uuid::Uuid;
34use crate::identity::AadAuthorityAudience;
5use crate::AzureCloudInstance;
67/// Application Options typically stored as JSON file in .net applications.
8#[derive(Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
9pub struct ApplicationOptions {
10/// Client ID (also known as App ID) of the application as registered in the
11 /// application registration portal (https://aka.ms/msal-net-register-app)
12 /// Required parameter for ApplicationOptions.
13#[serde(alias = "clientId", alias = "ClientId", alias = "client_id")]
14pub client_id: Uuid,
15/// Tenant from which the application will allow users to sign it. This can be:
16 /// a domain associated with a tenant, a GUID (tenant id), or a meta-tenant (e.g. consumers).
17 /// This property is mutually exclusive with [AadAuthorityAudience]. If both
18 /// are provided, an error result will be returned when mapping to [crate::identity::ConfidentialClientApplication]
19#[serde(alias = "tenantId", alias = "TenantId", alias = "tenant_id")]
20pub tenant_id: Option<String>,
21#[serde(
22 alias = "aadAuthorityAudience",
23 alias = "AadAuthorityAudience",
24 alias = "aad_authority_audience"
25)]
26pub aad_authority_audience: Option<AadAuthorityAudience>,
27#[serde(alias = "instance", alias = "Instance")]
28pub instance: Option<Url>,
29#[serde(
30 alias = "azureCloudInstance",
31 alias = "AzureCloudInstance",
32 alias = "azure_cloud_instance"
33)]
34pub azure_cloud_instance: Option<AzureCloudInstance>,
35#[serde(alias = "redirectUri", alias = "RedirectUri", alias = "redirect_uri")]
36pub redirect_uri: Option<Url>,
37}
3839impl ApplicationOptions {
40pub 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}
5253#[cfg(test)]
54mod test {
55use super::*;
5657#[test]
58fn application_options_from_file() {
59let file_content = include_str!("credentials/test/application_options/aad_options.json");
60let application_options: ApplicationOptions = serde_json::from_str(file_content).unwrap();
6162assert_eq!(
63 application_options.aad_authority_audience,
64Some(AadAuthorityAudience::PersonalMicrosoftAccount)
65 );
66 }
67}