blob: bdefc7a13f15f08276c6229e5a2b534e59410ce1 [file] [log] [blame]
# Reads LDAP ou=groups,dc=apache,dc=org which is still used for some groups:
# - apsite
# - committers (this is also in ou=roles)
# - members
#
# The contents cannot be used to determine LDAP group membership
#
# Creates JSON output with the following format:
#
# {
# "lastTimestamp": "20160119171152Z", // most recent modifyTimestamp
# "group_count": 123,
# "roster_counts": {
# "apsite": 123,
# ///
# },
# "groups": {
# "apsite": {
# "modifyTimestamp": "20111204095436Z",
# "roster_count": 123,
# "roster": ["uid",
# ...
# ]
# },
# ...
# },
# }
#
require_relative 'public_json_common'
entries = {}
groups = ASF::Group.preload # for performance
lastStamp = ''
roster_counts = Hash.new(0)
groups.sort_by {|g, _| g.name}.each do |group, _|
m = []
createTimestamp = group.createTimestamp
modifyTimestamp = group.modifyTimestamp
group.members.sort_by(&:name).each do |e|
m << e.name
end
lastStamp = modifyTimestamp if modifyTimestamp > lastStamp
entries[group.name] = {
createTimestamp: createTimestamp,
modifyTimestamp: modifyTimestamp,
roster_count: m.size,
roster: m
}
roster_counts[group.name] = m.size
end
info = {
# Is there a use case for the last createTimestamp ?
lastTimestamp: lastStamp,
group_count: entries.size,
roster_counts: roster_counts,
groups: entries,
}
public_json_output(info)
if check_now?
# for validating UIDs
uids = ASF::Person.list().map(&:id)
entries.each do |name, entry|
entry[:roster].each do |id|
Wunderbar.warn "#{name}: unknown uid '#{id}'" unless uids.include?(id)
end
end
end