www/members/moderator_checks.cgi (73 lines of code) (raw):
#!/usr/bin/env ruby
PAGETITLE = "Apache List Moderator checks" # Wvisible:members mail
$LOAD_PATH.unshift '/srv/whimsy/lib'
# check moderators are known
require 'wunderbar'
require 'whimsy/asf'
require 'whimsy/asf/mlist'
require 'wunderbar/bootstrap'
require 'wunderbar/jquery/stupidtable'
# Known moderators
MODERATORS = %w{
mod-private@gsuite.cloud.apache.org
mod-board@gsuite.cloud.apache.org
secretary@apache.org
board-chair@apache.org
__announce_moderator__@apache.org
}
def private_mod(lid, mod)
dom = lid.split('@')[-1]
["pmc@#{dom}", "private@#{dom}"].include? mod
end
_html do
_body? do
_whimsy_body(
title: PAGETITLE,
related: {
},
helpblock: -> {
_h2 'DRAFT - List moderators whose email addresses are not recognised'
_p 'If the domain is @apache.org, the email is most likely a typo'
_p 'In other cases, perhaps the email is not registered'
_p do
_b 'Emails are matched exactly - case is treated significant, even for domains'
end
}
) do
lists, _time = ASF::MLIST.list_moderators(nil)
emails = ASF::Mail.list
unknown = Hash.new { |h, k| h[k] = []}
lists.each do |lid, mods|
mods.each do |mod|
unknown[mod] << lid unless MODERATORS.include? mod or emails[mod] or private_mod(lid, mod)
end
end
_table.table.table_striped do
_thead_ do
_tr do
_th 'Unknown email addresses', data_sort: 'string'
_th 'Lists moderated', data_sort: 'string'
end
end
_tbody do
unknown.sort_by {|x, y| p = x.split('@'); [p[1], p[0]]}.each do |email, lids|
_tr do
_td email
_td lids.join(',')
end
end
end
end
_script %{
var table = $(".table").stupidtable();
table.on("aftertablesort", function (event, data) {
var th = $(this).find("th");
th.find(".arrow").remove();
var dir = $.fn.stupidtable.dir;
var arrow = data.direction === dir.ASC ? "↑" : "↓";
th.eq(data.column).append('<span class="arrow">' + arrow +'</span>');
});
}
end
end
end