File tree Expand file tree Collapse file tree 3 files changed +18
-20
lines changed
crates/crates_io_github/src Expand file tree Collapse file tree 3 files changed +18
-20
lines changed Original file line number Diff line number Diff line change @@ -39,7 +39,7 @@ pub trait GitHubClient: Send + Sync {
39
39
org_id : i32 ,
40
40
username : & str ,
41
41
auth : & AccessToken ,
42
- ) -> Result < GitHubOrgMembership > ;
42
+ ) -> Result < Option < GitHubOrgMembership > > ;
43
43
async fn public_keys ( & self , username : & str , password : & str ) -> Result < Vec < GitHubPublicKey > > ;
44
44
}
45
45
@@ -135,12 +135,13 @@ impl GitHubClient for RealGitHubClient {
135
135
org_id : i32 ,
136
136
username : & str ,
137
137
auth : & AccessToken ,
138
- ) -> Result < GitHubOrgMembership > {
139
- self . request (
140
- & format ! ( "/organizations/{org_id}/memberships/{username}" ) ,
141
- auth,
142
- )
143
- . await
138
+ ) -> Result < Option < GitHubOrgMembership > > {
139
+ let url = format ! ( "/organizations/{org_id}/memberships/{username}" ) ;
140
+ match self . request ( & url, auth) . await {
141
+ Ok ( membership) => Ok ( Some ( membership) ) ,
142
+ Err ( GitHubError :: NotFound ( _) ) => Ok ( None ) ,
143
+ Err ( err) => Err ( err) ,
144
+ }
144
145
}
145
146
146
147
/// Returns the list of public keys that can be used to verify GitHub secret alert signatures
Original file line number Diff line number Diff line change @@ -213,14 +213,11 @@ async fn is_gh_org_owner(
213
213
user : & User ,
214
214
) -> Result < bool , GitHubError > {
215
215
let token = AccessToken :: new ( user. gh_access_token . expose_secret ( ) . to_string ( ) ) ;
216
- match gh_client
216
+ let membership = gh_client
217
217
. org_membership ( org_id, & user. gh_login , & token)
218
- . await
219
- {
220
- Ok ( membership) => Ok ( membership. state == "active" && membership. role == "admin" ) ,
221
- Err ( GitHubError :: NotFound ( _) ) => Ok ( false ) ,
222
- Err ( e) => Err ( e) ,
223
- }
218
+ . await ?;
219
+
220
+ Ok ( membership. is_some_and ( |m| m. state == "active" && m. role == "admin" ) )
224
221
}
225
222
226
223
async fn team_with_gh_id_contains_user (
Original file line number Diff line number Diff line change @@ -143,28 +143,28 @@ impl MockData {
143
143
& self ,
144
144
org_id : i32 ,
145
145
username : & str ,
146
- ) -> Result < GitHubOrgMembership , GitHubError > {
146
+ ) -> Result < Option < GitHubOrgMembership > , GitHubError > {
147
147
let org = self
148
148
. orgs
149
149
. iter ( )
150
150
. find ( |org| org. id == org_id)
151
151
. ok_or_else ( not_found) ?;
152
152
if org. owners . contains ( & username) {
153
- Ok ( GitHubOrgMembership {
153
+ Ok ( Some ( GitHubOrgMembership {
154
154
state : "active" . into ( ) ,
155
155
role : "admin" . into ( ) ,
156
- } )
156
+ } ) )
157
157
} else if org
158
158
. teams
159
159
. iter ( )
160
160
. any ( |team| team. members . contains ( & username) )
161
161
{
162
- Ok ( GitHubOrgMembership {
162
+ Ok ( Some ( GitHubOrgMembership {
163
163
state : "active" . into ( ) ,
164
164
role : "member" . into ( ) ,
165
- } )
165
+ } ) )
166
166
} else {
167
- Err ( not_found ( ) )
167
+ Ok ( None )
168
168
}
169
169
}
170
170
}
You can’t perform that action at this time.
0 commit comments