mihari 5.2.4 → 5.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/README.md +0 -10
  4. data/Rakefile +13 -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 +5213 -9655
  11. data/frontend/package.json +38 -25
  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 +4 -4
  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 +22 -27
  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 +43 -50
  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 +69 -86
  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 +9 -12
  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 +23 -23
  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 +19 -19
  44. data/frontend/src/components/rule/Rule.vue +28 -30
  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 +40 -43
  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 +38 -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-b17c40c6.css} +1 -5
  115. data/lib/mihari/web/public/assets/index-f740e4f9.js +799 -0
  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 +29 -117
  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
  127. data/lib/mihari/web/public/assets/fa-brands-400-20c4a58b.ttf +0 -0
  128. data/lib/mihari/web/public/assets/fa-brands-400-74833209.woff2 +0 -0
  129. data/lib/mihari/web/public/assets/fa-regular-400-528d022d.ttf +0 -0
  130. data/lib/mihari/web/public/assets/fa-regular-400-8e7e5ea1.woff2 +0 -0
  131. data/lib/mihari/web/public/assets/fa-solid-900-67a65763.ttf +0 -0
  132. data/lib/mihari/web/public/assets/fa-solid-900-7152a693.woff2 +0 -0
  133. data/lib/mihari/web/public/assets/fa-v4compatibility-0515a423.ttf +0 -0
  134. data/lib/mihari/web/public/assets/fa-v4compatibility-694a17c3.woff2 +0 -0
  135. data/lib/mihari/web/public/assets/index-ac4e5ffa.js +0 -50
@@ -1,50 +1,50 @@
1
- import { BaseLink } from "@/links/base";
2
- import { Link, LinkType } from "@/types";
1
+ import { BaseLink } from "@/links/base"
2
+ import type { Link, LinkType } from "@/types"
3
3
 
4
4
  class Urlscan extends BaseLink {
5
- public baseURL: string;
6
- public name: string;
7
- public type: LinkType;
5
+ public baseURL: string
6
+ public name: string
7
+ public type: LinkType
8
8
 
9
9
  public constructor() {
10
- super();
10
+ super()
11
11
 
12
- this.baseURL = "https://urlscan.io";
13
- this.name = "urlscan.io";
14
- this.type = "domain";
12
+ this.baseURL = "https://urlscan.io"
13
+ this.name = "urlscan.io"
14
+ this.type = "domain"
15
15
  }
16
16
  }
17
17
 
18
18
  export class UrlscanForDomain extends Urlscan implements Link {
19
19
  public constructor() {
20
- super();
21
- this.type = "domain";
20
+ super()
21
+ this.type = "domain"
22
22
  }
23
23
 
24
24
  public href(data: string): string {
25
- return this.baseURL + `/domain/${data}`;
25
+ return this.baseURL + `/domain/${data}`
26
26
  }
27
27
  }
28
28
 
29
29
  export class UrlscanForIP extends Urlscan implements Link {
30
30
  public constructor() {
31
- super();
32
- this.type = "ip";
31
+ super()
32
+ this.type = "ip"
33
33
  }
34
34
 
35
35
  public href(data: string): string {
36
- return this.baseURL + `/ip/${data}`;
36
+ return this.baseURL + `/ip/${data}`
37
37
  }
38
38
  }
39
39
 
40
40
  export class UrlscanForURL extends Urlscan implements Link {
41
41
  public constructor() {
42
- super();
43
- this.type = "url";
42
+ super()
43
+ this.type = "url"
44
44
  }
45
45
 
46
46
  public href(url: string): string {
47
- const query = encodeURIComponent(`page.url:"${url}" OR task.url:"${url}"`);
48
- return this.baseURL + `/search/#${query}`;
47
+ const query = encodeURIComponent(`page.url:"${url}" OR task.url:"${url}"`)
48
+ return this.baseURL + `/search/#${query}`
49
49
  }
50
50
  }
@@ -1,72 +1,72 @@
1
- import { sha256 } from "js-sha256";
2
- import URL from "url-parse";
1
+ import { sha256 } from "js-sha256"
2
+ import URL from "url-parse"
3
3
 
