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