mihari 5.5.0 → 5.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/analyzers/binaryedge.md +1 -1
- data/docs/analyzers/censys.md +1 -1
- data/docs/analyzers/circl.md +1 -1
- data/docs/analyzers/crtsh.md +1 -1
- data/docs/analyzers/dnstwister.md +1 -1
- data/docs/analyzers/greynoise.md +1 -1
- data/docs/analyzers/hunterhow.md +1 -1
- data/docs/analyzers/index.md +29 -15
- data/docs/analyzers/onyphe.md +1 -1
- data/docs/analyzers/otx.md +2 -2
- data/docs/analyzers/passivetotal.md +6 -2
- data/docs/analyzers/pulsedive.md +2 -2
- data/docs/analyzers/securitytrails.md +6 -2
- data/docs/analyzers/shodan.md +1 -1
- data/docs/analyzers/urlscan.md +3 -3
- data/docs/analyzers/virustotal.md +6 -2
- data/docs/analyzers/virustotal_intelligence.md +8 -4
- data/docs/analyzers/zoomeye.md +5 -0
- data/docs/emitters/hive.md +1 -1
- data/docs/emitters/slack.md +0 -5
- data/docs/enrichers/google_public_dns.md +1 -1
- data/docs/enrichers/ipinfo.md +2 -2
- data/docs/enrichers/shodan.md +4 -4
- data/docs/enrichers/whois.md +1 -1
- data/docs/rule.md +1 -4
- data/docs/usage.md +5 -2
- data/frontend/package-lock.json +3 -3
- data/frontend/src/components/ErrorMessage.vue +0 -1
- data/frontend/src/components/alert/Alerts.vue +0 -1
- data/frontend/src/components/alert/AlertsWithPagination.vue +0 -1
- data/frontend/src/components/alert/AlertsWrapper.vue +0 -6
- data/frontend/src/components/alert/Form.vue +1 -3
- data/frontend/src/components/artifact/Artifact.vue +0 -17
- data/frontend/src/components/artifact/ArtifactWrapper.vue +0 -2
- data/frontend/src/components/artifact/WhoisRecord.vue +0 -3
- data/frontend/src/components/config/ConfigsWrapper.vue +0 -2
- data/frontend/src/components/rule/EditRule.vue +0 -3
- data/frontend/src/components/rule/EditRuleWrapper.vue +0 -2
- data/frontend/src/components/rule/Form.vue +1 -3
- data/frontend/src/components/rule/NewRule.vue +0 -3
- data/frontend/src/components/rule/Rule.vue +1 -7
- data/frontend/src/components/rule/RuleWrapper.vue +0 -2
- data/frontend/src/components/rule/RulesWrapper.vue +0 -6
- data/frontend/src/swagger.yaml +254 -254
- data/lib/mihari/analyzers/base.rb +4 -41
- data/lib/mihari/analyzers/circl.rb +1 -1
- data/lib/mihari/analyzers/crtsh.rb +1 -1
- data/lib/mihari/analyzers/dnstwister.rb +1 -1
- data/lib/mihari/analyzers/otx.rb +1 -1
- data/lib/mihari/analyzers/passivetotal.rb +10 -1
- data/lib/mihari/analyzers/pulsedive.rb +2 -2
- data/lib/mihari/analyzers/rule.rb +24 -59
- data/lib/mihari/analyzers/securitytrails.rb +10 -1
- data/lib/mihari/analyzers/virustotal.rb +11 -2
- data/lib/mihari/analyzers/virustotal_intelligence.rb +16 -0
- data/lib/mihari/analyzers/zoomeye.rb +2 -2
- data/lib/mihari/base.rb +69 -0
- data/lib/mihari/cli/main.rb +36 -0
- data/lib/mihari/clients/base.rb +2 -2
- data/lib/mihari/clients/binaryedge.rb +3 -5
- data/lib/mihari/clients/censys.rb +3 -3
- data/lib/mihari/clients/circl.rb +5 -4
- data/lib/mihari/clients/crtsh.rb +3 -2
- data/lib/mihari/clients/dnstwister.rb +3 -2
- data/lib/mihari/clients/greynoise.rb +2 -2
- data/lib/mihari/clients/hunterhow.rb +2 -2
- data/lib/mihari/clients/misp.rb +1 -1
- data/lib/mihari/clients/onyphe.rb +2 -2
- data/lib/mihari/clients/otx.rb +4 -3
- data/lib/mihari/clients/passivetotal.rb +5 -4
- data/lib/mihari/clients/publsedive.rb +4 -3
- data/lib/mihari/clients/securitytrails.rb +5 -3
- data/lib/mihari/clients/shodan.rb +2 -2
- data/lib/mihari/clients/the_hive.rb +1 -1
- data/lib/mihari/clients/urlscan.rb +4 -4
- data/lib/mihari/clients/virustotal.rb +2 -2
- data/lib/mihari/clients/zoomeye.rb +2 -2
- data/lib/mihari/commands/alert.rb +6 -33
- data/lib/mihari/commands/rule.rb +7 -12
- data/lib/mihari/commands/search.rb +10 -38
- data/lib/mihari/constants.rb +3 -3
- data/lib/mihari/emitters/base.rb +3 -33
- data/lib/mihari/emitters/database.rb +1 -1
- data/lib/mihari/enrichers/base.rb +2 -33
- data/lib/mihari/enrichers/google_public_dns.rb +9 -0
- data/lib/mihari/schemas/analyzer.rb +24 -24
- data/lib/mihari/schemas/emitter.rb +6 -13
- data/lib/mihari/schemas/enricher.rb +4 -11
- data/lib/mihari/schemas/options.rb +27 -0
- data/lib/mihari/schemas/rule.rb +2 -2
- data/lib/mihari/services/alert_runner.rb +1 -1
- data/lib/mihari/services/rule_runner.rb +1 -11
- data/lib/mihari/types.rb +1 -14
- data/lib/mihari/version.rb +1 -1
- data/lib/mihari/web/public/assets/{index-33165282.css → index-56fc2187.css} +1 -1
- data/lib/mihari/web/public/assets/{index-b5d817a3.js → index-9cc489e6.js} +2 -2
- data/lib/mihari/web/public/index.html +2 -2
- data/lib/mihari.rb +67 -37
- data/mihari.gemspec +1 -0
- data/mkdocs.yml +0 -3
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d661d9c83ba421776c4ca19e4a6fe19b980bbcbe86fe5e7628c1c3a15205e8a9
|
4
|
+
data.tar.gz: d3a26407b8f8146b86c70cbc443865ff895390ad6f32816f5873464c3f6b4e9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35a3783578b46a62dd3eafada97f27ad1701df53ad2b53179155daf4e9545feca0ba912d35c9ca9e8ccaf1f5ce5a15760850d723d55af51f80388b14fc41d95d
|
7
|
+
data.tar.gz: 8f7b3a5624c0ea5b677b32983e21ca731afb396c1904737b923c2b0082c7d1e3cac141e655eeae441150d01d4a26cd83b50665685211118efe9c4bfad512eeef
|
data/docs/analyzers/censys.md
CHANGED
data/docs/analyzers/circl.md
CHANGED
data/docs/analyzers/crtsh.md
CHANGED
data/docs/analyzers/greynoise.md
CHANGED
data/docs/analyzers/hunterhow.md
CHANGED
data/docs/analyzers/index.md
CHANGED
@@ -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
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
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.
|
data/docs/analyzers/onyphe.md
CHANGED
data/docs/analyzers/otx.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
tags:
|
3
|
-
- IP
|
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.
|
data/docs/analyzers/pulsedive.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
tags:
|
3
|
-
- IP
|
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.
|
data/docs/analyzers/shodan.md
CHANGED
data/docs/analyzers/urlscan.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
tags:
|
3
|
-
- IP
|
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
|
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.
|
data/docs/analyzers/zoomeye.md
CHANGED
data/docs/emitters/hive.md
CHANGED
data/docs/emitters/slack.md
CHANGED
@@ -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
|
data/docs/enrichers/ipinfo.md
CHANGED
data/docs/enrichers/shodan.md
CHANGED
data/docs/enrichers/whois.md
CHANGED
data/docs/rule.md
CHANGED
@@ -54,7 +54,7 @@ emitters:
|
|
54
54
|
- emitter: database
|
55
55
|
- emitter: misp
|
56
56
|
- emitter: slack
|
57
|
-
- emitter:
|
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
|
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`.
|
data/frontend/package-lock.json
CHANGED
@@ -6925,9 +6925,9 @@
|
|
6925
6925
|
}
|
6926
6926
|
},
|
6927
6927
|
"node_modules/vue-template-compiler": {
|
6928
|
-
"version": "2.7.
|
6929
|
-
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.
|
6930
|
-
"integrity": "sha512-
|
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>
|
@@ -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>
|
@@ -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>
|