mihari 5.2.4 → 5.3.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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/README.md +0 -10
  4. data/Rakefile +7 -1
  5. data/build_frontend.sh +1 -1
  6. data/frontend/.eslintrc.cjs +22 -0
  7. data/frontend/.gitignore +18 -12
  8. data/frontend/.prettierrc.json +8 -0
  9. data/frontend/env.d.ts +5 -0
  10. data/frontend/package-lock.json +5095 -9661
  11. data/frontend/package.json +34 -24
  12. data/frontend/src/App.vue +5 -5
  13. data/frontend/src/api-helper.ts +38 -40
  14. data/frontend/src/api.ts +40 -40
  15. data/frontend/src/components/ErrorMessage.vue +8 -8
  16. data/frontend/src/components/Loading.vue +3 -3
  17. data/frontend/src/components/Navbar.vue +10 -27
  18. data/frontend/src/components/Pagination.vue +35 -42
  19. data/frontend/src/components/alert/Alert.vue +21 -26
  20. data/frontend/src/components/alert/Alerts.vue +23 -25
  21. data/frontend/src/components/alert/AlertsWithPagination.vue +34 -34
  22. data/frontend/src/components/alert/AlertsWrapper.vue +42 -49
  23. data/frontend/src/components/alert/Form.vue +39 -40
  24. data/frontend/src/components/artifact/AS.vue +7 -7
  25. data/frontend/src/components/artifact/Artifact.vue +66 -83
  26. data/frontend/src/components/artifact/ArtifactTag.vue +21 -27
  27. data/frontend/src/components/artifact/ArtifactTags.vue +8 -8
  28. data/frontend/src/components/artifact/ArtifactWrapper.vue +22 -25
  29. data/frontend/src/components/artifact/CPEs.vue +6 -6
  30. data/frontend/src/components/artifact/DnsRecords.vue +9 -9
  31. data/frontend/src/components/artifact/Ports.vue +6 -6
  32. data/frontend/src/components/artifact/ReverseDnsNames.vue +7 -7
  33. data/frontend/src/components/artifact/Tags.vue +6 -6
  34. data/frontend/src/components/artifact/WhoisRecord.vue +7 -9
  35. data/frontend/src/components/config/Configs.vue +7 -10
  36. data/frontend/src/components/config/ConfigsWrapper.vue +14 -20
  37. data/frontend/src/components/link/Link.vue +7 -7
  38. data/frontend/src/components/link/Links.vue +16 -21
  39. data/frontend/src/components/rule/EditRule.vue +22 -22
  40. data/frontend/src/components/rule/EditRuleWrapper.vue +22 -28
  41. data/frontend/src/components/rule/Form.vue +28 -28
  42. data/frontend/src/components/rule/InputForm.vue +31 -25
  43. data/frontend/src/components/rule/NewRule.vue +18 -18
  44. data/frontend/src/components/rule/Rule.vue +25 -27
  45. data/frontend/src/components/rule/RuleWrapper.vue +24 -31
  46. data/frontend/src/components/rule/Rules.vue +26 -30
  47. data/frontend/src/components/rule/RulesWrapper.vue +39 -42
  48. data/frontend/src/components/rule/YAML.vue +19 -22
  49. data/frontend/src/components/tag/Tag.vue +24 -32
  50. data/frontend/src/components/tag/Tags.vue +11 -11
  51. data/frontend/src/countries.ts +23 -23
  52. data/frontend/src/index.ts +9 -12
  53. data/frontend/src/links/anyrun.ts +10 -10
  54. data/frontend/src/links/base.ts +3 -3
  55. data/frontend/src/links/censys.ts +10 -10
  56. data/frontend/src/links/crtsh.ts +10 -10
  57. data/frontend/src/links/dnslytics.ts +18 -18
  58. data/frontend/src/links/greynoise.ts +10 -10
  59. data/frontend/src/links/index.ts +15 -15
  60. data/frontend/src/links/intezer.ts +10 -10
  61. data/frontend/src/links/otx.ts +14 -14
  62. data/frontend/src/links/securitytrails.ts +15 -15
  63. data/frontend/src/links/shodan.ts +10 -10
  64. data/frontend/src/links/urlscan.ts +19 -19
  65. data/frontend/src/links/virustotal.ts +27 -27
  66. data/frontend/src/main.ts +8 -8
  67. data/frontend/src/router/index.ts +20 -20
  68. data/frontend/src/rule.ts +6 -6
  69. data/frontend/src/shims-vue.d.ts +2 -2
  70. data/frontend/src/types.ts +91 -91
  71. data/frontend/src/utils.ts +23 -29
  72. data/frontend/src/views/Alerts.vue +7 -7
  73. data/frontend/src/views/Artifact.vue +17 -17
  74. data/frontend/src/views/Configs.vue +7 -7
  75. data/frontend/src/views/EditRule.vue +17 -17
  76. data/frontend/src/views/NewRule.vue +10 -10
  77. data/frontend/src/views/Rule.vue +17 -17
  78. data/frontend/src/views/Rules.vue +7 -7
  79. data/frontend/tests/utils.spec.ts +9 -0
  80. data/frontend/tsconfig.app.json +21 -0
  81. data/frontend/tsconfig.json +10 -36
  82. data/frontend/tsconfig.node.json +13 -0
  83. data/frontend/tsconfig.vitest.json +12 -0
  84. data/frontend/vite.config.ts +24 -0
  85. data/frontend/vitest.config.ts +21 -0
  86. data/lefthook.yml +4 -2
  87. data/lib/mihari/analyzers/base.rb +48 -14
  88. data/lib/mihari/analyzers/binaryedge.rb +10 -15
  89. data/lib/mihari/analyzers/censys.rb +12 -15
  90. data/lib/mihari/analyzers/circl.rb +10 -10
  91. data/lib/mihari/analyzers/crtsh.rb +10 -6
  92. data/lib/mihari/analyzers/dnstwister.rb +6 -8
  93. data/lib/mihari/analyzers/feed.rb +21 -10
  94. data/lib/mihari/analyzers/greynoise.rb +10 -20
  95. data/lib/mihari/analyzers/onyphe.rb +9 -14
  96. data/lib/mihari/analyzers/otx.rb +8 -9
  97. data/lib/mihari/analyzers/passivetotal.rb +10 -10
  98. data/lib/mihari/analyzers/pulsedive.rb +21 -31
  99. data/lib/mihari/analyzers/securitytrails.rb +8 -6
  100. data/lib/mihari/analyzers/shodan.rb +8 -13
  101. data/lib/mihari/analyzers/urlscan.rb +15 -20
  102. data/lib/mihari/analyzers/virustotal.rb +16 -26
  103. data/lib/mihari/analyzers/virustotal_intelligence.rb +11 -17
  104. data/lib/mihari/analyzers/zoomeye.rb +12 -17
  105. data/lib/mihari/config.rb +133 -0
  106. data/lib/mihari/constants.rb +3 -0
  107. data/lib/mihari/emitters/slack.rb +13 -3
  108. data/lib/mihari/errors.rb +1 -1
  109. data/lib/mihari/http.rb +2 -3
  110. data/lib/mihari/schemas/analyzer.rb +2 -0
  111. data/lib/mihari/type_checker.rb +6 -6
  112. data/lib/mihari/version.rb +1 -1
  113. data/lib/mihari/web/endpoints/configs.rb +5 -1
  114. data/lib/mihari/web/public/assets/{index-eed1bcd8.css → index-2ba8f0a6.css} +1 -1
  115. data/lib/mihari/web/public/assets/{index-ac4e5ffa.js → index-71285b15.js} +16 -16
  116. data/lib/mihari/web/public/index.html +2 -2
  117. data/lib/mihari/web/public/redoc-static.html +388 -2193
  118. data/lib/mihari.rb +9 -59
  119. data/mihari.gemspec +8 -8
  120. metadata +24 -62
  121. data/frontend/.browserslistrc +0 -3
  122. data/frontend/.eslintrc.js +0 -33
  123. data/frontend/babel.config.js +0 -3
  124. data/frontend/jest.config.js +0 -9
  125. data/frontend/tests/unit/utils.spec.ts +0 -7
  126. data/frontend/vite.config.js +0 -24
