blob: 5281d660b2d8e1fce519384cdb67768da8d8c742 [file] [log] [blame]
# Not all authorization groups are defined in LDAP, for example podlings
# Extract these from asf-authorization-template
#
# We use the Git copy rather than the SVN version:
# - it is available without needing auth
# - the groups don't take effect unless the Git copy is updated
# - the SVN copy is due to be retired (one day)
# Unfortunately the Git HTTP server does not support If-Modified-Since or ETag
#
# Output looks like:
# {
# "groups": {
# "batchee": {
# "roster": [
# "uid",
# ...
# ],
# "podling": "current" // optional status if same as a podling name
# }
# },
# }
require_relative 'public_json_common'
pods = Hash[ASF::Podling.list.map {|podling| [podling.name, podling.status]}]
groups = {}
# find the locally defined groups
ASF::Authorization.new('asf').each do |grp, mem|
groups[grp] = {
# we use same syntax as for normal groups
# this will allow future expansion e.g. if we can flag podlings somehow
roster: mem.sort.uniq
}
# add podling type entry if there is one
groups[grp][:podling] = pods[grp] if pods[grp]
end
# Not currently used
#pitgroups = {}
#
## find the locally defined groups
#ASF::Authorization.new('pit').each do |grp, mem|
# pitgroups[grp] = {
# # we use same syntax as for normal groups
# # this will allow future expansion e.g. if we can flag podlings somehow
# roster: mem.sort.uniq
# }
# # add podling type entry if there is one
# pitgroups[grp][:podling] = pods[grp] if pods[grp]
#end
public_json_output(
# There does not seem to be a useful timestamp here
groups: groups
# TODO decide how to present the data: separate key or attribute or file
#pitgroups: pitgroups
)
if changed? and @old_file
# for validating UIDs
uids = ASF::Person.list().map(&:id)
groups.each do |name, entry|
entry[:roster].each do |id|
Wunderbar.warn "#{name}: unknown uid '#{id}'" unless uids.include?(id)
end
end
end