mihari 5.5.0 → 5.6.1

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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/docs/analyzers/binaryedge.md +1 -1
  3. data/docs/analyzers/censys.md +1 -1
  4. data/docs/analyzers/circl.md +1 -1
  5. data/docs/analyzers/crtsh.md +1 -1
  6. data/docs/analyzers/dnstwister.md +1 -1
  7. data/docs/analyzers/greynoise.md +1 -1
  8. data/docs/analyzers/hunterhow.md +1 -1
  9. data/docs/analyzers/index.md +29 -15
  10. data/docs/analyzers/onyphe.md +1 -1
  11. data/docs/analyzers/otx.md +2 -2
  12. data/docs/analyzers/passivetotal.md +6 -2
  13. data/docs/analyzers/pulsedive.md +2 -2
  14. data/docs/analyzers/securitytrails.md +6 -2
  15. data/docs/analyzers/shodan.md +1 -1
  16. data/docs/analyzers/urlscan.md +3 -3
  17. data/docs/analyzers/virustotal.md +6 -2
  18. data/docs/analyzers/virustotal_intelligence.md +8 -4
  19. data/docs/analyzers/zoomeye.md +5 -0
  20. data/docs/emitters/hive.md +1 -1
  21. data/docs/emitters/slack.md +0 -5
  22. data/docs/enrichers/google_public_dns.md +1 -1
  23. data/docs/enrichers/ipinfo.md +2 -2
  24. data/docs/enrichers/shodan.md +4 -4
  25. data/docs/enrichers/whois.md +1 -1
  26. data/docs/rule.md +1 -4
  27. data/docs/usage.md +5 -2
  28. data/frontend/package-lock.json +3 -3
  29. data/frontend/src/components/ErrorMessage.vue +0 -1
  30. data/frontend/src/components/alert/Alerts.vue +0 -1
  31. data/frontend/src/components/alert/AlertsWithPagination.vue +0 -1
  32. data/frontend/src/components/alert/AlertsWrapper.vue +0 -6
  33. data/frontend/src/components/alert/Form.vue +1 -3
  34. data/frontend/src/components/artifact/Artifact.vue +0 -17
  35. data/frontend/src/components/artifact/ArtifactWrapper.vue +0 -2
  36. data/frontend/src/components/artifact/WhoisRecord.vue +0 -3
  37. data/frontend/src/components/config/ConfigsWrapper.vue +0 -2
  38. data/frontend/src/components/rule/EditRule.vue +0 -3
  39. data/frontend/src/components/rule/EditRuleWrapper.vue +0 -2
  40. data/frontend/src/components/rule/Form.vue +1 -3
  41. data/frontend/src/components/rule/NewRule.vue +0 -3
  42. data/frontend/src/components/rule/Rule.vue +1 -7
  43. data/frontend/src/components/rule/RuleWrapper.vue +0 -2
  44. data/frontend/src/components/rule/RulesWrapper.vue +0 -6
  45. data/frontend/src/swagger.yaml +254 -254
  46. data/lib/mihari/analyzers/base.rb +4 -41
  47. data/lib/mihari/analyzers/circl.rb +1 -1
  48. data/lib/mihari/analyzers/crtsh.rb +1 -1
  49. data/lib/mihari/analyzers/dnstwister.rb +1 -1
  50. data/lib/mihari/analyzers/otx.rb +1 -1
  51. data/lib/mihari/analyzers/passivetotal.rb +10 -1
  52. data/lib/mihari/analyzers/pulsedive.rb +2 -2
  53. data/lib/mihari/analyzers/rule.rb +24 -59
  54. data/lib/mihari/analyzers/securitytrails.rb +10 -1
  55. data/lib/mihari/analyzers/virustotal.rb +11 -2
  56. data/lib/mihari/analyzers/virustotal_intelligence.rb +16 -0
  57. data/lib/mihari/analyzers/zoomeye.rb +2 -2
  58. data/lib/mihari/base.rb +69 -0
  59. data/lib/mihari/cli/main.rb +36 -0
  60. data/lib/mihari/clients/base.rb +2 -2
  61. data/lib/mihari/clients/binaryedge.rb +3 -5
  62. data/lib/mihari/clients/censys.rb +3 -3
  63. data/lib/mihari/clients/circl.rb +5 -4
  64. data/lib/mihari/clients/crtsh.rb +3 -2
  65. data/lib/mihari/clients/dnstwister.rb +3 -2
  66. data/lib/mihari/clients/greynoise.rb +2 -2
  67. data/lib/mihari/clients/hunterhow.rb +2 -2
  68. data/lib/mihari/clients/misp.rb +1 -1
  69. data/lib/mihari/clients/onyphe.rb +2 -2
  70. data/lib/mihari/clients/otx.rb +4 -3
  71. data/lib/mihari/clients/passivetotal.rb +5 -4
  72. data/lib/mihari/clients/publsedive.rb +4 -3
  73. data/lib/mihari/clients/securitytrails.rb +5 -3
  74. data/lib/mihari/clients/shodan.rb +2 -2
  75. data/lib/mihari/clients/the_hive.rb +1 -1
  76. data/lib/mihari/clients/urlscan.rb +4 -4
  77. data/lib/mihari/clients/virustotal.rb +2 -2
  78. data/lib/mihari/clients/zoomeye.rb +2 -2
  79. data/lib/mihari/commands/alert.rb +6 -33
  80. data/lib/mihari/commands/rule.rb +7 -12
  81. data/lib/mihari/commands/search.rb +10 -38
  82. data/lib/mihari/constants.rb +3 -3
  83. data/lib/mihari/emitters/base.rb +3 -33
  84. data/lib/mihari/emitters/database.rb +1 -1
  85. data/lib/mihari/enrichers/base.rb +2 -33
  86. data/lib/mihari/enrichers/google_public_dns.rb +9 -0
  87. data/lib/mihari/schemas/analyzer.rb +24 -24
  88. data/lib/mihari/schemas/emitter.rb +6 -13
  89. data/lib/mihari/schemas/enricher.rb +4 -11
  90. data/lib/mihari/schemas/options.rb +27 -0
  91. data/lib/mihari/schemas/rule.rb +2 -2
  92. data/lib/mihari/services/alert_runner.rb +1 -1
  93. data/lib/mihari/services/rule_runner.rb +1 -11
  94. data/lib/mihari/types.rb +1 -14
  95. data/lib/mihari/version.rb +1 -1
  96. data/lib/mihari/web/public/assets/{index-33165282.css → index-56fc2187.css} +1 -1
  97. data/lib/mihari/web/public/assets/{index-b5d817a3.js → index-9cc489e6.js} +2 -2
  98. data/lib/mihari/web/public/index.html +2 -2
  99. data/lib/mihari.rb +67 -37
  100. data/mihari.gemspec +1 -0
  101. data/mkdocs.yml +0 -3
  102. metadata +20 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a0bb32d105b9879fbf87b5bcd5d49a4930cc9e054c42f992bd5c58d883ea8b0