@@ -5,10 +5,7 @@
5
5
  <th>ID</th>
6
6
  <td>
7
7
  {{ alert.id }}
8
- <button
9
- class="button is-light is-small is-pulled-right"
10
- @click="deleteAlert"
11
- >
8
+ <button class="button is-light is-small is-pulled-right" @click="deleteAlert">
12
9
  <span>Delete</span>
13
10
  <span class="icon is-small">
14
11
  <i class="fas fa-times"></i>
@@ -42,51 +39,49 @@
42
39
  </template>
43
40
 
44
41
  <script lang="ts">
45
- import { defineComponent, PropType } from "vue";
42
+ import { defineComponent, type PropType } from "vue"
46
43
 
47
- import { generateDeleteAlertTask } from "@/api-helper";
48
- import Artifacts from "@/components/artifact/ArtifactTags.vue";
49
- import Tags from "@/components/tag/Tags.vue";
50
- import { Alert } from "@/types";
51
- import { getHumanizedRelativeTime, getLocalDatetime } from "@/utils";
44
+ import { generateDeleteAlertTask } from "@/api-helper"
45
+ import Artifacts from "@/components/artifact/ArtifactTags.vue"
46
+ import Tags from "@/components/tag/Tags.vue"
47
+ import type { Alert } from "@/types"
48
+ import { getHumanizedRelativeTime, getLocalDatetime } from "@/utils"
52
49
 
