workos/user_management/operations/
get_user_identities.rs1use async_trait::async_trait;
2use thiserror::Error;
3
4use crate::user_management::{Identity, UserId, UserManagement};
5use crate::{ResponseExt, WorkOsError, WorkOsResult};
6
7#[derive(Debug, Error)]
9pub enum GetUserIdentitiesError {}
10
11impl From<GetUserIdentitiesError> for WorkOsError<GetUserIdentitiesError> {
12 fn from(err: GetUserIdentitiesError) -> Self {
13 Self::Operation(err)
14 }
15}
16
17#[async_trait]
19pub trait GetUserIdentities {
20 async fn get_user_identities(
42 &self,
43 user_id: &UserId,
44 ) -> WorkOsResult<Vec<Identity>, GetUserIdentitiesError>;
45}
46
47#[async_trait]
48impl GetUserIdentities for UserManagement<'_> {
49 async fn get_user_identities(
50 &self,
51 user_id: &UserId,
52 ) -> WorkOsResult<Vec<Identity>, GetUserIdentitiesError> {
53 let url = self
54 .workos
55 .base_url()
56 .join(&format!("/user_management/users/{user_id}/identities"))?;
57
58 let identities = self
59 .workos
60 .client()
61 .get(url)
62 .bearer_auth(self.workos.key())
63 .send()
64 .await?
65 .handle_unauthorized_or_generic_error()
66 .await?
67 .json::<Vec<Identity>>()
68 .await?;
69
70 Ok(identities)
71 }
72}
73
74#[cfg(test)]
75mod test {
76 use serde_json::json;
77 use tokio;
78
79 use crate::user_management::{IdentityId, UserId};
80 use crate::{ApiKey, WorkOs};
81
82 use super::*;
83
84 #[tokio::test]
85 async fn it_calls_the_get_user_identities_endpoint() {
86 let mut server = mockito::Server::new_async().await;
87
88 let workos = WorkOs::builder(&ApiKey::from("sk_example_123456789"))
89 .base_url(&server.url())
90 .unwrap()
91 .build();
92
93 server
94 .mock(
95 "GET",
96 "/user_management/users/user_01E4ZCR3C56J083X43JQXF3JK5/identities",
97 )
98 .match_header("Authorization", "Bearer sk_example_123456789")
99 .with_status(200)
100 .with_body(
101 json!([
102 {
103 "idp_id": "4F42ABDE-1E44-4B66-824A-5F733C037A6D",
104 "type": "OAuth",
105 "provider": "MicrosoftOAuth"
106 }
107 ])
108 .to_string(),
109 )
110 .create_async()
111 .await;
112
113 let list = workos
114 .user_management()
115 .get_user_identities(&UserId::from("user_01E4ZCR3C56J083X43JQXF3JK5"))
116 .await
117 .unwrap();
118
119 assert_eq!(
120 list.into_iter().next().map(|identity| identity.idp_id),
121 Some(IdentityId::from("4F42ABDE-1E44-4B66-824A-5F733C037A6D"))
122 )
123 }
124}