#!/usr/bin/ruby
require 'pathname'
require 'rexml/document'
def updateGroups(pathOfGroupToDelete)
pathOfGroupToDelete = pathOfGroupToDelete.chop
path = Pathname.new(pathOfGroupToDelete)
parent = path.parent.realpath
groupName = path.basename
groupsName = parent + Pathname.new("groups.xml")
groups = File.new(groupsName, "r")
doc = REXML::Document.new groups
groups.close
group = doc.root.find { |e|
if defined?(e.text) then
e.text.to_s == groupName.to_s
else
false
end
}
doc.root.delete_element group
if !doc.root.has_elements? then
File.delete(groupsName)
return
end
# save doc
groups = File.open(groupsName, "w")
doc.write( groups, 0 )
groups.close
end
def updateMembers(pathOfMemberToDelete)
path = Pathname.new(pathOfMemberToDelete)
parent = path.parent.realpath
memberName = path.basename
membersName = parent + Pathname.new("members.xml")
members = File.new(membersName, "r")
doc = REXML::Document.new members
members.close
member = doc.root.find { |e|
if defined?(e.attributes) then
e.attributes["id"].to_s == memberName.to_s
else
false
end
}
doc.root.delete_element member
if !doc.root.has_elements? then
File.delete(membersName)
return
end
# save doc
members = File.open(membersName, "w")
doc.write( members, 0 )
members.close
end
candidateGroup = ENV['PATH_TRANSLATED']
if !File.exists?(candidateGroup) then
puts "Content-type: text/xml"
puts "Status: 405 Method Not Allowed"
puts "Allow: GET PUT"
puts
puts ''
puts ""
puts " fail"
if candidateGroup =~ /\.xml/ then
puts " Member Does Not Exist"
else
puts " Group Does Not Exist"
end
puts ""
exit
end
if candidateGroup =~ /\.xml/ then
candidateMember = candidateGroup
File.delete(candidateMember)
updateMembers(candidateMember)
puts "Content-type: text/xml"
puts "Status: 200 OK"
puts
puts ''
puts ""
puts " success"
puts " Member Removed"
puts ""
else
begin
Dir.rmdir(candidateGroup)
updateGroups(candidateGroup)
puts "Content-type: text/xml"
puts "Status: 200 OK"
puts
puts ''
puts ""
puts " success"
puts " Group Removed"
puts ""
rescue SystemCallError
puts "Content-type: text/xml"
puts "Status: 500 Internal Server Error"
puts
puts ""
puts " fail"
puts " Could not remove specified Group\nIs the group empty?"
puts ""
end
end