Skip to content

Commit 3495b75

Browse files
committed
Reviewers staff-only is permissions-gated
Rather than separate links
1 parent 8ce8097 commit 3495b75

File tree

2 files changed

+16
-51
lines changed

2 files changed

+16
-51
lines changed

src/frontend.rs

Lines changed: 16 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ use axum::{
66
extract::{OriginalUri, Path, Query, State},
77
response::{Html, IntoResponse, Response},
88
};
9-
use futures::future::{join, join_all};
9+
use futures::future::join_all;
1010
use http::{header::CONTENT_TYPE, StatusCode, Uri};
11-
use octocrab::Octocrab;
1211
use serde::Deserialize;
1312
use tower_sessions::Session;
1413

@@ -19,7 +18,7 @@ use crate::{
1918
Submission, TraineeStatus,
2019
},
2120
google_groups::{get_groups, groups_client, GoogleGroup},
22-
octocrab::{all_pages, octocrab},
21+
octocrab::octocrab,
2322
prs::{MaybeReviewerStaffOnlyDetails, PrState, ReviewerInfo},
2423
reviewer_staff_info::get_reviewer_staff_info,
2524
sheets::sheets_client,
@@ -44,10 +43,6 @@ pub async fn list_courses(
4443
.into_iter()
4544
.collect::<Result<Vec<_>, _>>()?;
4645

47-
let is_staff = is_staff(&octocrab, &server_state.config.github_org)
48-
.await
49-
.unwrap_or(false);
50-
5146
let courses_with_batch_metadata = courses
5247
.keys()
5348
.zip(batch_metadata)
@@ -81,39 +76,16 @@ pub async fn list_courses(
8176
Ok(Html(
8277
ListCoursesTemplate {
8378
courses_with_batch_metadata,
84-
is_staff,
8579
}
8680
.render()
8781
.unwrap(),
8882
))
8983
}
9084

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-
11285
#[derive(Template)]
11386
#[template(path = "list-courses.html")]
11487
struct ListCoursesTemplate {
11588
pub courses_with_batch_metadata: Vec<CourseScheduleWithBatchMetadata>,
116-
pub is_staff: bool,
11789
}
11890

11991
struct CourseScheduleWithBatchMetadata {
@@ -208,30 +180,26 @@ impl TraineeBatchTemplate {
208180
}
209181
}
210182

211-
#[derive(Deserialize)]
212-
pub struct ReviewerParams {
213-
staff: Option<bool>,
214-
}
215-
216183
pub async fn get_reviewers(
217184
session: Session,
218185
State(server_state): State<ServerState>,
219186
OriginalUri(original_uri): OriginalUri,
220187
Path(course): Path<String>,
221-
Query(reviewer_params): Query<ReviewerParams>,
222188
) -> 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+
})?;
235203

236204
let octocrab = octocrab(&session, &server_state, original_uri).await?;
237205
let github_org = &server_state.config.github_org;

templates/list-courses.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ <h2>{{ cwbm.course.name }}</h2>
1010
{% endfor %}
1111
<li>
1212
<a href="/courses/{{ cwbm.course.name }}/reviewers">Reviewers</a>
13-
{% if is_staff %}
14-
(<a href="/courses/{{ cwbm.course.name }}/reviewers?staff=true">Staff view</a>)
15-
{% endif %}
1613
</li>
1714
</ul>
1815
{% endfor %}

0 commit comments

Comments
 (0)