4
- data.tar.gz: 0c547d79f1a1950008f4797a743bf84b7bc1b766d693eb9c2e9b93d150ee4cb9
3
+ metadata.gz: d661d9c83ba421776c4ca19e4a6fe19b980bbcbe86fe5e7628c1c3a15205e8a9
4
+ data.tar.gz: d3a26407b8f8146b86c70cbc443865ff895390ad6f32816f5873464c3f6b4e9d
5
5
  SHA512:
6
- metadata.gz: f9d5217d01e12da402ad9edde9dbeb35c14f6b18061807c48e9e0f6b84419b009b0bbdd4848d3df7302ba4c414c0fe004d7e0ee86a3e9fa29dcaea7bb79b6a8e
7
- data.tar.gz: aa353778dc0f9eb1d525c828e7e662531ba1318f8c380a93cd1f0bd7eca8da33dba7915de297695223cf53a7c3de35419f152ae6d1c199382e6aa7e870a629f2
6
+ metadata.gz: 35a3783578b46a62dd3eafada97f27ad1701df53ad2b53179155daf4e9545feca0ba912d35c9ca9e8ccaf1f5ce5a15760850d723d55af51f80388b14fc41d95d
7
+ data.tar.gz: 8f7b3a5624c0ea5b677b32983e21ca731afb396c1904737b923c2b0082c7d1e3cac141e655eeae441150d01d4a26cd83b50665685211118efe9c4bfad512eeef
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # BinaryEdge
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # Censys
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  - Passive DNS
5
5
  - Passive SSL
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - Domain
3
+ - Artifact:Domain
4
4
  ---
