#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
print cgi.header

user=ENV['REMOTE_USER'].partition('@').first
ENV.delete("HTTP_COOKIE")
unless cgi.params['id'].first.nil? || user.nil? || cgi.params['vm_user'].first.nil?
    uniq_fname = "/usr/lib/one/brestcloud/tmp/#{user}_#{cgi.params['vm_user'].first}_#{Time.now.strftime('%Y%m%d%H%M%S%L%5N')}"
    aclentry = ""
    cgi.params['vm_user'].each {|x| 
        aclentry="#{aclentry}<aclentry>u:#{x}:rwx</aclentry>"
        command_file="export USER=#{user}; id_user=$(oneuser list | grep #{x}| awk '{print $1}'); oneacl create \"#\$id_user VM/##{cgi.params['id'].first} USE+MANAGE #0\" > /dev/null 2>&1"
        fork { exec("#{command_file}") }
    }
    acl_str="RAW = [ TYPE = \"kvm\", DATA = \"<seclabel type='dynamic' model='parsec' relabel='yes'/><acl>#{aclentry}</acl>\" ]"
    File.open(uniq_fname,'w'){|file| file.puts "RAW = [ TYPE = \"kvm\", DATA = \"<seclabel type='dynamic' model='parsec' relabel='yes'/><acl>#{aclentry}</acl>\" ]"}
    File.open("#{uniq_fname}.sh",'w') do |file|
        file.puts "#!/bin/bash"
        file.puts "f=$(cat #{uniq_fname})"
        file.puts "echo $f | cat - $1 > #{uniq_fname}"
        file.puts "cat #{uniq_fname} > $1"
    end
    File.chmod(0755, "#{uniq_fname}.sh")

    command_file="export USER=#{user}; TMPDIR=/usr/lib/one/brestcloud/tmp EDITOR=#{uniq_fname}.sh onevm updateconf #{cgi.params['id'].first} > /dev/null 2>&1"
    pid = fork { exec("#{command_file}") }
    pid, status = Process.wait2(pid)
    File.delete(uniq_fname)
    File.delete("#{uniq_fname}.sh")
    print status.exitstatus
else
    print "-1"
end