53
50
  export default defineComponent({
54
51
  name: "AlertItem",
55
52
  components: {
56
53
  Artifacts,
57
- Tags,
54
+ Tags
58
55
  },
59
56
  props: {
60
57
  alert: {
61
58
  type: Object as PropType<Alert>,
62
- required: true,
63
- },
59
+ required: true
60
+ }
64
61
  },
65
62
  setup(props, context) {
66
63
  const updateTag = (tag: string) => {
67
- context.emit("update-tag", tag);
68
- };
64
+ context.emit("update-tag", tag)
65
+ }
69
66
 
70
- const deleteAlertTask = generateDeleteAlertTask();
67
+ const deleteAlertTask = generateDeleteAlertTask()
71
68
 
72
69
  const deleteAlert = async () => {
73
- const result = window.confirm(
74
- `Are you sure you want to delete ${props.alert.id}?`
75
- );
70
+ const result = window.confirm(`Are you sure you want to delete ${props.alert.id}?`)
76
71
 
77
72
  if (result) {
78
- await deleteAlertTask.perform(props.alert.id);
73
+ await deleteAlertTask.perform(props.alert.id)
79
74
  // refresh the page
80
- context.emit("refresh-page");
75
+ context.emit("refresh-page")
81
76
  }
82
- };
77
+ }
83
78
 
84
79
  return {
85
80
  updateTag,
86
81
  deleteAlert,
87
82
  getLocalDatetime,
88
- getHumanizedRelativeTime,
89
- };
90
- },
91
- });
83
+ getHumanizedRelativeTime
84
+ }
85
+ }
86
+ })
92
87
  </script>
@@ -13,54 +13,52 @@
13
13
  :pageSize="alerts.pageSize"
14
14
  @update-page="updatePage"
15
15
  ></Pagination>
16
- <p class="help">
17
- ({{ alerts.total }} results in total, {{ alerts.alerts.length }} shown)
18
- </p>
16
+ <p class="help">({{ alerts.total }} results in total, {{ alerts.alerts.length }} shown)</p>
19
17
  </template>
20
18
 
21
19
  <script lang="ts">
22
- import { defineComponent, PropType } from "vue";
20
+ import { defineComponent, type PropType } from "vue"
23
21
 
24
- import Alert from "@/components/alert/Alert.vue";
25
- import Pagination from "@/components/Pagination.vue";
26
- import { Alerts } from "@/types";
22
+ import Alert from "@/components/alert/Alert.vue"
23
+ import Pagination from "@/components/Pagination.vue"
24
+ import type { Alerts } from "@/types"
27
25
 
