Compare commits
No commits in common. "main" and "ablesov/pwd_compare_fix" have entirely different histories.
main
...
ablesov/pw
@ -1,19 +0,0 @@
|
|||||||
# This workflow will improvise current file with AI genereated documentation and Create new PR
|
|
||||||
|
|
||||||
name: Snorkell.ai - Revolutionizing Documentation on GitHub
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["main"]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Documentation:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Snorkell DocGen Client
|
|
||||||
uses: SingularityX-ai/snorkell-documentation-client@v1.0.0
|
|
||||||
with:
|
|
||||||
client_id: ${{ secrets.SNORKELL_CLIENT_ID }}
|
|
||||||
api_key: ${{ secrets.SNORKELL_API_KEY }}
|
|
||||||
branch_name: "main"
|
|
@ -270,7 +270,7 @@ class ZeekEngine(object):
|
|||||||
if record is not None:
|
if record is not None:
|
||||||
f = {"filename": record["filename"],
|
f = {"filename": record["filename"],
|
||||||
"ip_src": record["id.orig_h"],
|
"ip_src": record["id.orig_h"],
|
||||||
"ip_dst": record["id.resp_h"],
|
"ip_dst": record["id.orig_p"],
|
||||||
"mime_type": record["mime_type"],
|
"mime_type": record["mime_type"],
|
||||||
"sha1": record["sha1"]}
|
"sha1": record["sha1"]}
|
||||||
if f not in self.files:
|
if f not in self.files:
|
||||||
|
54
app/backend/package-lock.json
generated
@ -1733,6 +1733,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"color-convert": "^2.0.1"
|
"color-convert": "^2.0.1"
|
||||||
}
|
}
|
||||||
@ -1764,10 +1765,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"chalk": {
|
"chalk": {
|
||||||
"version": "4.1.2",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-styles": "^4.1.0",
|
"ansi-styles": "^4.1.0",
|
||||||
"supports-color": "^7.1.0"
|
"supports-color": "^7.1.0"
|
||||||
@ -1778,6 +1780,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"color-name": "~1.1.4"
|
"color-name": "~1.1.4"
|
||||||
}
|
}
|
||||||
@ -1786,7 +1789,8 @@
|
|||||||
"version": "1.1.4",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"find-cache-dir": {
|
"find-cache-dir": {
|
||||||
"version": "3.3.1",
|
"version": "3.3.1",
|
||||||
@ -1813,13 +1817,15 @@
|
|||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"loader-utils": {
|
"loader-utils": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||||
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
"emojis-list": "^3.0.0",
|
"emojis-list": "^3.0.0",
|
||||||
@ -1895,6 +1901,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"has-flag": "^4.0.0"
|
"has-flag": "^4.0.0"
|
||||||
}
|
}
|
||||||
@ -1917,10 +1924,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vue-loader-v16": {
|
"vue-loader-v16": {
|
||||||
"version": "npm:vue-loader@16.8.3",
|
"version": "npm:vue-loader@16.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
|
||||||
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
|
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"chalk": "^4.1.0",
|
"chalk": "^4.1.0",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
@ -7035,9 +7043,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
"lodash": {
|
||||||
"version": "4.17.21",
|
"version": "4.17.20",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
|
||||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"lodash.defaultsdeep": {
|
"lodash.defaultsdeep": {
|
||||||
@ -9698,9 +9706,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"shell-quote": {
|
"shell-quote": {
|
||||||
"version": "1.8.1",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
|
||||||
"integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
|
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"signal-exit": {
|
"signal-exit": {
|
||||||
@ -11829,9 +11837,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"version": "6.2.3",
|
"version": "6.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
|
||||||
"integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
|
"integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"async-limiter": "~1.0.0"
|
"async-limiter": "~1.0.0"
|
||||||
@ -11844,9 +11852,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"y18n": {
|
"y18n": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
|
||||||
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
|
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"yallist": {
|
"yallist": {
|
||||||
|
Before Width: | Height: | Size: 674 KiB After Width: | Height: | Size: 805 KiB |
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 784 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 315 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 133 KiB |
692
app/frontend/package-lock.json
generated
Before Width: | Height: | Size: 674 KiB After Width: | Height: | Size: 805 KiB |
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 784 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 28 KiB |
@ -1 +1,4 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="112" height="195" fill="none" viewBox="0 0 112 195"><line x1="3.5" x2="3.5" y1="3.5" y2="191.5" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="7"/><rect width="105" height="195" x="7" fill="#F7F8F9"/></svg>
|
<svg width="112" height="195" viewBox="0 0 112 195" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<line x1="3.5" y1="3.5" x2="3.50001" y2="191.5" stroke="black" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<rect x="7" width="105" height="195" fill="#F7F8F9"/>
|
||||||
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 281 B After Width: | Height: | Size: 294 B |
@ -1 +1,16 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="loader-1" width="40" height="40" x="0" y="0" enable-background="new 0 0 40 40" version="1.1" viewBox="0 0 40 40" xml:space="preserve"><path fill="#000" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946 s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634 c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z" opacity=".2"/><path fill="#f7f8f9" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0 C22.32,8.481,24.301,9.057,26.013,10.047z"><animateTransform attributeName="transform" attributeType="xml" dur="0.5s" from="0 20 20" repeatCount="indefinite" to="360 20 20" type="rotate"/></path></svg>
|
<svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
|
||||||
|
<path opacity="0.2" fill="#000" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946
|
||||||
|
s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634
|
||||||
|
c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z"/>
|
||||||
|
<path fill="#f7f8f9" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0
|
||||||
|
C22.32,8.481,24.301,9.057,26.013,10.047z">
|
||||||
|
<animateTransform attributeType="xml"
|
||||||
|
attributeName="transform"
|
||||||
|
type="rotate"
|
||||||
|
from="0 20 20"
|
||||||
|
to="360 20 20"
|
||||||
|
dur="0.5s"
|
||||||
|
repeatCount="indefinite"/>
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 874 B After Width: | Height: | Size: 970 B |
@ -1 +1,5 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="106" height="106" fill="none" viewBox="0 0 106 106"><circle cx="53" cy="53" r="53" fill="#40D8A1"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="10" d="M29 52.5L47.5 70.5"/><line x1="79" x2="48.071" y1="40.071" y2="71" stroke="#fff" stroke-linecap="round" stroke-width="10"/></svg>
|
<svg width="106" height="106" viewBox="0 0 106 106" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="53" cy="53" r="53" fill="#40D8A1"/>
|
||||||
|
<path d="M29 52.5L47.5 70.5" stroke="white" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<line x1="79" y1="40.0711" x2="48.0711" y2="71" stroke="white" stroke-width="10" stroke-linecap="round"/>
|
||||||
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 363 B After Width: | Height: | Size: 377 B |
@ -1 +1,6 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="548" height="199" fill="none" viewBox="0 0 548 199"><rect width="142" height="145" x="403" y="27" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="6" rx="8"/><path fill="#000" d="M0 30C0 13.4315 13.4315 0 30 0H428C432.418 0 436 3.58172 436 8V191C436 195.418 432.418 199 428 199H30C13.4315 199 0 185.569 0 169V30Z"/><rect width="26" height="26" x="477" y="55" fill="#fff" stroke="#000" stroke-width="6"/><rect width="26" height="26" x="477" y="117" fill="#fff" stroke="#000" stroke-width="6"/></svg>
|
<svg width="548" height="199" viewBox="0 0 548 199" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect x="403" y="27" width="142" height="145" rx="8" fill="white" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M0 30C0 13.4315 13.4315 0 30 0H428C432.418 0 436 3.58172 436 8V191C436 195.418 432.418 199 428 199H30C13.4315 199 0 185.569 0 169V30Z" fill="black"/>
|
||||||
|
<rect x="477" y="55" width="26" height="26" fill="white" stroke="black" stroke-width="6"/>
|
||||||
|
<rect x="477" y="117" width="26" height="26" fill="white" stroke="black" stroke-width="6"/>
|
||||||
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 602 B |
@ -1 +1,11 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin:auto;background:0 0;display:block;shape-rendering:auto" width="200" height="200" preserveAspectRatio="xMidYMid" viewBox="0 0 100 100"><circle cx="50" cy="50" r="0" fill="none" stroke="#f3f3f3" stroke-width="2"><animate attributeName="r" begin="-0.7462686567164178s" calcMode="spline" dur="1.4925373134328357s" keySplines="0 0.2 0.8 1" keyTimes="0;1" repeatCount="indefinite" values="0;30"/><animate attributeName="opacity" begin="-0.7462686567164178s" calcMode="spline" dur="1.4925373134328357s" keySplines="0.2 0 0.8 1" keyTimes="0;1" repeatCount="indefinite" values="1;0"/></circle><circle cx="50" cy="50" r="0" fill="none" stroke="#d8dddf" stroke-width="2"><animate attributeName="r" calcMode="spline" dur="1.4925373134328357s" keySplines="0 0.2 0.8 1" keyTimes="0;1" repeatCount="indefinite" values="0;30"/><animate attributeName="opacity" calcMode="spline" dur="1.4925373134328357s" keySplines="0.2 0 0.8 1" keyTimes="0;1" repeatCount="indefinite" values="1;0"/></circle></svg>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
|
||||||
|
<circle cx="50" cy="50" r="0" fill="none" stroke="#f3f3f3" stroke-width="2">
|
||||||
|
<animate attributeName="r" repeatCount="indefinite" dur="1.4925373134328357s" values="0;30" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline" begin="-0.7462686567164178s"></animate>
|
||||||
|
<animate attributeName="opacity" repeatCount="indefinite" dur="1.4925373134328357s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline" begin="-0.7462686567164178s"></animate>
|
||||||
|
</circle>
|
||||||
|
<circle cx="50" cy="50" r="0" fill="none" stroke="#d8dddf" stroke-width="2">
|
||||||
|
<animate attributeName="r" repeatCount="indefinite" dur="1.4925373134328357s" values="0;30" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline"></animate>
|
||||||
|
<animate attributeName="opacity" repeatCount="indefinite" dur="1.4925373134328357s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline"></animate>
|
||||||
|
</circle>
|
||||||
|
<!-- [ldio] generated by https://loading.io/ --></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 540 KiB After Width: | Height: | Size: 775 KiB |
Before Width: | Height: | Size: 324 KiB After Width: | Height: | Size: 405 KiB |
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 315 KiB |
@ -2,9 +2,9 @@ pymisp==2.4.165.1
|
|||||||
sqlalchemy==1.4.48
|
sqlalchemy==1.4.48
|
||||||
ipwhois==1.2.0
|
ipwhois==1.2.0
|
||||||
netaddr==0.8.0
|
netaddr==0.8.0
|
||||||
flask==2.2.5
|
flask==1.1.2
|
||||||
flask_httpauth==4.8.0
|
flask_httpauth==4.8.0
|
||||||
pyjwt==2.4.0
|
pyjwt==1.7.1
|
||||||
psutil==5.8.0
|
psutil==5.8.0
|
||||||
pydig==0.4.0
|
pydig==0.4.0
|
||||||
pyudev==0.24.0
|
pyudev==0.24.0
|
||||||
|
@ -1,191 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import platform
|
|
||||||
import socket
|
|
||||||
import pkg_resources
|
|
||||||
import psutil
|
|
||||||
|
|
||||||
__author__ = 'Eugeny N Ablesov'
|
|
||||||
__version__ = '1.0.17'
|
|
||||||
|
|
||||||
def collect_accounts_info():
|
|
||||||
""" This call collects generic information about
|
|
||||||
user accounts presented on system running TinyCheck.
|
|
||||||
|
|
||||||
No personal information collected or provided by this call.
|
|
||||||
"""
|
|
||||||
accs = { }
|
|
||||||
users = psutil.users()
|
|
||||||
for user in users:
|
|
||||||
accs[user.name + '@' + user.host] = {
|
|
||||||
'started': user.started,
|
|
||||||
'term': user.terminal
|
|
||||||
}
|
|
||||||
alt_user = os.getenv('SUDO_USER', os.getenv('USER'))
|
|
||||||
usr = 'root' if os.path.expanduser('~') == '/root' else alt_user
|
|
||||||
pid = psutil.Process().pid
|
|
||||||
term = psutil.Process().terminal() if 'Linux' in platform.system() else 'win'
|
|
||||||
accs[usr + '@' + term] = { 'pid': pid }
|
|
||||||
return accs
|
|
||||||
|
|
||||||
def collect_os_info():
|
|
||||||
""" This call collects generic information about
|
|
||||||
operating system running TinyCheck.
|
|
||||||
|
|
||||||
No personal information collected or provided by this call.
|
|
||||||
"""
|
|
||||||
os_info = { }
|
|
||||||
os_info['system'] = platform.system()
|
|
||||||
os_info['release'] = platform.release()
|
|
||||||
os_info['version'] = platform.version()
|
|
||||||
os_info['platform'] = platform.platform(aliased=True)
|
|
||||||
if 'Windows' in os_info['system']:
|
|
||||||
os_info['dist'] = platform.win32_ver()
|
|
||||||
if 'Linux' in os_info['system']:
|
|
||||||
os_info['dist'] = platform.libc_ver()
|
|
||||||
return os_info
|
|
||||||
|
|
||||||
def collect_hardware_info():
|
|
||||||
""" This call collects information about hardware running TinyCheck.
|
|
||||||
|
|
||||||
No personal information collected or provided by this call.
|
|
||||||
"""
|
|
||||||
hw_info = { }
|
|
||||||
hw_info['arch'] = platform.architecture()
|
|
||||||
hw_info['machine'] = platform.machine()
|
|
||||||
hw_info['cpus'] = psutil.cpu_count(logical=False)
|
|
||||||
hw_info['cores'] = psutil.cpu_count()
|
|
||||||
hw_info['load'] = psutil.getloadavg()
|
|
||||||
disk_info = psutil.disk_usage('/')
|
|
||||||
hw_info['disk'] = {
|
|
||||||
'total': disk_info.total,
|
|
||||||
'used': disk_info.used,
|
|
||||||
'free': disk_info.free
|
|
||||||
}
|
|
||||||
return hw_info
|
|
||||||
|
|
||||||
def collect_network_info():
|
|
||||||
""" This call collects information about
|
|
||||||
network configuration and state running TinyCheck.
|
|
||||||
|
|
||||||
No personal information collected or provided by this call.
|
|
||||||
"""
|
|
||||||
net_info = { }
|
|
||||||
net_info['namei'] = socket.if_nameindex()
|
|
||||||
addrs = psutil.net_if_addrs()
|
|
||||||
state = psutil.net_io_counters(pernic=True)
|
|
||||||
for interface in addrs.keys():
|
|
||||||
net_info[interface] = { }
|
|
||||||
int_info = state[interface]
|
|
||||||
props = [p for p in dir(int_info)
|
|
||||||
if not p.startswith("_")
|
|
||||||
and not p == "index"
|
|
||||||
and not p == "count"]
|
|
||||||
for prop in props:
|
|
||||||
net_info[interface][prop] = getattr(int_info, prop)
|
|
||||||
return net_info
|
|
||||||
|
|
||||||
def collect_dependency_info(package_list):
|
|
||||||
""" This call collects information about
|
|
||||||
python packages required to run TinyCheck.
|
|
||||||
|
|
||||||
No personal information collected or provided by this call.
|
|
||||||
"""
|
|
||||||
dependencies = { }
|
|
||||||
installed_packages = list(pkg_resources.working_set)
|
|
||||||
installed_packages_list = sorted(["%s==%s"
|
|
||||||
% (installed.key, installed.version)
|
|
||||||
for installed in installed_packages])
|
|
||||||
for pkg in installed_packages_list:
|
|
||||||
[package_name, package_version] = pkg.split('==')
|
|
||||||
if package_name in package_list:
|
|
||||||
dependencies[package_name] = package_version
|
|
||||||
return dependencies
|
|
||||||
|
|
||||||
def collect_db_tables_records_count(db_path, tables):
|
|
||||||
result = { }
|
|
||||||
for table in tables:
|
|
||||||
query = 'SELECT COUNT(*) FROM %s' % (table)
|
|
||||||
sqlite_call = subprocess.Popen(['sqlite3', db_path, query], stdout = subprocess.PIPE)
|
|
||||||
stout, sterr = sqlite_call.communicate()
|
|
||||||
val = stout.decode("utf-8")
|
|
||||||
recs = int(val) if val else 0
|
|
||||||
result[table] = recs
|
|
||||||
return result
|
|
||||||
|
|
||||||
def collect_internal_state(db_path, tables, to_check):
|
|
||||||
""" This call collects information about
|
|
||||||
installed TinyCheck instance and its internal state.
|
|
||||||
|
|
||||||
No personal information collected or provided by this call.
|
|
||||||
"""
|
|
||||||
state_ = { }
|
|
||||||
available = os.path.isfile(db_path)
|
|
||||||
dbsize = 0
|
|
||||||
state_['db'] = {
|
|
||||||
'available': available,
|
|
||||||
'size': dbsize
|
|
||||||
}
|
|
||||||
state_['db']['records'] = { }
|
|
||||||
if available:
|
|
||||||
state_['db']['size'] = os.stat(db_path).st_size
|
|
||||||
state_['db']['records'] = collect_db_tables_records_count(db_path, tables)
|
|
||||||
|
|
||||||
services_ = { }
|
|
||||||
for alias in to_check:
|
|
||||||
status = subprocess.call(['systemctl', 'is-active', '--quiet', '%s' % (to_check[alias])])
|
|
||||||
state = ''
|
|
||||||
if status != 0:
|
|
||||||
sysctl_call = subprocess.Popen(
|
|
||||||
["systemctl", "status", "%s" % (to_check[alias]),
|
|
||||||
r"|",
|
|
||||||
"grep",
|
|
||||||
r"''"],
|
|
||||||
stdout = subprocess.PIPE,
|
|
||||||
stderr = subprocess.PIPE)
|
|
||||||
stout, sterr = sysctl_call.communicate()
|
|
||||||
state = stout.decode("utf-8")
|
|
||||||
errs = sterr.decode("utf-8")
|
|
||||||
if "could not be found" in errs:
|
|
||||||
state = 'Service not found'
|
|
||||||
services_[alias] = {
|
|
||||||
'running': status == 0,
|
|
||||||
'status': status,
|
|
||||||
'state': state
|
|
||||||
}
|
|
||||||
state_['svc'] = services_
|
|
||||||
return state_
|
|
||||||
|
|
||||||
def main():
|
|
||||||
print("TinyCheck diagnostics script.\nVersion: %s" % (__version__))
|
|
||||||
print("")
|
|
||||||
|
|
||||||
db_path = '/usr/share/tinycheck/tinycheck.sqlite3'
|
|
||||||
tables = ['iocs', 'whitelist', 'misp']
|
|
||||||
services = { }
|
|
||||||
services['frontend'] = 'tinycheck-frontend.service'
|
|
||||||
services['backend'] = 'tinycheck-backend.service'
|
|
||||||
services['kiosk'] = 'tinycheck-kiosk.service'
|
|
||||||
services['watchers'] = 'tinycheck-watchers.service'
|
|
||||||
|
|
||||||
deps = [
|
|
||||||
'pymisp', 'sqlalchemy', 'ipwhois',
|
|
||||||
'netaddr', 'flask', 'flask_httpauth',
|
|
||||||
'pyjwt', 'psutil', 'pydig', 'pyudev',
|
|
||||||
'pyyaml', 'wifi', 'qrcode', 'netifaces',
|
|
||||||
'weasyprint', 'python-whois', 'six' ]
|
|
||||||
|
|
||||||
diagnostics = { }
|
|
||||||
diagnostics['acc'] = collect_accounts_info()
|
|
||||||
diagnostics['os'] = collect_os_info()
|
|
||||||
diagnostics['hw'] = collect_hardware_info()
|
|
||||||
diagnostics['net'] = collect_network_info()
|
|
||||||
diagnostics['deps'] = collect_dependency_info(deps)
|
|
||||||
diagnostics['state'] = collect_internal_state(db_path, tables, services)
|
|
||||||
report = { 'diagnostics': diagnostics }
|
|
||||||
print(report)
|
|
||||||
print("")
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|