module Repository

Constants

COMPOSITE_MIME_TYPES
DIGRAPH_TEMPLATE
KNART_MIME_TYPES
SUPPORTED_MIME_TYPES

Public Instance Methods

audit_content_directory(root, manifest) click to toggle source
# File lib/common.rb, line 166
def audit_content_directory(root, manifest)
        good = []
        bad = []
        manifest['groups'].each do |group|
                group['items'].each do |item|
                        if item['path']
                                path = "#{root}/#{item['path']}"
                                if File.exist? path
                                        good << item
                                else
                                        bad << item
                                end
                        end
                        begin
                                if item['url']
                                        response = HTTParty.head(item['url'])
                                        if(response.code >= 400)
                                                bad << item
                                        else
                                                good << item
                                        end
                                end
                        rescue SocketError => e
                                # Probably a bad DNS or protocol name.
                                bad << item
                        end
                end
        end
        return [good, bad]

end
content_directory_to_item_tree(root) click to toggle source
# File lib/common.rb, line 117
def content_directory_to_item_tree(root)
        content = []
        list = Dir["#{root}/**/**"]
        list.each do |n|
                # puts n
                if(File.file?(n))
                        # ext = File.extname(n).downcase[1..-1]
                        mimeType = mimeTypeForFile(n)
                        name = n.split('/')[1] #.split['.'][0]
                        name = name.split('_').collect(&:capitalize).join(' ')
                        tags = n.split('/').select{|d| d.length <= 4}
                        # Add subdirectory names to the tag list
                        subs = Dir.glob(File.dirname(n) + '/*').select{ |t|
                                puts t
                                # puts                                     File.directory?(t)
                                # puts     File.dirname(n) != t
                                # byebug
                                File.directory?(t) && n != t
                        }.collect{ |t| File.basename(t)}
                        puts "#{n} SUBS: #{subs}"
                        tags |= subs
                        if mimeType # it's a supported piece of content
                                item = {
                                        'name': name,
                                        'path': n,
                                        'mimeType': mimeType,
                                        'tags': tags
                                }
                                update_security(item)
                                item = rekey(item)
                                # Any directory name of 4 characters or less will be treated as a tag automatically
                                content << item
                        end
                end
        end
        content
end
generate_dot(doc) click to toggle source
# File lib/common.rb, line 42
def generate_dot(doc)
        artifacts = []
        events = {}
        doc.xpath('//xmlns:containedArtifacts/xmlns:artifact').each do |a|
                name = a.xpath('./xmlns:name/@value').to_s
                file = a.xpath('./xmlns:reference/xmlns:url/@address').to_s
                file = '(embedded)' if file.empty?
                triggers = []
                emits = []
                tmp = {
                        name: name,
                        hash: Digest::SHA1.hexdigest(name),
                        file: file,
                        triggers: triggers,
                        emits: emits
                }
                artifacts << tmp

                # Search for triggers
                # puts a
                a.xpath('.//xmlns:triggers/xmlns:trigger/@onEventName').each do |t|
                        value = t.to_s
                        triggers << value
                        events[value] = Digest::SHA1.hexdigest(value)
                end

                # Emmitted events within embedded KNARTs.
                a.xpath('./xmlns:knowledgeDocument//xmlns:simpleAction[@xsi:type="FireEventAction"]').each do |action|
                        conditions = action.xpath('./xmlns:conditions').to_s.gsub('"', '\"')
                        # puts conditions
                        action.xpath('.//elm:element[@name="EventName"]/elm:value/@value').each do |n|
                                value = n.to_s
                                emits << {
                                        name: value,
                                        conditions: conditions
                                }
                                events[value] = Digest::SHA1.hexdigest(value)
                        end
                end

                # Emmitted events for referencesd KNARTs.
                a.xpath('./xmlns:onCompletion//xmlns:eventName/@name').each do |n|
                        value = n.to_s
                        emits << {
                                name: value,
                                conditions: '(always)'
                        }
                        events[value] = Digest::SHA1.hexdigest(value)
                end
                

        end
        # puts artifacts
        # puts events
        renderer = ERB.new(DIGRAPH_TEMPLATE)
        renderer.result(binding)
end
mimeTypeForFile(path) click to toggle source
# File lib/common.rb, line 105
def mimeTypeForFile(path)
        mimeType = nil
        SUPPORTED_MIME_TYPES.each do |k,v|
                if v[:expression].match?(path)
                        mimeType = k
                        break
                end
        end
        # puts mimeType || path
        mimeType
end
rekey(hash) click to toggle source

Forces keys to strings.

# File lib/common.rb, line 101
def rekey(hash)
        hash.collect{|k,v| [k.to_s, v]}.to_h
end
render_partial(name, stuff) click to toggle source
# File lib/common.rb, line 198
def render_partial(name, stuff)
        template = File.join(File.dirname(File.expand_path(__FILE__)), name)
        Slim::Template.new(template).render(self, stuff)
end
update_security(item) click to toggle source
# File lib/common.rb, line 155
def    update_security(item)
        # byebug
        content = File.read(item[:path])
        item['security'] = rekey({
                sha1: Digest::SHA1.hexdigest(content),
                sha256: Digest::SHA256.hexdigest(content),
                md5: Digest::MD5.hexdigest(content)
        })
        puts item
end