28
26
  export default defineComponent({
29
27
  name: "AlertsItem",
30
28
  components: {
31
29
  Alert,
32
- Pagination,
30
+ Pagination
33
31
  },
34
32
  props: {
35
33
  alerts: {
36
34
  type: Object as PropType<Alerts>,
37
- required: true,
38
- },
35
+ required: true
36
+ }
39
37
  },
40
38
  emits: ["update-page", "refresh-page", "update-tag"],
41
39
  setup(_, context) {
42
40
  const scrollToTop = () => {
43
41
  window.scrollTo({
44
- top: 0,
45
- });
46
- };
42
+ top: 0
43
+ })
44
+ }
47
45
 
48
46
  const updatePage = (page: number) => {
49
- scrollToTop();
50
- context.emit("update-page", page);
51
- };
47
+ scrollToTop()
48
+ context.emit("update-page", page)
49
+ }
52
50
 
53
51
  const refreshPage = () => {
54
- scrollToTop();
55
- context.emit("refresh-page");
56
- };
52
+ scrollToTop()
53
+ context.emit("refresh-page")
54
+ }
57
55
 
58
56
  const updateTag = (tag: string) => {
59
- scrollToTop();
60
- context.emit("update-tag", tag);
61
- };
57
+ scrollToTop()
58
+ context.emit("update-tag", tag)
59
+ }
62
60
 
63
- return { updatePage, updateTag, refreshPage };
64
- },
65
- });
61
+ return { updatePage, updateTag, refreshPage }
62
+ }
63
+ })
66
64
  </script>
@@ -12,32 +12,32 @@
12
12
  </template>
13
13
 
14
14
  <script lang="ts">
15
- import { defineComponent, nextTick, onMounted, ref, watch } from "vue";
15
+ import { defineComponent, nextTick, onMounted, ref, watch } from "vue"
16
16
 
17
- import { generateGetAlertsTask } from "@/api-helper";
18
- import Alerts from "@/components/alert/Alerts.vue";
19
- import Loading from "@/components/Loading.vue";
20
- import { AlertSearchParams } from "@/types";
17
+ import { generateGetAlertsTask } from "@/api-helper"
18
+ import Alerts from "@/components/alert/Alerts.vue"
19
+ import Loading from "@/components/Loading.vue"
20
+ import type { AlertSearchParams } from "@/types"
21
21
 
22
22
  export default defineComponent({
23
23
  name: "AlertsWithPagination",
24
24
  props: {
25
25
  ruleId: {
26
- type: String,
26
+ type: String
27
27
  },
28
28
  artifact: {
29
- type: String,
30
- },
29
+ type: String
30
+ }
31
31
  },
32
32
  components: {
33
33
  Alerts,
34
- Loading,
34
+ Loading
35
35
  },
36
36
  setup(props) {
37
- const page = ref(1);
38
- const tag = ref<string | undefined>(undefined);
37
+ const page = ref(1)
38
+ const tag = ref<string | undefined>(undefined)
39
39
 
40
- const getAlertsTask = generateGetAlertsTask();
40
+ const getAlertsTask = generateGetAlertsTask()
41
41
 
42
42
  const getAlerts = async () => {
43
43
  const params: AlertSearchParams = {
@@ -46,46 +46,46 @@ export default defineComponent({
46
46
  ruleId: props.ruleId,
47
47
  tag: tag.value,
48
48
  toAt: undefined,
49
- fromAt: undefined,
50
- };
51
- return await getAlertsTask.perform(params);
52
- };
49
+ fromAt: undefined
50
+ }
51
+ return await getAlertsTask.perform(params)
52
+ }
53
53
 
54
54
  const updatePage = (newPage: number) => {
55
- page.value = newPage;
56
- };
55
+ page.value = newPage
56
+ }
57
57
 
58
58
  const resetPage = () => {
59
- page.value = 1;
60
- };
59
+ page.value = 1
60
+ }
61
61
 
62
62
  const refreshPage = async () => {
63
- resetPage();
64
- await getAlerts();
65
- };
63
+ resetPage()
64
+ await getAlerts()
65
+ }
66
66
 