5
5
 
6
6
  # crt.sh
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - Domain
3
+ - Artifact:Domain
4
4
  ---
5
5
 
6
6
  # dnstwister
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # GreyNoise
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # Hunter How
@@ -26,29 +26,28 @@ All the analyzers can have optional `options`.
26
26
  analyzer: ...
27
27
  query: ...
28
28
  options:
29
- timeout: ...
30
- pagination_interval: ...
31
- pagination_limit: ...
32
29
  retry_times: ...
33
30
  retry_interval: ...
34
31
  retry_exponential_backoff: ...
32
+ timeout: ...
35
33
  ignore_error: ...
36
34
  ```
37
35
 
38
- ### Timeout
39
-
40
- `timeout` (`integer`) is an HTTP timeout in seconds. Optional.
41
-
42
- ### Pagination Interval
43
-
44
- `pagination_interval` (`integer`) is an interval in seconds between pagination. Optional. Defaults to 0.
36
+ Also the following analyzers can have pagination options.
45
37
 
46
- ### Pagination Limit
47
-
48
- `pagination_limit` (`integer`) is an limit for pagination. Optional. Defaults to 100.
38
+ - [Shodan](./shodan.md)
39
+ - [BinaryEdge](./binaryedge.md)
40
+ - [Censys](./censys.md)
41
+ - [ZoomEye](./zoomeye.md)
42
+ - [urlscan.io](./urlscan.md)
43
+ - [VirusTotal Intelligence](./virustotal_intelligence.md)
44
+ - [HunterHow](./hunterhow.md)
49
45
 
50
- In the worst case, if something wrong with Mihari or a service, Mihari can drain API quota by doing pagination forever.
51
- `pagination_limit` is a safety valve for that. A number of pagination is limited as `pagination_limit` times.
46
+ ```yaml
47
+ options:
48
+ pagination_interval: ...
49
+ pagination_limit: ...
50
+ ```
52
51
 
53
52
  ### Retry Times
54
53
 
@@ -62,6 +61,10 @@ In the worst case, if something wrong with Mihari or a service, Mihari can drain
62
61
 
63
62
  `retry_exponential_backoff` (`bool`) controls whether to do exponential backoff. Optional. Defaults to `true`.
64
63
 
64
+ ### Timeout
65
+
66
+ `timeout` (`integer`) is an HTTP timeout in seconds. Optional.
67
+
65
68
  ### Ignore Error
66
69
 
67
70
  `ignore_error` (`bool`) controls whether to ignore an error or not. Optional. Defaults to `false`.
@@ -87,3 +90,14 @@ queries:
87
90
  - analyzer: censys
88
91
  query: ip:8.8.8.8
89
92
  ```
93
+
94
+ ### Pagination Interval
95
+
96
+ `pagination_interval` (`integer`) is an interval in seconds between pagination. Optional. Defaults to 0.
97
+
98
+ ### Pagination Limit
99
+
100
+ `pagination_limit` (`integer`) is an limit for pagination. Optional. Defaults to 100.
101
+
102
+ In the worst case, if something wrong with Mihari or a service, Mihari can drain API quota by doing pagination forever.
103
+ `pagination_limit` is a safety valve for that. A number of pagination is limited as `pagination_limit` times.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # ONYPHE
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  - Passive SSL
7
7
  - Reverse Whois