4
- import { BaseLink } from "@/links/base";
5
- import { Link, LinkType } from "@/types";
4
+ import { BaseLink } from "@/links/base"
5
+ import type { Link, LinkType } from "@/types"
6
6
 
7
7
  class VirusTotal extends BaseLink {
8
- public baseURL: string;
9
- public name: string;
10
- public type: LinkType;
8
+ public baseURL: string
9
+ public name: string
10
+ public type: LinkType
11
11
 
12
12
  public constructor() {
13
- super();
13
+ super()
14
14
 
15
- this.name = "VirusTotal";
16
- this.baseURL = "https://www.virustotal.com";
17
- this.type = "domain";
15
+ this.name = "VirusTotal"
16
+ this.baseURL = "https://www.virustotal.com"
17
+ this.type = "domain"
18
18
  }
19
19
  }
20
20
 
21
21
  export class VirusTotalForDomain extends VirusTotal implements Link {
22
22
  public constructor() {
23
- super();
24
- this.type = "domain";
23
+ super()
24
+ this.type = "domain"
25
25
  }
26
26
 
27
27
  public href(data: string): string {
28
- return this.baseURL + `/gui/domain/${data}/detection`;
28
+ return this.baseURL + `/gui/domain/${data}/detection`
29
29
  }
30
30
  }
31
31
 
32
32
  export class VirusTotalForIP extends VirusTotal implements Link {
33
33
  public constructor() {
34
- super();
35
- this.type = "ip";
34
+ super()
35
+ this.type = "ip"
36
36
  }
37
37
 
38
38
  public href(data: string): string {
39
- return this.baseURL + `/gui/ip-address/${data}/details`;
39
+ return this.baseURL + `/gui/ip-address/${data}/details`
40
40
  }
41
41
  }
42
42
 
43
43
  export class VirusTotalForURL extends VirusTotal implements Link {
44
44
  public constructor() {
45
- super();
46
- this.type = "url";
45
+ super()
46
+ this.type = "url"
47
47
  }
48
48
 
49
49
  public href(data: string): string {
50
- const hash = sha256(this.normalizeURL(data));
51
- return this.baseURL + `/gui/url/${hash}/details`;
50
+ const hash = sha256(this.normalizeURL(data))
51
+ return this.baseURL + `/gui/url/${hash}/details`
52
52
  }
53
53
 
54
54
  private normalizeURL(uri: string): string {
55
- const parsedUrl = new URL(uri);
55
+ const parsedUrl = new URL(uri)
56
56
  if (parsedUrl.pathname === "/" && !uri.endsWith("/")) {
57
- return `${uri}/`;
57
+ return `${uri}/`
58
58
  }
59
- return uri;
59
+ return uri
60
60
  }
61
61
  }
62
62
 
63
63
  export class VirusTotalForHash extends VirusTotal implements Link {
64
64
  public constructor() {
65
- super();
66
- this.type = "hash";
65
+ super()
66
+ this.type = "hash"
67
67
  }
68
68
 
69
69
  public href(data: string): string {
70
- return this.baseURL + `/gui/file/${data}/details`;
70
+ return this.baseURL + `/gui/file/${data}/details`
71
71
  }
72
72
  }
data/frontend/src/main.ts CHANGED
@@ -1,11 +1,41 @@
1
- import "bulma/css/bulma.css";
2
- import "bulma-helpers/css/bulma-helpers.min.css";
3
- import "@fortawesome/fontawesome-free/css/all.css";
4
- import "@fortawesome/fontawesome-free/js/all.js";
1
+ import "bulma/css/bulma.css"
2
+ import "bulma-helpers/css/bulma-helpers.min.css"
3
+ import "font-awesome-animation/css/font-awesome-animation.min.css"
5
4
 
6
- import { createApp } from "vue";
5
+ import { library } from "@fortawesome/fontawesome-svg-core"
6
+ import {
7
+ faArrowRight,
8
+ faCheck,
9
+ faEdit,
10
+ faExclamation,
11
+ faInfoCircle,
12
+ faLightbulb,
13
+ faPlus,
14
+ faSearch,
15
+ faSpinner,
16
+ faTimes
17
+ } from "@fortawesome/free-solid-svg-icons"
18
+ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"
19
+ import { createApp } from "vue"
7
20
 
