From 4b70501e432eb5fd9ed04a4afbadafabd982e9fc Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 5 Sep 2014 01:31:14 -0400 Subject: restructure to have most data in YAML --- bin/check-format | 38 ++++++++++++++++++++++++++++++++++++++ bin/get-pgp-keyid | 9 +++++++++ bin/list-pgp-keyids | 27 +++++++++++++++++++++++++++ bin/list-ssh-authorized-keys | 24 ++++++++++++++++++++++++ bin/normalize-stdio | 31 +++++++++++++++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100755 bin/check-format create mode 100755 bin/get-pgp-keyid create mode 100755 bin/list-pgp-keyids create mode 100755 bin/list-ssh-authorized-keys create mode 100755 bin/normalize-stdio (limited to 'bin') diff --git a/bin/check-format b/bin/check-format new file mode 100755 index 0000000..06b880a --- /dev/null +++ b/bin/check-format @@ -0,0 +1,38 @@ +#!/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 new file mode 100755 index 0000000..3aec3a1 --- /dev/null +++ b/bin/get-pgp-keyid @@ -0,0 +1,9 @@ +#!/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 new file mode 100755 index 0000000..1a3dfbd --- /dev/null +++ b/bin/list-pgp-keyids @@ -0,0 +1,27 @@ +#!/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 new file mode 100755 index 0000000..0722b4f --- /dev/null +++ b/bin/list-ssh-authorized-keys @@ -0,0 +1,24 @@ +#!/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/normalize-stdio b/bin/normalize-stdio new file mode 100755 index 0000000..23a240e --- /dev/null +++ b/bin/normalize-stdio @@ -0,0 +1,31 @@ +#!/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 -- cgit v1.2.2