67
67
  const updateTag = (newTag: string | undefined) => {
68
68
  if (tag.value === newTag) {
69
- tag.value = undefined;
69
+ tag.value = undefined
70
70
  } else {
71
- tag.value = newTag;
71
+ tag.value = newTag
72
72
  }
73
- };
73
+ }
74
74
 
75
75
  onMounted(async () => {
76
- await getAlerts();
77
- });
76
+ await getAlerts()
77
+ })
78
78
 
79
79
  watch([props, page, tag], async () => {
80
- nextTick(async () => await getAlerts());
81
- });
80
+ nextTick(async () => await getAlerts())
81
+ })
82
82
 
83
83
  return {
84
84
  getAlertsTask,
85
85
  refreshPage,
86
86
  updatePage,
87
- updateTag,
88
- };
89
- },
90
- });
87
+ updateTag
88
+ }
89
+ }
90
+ })
91
91
  </script>
@@ -31,10 +31,7 @@
31
31
 
32
32
  <Loading v-if="getAlertsTask.isRunning"></Loading>
33
33
 
34
- <ErrorMessage
35
- v-if="getAlertsTask.isError"
36
- :error="getAlertsTask.last?.error"
37
- ></ErrorMessage>
34
+ <ErrorMessage v-if="getAlertsTask.isError" :error="getAlertsTask.last?.error"></ErrorMessage>
38
35
 
39
36
  <AlertsComponent
40
37
  :alerts="getAlertsTask.last.value"
@@ -47,18 +44,14 @@
47
44
  </template>
48
45
 
49
46
  <script lang="ts">
50
- import { defineComponent, nextTick, onMounted, ref, watch } from "vue";
51
-
52
- import {
53
- generateGetAlertsTask,
54
- generateGetRuleSetTask,
55
- generateGetTagsTask,
56
- } from "@/api-helper";
57
- import AlertsComponent from "@/components/alert/Alerts.vue";
58
- import FormComponent from "@/components/alert/Form.vue";
59
- import ErrorMessage from "@/components/ErrorMessage.vue";
60
- import Loading from "@/components/Loading.vue";
61
- import { AlertSearchParams } from "@/types";
47
+ import { defineComponent, nextTick, onMounted, ref, watch } from "vue"
48
+
49
+ import { generateGetAlertsTask, generateGetRuleSetTask, generateGetTagsTask } from "@/api-helper"
50
+ import AlertsComponent from "@/components/alert/Alerts.vue"
51
+ import FormComponent from "@/components/alert/Form.vue"
52
+ import ErrorMessage from "@/components/ErrorMessage.vue"
53
+ import Loading from "@/components/Loading.vue"
54
+ import type { AlertSearchParams } from "@/types"
62
55
 
63
56
  export default defineComponent({
64
57
  name: "AlertsWrapper",
@@ -66,63 +59,63 @@ export default defineComponent({
66
59
  AlertsComponent,
67
60
  FormComponent,
68
61
  Loading,
69
- ErrorMessage,
62
+ ErrorMessage
70
63
  },
71
64
  setup() {
72
- const page = ref(1);
73
- const tag = ref<string | undefined>(undefined);
74
- const form = ref<InstanceType<typeof FormComponent>>();
65
+ const page = ref(1)
66
+ const tag = ref<string | undefined>(undefined)
67
+ const form = ref<InstanceType<typeof FormComponent>>()
75
68
 
76
- const getAlertsTask = generateGetAlertsTask();
77
- const getTagsTask = generateGetTagsTask();
78
- const getRuleSetTask = generateGetRuleSetTask();
69
+ const getAlertsTask = generateGetAlertsTask()
70
+ const getTagsTask = generateGetTagsTask()
71
+ const getRuleSetTask = generateGetRuleSetTask()
79
72
 
80
73
  const getAlerts = async () => {
81
- const params = form.value?.getSearchParams() as AlertSearchParams;
82
- return await getAlertsTask.perform(params);
83
- };
74
+ const params = form.value?.getSearchParams() as AlertSearchParams
75
+ return await getAlertsTask.perform(params)
76
+ }
84
77
 
85
78
  const updatePage = (newPage: number) => {
86
- page.value = newPage;
87
- };
79
+ page.value = newPage
80
+ }
88
81
 
89
82
  const resetPage = () => {
90
- page.value = 1;
91
- };
83
+ page.value = 1
84
+ }
92
85
 
93
86
  const search = async () => {
94
87
  // reset page
95
- resetPage();
88
+ resetPage()
96
89
 
97
- await getAlerts();
98
- };
90
+ await getAlerts()
91
+ }
99
92
 
