urlscan 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd9f5241757fe9214cf9004eed924fbd98d1739358ed6aed85fdcfe63b0bed22
4
- data.tar.gz: da1a329d39519094e6fa21e3ba53c52b5c7051cd24d34eeb1aa47fdcadf58b55
3
+ metadata.gz: 8640ef2ba0a9b73834a5e8999d78223b363fe04643cfcea98a63a8172b486783
4
+ data.tar.gz: 2957bc3cd06d005275d8179aaaa8faf5a060993aa2c5c41cf261bc28769ed1af
5
5
  SHA512:
6
- metadata.gz: a120a7c7e56bbc0c2585eab27284e78a31b995ad693497470cf3402a74a2027a878cb2036055c34e17a0cec42779306176594fbc1cbe3e81c7fe68a193924b7b
7
- data.tar.gz: 85def877ac0d5dc4c6e99917ff9e820cc12414bea83b304a87090c29aa2f7be8f406fc137cf9825850fd134fb1b9fb3d8bbcc364905d67a66209680863548a96
6
+ metadata.gz: e882180e835209a6873b0c5032b8587ff2f225760cab8223364e72f7cb914d36f9f99dc9fc9537321ee644371fc0f125824cba4bd720730a5d043b9a0bf58f66
7
+ data.tar.gz: be54b70647a26856bdccc0c3e8a0c9abf955186c52e49c284e6e4ed98e499ed87f1629536129227bd0aeac9f9af28fa0fcde897c6fffdfeb50c53ffe89d5b954
@@ -2,5 +2,5 @@ sudo: false
2
2
  language: ruby
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.6
5
+ - 2.7
6
6
  before_install: gem install bundler -v 2.1
data/README.md CHANGED
@@ -40,22 +40,23 @@ res = api.search("wikipedia.org")
40
40
 
41
41
  ## Supported API endpoints
42
42
 
43
- | HTTP Method | URI | API method |
44
- |-------------|-------------------------|-------------------------------------------------------------------------------|
45
- | POST | /scan | `UrlScan::Clients::Community#submit(url, is_public = true)` |
46
- | GET | /result/`uuid`/ | `UrlScan::Clients::Community#result(uuid)` |
47
- | GET | /dom/`uuid`/ | `UrlScan::Clients::Community#dom(uuid)` |
48
- | GET | /screenshots/`uuid`.png | `UrlScan::Clients::Community#screenshot(uuid)` |
49
- | GET | /search | `UrlScan::Clients::Community#search(q, size: 100, offset: 0, sort: "_score")` |
43
+ | HTTP Method | URI | API method |
44
+ |-------------|-------------------------|-----------------------------------------------------------------------|
45
+ | POST | /scan | `UrlScan::Clients::Community#submit(url, is_public = true)` |
46
+ | GET | /result/`uuid`/ | `UrlScan::Clients::Community#result(uuid)` |
47
+ | GET | /dom/`uuid`/ | `UrlScan::Clients::Community#dom(uuid)` |
48
+ | GET | /screenshots/`uuid`.png | `UrlScan::Clients::Community#screenshot(uuid)` |
49
+ | GET | /search | `UrlScan::Clients::Community#search(q, size: 100, search_after: nil)` |
50
50
 
51
51
  ### Pro
52
52
 
53
- | HTTP Method | URI | API method |
54
- |-------------|------------|-------------------------------------------------------------------|
55
- | GET | /search | `UrlScan::Clients::Pro#search(query: nil, filter: nil, size: 50)` |
56
- | GET | /brands | `UrlScan::Clients::Pro#brands` |
57
- | GET | /kits | `UrlScan::Clients::Pro#kits` |
58
- | GET | /phishfeed | `UrlScan::Clients::Pro#phishfeed` |
53
+ | HTTP Method | URI | API method |
54
+ |-------------|-------------------------|-------------------------------------------------------------------|
55
+ | GET | /search | `UrlScan::Clients::Pro#search(query: nil, filter: nil, size: 50)` |
56
+ | GET | /brands | `UrlScan::Clients::Pro#brands` |
57
+ | GET | /kits | `UrlScan::Clients::Pro#kits` |
58
+ | GET | /phishfeed | `UrlScan::Clients::Pro#phishfeed` |
59
+ | GET | /result/`uuid`/similar/ | `UrlScan::Clients::Pro#similar(uuid)` |
59
60
 
