Class: CMSScanner::WebSite
- Inherits:
-
Object
- Object
- CMSScanner::WebSite
- Defined in:
- lib/cms_scanner/web_site.rb
Overview
WebSite Implementation
Direct Known Subclasses
Instance Attribute Summary collapse
-
#homepage_res ⇒ Typhoeus::Response
As webmock does not support redirects mocking, coverage is ignored :nocov:.
-
#opts ⇒ Object
readonly
Returns the value of attribute opts.
-
#uri ⇒ Object
readonly
Returns the value of attribute uri.
Instance Method Summary collapse
- #access_forbidden?(path = nil) ⇒ Boolean
- #error_404_res ⇒ Typhoeus::Response
-
#error_404_url ⇒ String
The URL of an unlikely existant page.
-
#head_and_get(path, codes = [200], params = {}) ⇒ Typhoeus::Response
Perform a HEAD request to the path provided, then if its response code is in the array of codes given, a GET is done and the response returned.
-
#head_or_get_params ⇒ Hash
The Typhoeus params to use to perform head requests.
- #homepage_url ⇒ String
- #http_auth?(path = nil) ⇒ Boolean
-
#initialize(site_url, opts = {}) ⇒ WebSite
constructor
A new instance of WebSite.
-
#ip ⇒ String
The IP address of the target.
-
#online?(path = nil) ⇒ Boolean
Checks if the remote website is up.
- #proxy_auth?(path = nil) ⇒ Boolean
-
#redirection(url = nil) ⇒ String
As webmock does not support redirects mocking, coverage is ignored :nocov:.
- #url(path = nil) ⇒ String
- #url=(site_url) ⇒ Object
Constructor Details
#initialize(site_url, opts = {}) ⇒ WebSite
Returns a new instance of WebSite.
10 11 12 13 |
# File 'lib/cms_scanner/web_site.rb', line 10 def initialize(site_url, opts = {}) self.url = +site_url @opts = opts end |
Instance Attribute Details
#homepage_res ⇒ Typhoeus::Response
As webmock does not support redirects mocking, coverage is ignored :nocov:
48 49 50 |
# File 'lib/cms_scanner/web_site.rb', line 48 def homepage_res @homepage_res ||= NS::Browser.get_and_follow_location(url) end |
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
6 7 8 |
# File 'lib/cms_scanner/web_site.rb', line 6 def opts @opts end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
6 7 8 |
# File 'lib/cms_scanner/web_site.rb', line 6 def uri @uri end |
Instance Method Details
#access_forbidden?(path = nil) ⇒ Boolean
87 88 89 |
# File 'lib/cms_scanner/web_site.rb', line 87 def access_forbidden?(path = nil) NS::Browser.get(url(path)).code == 403 end |
#error_404_res ⇒ Typhoeus::Response
59 60 61 |
# File 'lib/cms_scanner/web_site.rb', line 59 def error_404_res @error_404_res ||= NS::Browser.get_and_follow_location(error_404_url) end |
#error_404_url ⇒ String
Returns The URL of an unlikely existant page.
64 65 66 |
# File 'lib/cms_scanner/web_site.rb', line 64 def error_404_url @error_404_url ||= uri.join("#{Digest::MD5.hexdigest(rand(999_999).to_s)[0..6]}.html").to_s end |
#head_and_get(path, codes = [200], params = {}) ⇒ Typhoeus::Response
Perform a HEAD request to the path provided, then if its response code is in the array of codes given, a GET is done and the response returned. Otherwise the HEAD response is returned.
135 136 137 138 139 140 141 142 |
# File 'lib/cms_scanner/web_site.rb', line 135 def head_and_get(path, codes = [200], params = {}) url_to_get = url(path) head_params = (params[:head] || {}).merge(head_or_get_params) head_res = NS::Browser.forge_request(url_to_get, head_params).run codes.include?(head_res.code) ? NS::Browser.get(url_to_get, params[:get] || {}) : head_res end |
#head_or_get_params ⇒ Hash
Returns The Typhoeus params to use to perform head requests.
116 117 118 119 120 121 122 |
# File 'lib/cms_scanner/web_site.rb', line 116 def head_or_get_params @head_or_get_params ||= if NS::Browser.head(homepage_url).code == 405 { method: :get, maxfilesize: 1 } else { method: :head } end end |
#homepage_url ⇒ String
54 55 56 |
# File 'lib/cms_scanner/web_site.rb', line 54 def homepage_url @homepage_url ||= homepage_res.effective_url end |
#http_auth?(path = nil) ⇒ Boolean
80 81 82 |
# File 'lib/cms_scanner/web_site.rb', line 80 def http_auth?(path = nil) NS::Browser.get(url(path)).code == 401 end |
#ip ⇒ String
Returns The IP address of the target.
36 37 38 39 40 |
# File 'lib/cms_scanner/web_site.rb', line 36 def ip @ip ||= IPSocket.getaddress(uri.host) rescue SocketError 'Unknown' end |
#online?(path = nil) ⇒ Boolean
Checks if the remote website is up.
73 74 75 |
# File 'lib/cms_scanner/web_site.rb', line 73 def online?(path = nil) NS::Browser.get(url(path)).code.nonzero? ? true : false end |
#proxy_auth?(path = nil) ⇒ Boolean
94 95 96 |
# File 'lib/cms_scanner/web_site.rb', line 94 def proxy_auth?(path = nil) NS::Browser.get(url(path)).code == 407 end |
#redirection(url = nil) ⇒ String
As webmock does not support redirects mocking, coverage is ignored :nocov:
104 105 106 107 108 109 110 111 112 |
# File 'lib/cms_scanner/web_site.rb', line 104 def redirection(url = nil) url ||= @uri.to_s return unless [301, 302].include?(NS::Browser.get(url).code) res = NS::Browser.get(url, followlocation: true, maxredirs: 10) res.effective_url == url ? nil : res.effective_url end |
#url(path = nil) ⇒ String
29 30 31 32 33 |
# File 'lib/cms_scanner/web_site.rb', line 29 def url(path = nil) return @uri.to_s unless path @uri.join(Addressable::URI.encode(path).gsub('#', '%23')).to_s end |
#url=(site_url) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/cms_scanner/web_site.rb', line 15 def url=(site_url) # Add a trailing slash to the site url # Making also sure the site_url is unfrozen +site_url << '/' if site_url[-1, 1] != '/' # Use the validator to ensure the site_url has a correct format OptParseValidator::OptURL.new([]).validate(site_url) @uri = Addressable::URI.parse(site_url).normalize end |