100
93
  const updateTag = (newTag: string | undefined) => {
101
94
  if (tag.value === newTag) {
102
- tag.value = undefined;
95
+ tag.value = undefined
103
96
  } else {
104
- tag.value = newTag;
97
+ tag.value = newTag
105
98
  }
106
99
 
107
- nextTick(async () => await search());
108
- };
100
+ nextTick(async () => await search())
101
+ }
109
102
 
110
103
  const refreshPage = async () => {
111
104
  // it is just an alias of search
112
105
  // this function will be invoked when an alert is deleted
113
- await search();
114
- };
106
+ await search()
107
+ }
115
108
 
116
109
  onMounted(async () => {
117
- getTagsTask.perform();
118
- getRuleSetTask.perform();
110
+ getTagsTask.perform()
111
+ getRuleSetTask.perform()
119
112
 
120
- await getAlerts();
121
- });
113
+ await getAlerts()
114
+ })
122
115
 
123
116
  watch([page, tag], async () => {
124
- nextTick(async () => await getAlerts());
125
- });
117
+ nextTick(async () => await getAlerts())
118
+ })
126
119
 
127
120
  return {
128
121
  getAlertsTask,
@@ -134,8 +127,8 @@ export default defineComponent({
134
127
  updatePage,
135
128
  updateTag,
136
129
  form,
137
- page,
138
- };
139
- },
140
- });
130
+ page
131
+ }
132
+ }
133
+ })
141
134
  </script>
@@ -95,64 +95,63 @@
95
95
  </template>
96
96
 
97
97
  <script lang="ts">
98
- import { defineComponent, PropType, ref, watch } from "vue";
99
- import { useRoute } from "vue-router";
98
+ import { defineComponent, type PropType, ref, watch } from "vue"
99
+ import { useRoute } from "vue-router"
100
100
 
101
- import { AlertSearchParams } from "@/types";
102
- import { normalizeQueryParam } from "@/utils";
101
+ import type { AlertSearchParams } from "@/types"
102
+ import { normalizeQueryParam } from "@/utils"
103
103
 
