From ac4dcb64a8f6c07dfe50e9005dc4246f21ebf84e Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 6 Sep 2014 00:39:14 -0400 Subject: Split hackers.yml into users/#{uid}.yml --- bin/check-format | 38 -------------------------------------- bin/get-pgp-keyid | 9 --------- bin/list-pgp-keyids | 27 --------------------------- bin/list-ssh-authorized-keys | 24 ------------------------ bin/meta-check | 38 ++++++++++++++++++++++++++++++++++++++ bin/meta-normalize-stdio | 34 ++++++++++++++++++++++++++++++++++ bin/normalize-stdio | 31 ------------------------------- bin/pgp-get-keyid-by-uid | 5 +++++ bin/pgp-list-keyids | 28 ++++++++++++++++++++++++++++ bin/ssh-list-authorized-keys | 22 ++++++++++++++++++++++ bin/uid-map | 10 ++++++++++ 11 files changed, 137 insertions(+), 129 deletions(-) delete mode 100755 bin/check-format delete mode 100755 bin/get-pgp-keyid delete mode 100755 bin/list-pgp-keyids delete mode 100755 bin/list-ssh-authorized-keys create mode 100755 bin/meta-check create mode 100755 bin/meta-normalize-stdio delete mode 100755 bin/normalize-stdio create mode 100755 bin/pgp-get-keyid-by-uid create mode 100755 bin/pgp-list-keyids create mode 100755 bin/ssh-list-authorized-keys create mode 100755 bin/uid-map (limited to 'bin') diff --git a/bin/check-format b/bin/check-format deleted file mode 100755 index 06b880a..0000000 --- a/bin/check-format +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -cfg_hackers="hackers.yml" - -###################################################################### - -. libremessages - -file=$cfg_hackers -ret=0 - -norm=$(mktemp --tmpdir) -trap "rm -f -- $(printf '%q' "$norm")" EXIT -"$(dirname "$0")/normalize-stdio" < "$file" > "$norm" || exit 1 - -usernames=($(<"$norm" sed -n 's/^[ -] username: //p' | sort)) - -dups=($(printf '%s\n' "${usernames[@]}" | uniq -d)) -if (( ${#dups[@]} )); then - error 'Duplicate usernames:' - plain '%s' "${dups[@]}" - ret=1 -fi - -illegal=($(printf '%s\n' "${usernames[@]}" | grep -v '^[a-z][a-z0-9]*$')) -if (( ${#illegal[@]} )); then - error 'Illegal usernames:' - plain '%s' "${illegal[@]}" - ret=1 -fi - -if "$(dirname "$0")/list-pgp-keyids" | grep -Ev '^(trusted|secondary|revoked)/[a-z][a-z0-9]* [0-9A-F]{40}$'; then - error 'Bad pgp keys ^^^' - ret=1 -fi - -colordiff -u "$file" "$norm" || ret=$? - -exit $ret diff --git a/bin/get-pgp-keyid b/bin/get-pgp-keyid deleted file mode 100755 index 3aec3a1..0000000 --- a/bin/get-pgp-keyid +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# Usage: get-keyid {username} -cfg_hackers="hackers.yml" - -###################################################################### - -require 'yaml' - -puts YAML::load(open(cfg_hackers)).find{|u|u["username"] == ARGV[0]}["pgp_keyid"] diff --git a/bin/list-pgp-keyids b/bin/list-pgp-keyids deleted file mode 100755 index 1a3dfbd..0000000 --- a/bin/list-pgp-keyids +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# Usage: list-keyids -cfg_hackers="hackers.yml" -cfg_groups = { - :trusted => [ "hackers", "bots" ], - :secondary => [ "trustedusers" ] -} - -###################################################################### -require 'yaml' - -YAML::load(open(cfg_hackers)).each do |user| - if user["groups"] - if ! (user["groups"] & cfg_groups[:trusted]).empty? - puts "trusted/#{user["username"]} #{user["pgp_keyid"]}" - elsif ! (user["groups"] & cfg_groups[:secondary]).empty? - puts "secondary/#{user["username"]} #{user["pgp_keyid"]}" - elsif user["pgp_keyid"] - puts "revoked/#{user["username"]} #{user["pgp_keyid"]}" - end - end - if user["pgp_revoked_keyids"] - user["pgp_revoked_keyids"].each do |keyid| - puts "revoked/#{user["username"]} #{keyid}" - end - end -end diff --git a/bin/list-ssh-authorized-keys b/bin/list-ssh-authorized-keys deleted file mode 100755 index 0722b4f..0000000 --- a/bin/list-ssh-authorized-keys +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env ruby -# Usage: list-ssh-authorized-keys [username] -cfg_hackers="hackers.yml" -cfg_groups = [ "hackers", "bots" ] - -###################################################################### - -require 'yaml' - -users = YAML::load(open(cfg_hackers)) - -if ARGV[0] - users = users.find_all{|u|u["username"] == ARGV[0]} -else - users = users.find_all{|u|u["groups"] and not (u["groups"] & cfg_groups).empty?} -end - -users.each do |user| - if user["ssh_keys"] - user["ssh_keys"].each do |addr,key| - puts "#{key} #{user["fullname"]} (#{user["username"]}) <#{addr}>" - end - end -end diff --git a/bin/meta-check b/bin/meta-check new file mode 100755 index 0000000..3eeb4c1 --- /dev/null +++ b/bin/meta-check @@ -0,0 +1,38 @@ +#!/bin/bash +# TODO: update to the split YAML files + +###################################################################### + +. libremessages + +file=$cfg_hackers +ret=0 + +norm=$(mktemp --tmpdir) +trap "rm -f -- $(printf '%q' "$norm")" EXIT +"$(dirname "$0")/meta-normalize-stdio" < "$file" > "$norm" || exit 1 + +usernames=($(<"$norm" sed -n 's/^[ -] username: //p' | sort)) + +dups=($(printf '%s\n' "${usernames[@]}" | uniq -d)) +if (( ${#dups[@]} )); then + error 'Duplicate usernames:' + plain '%s' "${dups[@]}" + ret=1 +fi + +illegal=($(printf '%s\n' "${usernames[@]}" | grep -v '^[a-z][a-z0-9]*$')) +if (( ${#illegal[@]} )); then + error 'Illegal usernames:' + plain '%s' "${illegal[@]}" + ret=1 +fi + +if "$(dirname "$0")/list-pgp-keyids" | grep -Ev '^(trusted|secondary|revoked)/[a-z][a-z0-9]* [0-9A-F]{40}$'; then + error 'Bad pgp keys ^^^' + ret=1 +fi + +colordiff -u "$file" "$norm" || ret=$? + +exit $ret diff --git a/bin/meta-normalize-stdio b/bin/meta-normalize-stdio new file mode 100755 index 0000000..0bb94ce --- /dev/null +++ b/bin/meta-normalize-stdio @@ -0,0 +1,34 @@ +#!/usr/bin/env ruby +require 'yaml' + +core_order = [ "username", + "fullname", + "email", # ordered list + "groups", # unordered list + "pgp_keyid", + "pgp_revoked_keyids", # unordered list + "ssh_keys", # unordered map + "extra" ] # unordered map + +extra_order = [ "alias", + "other_contact", + "roles", + "website", + "occupation", + "yob", + "location", + "languages", + "interests", + "favorite_distros" ] + +_core_order = Hash[[*core_order.map.with_index]] +_extra_order = Hash[[*extra_order.map.with_index]] + +user = YAML::load(STDIN) +user = Hash[user.sort_by{|k,v| _core_order[k]}]} +user["groups"] = user["groups"].sort if user["groups"]} +user["pgp_revoked_keyids"] = user["pgp_revoked_keyids"].sort if user["extra"]} +user["ssh_keys"] = Hash[user["ssh_keys"].sort_by{|k,v| k}] if user["ssh_keys"]} +user["extra"] = Hash[user["extra"].sort_by{|k,v| _extra_order[k]}] if user["extra"]} + +print user.to_yaml diff --git a/bin/normalize-stdio b/bin/normalize-stdio deleted file mode 100755 index 23a240e..0000000 --- a/bin/normalize-stdio +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env ruby -require 'yaml' - -core_order = [ "username", - "fullname", - "email", - "groups", - "pgp_keyid", - "pgp_revoked_keyids", - "ssh_keys", - "extra" ] - -extra_order = [ "alias", - "other_contact", - "roles", - "website", - "occupation", - "yob", - "location", - "languages", - "interests", - "favorite_distros" ] - -_core_order = Hash[[*core_order.map.with_index]] -_extra_order = Hash[[*extra_order.map.with_index]] - -print YAML::load(STDIN) - .sort_by{|u| u["username"]} - .map{|u| Hash[u.sort_by{|k,v| _core_order[k]}]} - .each{|u|u["extra"] = Hash[u["extra"].sort_by{|k,v| _extra_order[k]}] if u["extra"]} - .to_yaml diff --git a/bin/pgp-get-keyid-by-uid b/bin/pgp-get-keyid-by-uid new file mode 100755 index 0000000..1dea99f --- /dev/null +++ b/bin/pgp-get-keyid-by-uid @@ -0,0 +1,5 @@ +#!/usr/bin/env ruby +# Usage: pgp-get-keyid-by-uid {uid} + +require 'yaml' +puts YAML::load(open("users/#{ARGV[0]}.yml"))["pgp_keyid"] diff --git a/bin/pgp-list-keyids b/bin/pgp-list-keyids new file mode 100755 index 0000000..93bc292 --- /dev/null +++ b/bin/pgp-list-keyids @@ -0,0 +1,28 @@ +#!/usr/bin/env ruby +# Usage: pgp-list-keyids +cfg_groups = { + :trusted => [ "hackers", "bots" ], + :secondary => [ "trustedusers" ] +} + +###################################################################### +require 'yaml' + +users = Dir.glob("users/*.yml").map{|f|YAML::load(open(f))} + +users.each do |user| + if user["groups"] + if ! (user["groups"] & cfg_groups[:trusted]).empty? + puts "trusted/#{user["username"]} #{user["pgp_keyid"]}" + elsif ! (user["groups"] & cfg_groups[:secondary]).empty? + puts "secondary/#{user["username"]} #{user["pgp_keyid"]}" + elsif user["pgp_keyid"] + puts "revoked/#{user["username"]} #{user["pgp_keyid"]}" + end + end + if user["pgp_revoked_keyids"] + user["pgp_revoked_keyids"].each do |keyid| + puts "revoked/#{user["username"]} #{keyid}" + end + end +end diff --git a/bin/ssh-list-authorized-keys b/bin/ssh-list-authorized-keys new file mode 100755 index 0000000..fc329f2 --- /dev/null +++ b/bin/ssh-list-authorized-keys @@ -0,0 +1,22 @@ +#!/usr/bin/env ruby +# Usage: ssh-list-authorized-keys [username] +cfg_groups = [ "hackers", "bots" ] + +###################################################################### +require 'yaml' + +users = Dir.glob("users/*.yml").map{|f|YAML::load(open(f))} + +if ARGV[0] + users = users.find_all{|u|u["username"] == ARGV[0]} +else + users = users.find_all{|u|u["groups"] and not (u["groups"] & cfg_groups).empty?} +end + +users.each do |user| + if user["ssh_keys"] + user["ssh_keys"].each do |addr,key| + puts "#{key} #{user["fullname"]} (#{user["username"]}) <#{addr}>" + end + end +end diff --git a/bin/uid-map b/bin/uid-map new file mode 100755 index 0000000..90dd472 --- /dev/null +++ b/bin/uid-map @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby +# Usage: uid-map + +require 'yaml' + +users = Dir.glob("users/*.yml").each do |filename| + uid = filename.sub(/users\/([0-9]*)\.yml/, "\\1").to_i + user = YAML::load(open(filename)) + puts "#{uid}:#{user["username"]}" +end -- cgit v1.2.3