OK by me so long as the generated output is the same.

On 9 March 2016 at 17:18, Sam Ruby <[email protected]> wrote:
> I've modified public_nonldap_groups.rb to reuse the existing
> authorization parsing in whimsy/asf.
>
> Since this merits discussion before merging, I put it into a pull request:
>
> https://github.com/apache/whimsy/pull/5
>
> There also are 'pit-' groups that can be handled the same way.
>
> Feel free to merge or delete the branch.  Or to make improvements to
> the underlying ASF::Authorization class:
>
> https://github.com/apache/whimsy/blob/master/lib/whimsy/asf/auth.rb
>
> - Sam Ruby
>
> On Sat, Jan 23, 2016 at 7:34 PM, Sebastian Bazley <[email protected]> wrote:
>> Commit 9abe73d558a1a5fffe38759797e4a57845e35b12:
>>     Extract podling groups etc from asf-authorization-template
>>
>>
>> Branch: refs/heads/master
>> Author: Sebb <[email protected]>
>> Committer: Sebb <[email protected]>
>> Pusher: sebb <[email protected]>
>>
>> ------------------------------------------------------------
>> www/roster/public_nonldap_groups.rb                          | +++++++++
>> ------------------------------------------------------------
>> 65 changes: 65 additions, 0 deletions.
>> ------------------------------------------------------------
>>
>>
>> diff --git a/www/roster/public_nonldap_groups.rb 
>> b/www/roster/public_nonldap_groups.rb
>> new file mode 100644
>> index 0000000..28e4f5d
>> --- /dev/null
>> +++ b/www/roster/public_nonldap_groups.rb
>> @@ -0,0 +1,65 @@
>> +# 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:
>> +# {
>> +#   "git_info": "5623ad5  2016-01-23 16:26:01 -0500",
>> +#   "groups": {
>> +#     "batchee": [
>> +#       "uid",
>> +#       ...
>> +#     ]
>> +#    },
>> +#
>> +
>> +require 'bundler/setup'
>> +
>> +require 'whimsy/asf'
>> +
>> +require 'net/http'
>> +require 'json'
>> +require 'open3'
>> +
>> +GITINFO = ASF.library_gitinfo rescue '?'
>> +
>> +file = 
>> '/apache/infrastructure-puppet/deployment/modules/subversion_server/files/authorization/asf-authorization-template'
>> +http = Net::HTTP.new('raw.githubusercontent.com', 443)
>> +http.use_ssl = true
>> +body = http.request(Net::HTTP::Get.new(file)).body
>> +  .sub(/^.*\[groups\]\s*$/m,'')
>> +  .sub(/^\[\/\].*/m,'')
>> +
>> +groups = {}
>> +
>> +# find the locally defined groups
>> +body.scan(/^(\w[^=\s]*)[ \t]*=[ \t]*(\w.*)$/) do |grp, mem|
>> +  groups[grp] = mem.gsub(/\s/,'').split(/,/).sort.uniq
>> +end
>> +
>> +info = {
>> +  # There does not seem to be a useful timestamp here
>> +  git_info: GITINFO,
>> +  groups: groups,
>> +}
>> +
>> +# format as JSON
>> +results = JSON.pretty_generate(info)
>> +
>> +# parse arguments for output file name
>> +if ARGV.length == 0 or ARGV.first == '-'
>> +  # write to STDOUT
>> +  puts results
>> +elsif not File.exist?(ARGV.first) or File.read(ARGV.first) != results
>> +
>> +  out, err, rc = Open3.capture3('diff', '-u', ARGV.first, '-', stdin_data: 
>> results)
>> +  puts out if err.empty? and rc.exitstatus == 1
>> +
>> +  # replace file as contents have changed
>> +  File.write(ARGV.first, results)
>> +end

Reply via email to