@@ -31,6 +31,10 @@ api_key: ...
31
31
 
32
32
  ## Components
33
33
 
34
+ ### Analyzer
35
+
36
+ `analyzer` (`string`) should be either of `passivetotal` and `pt`.
37
+
34
38
  ### Query
35
39
 
36
40
  `query` (`string`) is a passive DNS/SSL or reverse whois search query. Domain, IP address, mail or SHA1 certificate fingerprint.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  - Reverse Whois
7
7
  ---
@@ -28,6 +28,10 @@ api_key: ...
28
28
 
29
29
  ## Components
30
30
 
31
+ ### Analyzer
32
+
33
+ `analyzer` (`string`) should be either of `securitytrails` and `st`.
34
+
31
35
  ### Query
32
36
 
33
37
  `query` (`string`) is a passive DNS search/reverse whois query. Domain, IP address or mail.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # Shodan
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
5
- - URL
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
+ - Artifact:URL
6
6
  ---
7
7
 
8
8
  # urlscan.io
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  ---
7
7
 
@@ -30,6 +30,10 @@ api_key: ...
30
30
 
31
31
  ## Components
32
32
 
33
+ ### Analyzer
34
+
35
+ `analyzer` (`string`) should be either of `virustoal` and `vt`.
36
+
33
37
  ### Query
34
38
 
35
39
  `query` (`string`) is a passive DNS search query. Domain or IP address.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
5
- - URL
6
- - Hash
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
+ - Artifact:URL
6
+ - Artifact:Hash
7
7
  ---
8
8
 
9
9
  # VirusTotal Intelligence
@@ -20,6 +20,10 @@ api_key: ...
20
20
 
21
21
  ## Components
22
22
 
23
+ ### Analyzer
24
+
25
+ `analyzer` (`string`) should be either of `virustotal_intelligence` and ``.
26
+
23
27
  ### Query
24
28
 
25
29
  `query` (`string`) is a search query.
@@ -1,3 +1,8 @@
1
+ ---
2
+ tags:
3
+ - Artifact:IP
4
+ ---
5
+
1
6
  # ZoomEye
2
7
 
