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 {
3939 org_id : i32 ,
4040 username : & str ,
4141 auth : & AccessToken ,
42- ) -> Result < GitHubOrgMembership > ;
42+ ) -> Result < Option < GitHubOrgMembership > > ;
4343 async fn public_keys ( & self , username : & str , password : & str ) -> Result < Vec < GitHubPublicKey > > ;
4444}
4545
@@ -135,12 +135,13 @@ impl GitHubClient for RealGitHubClient {
135135 org_id : i32 ,
136136 username : & str ,
137137 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+ }
144145 }
145146
146147 /// 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(
213213 user : & User ,
214214) -> Result < bool , GitHubError > {
215215 let token = AccessToken :: new ( user. gh_access_token . expose_secret ( ) . to_string ( ) ) ;
216- match gh_client
216+ let membership = gh_client
217217 . 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" ) )
224221}
225222
226223async fn team_with_gh_id_contains_user (
Original file line number Diff line number Diff line change @@ -143,28 +143,28 @@ impl MockData {
143143 & self ,
144144 org_id : i32 ,
145145 username : & str ,
146- ) -> Result < GitHubOrgMembership , GitHubError > {
146+ ) -> Result < Option < GitHubOrgMembership > , GitHubError > {
147147 let org = self
148148 . orgs
149149 . iter ( )
150150 . find ( |org| org. id == org_id)
151151 . ok_or_else ( not_found) ?;
152152 if org. owners . contains ( & username) {
153- Ok ( GitHubOrgMembership {
153+ Ok ( Some ( GitHubOrgMembership {
154154 state : "active" . into ( ) ,
155155 role : "admin" . into ( ) ,
156- } )
156+ } ) )
157157 } else if org
158158 . teams
159159 . iter ( )
160160 . any ( |team| team. members . contains ( & username) )
161161 {
162- Ok ( GitHubOrgMembership {
162+ Ok ( Some ( GitHubOrgMembership {
163163 state : "active" . into ( ) ,
164164 role : "member" . into ( ) ,
165- } )
165+ } ) )
166166 } else {
167- Err ( not_found ( ) )
167+ Ok ( None )
168168 }
169169 }
170170}
You can’t perform that action at this time.
0 commit comments