assemblyline-ui 4.7.0.dev22__py3-none-any.whl → 4.7.0.dev26__py3-none-any.whl
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.
- assemblyline_ui/VERSION +1 -1
- assemblyline_ui/api/v4/file.py +89 -102
- assemblyline_ui/api/v4/ui.py +6 -5
- assemblyline_ui/api/v4/user.py +1 -1
- {assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/METADATA +1 -1
- {assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/RECORD +9 -9
- {assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/WHEEL +0 -0
- {assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/licenses/LICENCE.md +0 -0
- {assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/top_level.txt +0 -0
assemblyline_ui/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.7.0.
|
|
1
|
+
4.7.0.dev26
|
assemblyline_ui/api/v4/file.py
CHANGED
|
@@ -4,8 +4,6 @@ import re
|
|
|
4
4
|
import subprocess
|
|
5
5
|
import tempfile
|
|
6
6
|
|
|
7
|
-
from flask import request
|
|
8
|
-
|
|
9
7
|
from assemblyline.common.codec import encode_file
|
|
10
8
|
from assemblyline.common.dict_utils import unflatten
|
|
11
9
|
from assemblyline.common.hexdump import dump, hexdump
|
|
@@ -15,6 +13,8 @@ from assemblyline.datastore.collection import Index
|
|
|
15
13
|
from assemblyline.filestore import FileStoreException
|
|
16
14
|
from assemblyline.odm.models.user import ROLES
|
|
17
15
|
from assemblyline.odm.models.user_settings import ENCODINGS as FILE_DOWNLOAD_ENCODINGS
|
|
16
|
+
from flask import request
|
|
17
|
+
|
|
18
18
|
from assemblyline_ui.api.base import (
|
|
19
19
|
api_login,
|
|
20
20
|
make_api_response,
|
|
@@ -48,6 +48,27 @@ file_api._doc = "Perform operations on files"
|
|
|
48
48
|
API_MAX_SIZE = 1 * 1024 * 1024
|
|
49
49
|
|
|
50
50
|
|
|
51
|
+
def retrieve_file_content(file_obj: dict) -> bytes:
|
|
52
|
+
""" Retrieve file content from filestore or archivestore based on availability and file metadata."""
|
|
53
|
+
data = None
|
|
54
|
+
try:
|
|
55
|
+
if file_obj.get('from_archive'):
|
|
56
|
+
# Try to download from archive first
|
|
57
|
+
if ARCHIVESTORE is not None and ARCHIVESTORE.exists(file_obj['sha256']):
|
|
58
|
+
data = ARCHIVESTORE.get(file_obj['sha256'])
|
|
59
|
+
|
|
60
|
+
# If for some reason the file is not in archive, try filestore
|
|
61
|
+
elif FILESTORE.exists(file_obj['sha256']):
|
|
62
|
+
data = FILESTORE.get(file_obj['sha256'])
|
|
63
|
+
|
|
64
|
+
elif FILESTORE.exists(file_obj['sha256']):
|
|
65
|
+
# Try to download from filestore
|
|
66
|
+
data = FILESTORE.get(file_obj['sha256'])
|
|
67
|
+
except FileStoreException:
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
return data
|
|
71
|
+
|
|
51
72
|
@file_api.route("/ascii/<sha256>/", methods=["GET"])
|
|
52
73
|
@api_login(require_role=[ROLES.file_detail])
|
|
53
74
|
def get_file_ascii(sha256, **kwargs):
|
|
@@ -71,30 +92,23 @@ def get_file_ascii(sha256, **kwargs):
|
|
|
71
92
|
"""
|
|
72
93
|
|
|
73
94
|
user = kwargs['user']
|
|
74
|
-
|
|
95
|
+
index_type = None
|
|
96
|
+
if ROLES.archive_download in user['roles']:
|
|
97
|
+
# User is allowed to access archive, so we check both hot and archive
|
|
98
|
+
index_type = Index.HOT_AND_ARCHIVE
|
|
99
|
+
|
|
100
|
+
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
75
101
|
|
|
76
|
-
if not file_obj
|
|
102
|
+
if not file_obj:
|
|
77
103
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
78
104
|
|
|
79
105
|
if user and Classification.is_accessible(user['classification'], file_obj['classification']):
|
|
80
|
-
|
|
81
|
-
data = FILESTORE.get(sha256)[:API_MAX_SIZE]
|
|
82
|
-
except (FileStoreException, TypeError):
|
|
83
|
-
data = None
|
|
84
|
-
|
|
85
|
-
# Try to download from archive
|
|
86
|
-
if not data and \
|
|
87
|
-
ARCHIVESTORE is not None and \
|
|
88
|
-
ARCHIVESTORE != FILESTORE and \
|
|
89
|
-
ROLES.archive_download in user['roles'] and \
|
|
90
|
-
ARCHIVESTORE.exists(sha256):
|
|
91
|
-
try:
|
|
92
|
-
data = ARCHIVESTORE.get(sha256)
|
|
93
|
-
except FileStoreException:
|
|
94
|
-
data = None
|
|
95
|
-
|
|
106
|
+
data = retrieve_file_content(file_obj)
|
|
96
107
|
if not data:
|
|
97
108
|
return make_api_response({}, "This file was not found in the system.", 404)
|
|
109
|
+
else:
|
|
110
|
+
# Trim data to API max size
|
|
111
|
+
data = data[:API_MAX_SIZE]
|
|
98
112
|
|
|
99
113
|
return make_api_response({
|
|
100
114
|
"content": data.translate(FILTER_ASCII).decode(),
|
|
@@ -129,7 +143,12 @@ def download_file(sha256, **kwargs):
|
|
|
129
143
|
<THE FILE BINARY ENCODED IN SPECIFIED FORMAT>
|
|
130
144
|
"""
|
|
131
145
|
user = kwargs['user']
|
|
132
|
-
|
|
146
|
+
index_type = None
|
|
147
|
+
if ROLES.archive_download in user['roles']:
|
|
148
|
+
# User is allowed to access archive, so we check both hot and archive
|
|
149
|
+
index_type = Index.HOT_AND_ARCHIVE
|
|
150
|
+
|
|
151
|
+
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
133
152
|
|
|
134
153
|
if not file_obj:
|
|
135
154
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
@@ -145,7 +164,7 @@ def download_file(sha256, **kwargs):
|
|
|
145
164
|
submission = {}
|
|
146
165
|
file_metadata = {}
|
|
147
166
|
if sid is not None:
|
|
148
|
-
submission = STORAGE.submission.get(sid, as_obj=False)
|
|
167
|
+
submission = STORAGE.submission.get(sid, as_obj=False, index_type=index_type)
|
|
149
168
|
if submission is None:
|
|
150
169
|
submission = {}
|
|
151
170
|
|
|
@@ -185,20 +204,21 @@ def download_file(sha256, **kwargs):
|
|
|
185
204
|
_, download_path = tempfile.mkstemp()
|
|
186
205
|
|
|
187
206
|
try:
|
|
207
|
+
downloaded_from = None
|
|
188
208
|
try:
|
|
189
|
-
|
|
209
|
+
if file_obj.get('from_archive'):
|
|
210
|
+
# Try to download from archive first
|
|
211
|
+
if ARCHIVESTORE is not None and ARCHIVESTORE.exists(sha256):
|
|
212
|
+
downloaded_from = ARCHIVESTORE.download(sha256, download_path)
|
|
213
|
+
|
|
214
|
+
# If for some reason the file is not in archive, try filestore
|
|
215
|
+
elif FILESTORE.exists(sha256):
|
|
216
|
+
downloaded_from = FILESTORE.download(sha256, download_path)
|
|
217
|
+
else:
|
|
218
|
+
# Try to download from filestore
|
|
219
|
+
downloaded_from = FILESTORE.download(sha256, download_path)
|
|
190
220
|
except FileStoreException:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
# Try to download from archive
|
|
194
|
-
if not downloaded_from and \
|
|
195
|
-
ARCHIVESTORE is not None and \
|
|
196
|
-
ARCHIVESTORE != FILESTORE and \
|
|
197
|
-
ROLES.archive_download in user['roles']:
|
|
198
|
-
try:
|
|
199
|
-
downloaded_from = ARCHIVESTORE.download(sha256, download_path)
|
|
200
|
-
except FileStoreException:
|
|
201
|
-
downloaded_from = None
|
|
221
|
+
pass
|
|
202
222
|
|
|
203
223
|
if not downloaded_from:
|
|
204
224
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
@@ -379,7 +399,12 @@ def summarize_code_snippet(sha256, **kwargs):
|
|
|
379
399
|
ai_summary = CACHE.get(cache_key)
|
|
380
400
|
|
|
381
401
|
if not ai_summary:
|
|
382
|
-
|
|
402
|
+
index_type = None
|
|
403
|
+
if ROLES.archive_download in user['roles']:
|
|
404
|
+
# User is allowed to access archive, so we check both hot and archive
|
|
405
|
+
index_type = Index.HOT_AND_ARCHIVE
|
|
406
|
+
|
|
407
|
+
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
383
408
|
|
|
384
409
|
if not file_obj:
|
|
385
410
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
@@ -392,22 +417,7 @@ def summarize_code_snippet(sha256, **kwargs):
|
|
|
392
417
|
# return make_api_response({}, "This file is too big to be seen through this API.", 403)
|
|
393
418
|
|
|
394
419
|
if user and Classification.is_accessible(user['classification'], file_obj['classification']):
|
|
395
|
-
|
|
396
|
-
data = FILESTORE.get(sha256)
|
|
397
|
-
except (FileStoreException, TypeError):
|
|
398
|
-
data = None
|
|
399
|
-
|
|
400
|
-
# Try to download from archive
|
|
401
|
-
if not data and \
|
|
402
|
-
ARCHIVESTORE is not None and \
|
|
403
|
-
ARCHIVESTORE != FILESTORE and \
|
|
404
|
-
ROLES.archive_download in user['roles'] and \
|
|
405
|
-
ARCHIVESTORE.exists(sha256):
|
|
406
|
-
try:
|
|
407
|
-
data = ARCHIVESTORE.get(sha256)
|
|
408
|
-
except FileStoreException:
|
|
409
|
-
data = None
|
|
410
|
-
|
|
420
|
+
data = retrieve_file_content(file_obj)
|
|
411
421
|
if not data:
|
|
412
422
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
413
423
|
|
|
@@ -450,33 +460,30 @@ def get_file_hex(sha256, **kwargs):
|
|
|
450
460
|
}
|
|
451
461
|
"""
|
|
452
462
|
user = kwargs['user']
|
|
453
|
-
|
|
463
|
+
index_type = None
|
|
464
|
+
if ROLES.archive_download in user['roles']:
|
|
465
|
+
# User is allowed to access archive, so we check both hot and archive
|
|
466
|
+
index_type = Index.HOT_AND_ARCHIVE
|
|
467
|
+
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
454
468
|
|
|
455
469
|
bytes_only = request.args.get('bytes_only', 'false').lower() in ['true', '']
|
|
456
470
|
length = int(request.args.get('length', '16'))
|
|
457
471
|
|
|
458
|
-
if not file_obj
|
|
472
|
+
if not file_obj:
|
|
459
473
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
460
474
|
|
|
461
475
|
if user and Classification.is_accessible(user['classification'], file_obj['classification']):
|
|
476
|
+
data = retrieve_file_content(file_obj)
|
|
462
477
|
try:
|
|
463
478
|
data = FILESTORE.get(sha256)[:API_MAX_SIZE]
|
|
464
479
|
except FileStoreException:
|
|
465
480
|
data = None
|
|
466
481
|
|
|
467
|
-
# Try to download from archive
|
|
468
|
-
if not data and \
|
|
469
|
-
ARCHIVESTORE is not None and \
|
|
470
|
-
ARCHIVESTORE != FILESTORE and \
|
|
471
|
-
ROLES.archive_download in user['roles'] and \
|
|
472
|
-
ARCHIVESTORE.exists(sha256):
|
|
473
|
-
try:
|
|
474
|
-
data = ARCHIVESTORE.get(sha256)
|
|
475
|
-
except FileStoreException:
|
|
476
|
-
data = None
|
|
477
|
-
|
|
478
482
|
if not data:
|
|
479
483
|
return make_api_response({}, "This file was not found in the system.", 404)
|
|
484
|
+
else:
|
|
485
|
+
# Trim data to API max size
|
|
486
|
+
data = data[:API_MAX_SIZE]
|
|
480
487
|
|
|
481
488
|
if bytes_only:
|
|
482
489
|
return make_api_response({
|
|
@@ -514,7 +521,11 @@ def get_file_image_datastream(sha256, **kwargs):
|
|
|
514
521
|
data:image/png;base64,...
|
|
515
522
|
"""
|
|
516
523
|
user = kwargs['user']
|
|
517
|
-
|
|
524
|
+
index_type = None
|
|
525
|
+
if ROLES.archive_download in user['roles']:
|
|
526
|
+
# User is allowed to access archive, so we check both hot and archive
|
|
527
|
+
index_type = Index.HOT_AND_ARCHIVE
|
|
528
|
+
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
518
529
|
|
|
519
530
|
if not file_obj:
|
|
520
531
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
@@ -523,22 +534,7 @@ def get_file_image_datastream(sha256, **kwargs):
|
|
|
523
534
|
return make_api_response({}, "This file is not allowed to be downloaded as a datastream.", 403)
|
|
524
535
|
|
|
525
536
|
if user and Classification.is_accessible(user['classification'], file_obj['classification']):
|
|
526
|
-
|
|
527
|
-
data = FILESTORE.get(sha256)
|
|
528
|
-
except (FileStoreException, TypeError):
|
|
529
|
-
data = None
|
|
530
|
-
|
|
531
|
-
# Try to download from archive
|
|
532
|
-
if not data and \
|
|
533
|
-
ARCHIVESTORE is not None and \
|
|
534
|
-
ARCHIVESTORE != FILESTORE and \
|
|
535
|
-
ROLES.archive_download in user['roles'] and \
|
|
536
|
-
ARCHIVESTORE.exists(sha256):
|
|
537
|
-
try:
|
|
538
|
-
data = ARCHIVESTORE.get(sha256)
|
|
539
|
-
except FileStoreException:
|
|
540
|
-
data = None
|
|
541
|
-
|
|
537
|
+
data = retrieve_file_content(file_obj)
|
|
542
538
|
if not data:
|
|
543
539
|
return make_api_response({}, "This file was not found in the system.", 404)
|
|
544
540
|
|
|
@@ -570,30 +566,23 @@ def get_file_strings(sha256, **kwargs):
|
|
|
570
566
|
"""
|
|
571
567
|
user = kwargs['user']
|
|
572
568
|
hlen = request.args.get('len', "6")
|
|
573
|
-
|
|
569
|
+
index_type = None
|
|
570
|
+
if ROLES.archive_download in user['roles']:
|
|
571
|
+
# User is allowed to access archive, so we check both hot and archive
|
|
572
|
+
index_type = Index.HOT_AND_ARCHIVE
|
|
574
573
|
|
|
575
|
-
|
|
574
|
+
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
575
|
+
|
|
576
|
+
if not file_obj:
|
|
576
577
|
return make_api_response({}, "The file was not found in the system.", 404)
|
|
577
578
|
|
|
578
579
|
if user and Classification.is_accessible(user['classification'], file_obj['classification']):
|
|
579
|
-
|
|
580
|
-
data = FILESTORE.get(sha256)[:API_MAX_SIZE]
|
|
581
|
-
except (FileStoreException, TypeError):
|
|
582
|
-
data = None
|
|
583
|
-
|
|
584
|
-
# Try to download from archive
|
|
585
|
-
if not data and \
|
|
586
|
-
ARCHIVESTORE is not None and \
|
|
587
|
-
ARCHIVESTORE != FILESTORE and \
|
|
588
|
-
ROLES.archive_download in user['roles'] and \
|
|
589
|
-
ARCHIVESTORE.exists(sha256):
|
|
590
|
-
try:
|
|
591
|
-
data = ARCHIVESTORE.get(sha256)
|
|
592
|
-
except FileStoreException:
|
|
593
|
-
data = None
|
|
594
|
-
|
|
580
|
+
data = retrieve_file_content(file_obj)
|
|
595
581
|
if not data:
|
|
596
582
|
return make_api_response({}, "This file was not found in the system.", 404)
|
|
583
|
+
else:
|
|
584
|
+
# Trim data to API max size
|
|
585
|
+
data = data[:API_MAX_SIZE]
|
|
597
586
|
|
|
598
587
|
# Ascii strings (we use decode with replace on to create delimiters)
|
|
599
588
|
pattern = "[\x20-\x7e]{%s,}" % hlen
|
|
@@ -741,11 +730,9 @@ def get_file_results(sha256, **kwargs):
|
|
|
741
730
|
"file_viewer_only": True } # UI switch to disable features
|
|
742
731
|
"""
|
|
743
732
|
user = kwargs['user']
|
|
744
|
-
|
|
733
|
+
index_type = None
|
|
745
734
|
if str(request.args.get('archive_only', 'false')).lower() in ['true', '']:
|
|
746
735
|
index_type = Index.ARCHIVE
|
|
747
|
-
else:
|
|
748
|
-
index_type = None
|
|
749
736
|
|
|
750
737
|
file_obj = STORAGE.file.get(sha256, as_obj=False, index_type=index_type)
|
|
751
738
|
|
assemblyline_ui/api/v4/ui.py
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
import os
|
|
5
5
|
|
|
6
|
-
from assemblyline_core.submission_client import SubmissionClient, SubmissionException
|
|
7
|
-
from cart import get_metadata_only, is_cart
|
|
8
|
-
from flask import request
|
|
9
|
-
|
|
10
6
|
from assemblyline.common import forge
|
|
11
7
|
from assemblyline.common.bundling import import_bundle
|
|
12
8
|
from assemblyline.common.str_utils import safe_str
|
|
13
9
|
from assemblyline.common.uid import get_random_id
|
|
14
10
|
from assemblyline.odm.messages.submission import Submission
|
|
15
11
|
from assemblyline.odm.models.user import ROLES
|
|
12
|
+
from assemblyline_core.submission_client import SubmissionClient, SubmissionException
|
|
13
|
+
from cart import get_metadata_only, is_cart
|
|
14
|
+
from flask import request
|
|
15
|
+
|
|
16
16
|
from assemblyline_ui.api.base import api_login, make_api_response, make_subapi_blueprint
|
|
17
17
|
from assemblyline_ui.config import (
|
|
18
18
|
FILESTORE,
|
|
@@ -249,7 +249,8 @@ def start_ui_submission(ui_sid, **kwargs):
|
|
|
249
249
|
meta = get_metadata_only(submitted_file)
|
|
250
250
|
if meta.get('al', {}).get('type', 'unknown') == 'archive/bundle/al':
|
|
251
251
|
try:
|
|
252
|
-
submission = import_bundle(submitted_file, allow_incomplete=True, identify=IDENTIFY
|
|
252
|
+
submission = import_bundle(submitted_file, allow_incomplete=True, identify=IDENTIFY,
|
|
253
|
+
dtl=ui_params.get('ttl'))
|
|
253
254
|
except Exception as e:
|
|
254
255
|
return make_api_response("", err=str(e), status_code=400)
|
|
255
256
|
return make_api_response({"started": True, "sid": submission['sid']})
|
assemblyline_ui/api/v4/user.py
CHANGED
|
@@ -198,7 +198,7 @@ def who_am_i(**kwargs):
|
|
|
198
198
|
# System configuration
|
|
199
199
|
user_data['c12nDef'] = classification_definition
|
|
200
200
|
user_data['classification_aliases'] = {k: v for k, v in CLASSIFICATION_ALIASES.items().items()
|
|
201
|
-
if k in user_data['classification'] or user_data['is_admin']}
|
|
201
|
+
if k in user_data['classification'] or user_data['is_admin'] or CLASSIFICATION.is_accessible(user_data['classification'], CLASSIFICATION.RESTRICTED)}
|
|
202
202
|
|
|
203
203
|
# create tag-to-source lookup mapping
|
|
204
204
|
external_source_tags = {}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
assemblyline_ui/VERSION,sha256=
|
|
1
|
+
assemblyline_ui/VERSION,sha256=hlFS3gZZIB9hMecU1bN5qHS-QUPk60zLIau9FATXyoI,12
|
|
2
2
|
assemblyline_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
assemblyline_ui/app.py,sha256=ok96rpL0-Hb5amqa7ojhuB0boQceZG7E32NX6LZm-f4,7849
|
|
4
4
|
assemblyline_ui/config.py,sha256=4M5wpG_OwJPjZAjRWIUMMyF4KG30oJidNDnFM-IVJCw,8927
|
|
@@ -22,7 +22,7 @@ assemblyline_ui/api/v4/badlist.py,sha256=lTqRLs8F745U0biPdC4AHimj0VUiCLcNFEae7Un
|
|
|
22
22
|
assemblyline_ui/api/v4/bundle.py,sha256=UcLUpErpiAk5LSYeC0zHDw_WpQiPcM8uhH7NwmWi4hw,5521
|
|
23
23
|
assemblyline_ui/api/v4/error.py,sha256=RdpnDqM-tiFdG-Qni3-_8kn7VPlB0UW1VafUF2EHw8Q,2586
|
|
24
24
|
assemblyline_ui/api/v4/federated_lookup.py,sha256=aq7KMBu1x6ZTvSOfSq_L0Y-Q6VFIxsE8IVK0BZ9w0y8,12540
|
|
25
|
-
assemblyline_ui/api/v4/file.py,sha256=
|
|
25
|
+
assemblyline_ui/api/v4/file.py,sha256=Uut6miKNW5DvSMwDoSVmujerG9-KcywPAe68OqtfPRs,40116
|
|
26
26
|
assemblyline_ui/api/v4/hash_search.py,sha256=2KidEgffDWoMJzmFC49dN6OctcsjdRo-lNVgx1GorOA,12129
|
|
27
27
|
assemblyline_ui/api/v4/help.py,sha256=HmCJfBZXv5DM1e_ZEtjq_83UIr-jUyCNtLueXboUAWg,6767
|
|
28
28
|
assemblyline_ui/api/v4/heuristics.py,sha256=YfTUmDYrilwdNO1Dlr0qfDRTU4fOhPpSCWARLjt1auo,2910
|
|
@@ -40,8 +40,8 @@ assemblyline_ui/api/v4/signature.py,sha256=av3FhYkIuXjKX91DX93WcN_U5L2bltDHJSwRb
|
|
|
40
40
|
assemblyline_ui/api/v4/submission.py,sha256=WxMY00ePNdOMFXyu9j38sxpe0vT26u-Z_biMiBUOxds,46345
|
|
41
41
|
assemblyline_ui/api/v4/submit.py,sha256=5nfuX6Ud3FMdDGIOgBAdcb6kpMbINk750Ph5yp90O8c,18372
|
|
42
42
|
assemblyline_ui/api/v4/system.py,sha256=4JhLhpmPfKzbXiHsBoJxSZP-ibu-lnmk4FrtaLExaRM,24861
|
|
43
|
-
assemblyline_ui/api/v4/ui.py,sha256=
|
|
44
|
-
assemblyline_ui/api/v4/user.py,sha256=
|
|
43
|
+
assemblyline_ui/api/v4/ui.py,sha256=J3OoLEETlFgeq7DbSlubTPebMQJOUx6UwRIt8mCBYbQ,11508
|
|
44
|
+
assemblyline_ui/api/v4/user.py,sha256=m_xvc59imrxbRBwnNkZeH2vZbcW5smDgLIcIRVobaP0,47848
|
|
45
45
|
assemblyline_ui/api/v4/webauthn.py,sha256=ouVWMMd0aMnNV5iaKbWY1AnsUE5_BKAtaUg9j77Rvow,4875
|
|
46
46
|
assemblyline_ui/api/v4/workflow.py,sha256=Uz50960KyvFDm39NKYNSq5OXT0CA0u_FO5xPP61aYiQ,10579
|
|
47
47
|
assemblyline_ui/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -74,8 +74,8 @@ assemblyline_ui/sio/live_submission.py,sha256=mS0oGO5rEA8PLa8kjBcodOG-Q0CG4SpYAo
|
|
|
74
74
|
assemblyline_ui/sio/retrohunt.py,sha256=vlH_x6Rb4pm3GM1sNLH1C42-NVR3VoAsEfkAu3L30fY,2146
|
|
75
75
|
assemblyline_ui/sio/status.py,sha256=_Bxf1KLPOJEUIk4J9_j9fzvQWUXqSIT9xnJKhT1hhuc,1980
|
|
76
76
|
assemblyline_ui/sio/submission.py,sha256=IYJuGz73HK9HtYfqc-gWW8tc1lt5VZ62Qn64AaGGtm8,2222
|
|
77
|
-
assemblyline_ui-4.7.0.
|
|
78
|
-
assemblyline_ui-4.7.0.
|
|
79
|
-
assemblyline_ui-4.7.0.
|
|
80
|
-
assemblyline_ui-4.7.0.
|
|
81
|
-
assemblyline_ui-4.7.0.
|
|
77
|
+
assemblyline_ui-4.7.0.dev26.dist-info/licenses/LICENCE.md,sha256=NSkYo9EH8h5oOkzg4VhjAHF4339MqPP2cQ8msTPgl-c,1396
|
|
78
|
+
assemblyline_ui-4.7.0.dev26.dist-info/METADATA,sha256=BitVBEa6wa8yC1rYZMLf1QGRQvlEAgXeVg24mCyipz8,8174
|
|
79
|
+
assemblyline_ui-4.7.0.dev26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
80
|
+
assemblyline_ui-4.7.0.dev26.dist-info/top_level.txt,sha256=WLa7-PKLJTbMUbKKU3q3kg5_uAV67hss5kC71PAbIeg,16
|
|
81
|
+
assemblyline_ui-4.7.0.dev26.dist-info/RECORD,,
|
|
File without changes
|
{assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/licenses/LICENCE.md
RENAMED
|
File without changes
|
{assemblyline_ui-4.7.0.dev22.dist-info → assemblyline_ui-4.7.0.dev26.dist-info}/top_level.txt
RENAMED
|
File without changes
|