60
61
  ## CLI usage
61
62
 
@@ -18,7 +18,7 @@ module UrlScan
18
18
  private
19
19
 
20
20
  def url
21
- @url ||= "https://#{self.class::HOST}/api/v#{self.class::VERSION}"
21
+ @url ||= "https://#{HOST}/api/v#{VERSION}"
22
22
  end
23
23
 
24
24
  def url_for(path)
@@ -61,17 +61,20 @@ module UrlScan
61
61
  end
62
62
  end
63
63
 
64
- def auth_header
65
- { "API-KEY": key }
64
+ def default_headers
65
+ @default_headers ||= { "API-KEY": key }.compact
66
66
  end
67
67
 
68
- def get(path, &block)
69
- get = Net::HTTP::Get.new(url_for(path))
68
+ def get(path, params = {}, &block)
69
+ uri = url_for(path)
70
+ uri.query = URI.encode_www_form(params)
71
+
72
+ get = Net::HTTP::Get.new(uri, default_headers)
70
73
  request(get, &block)
71
74
  end
72
75
 
73
76
  def post(path, json, &block)
74
- post = Net::HTTP::Post.new(url_for(path), auth_header)
77
+ post = Net::HTTP::Post.new(url_for(path), default_headers)
75
78
  post.content_type = "application/json"
76
79
  post.body = json.to_json
77
80
 
@@ -5,8 +5,6 @@ module UrlScan
5
5
  class Community < Base
6
6
  # @return [Hash]
7
7
  def submit(url, is_public = true)
8
- raise ArgumentError, "API key is required for this method." if key.nil?
9
-
10
8
  params = { url: url, public: is_public ? "on" : "off" }
11
9
  post("/scan/", params) { |json| json }
12
10
  end
@@ -26,10 +24,9 @@ module UrlScan
26
24
  end
27
25
 
28
26
  # @return [Hash]
29
- def search(q, size: 100, offset: 0, sort: "_score")
30
- params = { q: q, size: size, offset: offset, sort: sort }
31
- query = URI.encode_www_form(params)
32
- get("/search/?#{query}") { |json| json }
27
+ def search(q, size: 100, search_after: nil)
28
+ params = { q: q, size: size, search_after: search_after }.compact
29
+ get("/search/", params) { |json| json }
33
30
  end
34
31
  end
35
32
  end
@@ -8,37 +8,30 @@ module UrlScan
8
8
 
9
9
  # @return [Hash]
10
10
  def search(query: nil, filter: nil, size: 50)
11
- raise ArgumentError, "API key is required for this method." if key.nil?
12
-
13
11
  filter = build_filter(filter)
14
- params = { q: query, size: size }.compact
15
- uri_query = URI.encode_www_form(params)
16
- uri_query << "&filter=#{filter}" if filter
17
-
18
- get("/search?#{uri_query}") { |json| json }
12
+ params = { q: query, size: size, filter: filter }.compact
13
+ get("/search", params) { |json| json }
19
14
  end
20
15
 
21
16
  # @return [Hash]
22
17
  def brands
23
- raise ArgumentError, "API key is required for this method." if key.nil?
24
-
25
18
  get("/brands") { |json| json }
26
19
  end
27
20
 
28
21
  # @return [Hash]
29
22
  def kits
30
- raise ArgumentError, "API key is required for this method." if key.nil?
31
-
32
23
  get("/kits") { |json| json }
33
24
  end
