urlscan 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +14 -13
- data/lib/urlscan/clients/base.rb +9 -6
- data/lib/urlscan/clients/community.rb +3 -6
- data/lib/urlscan/clients/pro.rb +9 -21
- data/lib/urlscan/commands/community.rb +2 -3
- data/lib/urlscan/version.rb +1 -1
- data/renovate.json +5 -0
- data/urlscan.gemspec +3 -3
- metadata +14 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8640ef2ba0a9b73834a5e8999d78223b363fe04643cfcea98a63a8172b486783
|
|
4
|
+
data.tar.gz: 2957bc3cd06d005275d8179aaaa8faf5a060993aa2c5c41cf261bc28769ed1af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e882180e835209a6873b0c5032b8587ff2f225760cab8223364e72f7cb914d36f9f99dc9fc9537321ee644371fc0f125824cba4bd720730a5d043b9a0bf58f66
|
|
7
|
+
data.tar.gz: be54b70647a26856bdccc0c3e8a0c9abf955186c52e49c284e6e4ed98e499ed87f1629536129227bd0aeac9f9af28fa0fcde897c6fffdfeb50c53ffe89d5b954
|
data/.travis.yml
CHANGED
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,
|
|
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
|
|
54
|
-
|
|
55
|
-
| GET | /search
|
|
56
|
-
| GET | /brands
|
|
57
|
-
| GET | /kits
|
|
58
|
-
| GET | /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
|
|
data/lib/urlscan/clients/base.rb
CHANGED
|
@@ -18,7 +18,7 @@ module UrlScan
|
|
|
18
18
|
private
|
|
19
19
|
|
|
20
20
|
def url
|
|
21
|
-
@url ||= "https://#{
|
|
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
|
|
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
|
-
|
|
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),
|
|
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,
|
|
30
|
-
params = { q: q, size: size,
|
|
31
|
-
|
|
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
|
data/lib/urlscan/clients/pro.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
41
|
-
|
|
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://#{
|
|
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 :
|
|
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"],
|
|
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
|
data/lib/urlscan/version.rb
CHANGED
data/urlscan.gemspec
CHANGED
|
@@ -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.
|
|
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", "~>
|
|
29
|
-
spec.add_development_dependency "webmock", "~> 3.
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
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: '
|
|
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: '
|
|
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.
|
|
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.
|
|
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.
|
|
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: []
|