3
8
  - [https://zoomeye.org/](https://zoomeye.org/)
@@ -5,7 +5,7 @@
5
5
  This emitter creates an alert on TheHive. TheHive v4 & v5 are supported.
6
6
 
7
7
  ```yaml
8
- emitter: the_hive
8
+ emitter: thehive
9
9
  url: ...
10
10
  api_key: ...
11
11
  api_version: ...
@@ -10,11 +10,6 @@ webhook_url: ...
10
10
  channel: ...
11
11
  ```
12
12
 
13
- | Name | Type | Required? | Default | Desc. |
14
- | ----------- | ------ | --------- | ------------------------------- | ----------------- |
15
- | webhook_url | String | No | ENV[SLACK_WEBHOOK_URL] | Slack webhook URL |
16
- | channel | String | No | ENV[SLACK_CHANNEL] / `#general` | Slack channel |
17
-
18
13
  ## Components
19
14
 
20
15
  ### Webhook URL
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - DNS record
3
+ - Enrichment:DNS_Record
4
4
  ---
5
5
 
6
6
  # Google Public DNS
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - Autonomous system
4
- - Geolocation
3
+ - Enrichment:Autonomous_System
4
+ - Enrichment:Geolocation
5
5
  ---
6
6
 
7
7
  # ipinfo.io
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  tags:
3
- - Port
4
- - CPE
5
- - DNS record
3
+ - Enrichment:Port
4
+ - Enrichment:CPE
5
+ - Enrichment:DNS_Record
6
6
  ---
7
7
 
8
- # Shodan
8
+ # Shodan (The InternetDB API)
9
9
 
10
10
  - [https://www.shodan.io/](https://www.shodan.io/dashboard)
11
11
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - Whois
3
+ - Enrichment:Whois
4
4
  ---
5
5
 
6
6
  # Whois
data/docs/rule.md CHANGED
@@ -54,7 +54,7 @@ emitters:
54
54
  - emitter: database
55
55
  - emitter: misp
56
56
  - emitter: slack
57
- - emitter: the_hive
57
+ - emitter: thehive
58
58
  data_types:
59
59
  - hash
60
60
  - ip
@@ -124,9 +124,6 @@ See [Emitters](./emitters/index.md) to know details of each emitter.
124
124
  Defaults to:
125
125
 
126
126
  - `database`
127
- - `misp`
128
- - `slack`
129
- - `the_hive`
130
127
 
131
128
  ### Data Types
132
129
 
data/docs/usage.md CHANGED
@@ -8,8 +8,11 @@ Commands:
8
8
  mihari db # Sub commands for DB
9
9
  mihari help [COMMAND] # Describe available commands or one specific command
10
10
  mihari rule # Sub commands for rule
11
- mihari search [PATH_OR_ID] # Search by a rule
11
+ mihari search [PATH_OR_ID] # Search by a rule (Outputs null if there is no new finding)
12
12
  mihari web # Launch the web app
13
+
14
+ Options:
15
+ -d, [--debug], [--no-debug] # Sets up debug mode
13
16
  ```
14
17
 
15
18
  ## `mihari db`
@@ -43,7 +46,7 @@ Mihari asks whether really you want to update a rule if there is a diff by defau
43
46
 
44
47
  ```bash
45
48
  $ mihari search /path/to/rule.yml
46
- There is a diff in the rule (6254bb74-5e5d-42ad-bc1e-231da0293b0f). Are you sure you want to overwrite the rule? (y/n)
49
+ There is a diff in the rule. Are you sure you want to overwrite the rule? (y/n)
47
50
  ```
48
51
 
49
52
  It can be suppressed by providing `-f`.
@@ -6925,9 +6925,9 @@
6925
6925
  }
6926
6926
  },
6927
6927
  "node_modules/vue-template-compiler": {
6928
- "version": "2.7.14",
6929
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
6930
- "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
6928
+ "version": "2.7.15",
6929
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz",
6930
+ "integrity": "sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==",
6931
6931
  "dev": true,
6932
6932
  "dependencies": {
6933
6933
  "de-indent": "^1.0.2",
@@ -3,7 +3,6 @@
3
3
  <p v-if="error.response.data?.message">{{ error.response.data.message }}</p>
4
4
  <p v-else>{{ error }}</p>
5
5
  </div>
6
-
7
6
  <article class="message" v-if="error.response.data?.details">
8
7
  <div class="message-body">
9
8
  <VueJsonPretty :data="error.response.data.details"></VueJsonPretty>
@@ -6,7 +6,6 @@
6
6
  @refresh-page="refreshPage"
7
7
  @update-tag="updateTag"
8
8
  ></Alert>
9
-
10
9
  <Pagination
11
10
  :total="alerts.total"
12
11
  :currentPage="alerts.currentPage"
@@ -1,6 +1,5 @@
1
1
  <template>
2
2
  <Loading v-if="getAlertsTask.isRunning"></Loading>
3
-
4
3
  <Alerts
5
4
  :alerts="getAlertsTask.last.value"
6
5
  v-if="getAlertsTask.last?.value"
@@ -7,9 +7,7 @@
7
7
  :page="page"
8
8
  :tag="tag"
9
9
  ></FormComponent>
10
-
11
10
  <hr />
12
-
13
11
  <div class="columns">
14
12
  <div class="column">
15
13
  <div class="field is-grouped is-grouped-centered">
@@ -25,14 +23,10 @@
25
23
  </div>
26
24
  </div>
27
25
  </div>
28
-
29
26
  <div v-if="getAlertsTask.performCount > 0">
30
27
  <hr />
31
-
32
28
  <Loading v-if="getAlertsTask.isRunning"></Loading>
33
-
34
29
  <ErrorMessage v-if="getAlertsTask.isError" :error="getAlertsTask.last?.error"></ErrorMessage>
35
-
36
30
  <AlertsComponent
37
31
  :alerts="getAlertsTask.last.value"
38
32
  v-if="getAlertsTask.last?.value"
@@ -36,7 +36,6 @@
36
36
  </div>
37
37
  </div>
38
38
  </div>
39
-
40
39
  <div class="columns">
41
40
  <div class="column">
42
41
  <div class="field is-horizontal">
@@ -61,7 +60,6 @@
61
60
  </div>
62
61
  <div class="column"></div>
63
62
  </div>
64
-
65
63
  <div class="columns">
66
64
  <div class="column">
67
65
  <div class="field is-horizontal">
@@ -95,7 +93,7 @@
95
93
  </template>
96
94
 
97
95
  <script lang="ts">
98
- import { defineComponent, type PropType, ref, toRef,watch } from "vue"
96
+ import { defineComponent, type PropType, ref, toRef, watch } from "vue"
99
97
  import { useRoute } from "vue-router"
100
98
 
101
99
  import type { AlertSearchParams } from "@/types"
@@ -4,9 +4,7 @@
4
4
  <Loading></Loading>
5
5
  <hr />
6
6
  </div>
7
-
8
7
  <h2 class="is-size-2 mb-4">Artifact</h2>
9
-
10
8
  <div class="columns">
11
9
  <div
12
10
  class="column is-half"
@@ -21,7 +19,6 @@
21
19
  </h4>
22
20
  <iframe class="mb-4" :src="googleMapSrc" width="100%" height="240px"></iframe>
23
21
  </div>
24
-
25
22
  <div v-if="urlscanLiveshotSrc">
26
23
  <h4 class="is-size-4 mb-2">
27
24
  Live screenshot
@@ -30,11 +27,9 @@
30
27
  <img :src="urlscanLiveshotSrc" class="liveshot" alt="liveshot" />
31
28
  </div>
32
29
  </div>
33
-
34
30
  <div class="column">
35
31
  <div class="block">
36
32
  <h4 class="is-size-4 mb-2">Information</h4>
37
-
38
33
  <table class="table is-fullwidth is-completely-borderless">
39
34
  <tr>
40
35
  <th>ID</th>
@@ -47,7 +42,6 @@
47
42
  <font-awesome-icon icon="lightbulb"></font-awesome-icon>
48
43
  </span>
49
44
  </button>
50
-
51
45
  <button
52
46
  class="button is-info is-light is-small"
53
47
  @click="flipShowMetadata"
@@ -58,7 +52,6 @@
58
52
  <font-awesome-icon icon="info-circle"></font-awesome-icon>
59
53
  </span>
60
54
  </button>
61
-
62
55
  <button class="button is-light is-small" @click="deleteArtifact">
63
56
  <span>Delete</span>
64
57
  <span class="icon is-small">
@@ -86,7 +79,6 @@
86
79
  </tr>
87
80
  </table>
88
81
  </div>
89
-
90
82
  <div v-if="artifact.metadata && showMetadata">
91
83
  <div class="modal is-active">
92
84
  <div class="modal-background" @click="flipShowMetadata"></div>
@@ -103,45 +95,36 @@
103
95
  </div>
104
96
  </div>
105
97
  </div>
106
-
107
98
  <div class="block" v-if="artifact.autonomousSystem">
108
99
  <h4 class="is-size-4 mb-2">AS</h4>
109
100
  <AS :autonomousSystem="artifact.autonomousSystem"></AS>
110
101
  </div>
111
-
112
102
  <div class="block" v-if="artifact.reverseDnsNames">
113
103
  <h4 class="is-size-4 mb-2">Reverse DNS</h4>
114
104
  <ReverseDnsNames :reverseDnsNames="artifact.reverseDnsNames"></ReverseDnsNames>
115
105
  </div>
116
-
117
106
  <div class="block" v-if="artifact.dnsRecords">
118
107
  <h4 class="is-size-4 mb-2">DNS records</h4>
119
108
  <DnsRecords :dnsRecords="artifact.dnsRecords"></DnsRecords>
120
109
  </div>
121
-
122
110
  <div class="block" v-if="artifact.cpes">
123
111
  <h4 class="is-size-4 mb-2">CPEs</h4>
124
112
  <CPEs :cpes="artifact.cpes"></CPEs>
125
113
  </div>
126
-
127
114
  <div class="block" v-if="artifact.ports">
128
115
  <h4 class="is-size-4 mb-2">Ports</h4>
129
116
  <Ports :ports="artifact.ports"></Ports>
130
117
  </div>
131
-
132
118
  <div class="block" v-if="artifact.whoisRecord">
133
119
  <h4 class="is-size-4 mb-2">Whois record</h4>
134
120
  <WhoisRecord :whoisRecord="artifact.whoisRecord"></WhoisRecord>
135
121
  </div>
136
-
137
122
  <div class="block">
138
123
  <h4 class="is-size-4 mb-2">Links</h4>
139
124
  <Links :data="artifact.data" :type="artifact.dataType"></Links>
140
125
  </div>
141
126
  </div>
142
-
143
127
  <hr />
144
-
145
128
  <div class="column">
146
129
  <h2 class="is-size-2 mb-4">Related alerts</h2>
147
130
  <Alerts :artifact="artifact.data"></Alerts>
@@ -1,8 +1,6 @@
1
1
  <template>
2
2
  <Loading v-if="getArtifactTask.isRunning"></Loading>
3
-
4
3
  <ErrorMessage v-if="getArtifactTask.isError" :error="getArtifactTask.last?.error"></ErrorMessage>
5
-
6
4
  <ArtifactComponent
7
5
  :artifact="getArtifactTask.last.value"
8
6
  @refresh="refresh"
@@ -6,21 +6,18 @@
6
6
  <span class="tag is-light">{{ whoisRecord.registrar?.name || "N/A" }}</span>
7
7
  </div>
8
8
  </div>
9
-
10
9
  <div class="control">
11
10
  <div class="tags has-addons are-medium">
12
11
  <span class="tag is-dark">Created on</span>
13
12
  <span class="tag is-light">{{ whoisRecord.createdOn || "N/A" }}</span>
14
13
  </div>
15
14
  </div>
16
-
17
15
  <div class="control">
18
16
  <div class="tags has-addons are-medium">
19
17
  <span class="tag is-dark">Updated on</span>
20
18
  <span class="tag is-light">{{ whoisRecord.updatedOn || "N/A" }}</span>
21
19
  </div>
22
20
  </div>
23
-
24
21
  <div class="control">
25
22
  <div class="tags has-addons are-medium">
26
23
  <span class="tag is-dark">Exipres on</span>
@@ -1,8 +1,6 @@
1
1
  <template>
2
2
  <Loading v-if="getConfigsTask.isRunning"></Loading>
3
-
4
3
  <ErrorMessage v-if="getConfigsTask.isError" :error="getConfigsTask.last?.error"></ErrorMessage>
5
-
6
4
  <Configs :configs="getConfigsTask.last.value" v-if="getConfigsTask.last?.value"></Configs>
7
5
  </template>
8
6
 
@@ -1,9 +1,7 @@
1
1
  <template>
2
2
  <div class="column">
3
3
  <h2 class="is-size-2 mb-4">Edit rule: {{ rule.id }}</h2>
4
-
5
4
  <InputForm v-model:yaml="yaml" @update-yaml="updateYAML"></InputForm>
6
-
7
5
  <div class="field is-grouped is-grouped-centered">
8
6
  <p class="control">
9
7
  <a class="button is-primary" @click="edit">
@@ -14,7 +12,6 @@
14
12
  </a>
15
13
  </p>
16
14
  </div>
17
-
18
15
  <div v-if="updateRuleTask.last?.error">
19
16
  <hr />
20
17
  <ErrorMessage :error="updateRuleTask.last?.error"></ErrorMessage>