8
- import App from "@/App.vue";
9
- import router from "@/router";
21
+ import App from "@/App.vue"
22
+ import router from "@/router"
10
23
 
11
- createApp(App).use(router).mount("#app");
24
+ library.add(
25
+ faArrowRight,
26
+ faCheck,
27
+ faEdit,
28
+ faExclamation,
29
+ faInfoCircle,
30
+ faLightbulb,
31
+ faPlus,
32
+ faSearch,
33
+ faSpinner,
34
+ faTimes
35
+ )
36
+
37
+ const app = createApp(App)
38
+
39
+ app.component("font-awesome-icon", FontAwesomeIcon)
40
+
41
+ app.use(router).mount("#app")
@@ -1,57 +1,57 @@
1
- import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
1
+ import { createRouter, createWebHashHistory, type RouteRecordRaw } from "vue-router"
2
2
 
3
- import Alerts from "@/views/Alerts.vue";
4
- import Artifact from "@/views/Artifact.vue";
5
- import Configs from "@/views/Configs.vue";
6
- import EditRule from "@/views/EditRule.vue";
7
- import NewRule from "@/views/NewRule.vue";
8
- import Rule from "@/views/Rule.vue";
9
- import Rules from "@/views/Rules.vue";
3
+ import Alerts from "@/views/Alerts.vue"
4
+ import Artifact from "@/views/Artifact.vue"
5
+ import Configs from "@/views/Configs.vue"
6
+ import EditRule from "@/views/EditRule.vue"
7
+ import NewRule from "@/views/NewRule.vue"
8
+ import Rule from "@/views/Rule.vue"
9
+ import Rules from "@/views/Rules.vue"
10
10
 
11
11
  const routes: Array<RouteRecordRaw> = [
12
12
  {
13
13
  path: "/",
14
14
  name: "Alerts",
15
- component: Alerts,
15
+ component: Alerts
16
16
  },
17
17
  {
18
18
  path: "/configs",
19
19
  name: "Configs",
20
- component: Configs,
20
+ component: Configs
21
21
  },
22
22
  {
23
23
  path: "/artifacts/:id",
24
24
  name: "Artifact",
25
25
  component: Artifact,
26
- props: true,
26
+ props: true
27
27
  },
28
28
  {
29
29
  path: "/rules",
30
30
  name: "Rules",
31
- component: Rules,
31
+ component: Rules
32
32
  },
33
33
  {
34
34
  path: "/rules/new",
35
35
  name: "NewRule",
36
- component: NewRule,
36
+ component: NewRule
37
37
  },
38
38
  {
39
39
  path: "/rules/:id",
40
40
  name: "Rule",
41
41
  component: Rule,
42
- props: true,
42
+ props: true
43
43
  },
44
44
  {
45
45
  path: "/rules/:id/edit",
46
46
  name: "EditRule",
47
47
  component: EditRule,
48
- props: true,
49
- },
50
- ];
48
+ props: true
49
+ }
50
+ ]
51
51
 
52
52
  const router = createRouter({
53
53
  history: createWebHashHistory(),
54
- routes,
55
- });
54
+ routes
55
+ })
56
56
 
57
- export default router;
57
+ export default router
data/frontend/src/rule.ts CHANGED
@@ -1,14 +1,14 @@
1
- import dayjs from "dayjs";
2
- import dedent from "ts-dedent";
3
- import { v4 } from "uuid";
1
+ import dayjs from "dayjs"
2
+ import dedent from "ts-dedent"
3
+ import { v4 } from "uuid"
4
4
 
