summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2014-09-05 01:31:14 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2014-09-05 01:31:14 -0400
commit4b70501e432eb5fd9ed04a4afbadafabd982e9fc (patch)
treeb09fe80d9ec0ec3eb82f46dbfce960dc66aaf3f4 /bin
parent1ab58422fb47e22e178716efa3fbce5beabbc174 (diff)
restructure to have most data in YAML
Diffstat (limited to 'bin')
-rwxr-xr-xbin/check-format38
-rwxr-xr-xbin/get-pgp-keyid9
-rwxr-xr-xbin/list-pgp-keyids27
-rwxr-xr-xbin/list-ssh-authorized-keys24
-rwxr-xr-xbin/normalize-stdio31
5 files changed, 129 insertions, 0 deletions
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