#!/usr/bin/ruby
require 'pathname'
require "rexml/document"
def updateGroups(pathOfNewGroup)
path = Pathname.new(pathOfNewGroup)
parent = path.parent.realpath
groupName = path.basename
groupsName = parent + Pathname.new("groups.xml")
doc = REXML::Document.new
if File.exists?(groupsName) then
groups = File.new(groupsName, "r")
doc = REXML::Document.new groups
groups.close
else
doc.add_element "groups"
doc << REXML::XMLDecl.new
end
group = REXML::Element.new "group"
group.text = groupName
doc.root.add_element group
groups = File.open(groupsName, "w")
doc.write( groups, 0 )
groups.close
end
def updateMembers(pathOfNewMember, nameOfNewMember)
path = Pathname.new(pathOfNewMember)
parent = path.parent.realpath
memberName = path.basename.to_s.gsub(/\.xml/, "")
membersName = parent + Pathname.new("members.xml")
doc = REXML::Document.new
if File.exists?(membersName) then
members = File.new(membersName, "r")
doc = REXML::Document.new members
members.close
else
doc.add_element "members"
doc << REXML::XMLDecl.new
end
member = REXML::Element.new "member"
member.add_attribute("id" , memberName )
member.text = nameOfNewMember
doc.root.add_element member
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 DELETE"
puts
puts ''
puts ""
puts " fail"
if candidateGroup =~ /\.xml/ then
puts " Member Already Exists"
else
puts " Group Already Exists"
end
puts ""
exit
end
if candidateGroup =~ /\.xml/ then
candidateMember = candidateGroup
doc = REXML::Document.new $stdin
member = File.open(candidateMember, "w")
doc.write( member, 0 )
member.close
name = doc.elements.to_a("//name")
name = name[0].text
updateMembers( candidateMember, name )
puts "Content-type: text/xml"
puts "Status: 200 OK"
puts
puts ''
puts ""
puts " success"
puts " Member Created"
puts ""
else
begin
Dir.mkdir(candidateGroup)
updateGroups(candidateGroup)
puts "Content-type: text/xml"
puts "Status: 200 OK"
puts
puts ''
puts ""
puts " success"
puts " Group Created"
puts ""
rescue SystemCallError
puts "Content-type: text/xml"
puts "Status: 500 Internal Server Error"
puts
puts ""
puts " fail"
puts " Could not create specified Group"
puts ""
end
end