summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2019-07-12 16:40:40 +0200
committerPietro Albini <pietro@pietroalbini.org>2019-07-13 21:45:20 +0200
commitb8f0a391fedb4fb817c04ff4907336e1eece2214 (patch)
tree079b575a19716a0f88022d5b0a21bc677376f1e8 /src
parent5bf01b4b591afebc978123e27ab682945fd215a8 (diff)
add github ids to the api
Diffstat (limited to 'src')
-rw-r--r--src/main.rs3
-rw-r--r--src/permissions.rs21
-rw-r--r--src/static_api.rs14
3 files changed, 23 insertions, 15 deletions
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::<Vec<_>>();
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<HashSet<String>, Error> {
- let mut github_users = HashSet::new();
+) -> Result<Vec<&'a Person>, 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::<Vec<_>>();
+ let mut github_ids = allowed.iter().map(|p| p.github_id()).collect::<Vec<_>>();
github_users.sort();
+ github_ids.sort();
self.add(
&format!("v1/permissions/{}.json", perm),
- &v1::Permission { github_users },
+ &v1::Permission {
+ github_users,
+ github_ids,
+ },
)?;
}
Ok(())