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