graph_oauth/identity/
application_options.rs

1use url::Url;
2use uuid::Uuid;
3
4use crate::identity::AadAuthorityAudience;
5use crate::AzureCloudInstance;
6
7/// 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")]
14    pub 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")]
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}