5
5
  export function getRuleTemplate(): string {
6
- const id = v4();
7
- const now = dayjs();
6
+ const id = v4()
7
+ const now = dayjs()
8
8
 
9
9
  return dedent`id: ${id}
10
10
  title: Title goes here
11
11
  description: Description goes here
12
12
  created_on: ${now.format("YYYY-MM-DD")}
13
- queries: []`;
13
+ queries: []`
14
14
  }
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
- declare module '*.vue' {
3
- import type { DefineComponent } from 'vue'
2
+ declare module "*.vue" {
3
+ import type { DefineComponent } from "vue"
4
4
  const component: DefineComponent<{}, {}, any>
5
5
  export default component
6
6
  }
@@ -1,188 +1,188 @@
1
1
  export interface Pagination {
2
- total: number;
3
- currentPage: number;
4
- pageSize: number;
2
+ total: number
3
+ currentPage: number
4
+ pageSize: number
5
5
  }
6
6
 
7
7
  export interface ConfigValue {
8
- key: string;
9
- value: string | null;
8
+ key: string
9
+ value: string | null
10
10
  }
11
11
 
12
12
  export interface Config {
13
- name: string;
14
- isConfigured: boolean;
15
- values: ConfigValue[];
16
- type: string;
13
+ name: string
14
+ isConfigured: boolean
15
+ values: ConfigValue[]
16
+ type: string
17
17
  }
18
18
 
19
19
  export interface Tag {
20
- name: string;
20
+ name: string
21
21
  }
22
22
 
23
23
  export interface Tags {
24
- tags: string[];
24
+ tags: string[]
25
25
  }
26
26
 
27
27
  export interface RuleSet {
28
- ruleIds: string[];
28
+ ruleIds: string[]
29
29
  }
30
30
 
31
31
  export interface DnsRecord {
32
- resource: string;
33
- value: string;
32
+ resource: string
33
+ value: string
34
34
  }
35
35
 
36
36
  export interface Contact {
37
- name: string | null;
38
- organization: string | null;
37
+ name: string | null
38
+ organization: string | null
39
39
  }
40
40
 
41
41
  export interface Registrar {
42
- name: string | null;
43
- organization: string | null;
42
+ name: string | null
43
+ organization: string | null
44
44
  }
45
45
 
46
46
  export interface WhoisRecord {
47
- createdOn: Date | null;
48
- updatedOn: Date | null;
49
- expiresOn: Date | null;
50
- registrar: Registrar | null;
51
- contacts: Contact[];
47
+ createdOn: Date | null
48
+ updatedOn: Date | null
49
+ expiresOn: Date | null
50
+ registrar: Registrar | null
51
+ contacts: Contact[]
52
52
  }
53
53
 
54
54
  export interface AutonomousSystem {
55
- asn: number;
55
+ asn: number
56
56
  }
57
57
 
58
58
  export interface Geolocation {
59
- country: string;
60
- countryCode: string;
59
+ country: string
60
+ countryCode: string
61
61
  }
62
62
 
63
63
  export interface ReverseDnsName {
64
- name: string;
64
+ name: string
65
65
  }
66
66
 
67
67
  export interface CPE {
68
- cpe: string;
68
+ cpe: string
69
69
  }
70
70
 
71
71
  export interface Port {
72
- port: string;
72
+ port: string
73
73
  }
74
74
 
75
75
  export interface Artifact {
76
- id: string;
77
- data: string;
78
- dataType: string;
79
- source: string;
80
- metadata: unknown | null;
81
- createdAt: string;
76
+ id: string
77
+ data: string
78
+ dataType: string
79
+ source: string
80
+ metadata: unknown | null
81
+ createdAt: string
82
82
 
83
- autonomousSystem: AutonomousSystem | null;
84
- whoisRecord: WhoisRecord | null;
85
- geolocation: Geolocation | null;
83
+ autonomousSystem: AutonomousSystem | null
84
+ whoisRecord: WhoisRecord | null
85
+ geolocation: Geolocation | null
86
86
 
87
- dnsRecords: DnsRecord[] | null;
88
- reverseDnsNames: ReverseDnsName[] | null;
89
- cpes: CPE[] | null;
90
- ports: Port[] | null;
87
+ dnsRecords: DnsRecord[] | null
88
+ reverseDnsNames: ReverseDnsName[] | null
89
+ cpes: CPE[] | null
90
+ ports: Port[] | null
91
91
  }
92
92
 
93
93
  export interface ArtifactWithTags extends Artifact {
94
- tags: string[];
94
+ tags: string[]
95
95
  }
96
96
 
97
97
  export interface Alert {
98
- id: string;
99
- ruleId: string;
100
- createdAt: string;
98
+ id: string
99
+ ruleId: string
100
+ createdAt: string
101
101
 
102
- tags: Tag[];
103
- artifacts: Artifact[];
102
+ tags: Tag[]
103
+ artifacts: Artifact[]
104
104
  }
105
105
 
106
106
  export interface Alerts extends Pagination {
107
- alerts: Alert[];
107
+ alerts: Alert[]
108
108
  }
109
109
 
110
110
  export interface PaginationParams {
111
- page: number | undefined;
111
+ page: number | undefined
112
112
  }
113
113
 
114
114
  export interface AlertSearchParams extends PaginationParams {
115
- artifact: string | undefined;
116
- ruleId: string | undefined;
117
- tag: string | undefined;
118
- fromAt: string | undefined;
119
- toAt: string | undefined;
115
+ artifact: string | undefined
116
+ ruleId: string | undefined
117
+ tag: string | undefined
118
+ fromAt: string | undefined
119
+ toAt: string | undefined
120
120
  }
121
121
 
122
122
  export interface IPInfo {
123
- ip: string;
124
- hostname: string | null;
125
- loc: string;
126
- countryCode: string;
127
- asn: string;
123
+ ip: string
124
+ hostname: string | null
125
+ loc: string
126
+ countryCode: string
127
+ asn: string
128
128
  }
129
129
 
130
130
  export interface GCS {
131
- lat: number;
132
- long: number;
131
+ lat: number
132
+ long: number
133
133
  }
134
134
 
135
135
  export interface Country {
136
- name: string;
137
- code: string;
138
- lat: number;
139
- long: number;
136
+ name: string
137
+ code: string
138
+ lat: number
139
+ long: number
140
140
  }
141
141
 
142
- export type LinkType = "ip" | "domain" | "url" | "hash";
142
+ export type LinkType = "ip" | "domain" | "url" | "hash"
143
143
 
144
144
  export interface Link {
145
- name: string;
146
- type: string;
147
- baseURL: string;
145
+ name: string
146
+ type: string
147
+ baseURL: string
148
148
  // eslint-disable-next-line no-unused-vars
149
- href(data: string): string;
150
- favicon(): string;
149
+ href(data: string): string
150
+ favicon(): string
151
151
  }
152
152
 
153
153
  export interface Rule {
154
- id: string;
155
- title: string;
156
- description: string;
157
- yaml: string;
158
- createdAt: string;
159
- updatedAt: string;
160
- tags: Tag[];
154
+ id: string
155
+ title: string
156
+ description: string
157
+ yaml: string
158
+ createdAt: string
159
+ updatedAt: string
160
+ tags: Tag[]
161
161
  }
162
162
 
163
163
  export interface CreateRule {
164
- yaml: string;
164
+ yaml: string
165
165
  }
166
166
 
167
167
  export interface UpdateRule {
168
- id: string;
169
- yaml: string;
168
+ id: string
169
+ yaml: string
170
170
  }
171
171
 
172
172
  export interface Query {
173
- analyzer: string;
174
- query: string;
175
- interval: null;
173
+ analyzer: string
174
+ query: string
175
+ interval: null
176
176
  }
177
177
 
178
178
  export interface Rules extends Pagination {
179
- rules: Rule[];
179
+ rules: Rule[]
180
180
  }
181
181
 
182
182
  export interface RuleSearchParams extends PaginationParams {
183
- description: string | undefined;
184
- tag: string | undefined;
185
- title: string | undefined;
186
- fromAt: string | undefined;
187
- toAt: string | undefined;
183
+ description: string | undefined
184
+ tag: string | undefined
185
+ title: string | undefined
186
+ fromAt: string | undefined
187
+ toAt: string | undefined
188
188
  }