Class: Osakana::Website

Inherits:
Object
  • Object
show all
Defined in:
lib/osakana/website.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ipv4: nil, domain: nil, date: nil) ⇒ Website

Returns a new instance of Website.

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
18
19
20
# File 'lib/osakana/website.rb', line 10

def initialize(ipv4: nil, domain: nil, date: nil)
  raise ArgumentError, "Please provide ipv4 or domain for the initialization." if ipv4.nil? && domain.nil?

  @primal_type = domain ? "domain" : "ipv4"

  @ipv4 = ipv4
  @domain = domain
  @date = date ? DateTime.parse(date).to_date.to_s : "N/A"

  @robtex = Robtex::API.new
end

Instance Attribute Details

#dateObject (readonly)

Returns the value of attribute date.



8
9
10
# File 'lib/osakana/website.rb', line 8

def date
  @date
end

#primal_typeObject (readonly)

Returns the value of attribute primal_type.



8
9
10
# File 'lib/osakana/website.rb', line 8

def primal_type
  @primal_type
end

Instance Method Details

#domainObject



22
23
24
25
26
27
28
29
30
31
# File 'lib/osakana/website.rb', line 22

def domain
  @domain ||= [].tap do |out|
    res = @robtex.ip(ipv4)
    active = res.dig("act")
    next unless active
    next if active.empty?

    out << active.first.dig("o")
  end.first || "N/A"
end

#ipv4Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/osakana/website.rb', line 33

def ipv4
  @ipv4 ||= [].tap do |out|
    results = @robtex.fpdns(domain)
    result = results.find do |res|
      res.dig("rrtype") == "A"
    end
    next unless result

    out << result.dig("rrdata")
  end.first || "N/A"
end

#summaryObject



45
46
47
# File 'lib/osakana/website.rb', line 45

def summary
  @summary ||= "#{domain}, #{ipv4} (date: #{date})"
end

#to_attachementObject



57
58
59
60
61
62
63
64
65
# File 'lib/osakana/website.rb', line 57

def to_attachement
  {
    fallback: "urlscan.io link",
    title: summary,
    title_link: urlscan_link,
    footer: "urlscan.io",
    footer_icon: "http://www.google.com/s2/favicons?domain=urlscan.io"
  }
end


53
54
55
# File 'lib/osakana/website.rb', line 53

def urlscan_link
  primal_type == "domain" ? "https://urlscan.io/domain/#{domain}" : "https://urlscan.io/ip/#{ipv4}"
end


49
50
51
# File 'lib/osakana/website.rb', line 49

def vt_link
  primal_type == "domain" ? "https://www.virustotal.com/#/domain/#{domain}" : "https://www.virustotal.com/#/ip-address/#{ipv4}"
end