@@ -6,9 +6,8 @@ use axum::{
6
6
extract:: { OriginalUri , Path , Query , State } ,
7
7
response:: { Html , IntoResponse , Response } ,
8
8
} ;
9
- use futures:: future:: { join , join_all} ;
9
+ use futures:: future:: join_all;
10
10
use http:: { header:: CONTENT_TYPE , StatusCode , Uri } ;
11
- use octocrab:: Octocrab ;
12
11
use serde:: Deserialize ;
13
12
use tower_sessions:: Session ;
14
13
@@ -19,7 +18,7 @@ use crate::{
19
18
Submission , TraineeStatus ,
20
19
} ,
21
20
google_groups:: { get_groups, groups_client, GoogleGroup } ,
22
- octocrab:: { all_pages , octocrab} ,
21
+ octocrab:: octocrab,
23
22
prs:: { MaybeReviewerStaffOnlyDetails , PrState , ReviewerInfo } ,
24
23
reviewer_staff_info:: get_reviewer_staff_info,
25
24
sheets:: sheets_client,
@@ -44,10 +43,6 @@ pub async fn list_courses(
44
43
. into_iter ( )
45
44
. collect :: < Result < Vec < _ > , _ > > ( ) ?;
46
45
47
- let is_staff = is_staff ( & octocrab, & server_state. config . github_org )
48
- . await
49
- . unwrap_or ( false ) ;
50
-
51
46
let courses_with_batch_metadata = courses
52
47
. keys ( )
53
48
. zip ( batch_metadata)
@@ -81,39 +76,16 @@ pub async fn list_courses(
81
76
Ok ( Html (
82
77
ListCoursesTemplate {
83
78
courses_with_batch_metadata,
84
- is_staff,
85
79
}
86
80
. render ( )
87
81
. unwrap ( ) ,
88
82
) )
89
83
}
90
84
91
- async fn is_staff ( octocrab : & Octocrab , github_org : & str ) -> Result < bool , Error > {
92
- let team_future = all_pages ( "staff team members" , octocrab, async || {
93
- octocrab
94
- . teams ( github_org)
95
- . members ( "cyf-staff-team" )
96
- . send ( )
97
- . await
98
- } ) ;
99
- let current = octocrab. current ( ) ;
100
- let self_future = current. user ( ) ;
101
- let ( team_members, user) = join ( team_future, self_future) . await ;
102
- let team_members = team_members?;
103
- let user = user. context ( "Failed to get current user" ) ?;
104
- for team_member in team_members {
105
- if team_member. login == user. login {
106
- return Ok ( true ) ;
107
- }
108
- }
109
- Ok ( false )
110
- }
111
-
112
85
#[ derive( Template ) ]
113
86
#[ template( path = "list-courses.html" ) ]
114
87
struct ListCoursesTemplate {
115
88
pub courses_with_batch_metadata : Vec < CourseScheduleWithBatchMetadata > ,
116
- pub is_staff : bool ,
117
89
}
118
90
119
91
struct CourseScheduleWithBatchMetadata {
@@ -208,30 +180,26 @@ impl TraineeBatchTemplate {
208
180
}
209
181
}
210
182
211
- #[ derive( Deserialize ) ]
212
- pub struct ReviewerParams {
213
- staff : Option < bool > ,
214
- }
215
-
216
183
pub async fn get_reviewers (
217
184
session : Session ,
218
185
State ( server_state) : State < ServerState > ,
219
186
OriginalUri ( original_uri) : OriginalUri ,
220
187
Path ( course) : Path < String > ,
221
- Query ( reviewer_params) : Query < ReviewerParams > ,
222
188
) -> Result < Html < String > , Error > {
223
- let is_staff = reviewer_params. staff . unwrap_or ( false ) ;
224
- let mut staff_details = if is_staff {
225
- let sheets_client =
226
- sheets_client ( & session, server_state. clone ( ) , original_uri. clone ( ) ) . await ?;
227
- get_reviewer_staff_info (
228
- sheets_client,
229
- & server_state. config . reviewer_staff_info_sheet_id ,
230
- )
231
- . await ?
232
- } else {
233
- BTreeMap :: new ( )
234
- } ;
189
+ let sheets_client = sheets_client ( & session, server_state. clone ( ) , original_uri. clone ( ) ) . await ?;
190
+ let mut is_staff = true ;
191
+ let mut staff_details = get_reviewer_staff_info (
192
+ sheets_client,
193
+ & server_state. config . reviewer_staff_info_sheet_id ,
194
+ )
195
+ . await
196
+ . or_else ( |err| match err {
197
+ Error :: PotentiallyIgnorablePermissions ( _) => {
198
+ is_staff = false ;
199
+ Ok ( BTreeMap :: new ( ) )
200
+ }
201
+ err => Err ( err) ,
202
+ } ) ?;
235
203
236
204
let octocrab = octocrab ( & session, & server_state, original_uri) . await ?;
237
205
let github_org = & server_state. config . github_org ;
0 commit comments