module Hookit::Helper::NFS

Public Instance Methods

clean_writables(dirs) click to toggle source
# File lib/hookit/helper/nfs.rb, line 37
def clean_writables(dirs)
  begin
    dirs = dirs.map{|i| i.to_s}
  rescue
    dirs = [dirs].map{|i| i.to_s}
  end
  dirs = remove_empty(dirs)
  dirs = filter_offensive(dirs)
  dirs = strip_leading_slash(dirs)
  dirs = strip_trailing_slash(dirs)
  dirs = remove_nested(dirs)
  dirs.uniq
end
filter_offensive(dirs) click to toggle source
# File lib/hookit/helper/nfs.rb, line 58
def filter_offensive(dirs)
  dirs.inject([]) do |res, elem|
    if elem[0] != '.'
      # ensure not going up a directory
      # ensure spaces are intended
      # ensure directory is not . or /
      unless elem =~ /(\*|\.?\.\/|(?<!\\)\s)|^\.$|^\/$/
        res << elem
      end
    end
    res
  end       
end
net_dirs(payload) click to toggle source
# File lib/hookit/helper/nfs.rb, line 15
def net_dirs(payload)
  key     = payload[:storage].keys.first
  boxfile = payload[:boxfile]

  if boxfile[:shared_writable_dirs]
    {
      key => boxfile[:shared_writable_dirs]
    }
  elsif boxfile[:network_dirs].is_a? String
    {
      key => [boxfile[:network_dirs]]
    }
  elsif boxfile[:network_dirs].is_a? Array
    {
      key => boxfile[:network_dirs]
    }
  else
    boxfile[:network_dirs] ||= {}
  end

end
remove_empty(dirs) click to toggle source
# File lib/hookit/helper/nfs.rb, line 51
def remove_empty(dirs)
  dirs.inject([]) do |res, elem|
    res << elem if elem && elem != ""
    res
  end
end
remove_nested(dirs) click to toggle source

this removes nested mounts like: tmp/ tmp/cache/ tmp/assets/

and keeps tmp/

# File lib/hookit/helper/nfs.rb, line 96
def remove_nested(dirs)
  dirs.sort!
  dirs.inject([]) do |res, elem|
    overlap = false
    # now make sure parents dont contain children
    res.each do |parent|
      if elem =~ /^#{parent}\//
        overlap = true
      end
    end
    res << elem if not overlap
    res
  end
end
sanitize_network_dirs(payload) click to toggle source
# File lib/hookit/helper/nfs.rb, line 5
def sanitize_network_dirs(payload)
  net_dirs = net_dirs(payload)

  net_dirs.each do |component, dirs|
    net_dirs[component] = clean_writables(dirs)
  end

  net_dirs
end
strip_leading_slash(dirs) click to toggle source
# File lib/hookit/helper/nfs.rb, line 72
def strip_leading_slash(dirs)
  dirs.inject([]) do |res, elem|
    if elem[0] == '/'
      elem.slice!(0)
    end 
    res << elem
  end
end
strip_trailing_slash(dirs) click to toggle source
# File lib/hookit/helper/nfs.rb, line 81
def strip_trailing_slash(dirs)
  dirs.inject([]) do |res, elem|
    if elem[-1] == '/'
      elem.slice!(-1)
    end
    res << elem
  end
end