104
104
  export default defineComponent({
105
105
  name: "AlertsForm",
106
106
  props: {
107
107
  tags: {
108
108
  type: Array as PropType<string[]>,
109
- required: true,
109
+ required: true
110
110
  },
111
111
  ruleSet: {
112
112
  type: Array as PropType<string[]>,
113
- required: true,
113
+ required: true
114
114
  },
115
115
  page: {
116
116
  type: Number,
117
- required: true,
117
+ required: true
118
118
  },
119
119
  tag: {
120
120
  type: String,
121
- required: false,
122
- },
121
+ required: false
122
+ }
123
123
  },
124
124
  setup(props) {
125
- const route = useRoute();
125
+ const route = useRoute()
126
126
 
127
- const artifact = ref<string | undefined>(undefined);
128
- const fromAt = ref<string | undefined>(undefined);
129
- const tagInput = ref<string | undefined>(props.tag);
130
- const ruleId = ref<string | undefined>(undefined);
131
- const toAt = ref<string | undefined>(undefined);
132
- const asn = ref<number | undefined>(undefined);
133
- const dnsRecord = ref<string | undefined>(undefined);
134
- const reverseDnsName = ref<string | undefined>(undefined);
127
+ const artifact = ref<string | undefined>(undefined)
128
+ const fromAt = ref<string | undefined>(undefined)
129
+ const tagInput = ref<string | undefined>(props.tag)
130
+ const ruleId = ref<string | undefined>(undefined)
131
+ const toAt = ref<string | undefined>(undefined)
132
+ const asn = ref<number | undefined>(undefined)
133
+ const dnsRecord = ref<string | undefined>(undefined)
134
+ const reverseDnsName = ref<string | undefined>(undefined)
135
135
 
136
136
  const updateByQueryParams = () => {
137
- const asn_ = route.query["asn"];
138
- const normalizedAsn = normalizeQueryParam(asn_);
139
- asn.value =
140
- normalizedAsn === undefined ? undefined : parseInt(normalizedAsn);
137
+ const asn_ = route.query["asn"]
138
+ const normalizedAsn = normalizeQueryParam(asn_)
139
+ asn.value = normalizedAsn === undefined ? undefined : parseInt(normalizedAsn)
141
140
 
142
- const dnsRecord_ = route.query["dnsRecord"];
143
- dnsRecord.value = normalizeQueryParam(dnsRecord_);
141
+ const dnsRecord_ = route.query["dnsRecord"]
142
+ dnsRecord.value = normalizeQueryParam(dnsRecord_)
144
143
 
145
- const reverseDnsName_ = route.query["reverseDnsName"];
146
- reverseDnsName.value = normalizeQueryParam(reverseDnsName_);
144
+ const reverseDnsName_ = route.query["reverseDnsName"]
145
+ reverseDnsName.value = normalizeQueryParam(reverseDnsName_)
147
146
 
148
- const tag_ = route.query["tag"];
147
+ const tag_ = route.query["tag"]
149
148
  if (tagInput.value === undefined) {
150
- tagInput.value = normalizeQueryParam(tag_);
149
+ tagInput.value = normalizeQueryParam(tag_)
151
150
  }
152
- };
151
+ }
153
152
 
154
153
  const getSearchParams = (): AlertSearchParams => {
155
- updateByQueryParams();
154
+ updateByQueryParams()
156
155
 
157
156
  const params: AlertSearchParams = {
158
157
  artifact: artifact.value === "" ? undefined : artifact.value,
@@ -160,17 +159,17 @@ export default defineComponent({
160
159
  ruleId: ruleId.value === "" ? undefined : ruleId.value,
161
160
  tag: tagInput.value === "" ? undefined : tagInput.value,
162
161
  toAt: toAt.value === "" ? undefined : toAt.value,
163
- fromAt: fromAt.value === "" ? undefined : fromAt.value,
164
- };
165
- return params;
166
- };
162
+ fromAt: fromAt.value === "" ? undefined : fromAt.value
163
+ }
164
+ return params
165
+ }
167
166
 
168
167
  watch(
169
168
  () => props.tag,
170
169
  () => {
171
- tagInput.value = props.tag;
170
+ tagInput.value = props.tag
172
171
  }
173
- );
172
+ )
174
173
 
175
174
  return {
176
175
  artifact,
@@ -178,8 +177,8 @@ export default defineComponent({
178
177
  getSearchParams,
179
178
  ruleId,
180
179
  toAt,
181
- tagInput,
182
- };
183
- },
184
- });
180
+ tagInput
181
+ }
182
+ }
183
+ })
185
184
  </script>
@@ -4,7 +4,7 @@
4
4
  class="tag"
5
5
  :to="{
6
6
  name: 'Alerts',
7
- query: { asn: autonomousSystem.asn },
7
+ query: { asn: autonomousSystem.asn }
8
8
  }"
9
9
  >
10
10
  {{ autonomousSystem.asn }}
@@ -13,17 +13,17 @@
13
13
  </template>
14
14
 
15
15
  <script lang="ts">
16
- import { defineComponent, PropType } from "vue";
16
+ import { defineComponent, type PropType } from "vue"
17
17
 
18
- import { AutonomousSystem } from "@/types";
18
+ import type { AutonomousSystem } from "@/types"
19
19
 
20
20
  export default defineComponent({
21
21
  name: "AS",
22
22
  props: {
23
23
  autonomousSystem: {
24
24
  type: Object as PropType<AutonomousSystem>,
25
- required: true,
26
- },
27
- },
28
- });
25
+ required: true
26
+ }
27
+ }
28
+ })
29
29
  </script>