1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
use async_trait::async_trait;
mod models;
#[allow(clippy::module_inception)]
mod roles;
pub use models::*;
use crate::{models::ListAllParams, DracoonClientError};
#[async_trait]
pub trait Roles {
/// Get a list of all roles.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// let roles = dracoon.roles().get_roles().await.unwrap();
/// # }
/// ```
async fn get_roles(&self) -> Result<RoleList, DracoonClientError>;
/// Get a list of all groups with a specific role.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles, ListAllParams};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// // Params are optional
/// let params = ListAllParams::builder()
/// .with_offset(0)
/// .with_limit(100)
/// .build();
/// let groups = dracoon.roles().get_role_groups(1, Some(params)).await.unwrap();
/// # }
/// ```
async fn get_role_groups(
&self,
role_id: u64,
params: Option<ListAllParams>,
) -> Result<RoleGroupList, DracoonClientError>;
/// Assign a role to a list of groups.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// let groups = dracoon.roles().assign_role_to_groups(1, vec![1, 2, 3].into()).await.unwrap();
/// # }
/// ```
async fn assign_role_to_groups(
&self,
role_id: u64,
group_ids: AssignRoleBatchRequest,
) -> Result<RoleGroupList, DracoonClientError>;
/// Revoke a role from a list of groups.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// let groups = dracoon.roles().revoke_role_from_groups(1, vec![1, 2, 3].into()).await.unwrap();
/// # }
/// ```
async fn revoke_role_from_groups(
&self,
role_id: u64,
group_ids: RevokeRoleBatchRequest,
) -> Result<RoleGroupList, DracoonClientError>;
/// Get a list of all users with a specific role.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles, ListAllParams};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// // Params are optional
/// let params = ListAllParams::builder()
/// .with_offset(0)
/// .with_limit(100)
/// .build();
/// let users = dracoon.roles().get_role_users(1, Some(params)).await.unwrap();
/// # }
/// ```
async fn get_role_users(
&self,
role_id: u64,
params: Option<ListAllParams>,
) -> Result<RoleUserList, DracoonClientError>;
/// Assign a role to a list of users.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// let users = dracoon.roles().assign_role_to_users(1, vec![1, 2, 3].into()).await.unwrap();
/// # }
/// ```
async fn assign_role_to_users(
&self,
role_id: u64,
user_ids: AssignRoleBatchRequest,
) -> Result<RoleUserList, DracoonClientError>;
/// Revoke a role from a list of users.
/// ```no_run
/// # use dco3::{Dracoon, auth::OAuth2Flow, Roles};
/// # #[tokio::main]
/// # async fn main() {
/// # let dracoon = Dracoon::builder()
/// # .with_base_url("https://dracoon.team")
/// # .with_client_id("client_id")
/// # .with_client_secret("client_secret")
/// # .build()
/// # .unwrap()
/// # .connect(OAuth2Flow::PasswordFlow("username".into(), "password".into()))
/// # .await
/// # .unwrap();
/// let users = dracoon.roles().revoke_role_from_users(1, vec![1, 2, 3].into()).await.unwrap();
/// # }
/// ```
async fn revoke_role_from_users(
&self,
role_id: u64,
user_ids: RevokeRoleBatchRequest,
) -> Result<RoleUserList, DracoonClientError>;
}