From b8f0a391fedb4fb817c04ff4907336e1eece2214 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Fri, 12 Jul 2019 16:40:40 +0200 Subject: add github ids to the api --- src/main.rs | 3 ++- src/permissions.rs | 21 ++++++++++----------- src/static_api.rs | 14 +++++++++++--- 3 files changed, 23 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index e46acae..d0e6ae2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -156,8 +156,9 @@ fn run() -> Result<(), Error> { if !crate::schema::Permissions::AVAILABLE.contains(&name.as_str()) { failure::bail!("unknown permission: {}", name); } - let mut allowed = crate::permissions::allowed_github_users(&data, name)? + let mut allowed = crate::permissions::allowed_people(&data, name)? .into_iter() + .map(|person| person.github()) .collect::>(); allowed.sort(); for github_username in &allowed { diff --git a/src/permissions.rs b/src/permissions.rs index 5901cb8..c4d2454 100644 --- a/src/permissions.rs +++ b/src/permissions.rs @@ -1,4 +1,5 @@ use crate::data::Data; +use crate::schema::Person; use failure::{bail, Error}; use std::collections::HashSet; @@ -149,22 +150,20 @@ permissions! { } } -pub(crate) fn allowed_github_users( - data: &Data, +pub(crate) fn allowed_people<'a>( + data: &'a Data, permission: &str, -) -> Result, Error> { - let mut github_users = HashSet::new(); +) -> Result, Error> { + let mut members_with_perms = HashSet::new(); for team in data.teams() { if team.permissions().has(permission) { for member in team.members(&data)? { - github_users.insert(member.to_string()); + members_with_perms.insert(member); } } } - for person in data.people() { - if person.permissions().has(permission) { - github_users.insert(person.github().to_string()); - } - } - Ok(github_users) + Ok(data + .people() + .filter(|p| members_with_perms.contains(p.github()) || p.permissions().has(permission)) + .collect()) } diff --git a/src/static_api.rs b/src/static_api.rs index c752bc3..15e1dcd 100644 --- a/src/static_api.rs +++ b/src/static_api.rs @@ -40,6 +40,7 @@ impl<'a> Generator<'a> { members.push(v1::TeamMember { name: person.name().into(), github: (*github_name).into(), + github_id: person.github_id(), is_lead: leads.contains(github_name), }); } @@ -101,13 +102,20 @@ impl<'a> Generator<'a> { fn generate_permissions(&self) -> Result<(), Error> { for perm in Permissions::AVAILABLE { - let mut github_users = crate::permissions::allowed_github_users(&self.data, perm)? - .into_iter() + let allowed = crate::permissions::allowed_people(&self.data, perm)?; + let mut github_users = allowed + .iter() + .map(|p| p.github().to_string()) .collect::>(); + let mut github_ids = allowed.iter().map(|p| p.github_id()).collect::>(); github_users.sort(); + github_ids.sort(); self.add( &format!("v1/permissions/{}.json", perm), - &v1::Permission { github_users }, + &v1::Permission { + github_users, + github_ids, + }, )?; } Ok(()) -- cgit v1.2.3