34
25
 
35
26
  # @return [Hash]
36
27
  def phishfeed(q: "result.task.time:>now-24h", format: "json")
37
- raise ArgumentError, "API key is required for this method." if key.nil?
38
-
39
28
  params = { q: q, format: format }
40
- query = URI.encode_www_form(params)
41
- get("/phishfeed?#{query}") { |json| json }
29
+ get("/phishfeed", params) { |json| json }
30
+ end
31
+
32
+ # @return [Hash]
33
+ def similar(uuid)
34
+ get("/result/#{uuid}/similar") { |json| json }
42
35
  end
43
36
 
44
37
  private
@@ -50,12 +43,7 @@ module UrlScan
50
43
  end
51
44
 
52
45
  def url
53
- @url ||= "https://#{self.class::HOST}/api/v#{self.class::VERSION}/pro"
54
- end
55
-
56
- def get(path, &block)
57
- get = Net::HTTP::Get.new(url_for(path), auth_header)
58
- request(get, &block)
46
+ @url ||= "https://#{HOST}/api/v#{VERSION}/pro"
59
47
  end
60
48
  end
61
49
  end
@@ -22,11 +22,10 @@ module UrlScan
22
22
 
23
23
  desc "search [QUERY]", "search for scans by [QUERY]"
24
24
  method_option :size, type: :numeric, default: 100
25
- method_option :offset, type: :numeric, default: 0
26
- method_option :sort, type: :string, default: "_score"
25
+ method_option :search_after, type: :string
27
26
  def search(query)
28
27
  with_error_handling do
29
- res = api.search(query, size: options["size"], offset: options["offset"], sort: options["sort"])
28
+ res = api.search(query, size: options["size"], search_after: options["search_after"])
30
29
  puts JSON.pretty_generate(res)
31
30
  end
32
31
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UrlScan
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
@@ -21,12 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 2.0"
24
+ spec.add_development_dependency "bundler", "~> 2.1"
25
25
  spec.add_development_dependency "coveralls", "~> 0.8"
26
26
  spec.add_development_dependency "rake", "~> 13.0"
27
27
  spec.add_development_dependency "rspec", "~> 3.9"
28
- spec.add_development_dependency "vcr", "~> 5.0"
29
- spec.add_development_dependency "webmock", "~> 3.7"
28
+ spec.add_development_dependency "vcr", "~> 6.0"
29
+ spec.add_development_dependency "webmock", "~> 3.8"
30
30
 
31
31
  spec.add_runtime_dependency "thor", "~> 1.0"
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urlscan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-17 00:00:00.000000000 Z
11
+ date: 2020-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: coveralls
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '5.0'
75
+ version: '6.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '5.0'
82
+ version: '6.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: webmock
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.7'
89
+ version: '3.8'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.7'
96
+ version: '3.8'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: thor
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.0'
111
- description:
111
+ description:
112
112
  email:
113
113
  - manabu.niseki@gmail.com
114
114
  executables:
@@ -137,12 +137,13 @@ files:
137
137
  - lib/urlscan/commands/pro.rb
138
138
  - lib/urlscan/exceptions.rb
139
139
  - lib/urlscan/version.rb
140
+ - renovate.json
140
141
  - urlscan.gemspec
141
142
  homepage: https://github.com/ninoseki/urlscan
142
143
  licenses:
143
144
  - MIT
144
145
  metadata: {}
145
- post_install_message:
146
+ post_install_message:
146
147
  rdoc_options: []
147
148
  require_paths:
148
149
  - lib
@@ -157,8 +158,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
158
  - !ruby/object:Gem::Version
158
159
  version: '0'
159
160
  requirements: []
160
- rubygems_version: 3.0.3
161
- signing_key:
161
+ rubygems_version: 3.1.2
162
+ signing_key:
162
163
  specification_version: 4
163
164
  summary: Ruby API client for urlscan.io
164
165
  test_files: []