#!/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