No known key found for this signature in database
GPG 키 ID: 1E1B1F50D84613D0
92개의 변경된 파일과 3189개의 추가작업 그리고 508개의 파일을 삭제
-
6.gitignore
-
2.travis.yml
-
2OVERVIEW.md
-
50bin/Attributes.py
-
9bin/CreditCards.py
-
18bin/Cryptocurrencies.py
-
16bin/LAUNCH.sh
-
33bin/Languages.py
-
11bin/ModuleStats.py
-
3bin/Onion.py
-
4bin/RegexTracker.py
-
2bin/TermTrackerMod.py
-
10bin/Web.py
-
28bin/export/Export.py
-
9bin/lib/ConfigLoader.py
-
8bin/lib/Correlate_object.py
-
187bin/lib/Domain.py
-
240bin/lib/Language.py
-
2bin/lib/Screenshot.py
-
383bin/lib/Tracker.py
-
38bin/lib/crawlers.py
-
38bin/lib/item_basic.py
-
7bin/packages/HiddenServices.py
-
132bin/packages/Item.py
-
66bin/packages/Paste.py
-
14bin/packages/Term.py
-
14bin/packages/modules.cfg
-
49bin/torcrawler/TorSplashCrawler.py
-
2bin/torcrawler/tor_crawler.py
-
18bin/trackers/Tracker_Yara.py
-
117bin/update-background.py
-
21configs/core.cfg.sample
-
12installing_deps.sh
-
2requirements.txt
-
5update/v1.5/Update-ARDB_Onions_screenshots.py
-
7update/v1.5/Update.py
-
7update/v2.4/Update.py
-
5update/v2.4/Update_domain.py
-
4update/v2.6/Update.py
-
6update/v2.6/Update_screenshots.py
-
4update/v2.7/Update.py
-
6update/v2.7/Update_domain_tags.py
-
39update/v3.2/Update.py
-
52update/v3.2/Update.sh
-
29update/v3.3/Update.py
-
54update/v3.3/Update.sh
-
36update/v3.4/Update.py
-
54update/v3.4/Update.sh
-
60update/v3.4/Update_domain.py
-
4var/www/Flask_server.py
-
61var/www/blueprints/crawler_splash.py
-
97var/www/blueprints/objects_item.py
-
34var/www/blueprints/old_endpoints.py
-
5var/www/modules/Flask_config.py
-
2var/www/modules/PasteSubmit/Flask_PasteSubmit.py
-
2var/www/modules/PasteSubmit/templates/submit_items.html
-
2var/www/modules/Role_Manager.py
-
6var/www/modules/Tags/Flask_Tags.py
-
4var/www/modules/Tags/templates/Tags.html
-
4var/www/modules/Tags/templates/tagged.html
-
2var/www/modules/dashboard/Flask_dashboard.py
-
4var/www/modules/dashboard/templates/index.html
-
4var/www/modules/hashDecoded/Flask_hashDecoded.py
-
77var/www/modules/hunter/Flask_hunter.py
-
84var/www/modules/hunter/templates/edit_tracker.html
-
14var/www/modules/hunter/templates/showTracker.html
-
20var/www/modules/hunter/templates/trackersManagement.html
-
13var/www/modules/search/Flask_search.py
-
8var/www/modules/search/templates/search.html
-
12var/www/modules/settings/Flask_settings.py
-
17var/www/modules/settings/templates/edit_profile.html
-
55var/www/modules/settings/templates/users_list.html
-
9var/www/modules/showpaste/Flask_showpaste.py
-
6var/www/modules/showpaste/templates/show_saved_item_min.html
-
2var/www/modules/terms/templates/credentials_tracker.html
-
2var/www/modules/terms/templates/terms_management.html
-
7var/www/static/css/ail-project.css
-
2var/www/static/js/indexjavascript.js
-
2var/www/templates/correlation/metadata_card_paste.html
-
23var/www/templates/crawler/crawler_splash/dashboard_splash_crawler.html
-
2var/www/templates/crawler/crawler_splash/domain_explorer.html
-
46var/www/templates/crawler/crawler_splash/showDomain.html
-
50var/www/templates/domains/block_domains_name_search.html
-
73var/www/templates/domains/block_languages_search.html
-
60var/www/templates/domains/card_img_domain.html
-
192var/www/templates/domains/domains_filter_languages.html
-
195var/www/templates/domains/domains_result_list.html
-
120var/www/templates/modals/create_hive_case.html
-
2var/www/templates/modals/show_min_item.html
-
446var/www/templates/objects/item/show_item.html
-
2var/www/templates/tags/search_obj_by_tags.html
-
4var/www/update_thirdparty.sh
@ -1,50 +0,0 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
""" |
|||
The ZMQ_Sub_Attribute Module |
|||
============================ |
|||
|
|||
This module is saving Attribute of the paste into redis |
|||
|
|||
""" |
|||
import time |
|||
from packages import Paste |
|||
from pubsublogger import publisher |
|||
|
|||
from Helper import Process |
|||
|
|||
if __name__ == "__main__": |
|||
publisher.port = 6380 |
|||
publisher.channel = "Script" |
|||
|
|||
config_section = 'Attributes' |
|||
|
|||
p = Process(config_section) |
|||
|
|||
# FUNCTIONS # |
|||
publisher.info("Attribute is Running") |
|||
|
|||
while True: |
|||
try: |
|||
message = p.get_from_set() |
|||
|
|||
if message is not None: |
|||
PST = Paste.Paste(message) |
|||
else: |
|||
publisher.debug("Script Attribute is idling 1s") |
|||
print('sleeping') |
|||
time.sleep(1) |
|||
continue |
|||
|
|||
# FIXME do it directly in the class |
|||
PST.save_attribute_redis("p_encoding", PST._get_p_encoding()) |
|||
#PST.save_attribute_redis("p_language", PST._get_p_language()) |
|||
# FIXME why not all saving everything there. |
|||
PST.save_all_attributes_redis() |
|||
# FIXME Not used. |
|||
PST.store.sadd("Pastes_Objects", PST.p_rel_path) |
|||
except IOError: |
|||
print("CRC Checksum Failed on :", PST.p_rel_path) |
|||
publisher.error('Duplicate;{};{};{};CRC Checksum Failed'.format( |
|||
PST.p_source, PST.p_date, PST.p_name)) |
|||
@ -0,0 +1,33 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
import os |
|||
import sys |
|||
import cld3 |
|||
import time |
|||
|
|||
from packages import Item |
|||
from lib import Domain |
|||
|
|||
from pubsublogger import publisher |
|||
from Helper import Process |
|||
|
|||
if __name__ == '__main__': |
|||
publisher.port = 6380 |
|||
publisher.channel = 'Script' |
|||
# Section name in bin/packages/modules.cfg |
|||
config_section = 'Languages' |
|||
# Setup the I/O queues |
|||
p = Process(config_section) |
|||
|
|||
while True: |
|||
message = p.get_from_set() |
|||
if message is None: |
|||
publisher.debug("{} queue is empty, waiting".format(config_section)) |
|||
time.sleep(1) |
|||
continue |
|||
|
|||
item_id = Item.get_item_id(message) |
|||
if Item.is_crawled(item_id): |
|||
domain = Item.get_item_domain(item_id) |
|||
Domain.add_domain_languages_by_item_id(domain, item_id) |
|||
@ -0,0 +1,240 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
import os |
|||
import sys |
|||
import redis |
|||
|
|||
dict_iso_languages = { |
|||
'af': 'Afrikaans', |
|||
'am': 'Amharic', |
|||
'ar': 'Arabic', |
|||
'bg': 'Bulgarian', |
|||
'bn': 'Bangla', |
|||
'bs': 'Bosnian', |
|||
'ca': 'Catalan', |
|||
'ceb': 'Cebuano', |
|||
'co': 'Corsican', |
|||
'cs': 'Czech', |
|||
'cy': 'Welsh', |
|||
'da': 'Danish', |
|||
'de': 'German', |
|||
'el': 'Greek', |
|||
'en': 'English', |
|||
'eo': 'Esperanto', |
|||
'es': 'Spanish', |
|||
'et': 'Estonian', |
|||
'eu': 'Basque', |
|||
'fa': 'Persian', |
|||
'fi': 'Finnish', |
|||
'fil': 'Filipino', |
|||
'fr': 'French', |
|||
'fy': 'Western Frisian', |
|||
'ga': 'Irish', |
|||
'gd': 'Scottish Gaelic', |
|||
'gl': 'Galician', |
|||
'gu': 'Gujarati', |
|||
'ha': 'Hausa', |
|||
'haw': 'Hawaiian', |
|||
'hi': 'Hindi', |
|||
'hmn': 'Hmong', |
|||
'hr': 'Croatian', |
|||
'ht': 'Haitian Creole', |
|||
'hu': 'Hungarian', |
|||
'hy': 'Armenian', |
|||
'id': 'Indonesian', |
|||
'ig': 'Igbo', |
|||
'is': 'Icelandic', |
|||
'it': 'Italian', |
|||
'iw': 'Hebrew', |
|||
'ja': 'Japanese', |
|||
'jv': 'Javanese', |
|||
'ka': 'Georgian', |
|||
'kk': 'Kazakh', |
|||
'km': 'Khmer', |
|||
'kn': 'Kannada', |
|||
'ko': 'Korean', |
|||
'ku': 'Kurdish', |
|||
'ky': 'Kyrgyz', |
|||
'la': 'Latin', |
|||
'lb': 'Luxembourgish', |
|||
'lo': 'Lao', |
|||
'lt': 'Lithuanian', |
|||
'lv': 'Latvian', |
|||
'mg': 'Malagasy', |
|||
'mi': 'Maori', |
|||
'mk': 'Macedonian', |
|||
'ml': 'Malayalam', |
|||
'mn': 'Mongolian', |
|||
'mr': 'Marathi', |
|||
'ms': 'Malay', |
|||
'mt': 'Maltese', |
|||
'my': 'Burmese', |
|||
'ne': 'Nepali', |
|||
'nl': 'Dutch', |
|||
'no': 'Norwegian', |
|||
'ny': 'Nyanja', |
|||
'pa': 'Punjabi', |
|||
'pl': 'Polish', |
|||
'ps': 'Pashto', |
|||
'pt': 'Portuguese', |
|||
'ro': 'Romanian', |
|||
'ru': 'Russian', |
|||
'sd': 'Sindhi', |
|||
'si': 'Sinhala', |
|||
'sk': 'Slovak', |
|||
'sl': 'Slovenian', |
|||
'sm': 'Samoan', |
|||
'sn': 'Shona', |
|||
'so': 'Somali', |
|||
'sq': 'Albanian', |
|||
'sr': 'Serbian', |
|||
'st': 'Southern Sotho', |
|||
'su': 'Sundanese', |
|||
'sv': 'Swedish', |
|||
'sw': 'Swahili', |
|||
'ta': 'Tamil', |
|||
'te': 'Telugu', |
|||
'tg': 'Tajik', |
|||
'th': 'Thai', |
|||
'tr': 'Turkish', |
|||
'uk': 'Ukrainian', |
|||
'ur': 'Urdu', |
|||
'uz': 'Uzbek', |
|||
'vi': 'Vietnamese', |
|||
'xh': 'Xhosa', |
|||
'yi': 'Yiddish', |
|||
'yo': 'Yoruba', |
|||
'zh': 'Chinese', |
|||
'zu': 'Zulu' |
|||
} |
|||
|
|||
dict_languages_iso = { |
|||
'Afrikaans': 'af', |
|||
'Amharic': 'am', |
|||
'Arabic': 'ar', |
|||
'Bulgarian': 'bg', |
|||
'Bangla': 'bn', |
|||
'Bosnian': 'bs', |
|||
'Catalan': 'ca', |
|||
'Cebuano': 'ceb', |
|||
'Corsican': 'co', |
|||
'Czech': 'cs', |
|||
'Welsh': 'cy', |
|||
'Danish': 'da', |
|||
'German': 'de', |
|||
'Greek': 'el', |
|||
'English': 'en', |
|||
'Esperanto': 'eo', |
|||
'Spanish': 'es', |
|||
'Estonian': 'et', |
|||
'Basque': 'eu', |
|||
'Persian': 'fa', |
|||
'Finnish': 'fi', |
|||
'Filipino': 'fil', |
|||
'French': 'fr', |
|||
'Western Frisian': 'fy', |
|||
'Irish': 'ga', |
|||
'Scottish Gaelic': 'gd', |
|||
'Galician': 'gl', |
|||
'Gujarati': 'gu', |
|||
'Hausa': 'ha', |
|||
'Hawaiian': 'haw', |
|||
'Hindi': 'hi', |
|||
'Hmong': 'hmn', |
|||
'Croatian': 'hr', |
|||
'Haitian Creole': 'ht', |
|||
'Hungarian': 'hu', |
|||
'Armenian': 'hy', |
|||
'Indonesian': 'id', |
|||
'Igbo': 'ig', |
|||
'Icelandic': 'is', |
|||
'Italian': 'it', |
|||
'Hebrew': 'iw', |
|||
'Japanese': 'ja', |
|||
'Javanese': 'jv', |
|||
'Georgian': 'ka', |
|||
'Kazakh': 'kk', |
|||
'Khmer': 'km', |
|||
'Kannada': 'kn', |
|||
'Korean': 'ko', |
|||
'Kurdish': 'ku', |
|||
'Kyrgyz': 'ky', |
|||
'Latin': 'la', |
|||
'Luxembourgish': 'lb', |
|||
'Lao': 'lo', |
|||
'Lithuanian': 'lt', |
|||
'Latvian': 'lv', |
|||
'Malagasy': 'mg', |
|||
'Maori': 'mi', |
|||
'Macedonian': 'mk', |
|||
'Malayalam': 'ml', |
|||
'Mongolian': 'mn', |
|||
'Marathi': 'mr', |
|||
'Malay': 'ms', |
|||
'Maltese': 'mt', |
|||
'Burmese': 'my', |
|||
'Nepali': 'ne', |
|||
'Dutch': 'nl', |
|||
'Norwegian': 'no', |
|||
'Nyanja': 'ny', |
|||
'Punjabi': 'pa', |
|||
'Polish': 'pl', |
|||
'Pashto': 'ps', |
|||
'Portuguese': 'pt', |
|||
'Romanian': 'ro', |
|||
'Russian': 'ru', |
|||
'Sindhi': 'sd', |
|||
'Sinhala': 'si', |
|||
'Slovak': 'sk', |
|||
'Slovenian': 'sl', |
|||
'Samoan': 'sm', |
|||
'Shona': 'sn', |
|||
'Somali': 'so', |
|||
'Albanian': 'sq', |
|||
'Serbian': 'sr', |
|||
'Southern Sotho': 'st', |
|||
'Sundanese': 'su', |
|||
'Swedish': 'sv', |
|||
'Swahili': 'sw', |
|||
'Tamil': 'ta', |
|||
'Telugu': 'te', |
|||
'Tajik': 'tg', |
|||
'Thai': 'th', |
|||
'Turkish': 'tr', |
|||
'Ukrainian': 'uk', |
|||
'Urdu': 'ur', |
|||
'Uzbek': 'uz', |
|||
'Vietnamese': 'vi', |
|||
'Xhosa': 'xh', |
|||
'Yiddish': 'yi', |
|||
'Yoruba': 'yo', |
|||
'Chinese': 'zh', |
|||
'Zulu': 'zu' |
|||
} |
|||
|
|||
def get_language_from_iso(iso_language): |
|||
return dict_iso_languages.get(iso_language, None) |
|||
|
|||
def get_languages_from_iso(l_iso_languages, sort=False): |
|||
l_languages = [] |
|||
for iso_language in l_iso_languages: |
|||
language = get_language_from_iso(iso_language) |
|||
if language: |
|||
l_languages.append(language) |
|||
if sort: |
|||
l_languages = sorted(l_languages) |
|||
return l_languages |
|||
|
|||
def get_iso_from_language(language): |
|||
return dict_languages_iso.get(language, None) |
|||
|
|||
def get_iso_from_languages(l_languages, sort=False): |
|||
l_iso = [] |
|||
for language in l_languages: |
|||
iso_lang = get_iso_from_language(language) |
|||
if iso_lang: |
|||
l_iso.append(iso_lang) |
|||
if sort: |
|||
l_iso = sorted(l_iso) |
|||
return l_iso |
|||
@ -0,0 +1,39 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
import os |
|||
import sys |
|||
import time |
|||
import redis |
|||
import argparse |
|||
import datetime |
|||
import configparser |
|||
|
|||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'lib/')) |
|||
import ConfigLoader |
|||
|
|||
new_version = 'v3.2' |
|||
|
|||
if __name__ == '__main__': |
|||
|
|||
start_deb = time.time() |
|||
|
|||
config_loader = ConfigLoader.ConfigLoader() |
|||
r_serv_db = config_loader.get_redis_conn("ARDB_DB") |
|||
config_loader = None |
|||
|
|||
#### NEW EXPORTER |
|||
# remove old tags errors |
|||
#r_serv_db.delete('mess_not_saved_export') |
|||
|
|||
# move solo tags to export in tags_db |
|||
#all_misp_tags = r_serv_db.smembers('whitelist_misp') |
|||
#all_hive_tags = r_serv_db.smembers('whitelist_hive') |
|||
# # TODO: save them in tags db |
|||
#### NEW EXPORTER |
|||
|
|||
#Set current ail version |
|||
r_serv_db.set('ail:version', new_version) |
|||
|
|||
#Set current ail version |
|||
r_serv_db.hset('ail:update_date', new_version, datetime.datetime.now().strftime("%Y%m%d")) |
|||
@ -0,0 +1,52 @@ |
|||
#!/bin/bash |
|||
|
|||
[ -z "$AIL_HOME" ] && echo "Needs the env var AIL_HOME. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_REDIS" ] && echo "Needs the env var AIL_REDIS. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_ARDB" ] && echo "Needs the env var AIL_ARDB. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_BIN" ] && echo "Needs the env var AIL_ARDB. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_FLASK" ] && echo "Needs the env var AIL_FLASK. Run the script from the virtual environment." && exit 1; |
|||
|
|||
export PATH=$AIL_HOME:$PATH |
|||
export PATH=$AIL_REDIS:$PATH |
|||
export PATH=$AIL_ARDB:$PATH |
|||
export PATH=$AIL_BIN:$PATH |
|||
export PATH=$AIL_FLASK:$PATH |
|||
|
|||
GREEN="\\033[1;32m" |
|||
DEFAULT="\\033[0;39m" |
|||
|
|||
echo -e $GREEN"Shutting down AIL ..."$DEFAULT |
|||
bash ${AIL_BIN}/LAUNCH.sh -ks |
|||
wait |
|||
|
|||
bash ${AIL_BIN}/LAUNCH.sh -ldbv & |
|||
wait |
|||
echo "" |
|||
|
|||
# SUBMODULES # |
|||
git submodule init |
|||
git submodule update |
|||
|
|||
echo -e $GREEN"Installing YARA ..."$DEFAULT |
|||
pip3 install yara-python |
|||
bash ${AIL_BIN}/LAUNCH.sh -t |
|||
|
|||
# SUBMODULES # |
|||
git submodule init |
|||
git submodule update |
|||
|
|||
echo "" |
|||
echo -e $GREEN"Updating AIL VERSION ..."$DEFAULT |
|||
echo "" |
|||
python ${AIL_HOME}/update/v3.2/Update.py |
|||
wait |
|||
echo "" |
|||
echo "" |
|||
|
|||
|
|||
echo "" |
|||
echo -e $GREEN"Shutting down ARDB ..."$DEFAULT |
|||
bash ${AIL_BIN}/LAUNCH.sh -ks |
|||
wait |
|||
|
|||
exit 0 |
|||
@ -0,0 +1,29 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
import os |
|||
import sys |
|||
import time |
|||
import redis |
|||
import argparse |
|||
import datetime |
|||
import configparser |
|||
|
|||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'lib/')) |
|||
import ConfigLoader |
|||
|
|||
new_version = 'v3.3' |
|||
|
|||
if __name__ == '__main__': |
|||
|
|||
start_deb = time.time() |
|||
|
|||
config_loader = ConfigLoader.ConfigLoader() |
|||
r_serv_db = config_loader.get_redis_conn("ARDB_DB") |
|||
config_loader = None |
|||
|
|||
#Set current ail version |
|||
r_serv_db.set('ail:version', new_version) |
|||
|
|||
#Set current ail version |
|||
r_serv_db.hset('ail:update_date', new_version, datetime.datetime.now().strftime("%Y%m%d")) |
|||
@ -0,0 +1,54 @@ |
|||
#!/bin/bash |
|||
|
|||
[ -z "$AIL_HOME" ] && echo "Needs the env var AIL_HOME. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_REDIS" ] && echo "Needs the env var AIL_REDIS. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_ARDB" ] && echo "Needs the env var AIL_ARDB. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_BIN" ] && echo "Needs the env var AIL_ARDB. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_FLASK" ] && echo "Needs the env var AIL_FLASK. Run the script from the virtual environment." && exit 1; |
|||
|
|||
export PATH=$AIL_HOME:$PATH |
|||
export PATH=$AIL_REDIS:$PATH |
|||
export PATH=$AIL_ARDB:$PATH |
|||
export PATH=$AIL_BIN:$PATH |
|||
export PATH=$AIL_FLASK:$PATH |
|||
|
|||
GREEN="\\033[1;32m" |
|||
DEFAULT="\\033[0;39m" |
|||
|
|||
echo -e $GREEN"Shutting down AIL ..."$DEFAULT |
|||
bash ${AIL_BIN}/LAUNCH.sh -ks |
|||
wait |
|||
|
|||
bash ${AIL_BIN}/LAUNCH.sh -ldbv & |
|||
wait |
|||
echo "" |
|||
|
|||
# SUBMODULES # |
|||
git submodule update |
|||
|
|||
# echo "" |
|||
# echo -e $GREEN"installing KVORCKS ..."$DEFAULT |
|||
# cd ${AIL_HOME} |
|||
# test ! -d kvrocks/ && git clone https://github.com/bitleak/kvrocks.git |
|||
# pushd kvrocks/ |
|||
# make -j4 |
|||
# popd |
|||
|
|||
echo -e $GREEN"Installing html2text ..."$DEFAULT |
|||
pip3 install html2text |
|||
|
|||
echo "" |
|||
echo -e $GREEN"Updating AIL VERSION ..."$DEFAULT |
|||
echo "" |
|||
python ${AIL_HOME}/update/v3.3/Update.py |
|||
wait |
|||
echo "" |
|||
echo "" |
|||
|
|||
|
|||
echo "" |
|||
echo -e $GREEN"Shutting down ARDB ..."$DEFAULT |
|||
bash ${AIL_BIN}/LAUNCH.sh -ks |
|||
wait |
|||
|
|||
exit 0 |
|||
@ -0,0 +1,36 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
import os |
|||
import re |
|||
import sys |
|||
import time |
|||
import redis |
|||
import datetime |
|||
|
|||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'lib/')) |
|||
import ConfigLoader |
|||
|
|||
new_version = 'v3.4' |
|||
|
|||
if __name__ == '__main__': |
|||
|
|||
start_deb = time.time() |
|||
|
|||
config_loader = ConfigLoader.ConfigLoader() |
|||
r_serv = config_loader.get_redis_conn("ARDB_DB") |
|||
r_serv_onion = config_loader.get_redis_conn("ARDB_Onion") |
|||
config_loader = None |
|||
|
|||
r_serv_onion.sunionstore('domain_update_v3.4', 'full_onion_up', 'full_regular_up') |
|||
r_serv.set('update:nb_elem_to_convert', r_serv_onion.scard('domain_update_v3.4')) |
|||
r_serv.set('update:nb_elem_converted',0) |
|||
|
|||
# Add background update |
|||
r_serv.sadd('ail:to_update', new_version) |
|||
|
|||
#Set current ail version |
|||
r_serv.set('ail:version', new_version) |
|||
|
|||
#Set current ail version |
|||
r_serv.hset('ail:update_date', new_version, datetime.datetime.now().strftime("%Y%m%d")) |
|||
@ -0,0 +1,54 @@ |
|||
#!/bin/bash |
|||
|
|||
[ -z "$AIL_HOME" ] && echo "Needs the env var AIL_HOME. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_REDIS" ] && echo "Needs the env var AIL_REDIS. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_ARDB" ] && echo "Needs the env var AIL_ARDB. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_BIN" ] && echo "Needs the env var AIL_ARDB. Run the script from the virtual environment." && exit 1; |
|||
[ -z "$AIL_FLASK" ] && echo "Needs the env var AIL_FLASK. Run the script from the virtual environment." && exit 1; |
|||
|
|||
export PATH=$AIL_HOME:$PATH |
|||
export PATH=$AIL_REDIS:$PATH |
|||
export PATH=$AIL_ARDB:$PATH |
|||
export PATH=$AIL_BIN:$PATH |
|||
export PATH=$AIL_FLASK:$PATH |
|||
|
|||
GREEN="\\033[1;32m" |
|||
DEFAULT="\\033[0;39m" |
|||
|
|||
echo -e $GREEN"Shutting down AIL ..."$DEFAULT |
|||
bash ${AIL_BIN}/LAUNCH.sh -ks |
|||
wait |
|||
|
|||
# bash ${AIL_BIN}/LAUNCH.sh -ldbv & |
|||
# wait |
|||
# echo "" |
|||
|
|||
# SUBMODULES # |
|||
git submodule update |
|||
|
|||
# echo "" |
|||
# echo -e $GREEN"installing KVORCKS ..."$DEFAULT |
|||
# cd ${AIL_HOME} |
|||
# test ! -d kvrocks/ && git clone https://github.com/bitleak/kvrocks.git |
|||
# pushd kvrocks/ |
|||
# make -j4 |
|||
# popd |
|||
|
|||
echo -e $GREEN"Installing html2text ..."$DEFAULT |
|||
pip3 install pycld3 |
|||
|
|||
echo "" |
|||
echo -e $GREEN"Updating AIL VERSION ..."$DEFAULT |
|||
echo "" |
|||
python ${AIL_HOME}/update/v3.4/Update.py |
|||
wait |
|||
echo "" |
|||
echo "" |
|||
|
|||
|
|||
echo "" |
|||
echo -e $GREEN"Shutting down ARDB ..."$DEFAULT |
|||
bash ${AIL_BIN}/LAUNCH.sh -ks |
|||
wait |
|||
|
|||
exit 0 |
|||
@ -0,0 +1,60 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
import os |
|||
import re |
|||
import sys |
|||
import time |
|||
import redis |
|||
import datetime |
|||
|
|||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'lib/')) |
|||
import ConfigLoader |
|||
import Domain |
|||
|
|||
def update_update_stats(): |
|||
nb_updated = int(r_serv_db.get('update:nb_elem_converted')) |
|||
progress = int((nb_updated * 100) / nb_elem_to_update) |
|||
print('{}/{} updated {}%'.format(nb_updated, nb_elem_to_update, progress)) |
|||
r_serv_db.set('ail:current_background_script_stat', progress) |
|||
|
|||
def update_domain_language(domain_obj, item_id): |
|||
domain_name = domain_obj.get_domain_name() |
|||
Domain.add_domain_languages_by_item_id(domain_name, item_id) |
|||
|
|||
if __name__ == '__main__': |
|||
|
|||
start_deb = time.time() |
|||
|
|||
config_loader = ConfigLoader.ConfigLoader() |
|||
r_serv_db = config_loader.get_redis_conn("ARDB_DB") |
|||
r_serv_onion = config_loader.get_redis_conn("ARDB_Onion") |
|||
config_loader = None |
|||
|
|||
r_serv.set('ail:current_background_script', 'domain languages update') |
|||
|
|||
nb_elem_to_update = r_serv_db.get('update:nb_elem_to_convert') |
|||
if not nb_elem_to_update: |
|||
nb_elem_to_update = 1 |
|||
else: |
|||
nb_elem_to_update = int(nb_elem_to_update) |
|||
|
|||
#Domain._delete_all_domains_languages() |
|||
|
|||
while True: |
|||
domain = r_serv_onion.spop('domain_update_v3.4') |
|||
if domain is not None: |
|||
print(domain) |
|||
domain = Domain.Domain(domain) |
|||
for domain_history in domain.get_domain_history(): |
|||
domain_item = domain.get_domain_items_crawled(epoch=domain_history[1]) # item_tag |
|||
if "items" in domain_item: |
|||
for item_dict in domain_item['items']: |
|||
update_domain_language(domain, item_dict['id']) |
|||
|
|||
r_serv_db.incr('update:nb_elem_converted') |
|||
update_update_stats() |
|||
|
|||
else: |
|||
r_serv_db.set('ail:current_background_script_stat', 100) |
|||
sys.exit(0) |
|||
@ -0,0 +1,97 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
''' |
|||
Blueprint Flask: crawler splash endpoints: dashboard, onion crawler ... |
|||
''' |
|||
|
|||
import os |
|||
import sys |
|||
import json |
|||
|
|||
from flask import Flask, render_template, jsonify, request, Blueprint, redirect, url_for, Response, abort, send_file |
|||
from flask_login import login_required, current_user |
|||
|
|||
# Import Role_Manager |
|||
from Role_Manager import login_admin, login_analyst, login_read_only |
|||
|
|||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'packages')) |
|||
import Item |
|||
import Tag |
|||
|
|||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'export')) |
|||
import Export |
|||
|
|||
# ============ BLUEPRINT ============ |
|||
objects_item = Blueprint('objects_item', __name__, template_folder=os.path.join(os.environ['AIL_FLASK'], 'templates/objects/item')) |
|||
|
|||
# ============ VARIABLES ============ |
|||
bootstrap_label = ['primary', 'success', 'danger', 'warning', 'info'] |
|||
|
|||
|
|||
# ============ FUNCTIONS ============ |
|||
|
|||
|
|||
# ============= ROUTES ============== |
|||
@objects_item.route("/object/item") #completely shows the paste in a new tab |
|||
@login_required |
|||
@login_read_only |
|||
def showItem(): # # TODO: support post |
|||
item_id = request.args.get('id') |
|||
if not item_id or not Item.exist_item(item_id): |
|||
abort(404) |
|||
|
|||
dict_item = {} |
|||
dict_item['id'] = item_id |
|||
dict_item['name'] = dict_item['id'].replace('/', ' / ') |
|||
dict_item['father'] = Item.get_item_parent(item_id) |
|||
dict_item['content'] = Item.get_item_content(item_id) |
|||
dict_item['metadata'] = Item.get_item_metadata(item_id, item_content=dict_item['content']) |
|||
dict_item['tags'] = Tag.get_obj_tag(item_id) |
|||
#dict_item['duplicates'] = Item.get_item_nb_duplicates(item_id) |
|||
dict_item['duplicates'] = Item.get_item_duplicates_dict(item_id) |
|||
dict_item['crawler'] = Item.get_crawler_matadata(item_id, ltags=dict_item['tags']) |
|||
|
|||
## EXPORT SECTION |
|||
# # TODO: ADD in Export SECTION |
|||
dict_item['hive_case'] = Export.get_item_hive_cases(item_id) |
|||
|
|||
return render_template("show_item.html", bootstrap_label=bootstrap_label, |
|||
modal_add_tags=Tag.get_modal_add_tags(dict_item['id'], object_type='item'), |
|||
is_hive_connected=Export.get_item_hive_cases(item_id), |
|||
dict_item=dict_item) |
|||
|
|||
# kvrocks data |
|||
|
|||
# # TODO: dynamic load: |
|||
## duplicates |
|||
## correlations |
|||
|
|||
## Dynamic Path FIX |
|||
|
|||
@objects_item.route("/object/item/html2text") |
|||
@login_required |
|||
@login_read_only |
|||
def html2text(): # # TODO: support post |
|||
item_id = request.args.get('id') |
|||
if not item_id or not Item.exist_item(item_id): |
|||
abort(404) |
|||
return Item.get_item_content_html2text(item_id) |
|||
|
|||
@objects_item.route("/object/item/raw_content") |
|||
@login_required |
|||
@login_read_only |
|||
def item_raw_content(): # # TODO: support post |
|||
item_id = request.args.get('id') |
|||
if not item_id or not Item.exist_item(item_id): |
|||
abort(404) |
|||
return Response(Item.get_item_content(item_id), mimetype='text/plain') |
|||
|
|||
@objects_item.route("/object/item/download") |
|||
@login_required |
|||
@login_read_only |
|||
def item_download(): # # TODO: support post |
|||
item_id = request.args.get('id') |
|||
if not item_id or not Item.exist_item(item_id): |
|||
abort(404) |
|||
return send_file(Item.get_raw_content(item_id), attachment_filename=item_id, as_attachment=True) |
|||
@ -0,0 +1,34 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*-coding:UTF-8 -* |
|||
|
|||
''' |
|||
Blueprint Flask: crawler splash endpoints: dashboard, onion crawler ... |
|||
''' |
|||
|
|||
import os |
|||
import sys |
|||
import json |
|||
|
|||
from flask import Flask, render_template, jsonify, request, Blueprint, redirect, url_for, Response |
|||
from flask_login import login_required, current_user |
|||
|
|||
# Import Role_Manager |
|||
from Role_Manager import login_admin, login_analyst, login_read_only |
|||
|
|||
# ============ BLUEPRINT ============ |
|||
old_endpoints = Blueprint('old_endpoints', __name__, template_folder=os.path.join(os.environ['AIL_FLASK'], 'templates')) |
|||
|
|||
# ============ VARIABLES ============ |
|||
|
|||
|
|||
|
|||
# ============ FUNCTIONS ============ |
|||
|
|||
|
|||
# ============= ROUTES ============== |
|||
@old_endpoints.route("/showsavedpaste/") |
|||
@login_required |
|||
@login_read_only |
|||
def showsavedpaste(): |
|||
item_id = request.args.get('paste', '') |
|||
return redirect(url_for('objects_item.showItem', id=item_id)) |
|||
@ -0,0 +1,7 @@ |
|||
.hg-text{ |
|||
padding-top: 0.2em; |
|||
padding-bottom: 0.2em; |
|||
padding-right: 0.15em; |
|||
padding-left: 0.15em; |
|||
background-color: #2e5; |
|||
} |
|||
@ -0,0 +1,50 @@ |
|||
<div class="d-flex justify-content-center my-4"> |
|||
<div class="card border-secondary" style="max-width: 40rem;"> |
|||
<div class="card-body text-dark"> |
|||
<h5 class="card-title">Search Domain by name:</h5> |
|||
<div class="input-group mb-3"> |
|||
<input type="text" class="form-control" id="in_search_name" value="{{search}}" style="min-width: 30rem;" placeholder="Domain name" aria-label="Domain name" aria-describedby="btn_show_domain"> |
|||
<div class="input-group-append"> |
|||
<button class="btn btn-info" type="button" id="btn_search_name" onclick="searchDomainName()"> |
|||
<i class="fas fa-search"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="mb-3"> |
|||
<div class="custom-control custom-switch"> |
|||
<input class="custom-control-input" type="checkbox" name="domain_onion_switch" value="" id="domain_onion_switch" {%if 'onion' in domains_types or not domains_types%}checked{%endif%}> |
|||
<label class="custom-control-label" for="domain_onion_switch"> |
|||
<span class="badge badge-danger"><i class="fas fa-user-secret"></i> Onion Domains</span> |
|||
</label> |
|||
</div> |
|||
<div class="custom-control custom-switch"> |
|||
<input class="custom-control-input" type="checkbox" name="domain_regular_switch" value="True" id="domain_regular_switch"{%if 'regular' in domains_types%}checked{%endif%}> |
|||
<label class="custom-control-label" for="domain_regular_switch"> |
|||
<span class="badge badge-warning"><i class="fab fa-html5"></i> Web Domains</span> |
|||
</label> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script> |
|||
function searchDomainName() { |
|||
var all_domain_types = ['onion', 'regular'] // TODO: load from flask |
|||
var l_domains_types = []; |
|||
|
|||
console.log(document.getElementById('in_search_name')); |
|||
|
|||
var data = document.getElementById('in_search_name').value; |
|||
for (var i = 0; i < all_domain_types.length; i++) { |
|||
if (document.getElementById('domain_'+ all_domain_types[i] +'_switch').checked) { |
|||
l_domains_types.push(all_domain_types[i]) |
|||
} |
|||
} |
|||
|
|||
var parameter = "?name=" + data + "&domain_types=" + l_domains_types +"{%if page%}&page={{ page }}{%endif%}"; |
|||
window.location.href = "{{ url_for('crawler_splash.domains_search_name') }}" + parameter; |
|||
} |
|||
</script> |
|||
@ -0,0 +1,73 @@ |
|||
<div class="card mb-3 mt-1"> |
|||
<div class="card-header text-white bg-dark"> |
|||
<h5 class="card-title mb-0"> |
|||
<i class="fas fa-language" style="font-size: 1.8rem;"></i> Domains by Languages : |
|||
</h5> |
|||
</div> |
|||
<div class="card-body"> |
|||
|
|||
<div class="input-group"> |
|||
<div class="input-group-prepend"> |
|||
<button class="btn btn-outline-danger" type="button" id="button-clear" style="z-index: 1;" onclick="emptySearch()"> |
|||
<i class="fas fa-eraser"></i> |
|||
</button> |
|||
</div> |
|||
<input id="llanguages" name="llanguages" type="text" class="form-control" aria-describedby="button-clear" autocomplete="off"> |
|||
</div> |
|||
|
|||
<div class="mb-3"> |
|||
<div class="custom-control custom-switch"> |
|||
<input class="custom-control-input" type="checkbox" name="domain_onion_switch" value="" id="domain_onion_switch" {%if 'onion' in domains_types%}checked{%endif%}> |
|||
<label class="custom-control-label" for="domain_onion_switch"> |
|||
<span class="badge badge-danger"><i class="fas fa-user-secret"></i> Onion Domains</span> |
|||
</label> |
|||
</div> |
|||
<div class="custom-control custom-switch"> |
|||
<input class="custom-control-input" type="checkbox" name="domain_regular_switch" value="True" id="domain_regular_switch"{%if 'regular' in domains_types%}checked{%endif%}> |
|||
<label class="custom-control-label" for="domain_regular_switch"> |
|||
<span class="badge badge-warning"><i class="fab fa-html5"></i> Web Domains</span> |
|||
</label> |
|||
</div> |
|||
</div> |
|||
|
|||
<button class="btn btn-primary" type="button" id="button-search" onclick="searchLanguages()"> |
|||
<i class="fas fa-search"></i> Search |
|||
</button> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<link href="{{ url_for('static', filename='css/tags.css') }}" rel="stylesheet" type="text/css" /> |
|||
<script src="{{ url_for('static', filename='js/tags.js') }}"></script> |
|||
<script> |
|||
var llanguages; |
|||
$.getJSON("{{ url_for('crawler_splash.domains_all_languages_json') }}", //?object_type={{ object_type }}" |
|||
function(data) { |
|||
llanguages = $('#llanguages').tagSuggest({ |
|||
data: data, |
|||
value: [{%if current_languages%}{% for language in current_languages %}'{{language|safe}}',{%endfor%}{%endif%}], |
|||
sortOrder: 'name', |
|||
maxDropHeight: 200, |
|||
name: 'llanguages' |
|||
}); |
|||
}); |
|||
|
|||
function searchLanguages() { |
|||
var all_domain_types = ['onion', 'regular'] // TODO: load from flask |
|||
var l_domains_types = []; |
|||
|
|||
var data = llanguages.getValue(); |
|||
for (var i = 0; i < all_domain_types.length; i++) { |
|||
if (document.getElementById('domain_'+ all_domain_types[i] +'_switch').checked) { |
|||
l_domains_types.push(all_domain_types[i]) |
|||
} |
|||
} |
|||
var parameter = "?languages=" + data + "&domain_types=" + l_domains_types +"{%if page%}&page={{ page }}{%endif%}"; |
|||
window.location.href = "{{ url_for('crawler_splash.domains_search_languages_get') }}" + parameter; |
|||
} |
|||
function emptySearch() { |
|||
llanguages.clear(); |
|||
} |
|||
|
|||
</script> |
|||
@ -0,0 +1,192 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<title>Show Domain - AIL</title> |
|||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png') }}"> |
|||
<!-- Core CSS --> |
|||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet"> |
|||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet"> |
|||
<!-- JS --> |
|||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script> |
|||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script> |
|||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js') }}"></script> |
|||
|
|||
<style> |
|||
.card-columns { |
|||
column-count: 4; |
|||
} |
|||
</style> |
|||
|
|||
</head> |
|||
<body> |
|||
|
|||
{% include 'nav_bar.html' %} |
|||
|
|||
<div class="container-fluid"> |
|||
<div class="row"> |
|||
|
|||
{% include 'crawler/menu_sidebar.html' %} |
|||
|
|||
<div class="col-12 col-lg-10" id="core_content"> |
|||
|
|||
<div class="row"> |
|||
<div class="col-12 col-lg-6"> |
|||
|
|||
{% include 'domains/block_languages_search.html' %} |
|||
|
|||
|
|||
</div> |
|||
<div class="col-12 col-xl-6"> |
|||
|
|||
<div class="card my-2 border-secondary" > |
|||
<div class="card-body py-2"> |
|||
<div class="row"> |
|||
<div class="col-md-3 text-center"> |
|||
<button class="btn btn-primary" onclick="blocks.value=0;pixelate_all();"> |
|||
<i class="fas fa-eye-slash"></i> |
|||
<span class="label-icon">Hide</span> |
|||
</button> |
|||
</div> |
|||
<div class="col-md-6"> |
|||
<input class="custom-range mt-2" id="blocks" type="range" min="1" max="50" value="5"> |
|||
</div> |
|||
<div class="col-md-3 text-center"> |
|||
<button class="btn btn-primary" onclick="blocks.value=50;pixelate_all();"> |
|||
<i class="fas fa-plus-square"></i> |
|||
<span class="label-icon">Full resolution</span> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
{% with l_dict_domains=l_dict_domains['list_elem'], bootstrap_label=bootstrap_label %} |
|||
{% include 'domains/card_img_domain.html' %} |
|||
{% endwith %} |
|||
|
|||
<br> |
|||
<br> |
|||
|
|||
{%if l_dict_domains['list_elem']%} |
|||
{% with page=l_dict_domains['page'], nb_page_max=l_dict_domains['nb_pages'], nb_first_elem=l_dict_domains['nb_first_elem'], nb_last_elem=l_dict_domains['nb_last_elem'], nb_all_elem=l_dict_domains['nb_all_elem'] %} |
|||
{% set target_url=url_for('crawler_splash.domains_search_languages_get') + "?languages=" + ','.join(current_languages)%} |
|||
{%if domains_types %} |
|||
{% set target_url = target_url + '&domain_types=' + ','.join(domains_types)%} |
|||
{%endif%} |
|||
{% include 'pagination.html' %} |
|||
{% endwith %} |
|||
{%endif%} |
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
|
|||
|
|||
<script> |
|||
$(document).ready(function(){ |
|||
$('#nav_title_domains_explorer').removeClass("text-muted"); |
|||
|
|||
}); |
|||
|
|||
function toggle_sidebar(){ |
|||
if($('#nav_menu').is(':visible')){ |
|||
$('#nav_menu').hide(); |
|||
$('#side_menu').removeClass('border-right') |
|||
$('#side_menu').removeClass('col-lg-2') |
|||
$('#core_content').removeClass('col-lg-10') |
|||
}else{ |
|||
$('#nav_menu').show(); |
|||
$('#side_menu').addClass('border-right') |
|||
$('#side_menu').addClass('col-lg-2') |
|||
$('#core_content').addClass('col-lg-10') |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<script> |
|||
|
|||
// img_url |
|||
// ctx |
|||
// canevas_id |
|||
|
|||
var dict_canevas_blurr_img = {} |
|||
|
|||
function init_canevas_blurr_img(canevas_id, img_url){ |
|||
|
|||
// ctx, turn off image smoothin |
|||
dict_canevas_blurr_img[canevas_id] = {} |
|||
var canvas_container = document.getElementById(canevas_id); |
|||
var ctx = canvas_container.getContext('2d'); |
|||
ctx.webkitImageSmoothingEnabled = false; |
|||
ctx.imageSmoothingEnabled = false; |
|||
dict_canevas_blurr_img[canevas_id]["ctx"] = ctx; |
|||
|
|||
// img |
|||
dict_canevas_blurr_img[canevas_id]["img"] = new Image(); |
|||
dict_canevas_blurr_img[canevas_id]["img"].onload = function() {pixelate_img(canevas_id);}; |
|||
dict_canevas_blurr_img[canevas_id]["img"].addEventListener("error", function() {img_error(canevas_id);}); |
|||
dict_canevas_blurr_img[canevas_id]["img"].src = img_url; |
|||
} |
|||
|
|||
function pixelate_all(){ |
|||
Object.entries(dict_canevas_blurr_img).forEach(([key, value]) => { |
|||
pixelate_img(key); |
|||
}); |
|||
} |
|||
|
|||
function pixelate_img(canevas_id) { |
|||
|
|||
if (typeof canevas_id !== 'undefined') { |
|||
var canevas_to_blurr = document.getElementById(canevas_id); |
|||
|
|||
/// use slider value |
|||
if( blocks.value == 50 ){ |
|||
size = 1; |
|||
} else { |
|||
var size = (blocks.value) * 0.01; |
|||
} |
|||
|
|||
canevas_to_blurr.width = dict_canevas_blurr_img[canevas_id]["img"].width; |
|||
canevas_to_blurr.height = dict_canevas_blurr_img[canevas_id]["img"].height; |
|||
|
|||
/// cache scaled width and height |
|||
w = canevas_to_blurr.width * size; |
|||
h = canevas_to_blurr.height * size; |
|||
|
|||
/// draw original image to the scaled size |
|||
dict_canevas_blurr_img[canevas_id]["ctx"].drawImage(dict_canevas_blurr_img[canevas_id]["img"], 0, 0, w, h); |
|||
|
|||
/// pixelated |
|||
dict_canevas_blurr_img[canevas_id]["ctx"].drawImage(canevas_to_blurr, 0, 0, w, h, 0, 0, canevas_to_blurr.width, canevas_to_blurr.height); |
|||
} |
|||
|
|||
} |
|||
|
|||
function img_error(canevas_id) { |
|||
dict_canevas_blurr_img[canevas_id]["img"].onerror=null; |
|||
dict_canevas_blurr_img[canevas_id]["img"].src="{{ url_for('static', filename='image/AIL.png') }}"; |
|||
} |
|||
|
|||
blocks.addEventListener('change', pixelate_all, false); |
|||
|
|||
{% for dict_domain in l_dict_domains['list_elem'] %} |
|||
{% if 'screenshot' in dict_domain %} |
|||
{% if dict_domain['is_tags_safe'] %} |
|||
var screenshot_url = "{{ url_for('showsavedpastes.screenshot', filename="") }}{{dict_domain['screenshot']}}"; |
|||
{% else %} |
|||
var screenshot_url = "{{ url_for('static', filename='image/AIL.png') }}"; |
|||
{% endif %} |
|||
init_canevas_blurr_img("canvas_{{loop.index0}}", screenshot_url); |
|||
{% endif %} |
|||
{% endfor %} |
|||
|
|||
</script> |
|||
|
|||
</html> |
|||
@ -0,0 +1,195 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<title>Domain Search - AIL</title> |
|||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png') }}"> |
|||
<!-- Core CSS --> |
|||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet"> |
|||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet"> |
|||
<link href="{{ url_for('static', filename='css/ail-project.css') }}" rel="stylesheet"> |
|||
<!-- JS --> |
|||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script> |
|||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script> |
|||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js') }}"></script> |
|||
|
|||
<style> |
|||
.card-columns { |
|||
column-count: 4; |
|||
} |
|||
</style> |
|||
|
|||
</head> |
|||
<body> |
|||
|
|||
{% include 'nav_bar.html' %} |
|||
|
|||
<div class="container-fluid"> |
|||
<div class="row"> |
|||
|
|||
{% include 'crawler/menu_sidebar.html' %} |
|||
|
|||
<div class="col-12 col-lg-10" id="core_content"> |
|||
|
|||
<div class="row"> |
|||
<div class="col-12 col-lg-6"> |
|||
|
|||
{% with page=l_dict_domains['page'], search=l_dict_domains['search'] %} |
|||
{% include 'domains/block_domains_name_search.html' %} |
|||
{% endwith %} |
|||
|
|||
|
|||
</div> |
|||
<div class="col-12 col-xl-6"> |
|||
|
|||
<div class="card my-2 border-secondary" > |
|||
<div class="card-body py-2"> |
|||
<div class="row"> |
|||
<div class="col-md-3 text-center"> |
|||
<button class="btn btn-primary" onclick="blocks.value=0;pixelate_all();"> |
|||
<i class="fas fa-eye-slash"></i> |
|||
<span class="label-icon">Hide</span> |
|||
</button> |
|||
</div> |
|||
<div class="col-md-6"> |
|||
<input class="custom-range mt-2" id="blocks" type="range" min="1" max="50" value="5"> |
|||
</div> |
|||
<div class="col-md-3 text-center"> |
|||
<button class="btn btn-primary" onclick="blocks.value=50;pixelate_all();"> |
|||
<i class="fas fa-plus-square"></i> |
|||
<span class="label-icon">Full resolution</span> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
{% with l_dict_domains=l_dict_domains['list_elem'], bootstrap_label=bootstrap_label %} |
|||
{% include 'domains/card_img_domain.html' %} |
|||
{% endwith %} |
|||
|
|||
<br> |
|||
<br> |
|||
|
|||
{%if l_dict_domains['list_elem']%} |
|||
{% with page=l_dict_domains['page'], nb_page_max=l_dict_domains['nb_pages'], nb_first_elem=l_dict_domains['nb_first_elem'], nb_last_elem=l_dict_domains['nb_last_elem'], nb_all_elem=l_dict_domains['nb_all_elem'] %} |
|||
{% set target_url=url_for('crawler_splash.domains_search_name') + "?name=" + l_dict_domains['search']%} |
|||
{%if domains_types %} |
|||
{% set target_url = target_url + '&domain_types=' + ','.join(domains_types)%} |
|||
{%endif%} |
|||
{% include 'pagination.html' %} |
|||
{% endwith %} |
|||
{%endif%} |
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
|
|||
|
|||
<script> |
|||
$(document).ready(function(){ |
|||
$('#nav_title_domains_explorer').removeClass("text-muted"); |
|||
|
|||
}); |
|||
|
|||
function toggle_sidebar(){ |
|||
if($('#nav_menu').is(':visible')){ |
|||
$('#nav_menu').hide(); |
|||
$('#side_menu').removeClass('border-right') |
|||
$('#side_menu').removeClass('col-lg-2') |
|||
$('#core_content').removeClass('col-lg-10') |
|||
}else{ |
|||
$('#nav_menu').show(); |
|||
$('#side_menu').addClass('border-right') |
|||
$('#side_menu').addClass('col-lg-2') |
|||
$('#core_content').addClass('col-lg-10') |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
|
|||
<script> |
|||
|
|||
// img_url |
|||
// ctx |
|||
// canevas_id |
|||
|
|||
var dict_canevas_blurr_img = {} |
|||
|
|||
function init_canevas_blurr_img(canevas_id, img_url){ |
|||
|
|||
// ctx, turn off image smoothin |
|||
dict_canevas_blurr_img[canevas_id] = {} |
|||
var canvas_container = document.getElementById(canevas_id); |
|||
var ctx = canvas_container.getContext('2d'); |
|||
ctx.webkitImageSmoothingEnabled = false; |
|||
ctx.imageSmoothingEnabled = false; |
|||
dict_canevas_blurr_img[canevas_id]["ctx"] = ctx; |
|||
|
|||
// img |
|||
dict_canevas_blurr_img[canevas_id]["img"] = new Image(); |
|||
dict_canevas_blurr_img[canevas_id]["img"].onload = function() {pixelate_img(canevas_id);}; |
|||
dict_canevas_blurr_img[canevas_id]["img"].addEventListener("error", function() {img_error(canevas_id);}); |
|||
dict_canevas_blurr_img[canevas_id]["img"].src = img_url; |
|||
} |
|||
|
|||
function pixelate_all(){ |
|||
Object.entries(dict_canevas_blurr_img).forEach(([key, value]) => { |
|||
pixelate_img(key); |
|||
}); |
|||
} |
|||
|
|||
function pixelate_img(canevas_id) { |
|||
|
|||
if (typeof canevas_id !== 'undefined') { |
|||
var canevas_to_blurr = document.getElementById(canevas_id); |
|||
|
|||
/// use slider value |
|||
if( blocks.value == 50 ){ |
|||
size = 1; |
|||
} else { |
|||
var size = (blocks.value) * 0.01; |
|||
} |
|||
|
|||
canevas_to_blurr.width = dict_canevas_blurr_img[canevas_id]["img"].width; |
|||
canevas_to_blurr.height = dict_canevas_blurr_img[canevas_id]["img"].height; |
|||
|
|||
/// cache scaled width and height |
|||
w = canevas_to_blurr.width * size; |
|||
h = canevas_to_blurr.height * size; |
|||
|
|||
/// draw original image to the scaled size |
|||
dict_canevas_blurr_img[canevas_id]["ctx"].drawImage(dict_canevas_blurr_img[canevas_id]["img"], 0, 0, w, h); |
|||
|
|||
/// pixelated |
|||
dict_canevas_blurr_img[canevas_id]["ctx"].drawImage(canevas_to_blurr, 0, 0, w, h, 0, 0, canevas_to_blurr.width, canevas_to_blurr.height); |
|||
} |
|||
|
|||
} |
|||
|
|||
function img_error(canevas_id) { |
|||
dict_canevas_blurr_img[canevas_id]["img"].onerror=null; |
|||
dict_canevas_blurr_img[canevas_id]["img"].src="{{ url_for('static', filename='image/AIL.png') }}"; |
|||
} |
|||
|
|||
blocks.addEventListener('change', pixelate_all, false); |
|||
|
|||
{% for dict_domain in l_dict_domains['list_elem'] %} |
|||
{% if 'screenshot' in dict_domain %} |
|||
{% if dict_domain['is_tags_safe'] %} |
|||
var screenshot_url = "{{ url_for('showsavedpastes.screenshot', filename="") }}{{dict_domain['screenshot']}}"; |
|||
{% else %} |
|||
var screenshot_url = "{{ url_for('static', filename='image/AIL.png') }}"; |
|||
{% endif %} |
|||
init_canevas_blurr_img("canvas_{{loop.index0}}", screenshot_url); |
|||
{% endif %} |
|||
{% endfor %} |
|||
|
|||
</script> |
|||
|
|||
</html> |
|||
@ -0,0 +1,120 @@ |
|||
<div id="create_hive_case_modal" class="modal fade" role="dialog"> |
|||
<div class="modal-dialog modal-lg"> |
|||
|
|||
<div id="create_hive_case_modal_content" class="modal-content"> |
|||
<div class="modal-header justify-content-center"> |
|||
<img id="hive-logo" src="{{url_for('static', filename='image/thehive-logo.png') }}" width="500" > |
|||
</div> |
|||
|
|||
<div class="modal-body"> |
|||
|
|||
<form method="post" action="{{ url_for('PasteSubmit.create_hive_case') }}" target="_blank"> |
|||
|
|||
<div class="input clear required"> |
|||
<label for="EventThreatLevelId">Threat Level</label> |
|||
<select name="threat_level_hive" id="EventThreatLevelId" required="required"> |
|||
<option value="1">High</option> |
|||
<option value="2" selected="selected">Medium</option> |
|||
<option value="3">Low</option> |
|||
</select> |
|||
</div> |
|||
<div class="input select required"> |
|||
<label for="TLP">TLP</label> |
|||
<select name="hive_tlp" id="hive_tlp" required="required" class="selectpicker"> |
|||
<option value="0">White</option> |
|||
<option value="1">Green</option> |
|||
<option value="2" selected="selected">Amber</option> |
|||
<option value="3">Red</option> |
|||
</select> |
|||
</div> |
|||
<div class="clear required"> |
|||
<label for="hive_case_title">Title</label> |
|||
<input name="hive_case_title" class="form-control span6" placeholder="Title" type="text" id="hive_case_title" required="required"/> |
|||
</div> |
|||
<div class="clear required"> |
|||
<label for="hive_description">Description</label> |
|||
<input name="hive_description" class="form-control span6" placeholder="Quick Case Description" type="text" id="hive_description" required="required"/> |
|||
</div> |
|||
<input type="hidden" id="paste" name="paste" value="{{ dict_item['id'] }}"> |
|||
|
|||
|
|||
|
|||
</div> |
|||
|
|||
<div class="modal-footer"> |
|||
<button class="btn btn-primary" type="submit"> |
|||
<i class="fas fa-plus"></i> |
|||
Create Case |
|||
</button> |
|||
|
|||
</form> |
|||
<button type="button" class="btn btn-default" data-dismiss="modal" >Close</button> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script> // TODO: add tags to PASTE or DOMAIN |
|||
var ltags; |
|||
var ltagsgalaxies; |
|||
|
|||
$.getJSON("{{ url_for('Tags.get_all_tags_taxonomies') }}", |
|||
function(data) { |
|||
|
|||
ltags = $('#ltags').tagSuggest({ |
|||
data: data, |
|||
maxDropHeight: 200, |
|||
name: 'ltags' |
|||
}); |
|||
}); |
|||
|
|||
$.getJSON("{{ url_for('Tags.get_all_tags_galaxy') }}", |
|||
function(data) { |
|||
|
|||
ltagsgalaxies = $('#ltagsgalaxies').tagSuggest({ |
|||
data: data, |
|||
maxDropHeight: 200, |
|||
name: 'ltagsgalaxies' |
|||
}); |
|||
}); |
|||
|
|||
jQuery("#all-tags-taxonomies").click(function(e){ |
|||
//change input tags list |
|||
$.getJSON("{{ url_for('Tags.get_all_tags_taxonomies') }}", |
|||
function(data) { |
|||
ltags.setData(data) |
|||
}); |
|||
}); |
|||
|
|||
jQuery("#all-tags-galaxies").click(function(e){ |
|||
$.getJSON("{{ url_for('Tags.get_all_tags_galaxy') }}", |
|||
function(data) { |
|||
ltagsgalaxies.setData(data) |
|||
}); |
|||
}); |
|||
|
|||
{% for taxo in modal_add_tags['active_taxonomies'] %} |
|||
jQuery("#{{ taxo }}-id{{ loop.index0 }}").click(function(e){ |
|||
$.getJSON("{{ url_for('Tags.get_tags_taxonomie') }}?taxonomie={{ taxo }}", |
|||
function(data) { |
|||
ltags.setData(data) |
|||
}); |
|||
}); |
|||
{% endfor %} |
|||
|
|||
{% for galaxy in modal_add_tags['active_galaxies'] %} |
|||
jQuery("#{{ galaxy }}-idgalax{{ loop.index0 }}").click(function(e){ |
|||
$.getJSON("{{ url_for('Tags.get_tags_galaxy') }}?galaxy={{ galaxy }}", |
|||
function(data) { |
|||
ltagsgalaxies.setData(data) |
|||
}); |
|||
}); |
|||
{% endfor %} |
|||
|
|||
function addTags() { |
|||
var tags = ltags.getValue() |
|||
var tagsgalaxy = ltagsgalaxies.getValue() |
|||
window.location.replace("{{ url_for('tags_ui.add_tags') }}?tags=" + tags + "&tagsgalaxies=" + tagsgalaxy + "&object_id={{ modal_add_tags['object_id'] }}&object_type={{ modal_add_tags['object_type'] }}"); |
|||
} |
|||
</script> |
|||
@ -0,0 +1,446 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<title>Show Item Object - AIL</title> |
|||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png') }}"> |
|||
<meta charset="utf-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
|
|||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet"> |
|||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet"> |
|||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet"> |
|||
<link href="{{ url_for('static', filename='css/tags.css') }}" rel="stylesheet" type="text/css" /> |
|||
|
|||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script> |
|||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script> |
|||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js') }}"></script> |
|||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js') }}"></script> |
|||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js') }}"></script> |
|||
<script src="{{ url_for('static', filename='js/tags.js') }}"></script> |
|||
|
|||
<style> |
|||
.rotate{ |
|||
-moz-transition: all 0.1s linear; |
|||
-webkit-transition: all 0.1s linear; |
|||
transition: all 0.1s linear; |
|||
} |
|||
|
|||
.rotate.down{ |
|||
-moz-transform:rotate(180deg); |
|||
-webkit-transform:rotate(180deg); |
|||
transform:rotate(180deg); |
|||
} |
|||
</style> |
|||
|
|||
</head> |
|||
<body> |
|||
{% include 'nav_bar.html' %} |
|||
|
|||
<div class="card my-2 mx-2"> |
|||
<div class="card-header bg-dark"> |
|||
<h3 class="text-white text-center" >{{ dict_item['name'] }}</h3> |
|||
</div> |
|||
<div class="card-body pb-1"> |
|||
<table class="table table-condensed"> |
|||
<thead class=""> |
|||
<tr> |
|||
<th>Date</th> |
|||
<th>Source</th> |
|||
<th>Encoding</th> |
|||
<th>Size (Kb)</th> |
|||
<th>Number of lines</th> |
|||
<th>Max line length</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td>{{ dict_item['metadata']['date'] }}</td> |
|||
<td>{{ dict_item['metadata']['source'] }}</td> |
|||
<td>{{ dict_item['metadata']['encoding'] }}</td> |
|||
<td>{{ dict_item['metadata']['size'] }}</td> |
|||
<td>{{ dict_item['metadata']['lines']['nb'] }}</td> |
|||
<td>{{ dict_item['metadata']['lines']['max_length'] }}</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div> |
|||
<h5> |
|||
<div> |
|||
{% include 'modals/edit_tag.html' %} |
|||
{% for tag in dict_item['tags'] %} |
|||
<button class="btn btn-{{ bootstrap_label[loop.index0 % 5] }}" data-toggle="modal" data-target="#edit_tags_modal" |
|||
data-tagid="{{ tag }}" data-objtype="item" data-objid="{{ dict_item['id'] }}"> |
|||
{{ tag }} |
|||
</button> |
|||
|
|||
{% endfor %} |
|||
<br> |
|||
{% include 'modals/add_tags.html' %} |
|||
<button type="button" class="btn btn-light" data-toggle="modal" data-target="#add_tags_modal"> |
|||
<i class="far fa-plus-square"></i> |
|||
</button> |
|||
</div> |
|||
</h5> |
|||
</div> |
|||
|
|||
{% if dict_item['father'] %} |
|||
<div class="mt-3"> |
|||
Father: <a href="{{ url_for('objects_item.showItem')}}?id={{dict_item['father']}}" target="_blank">{{dict_item['father']}}</a> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
<div class="d-flex flex-row-reverse bd-highlight"> |
|||
<div> |
|||
<a href="{{ url_for('correlation.show_correlation')}}?object_type=paste&correlation_id={{ dict_item['id'] }}&correlation_objects=paste" target="_blank"> |
|||
<button class="btn btn-lg btn-info"><i class="fas fa-project-diagram"></i> Correlations Graph |
|||
</button> |
|||
</a> |
|||
</div> |
|||
<div class="mx-2"> |
|||
{% with obj_type='item', obj_id=dict_item['id'], obj_lvl=0%} |
|||
{% include 'import_export/block_add_user_object_to_export.html' %} |
|||
{% endwith %} |
|||
</div> |
|||
{% if is_hive_connected %} |
|||
<div> |
|||
{% include 'modals/create_hive_case.html' %} |
|||
<button type="button" class="btn btn-lg btn-outline-dark mx-1" data-toggle="modal" data-target="#create_hive_case_modal"> |
|||
Create |
|||
<img id="thehive-icon" src="{{url_for('static', filename='image/thehive_icon.png') }}"> |
|||
Case |
|||
</button> |
|||
</div> |
|||
{% endif %} |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
{% if misp_eventid %} |
|||
<div class="list-group" id="misp_event"> |
|||
<li class="list-group-item active">MISP Events already Created</li> |
|||
<a target="_blank" href="{{ misp_url }}" class="list-group-item">{{ misp_url }}</a> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
{% if dict_item['hive_case'] %} |
|||
<div class="list-group" id="misp_event"> |
|||
<li class="list-group-item active">The Hive Case already Created</li> |
|||
<a target="_blank" href="{{ hive_url }}" class="list-group-item">{{ hive_url }}</a> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
{% if dict_item['duplicates'] != 0 %} |
|||
<div id="accordionDuplicate" class="mb-2 mx-3"> |
|||
<div class="card"> |
|||
<div class="card-header py-1" id="headingDuplicate"> |
|||
<div class="row"> |
|||
<div class="col-11"> |
|||
<div class="mt-2"> |
|||
<i class="far fa-clone"></i> duplicates |
|||
<div class="badge badge-warning">{{dict_item['duplicates']|length}}</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-1"> |
|||
<button class="btn btn-link btn-lg py-2 float-right rotate" data-toggle="collapse" data-target="#collapseDuplicate" aria-expanded="true" aria-controls="collapseDuplicate"> |
|||
<i class="fas fa-chevron-circle-down"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div id="collapseDuplicate" class="collapse" aria-labelledby="headingDuplicate" data-parent="#accordionDuplicate"> |
|||
<div class="card-body"> |
|||
|
|||
<table class="table" id="tableDup"> |
|||
<thead class="thead-dark"> |
|||
<tr> |
|||
<th>Date</th> |
|||
<th>Similarity</th> |
|||
<th>Item</th> |
|||
<th>Diff</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for duplicate_id in dict_item['duplicates'] %} |
|||
<tr> |
|||
<td>{{dict_item['duplicates'][duplicate_id]['date']}}</td> |
|||
<td class="py-0"> |
|||
<table class="table table-borderless table-sm my-0"> |
|||
<tbody> |
|||
{%for algo in dict_item['duplicates'][duplicate_id]['algo']|sort()%} |
|||
<tr> |
|||
<td class="py-0">{{algo}}</td> |
|||
<td class="w-100 py-0"> |
|||
<div class="progress mt-1"> |
|||
<div class="progress-bar progress-bar-striped {%if algo=='tlsh'%}bg-secondary{%endif%}" role="progressbar" style="width: {{dict_item['duplicates'][duplicate_id]['algo'][algo]}}%;" aria-valuenow="{{dict_item['duplicates'][duplicate_id]['algo'][algo]}}" aria-valuemin="0" aria-valuemax="100"> |
|||
{{dict_item['duplicates'][duplicate_id]['algo'][algo]}}% |
|||
</div> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
{%endfor%} |
|||
</tbody> |
|||
</table> |
|||
</td> |
|||
<td> |
|||
<a href="{{ url_for('objects_item.showItem')}}?id={{duplicate_id}}" target="_blank"> |
|||
{{duplicate_id}} |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<a target="_blank" href="{{ url_for('showsavedpastes.showDiff') }}?s1={{dict_item['id']}}&s2={{duplicate_id}}" class="fa fa-columns" title="Show diff"></a> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
|
|||
{% if l_64|length != 0 %} |
|||
<div id="accordionDecoded" class="mb-3"> |
|||
<div class="card"> |
|||
<div class="card-header py-1" id="headingDecoded"> |
|||
<div class="row"> |
|||
<div class="col-11"> |
|||
<div class="mt-2"> |
|||
<i class="fas fa-lock-open"></i> Decoded Files |
|||
<div class="badge badge-warning">{{l_64|length}}</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-1"> |
|||
<button class="btn btn-link py-2 float-right rotate" data-toggle="collapse" data-target="#collapseDecoded" aria-expanded="true" aria-controls="collapseDecoded"> |
|||
<i class="fas fa-chevron-circle-down"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div id="collapseDecoded" class="collapse show" aria-labelledby="headingDecoded" data-parent="#accordionDecoded"> |
|||
<div class="card-body"> |
|||
|
|||
<table id="tableb64" class="red_table table table-striped"> |
|||
<thead> |
|||
<tr> |
|||
<th>estimated type</th> |
|||
<th>hash</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for b64 in l_64 %} |
|||
<tr> |
|||
<td><i class="fas {{ b64[0] }}"></i> {{ b64[1] }}</td> |
|||
<td><a target="_blank" href="{{ url_for('correlation.show_correlation') }}?object_type=decoded&correlation_id={{ b64[2] }}&correlation_objects=paste"</a> {{b64[2]}} ({{ b64[4] }})</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
|
|||
{% if dict_item['crawler'] %} |
|||
<div id="accordionCrawler" class="mb-3 mx-3"> |
|||
<div class="card"> |
|||
<div class="card-header py-1" id="headingCrawler"> |
|||
<div class="row"> |
|||
<div class="col-11"> |
|||
<div class="mt-2"> |
|||
<i class="fas fa-spider"></i> Crawler |
|||
</div> |
|||
</div> |
|||
<div class="col-1"> |
|||
<button class="btn btn-link btn-lg py-2 float-right rotate down" data-toggle="collapse" data-target="#collapseCrawler" aria-expanded="true" aria-controls="collapseCrawler"> |
|||
<i class="fas fa-chevron-circle-down"></i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div id="collapseCrawler" class="collapse show" aria-labelledby="headingCrawler" data-parent="#accordionCrawler"> |
|||
|
|||
<div class="row mx-0"> |
|||
|
|||
<div class="col-md-5"> |
|||
<div class="my-2"> |
|||
<table class="table table-sm"> |
|||
<thead> |
|||
<td></td> |
|||
<td>Last Origin:</td> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td><i class="far fa-file"></i></td> |
|||
<td> |
|||
<a class="badge" target="_blank" href="{{ url_for('objects_item.showItem', paste=dict_item['father']) }}" />{{ dict_item['father'] }}</a> |
|||
</td> |
|||
</tr> |
|||
<td><i class="fab fa-html5"></i></td> |
|||
<td> |
|||
<a class="badge" target="_blank" href="{{ url_for('crawler_splash.showDomain', domain=dict_item['crawler']['domain']) }}" />{{ dict_item['crawler']['domain'] }}</a> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td>url</td> |
|||
<td> |
|||
{{ dict_item['crawler']['url'] }} |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-md-7"> |
|||
<div class="card my-2" style="background-color:#ecf0f1;"> |
|||
<div class="card-body py-2"> |
|||
<div class="row"> |
|||
<div class="col-md-8"> |
|||
<input class="custom-range mt-2" id="blocks" type="range" min="1" max="50" value="{%if dict_item['crawler']['is_tags_safe']%}13{%else%}0{%endif%}"> |
|||
</div> |
|||
<div class="col-md-4"> |
|||
<button class="btn {%if dict_item['crawler']['is_tags_safe']%}btn-primary{%else%}btn-danger{%endif%}" onclick="blocks.value=50;pixelate();"> |
|||
{%if dict_item['crawler']['is_tags_safe']%} |
|||
<i class="fas fas fa-plus-square"></i> |
|||
{%else%} |
|||
<i class="fas fa-exclamation-triangle"></i> |
|||
{%endif%} |
|||
<span class="label-icon">Full resolution</span> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<canvas id="canvas" style="width:100%;"></canvas> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
|
|||
<!-- nav-pills nav-justified nav-tabs--> |
|||
|
|||
<div class="card"> |
|||
<div class="card-body pt-0 py-1 px-2"> |
|||
|
|||
<ul class="nav nav-pills" id="pills-tab" role="tablist"> |
|||
<li class="nav-item"> |
|||
<a class="nav-link active" id="pills-content-tab" data-toggle="pill" href="#pills-content" role="tab" aria-controls="pills-content" aria-selected="true">Content</a> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<a class="nav-link" id="pills-html2text-tab" data-toggle="pill" href="#pills-html2text" role="tab" aria-controls="pills-html2text" aria-selected="false">html2text</a> |
|||
</li> |
|||
<li class="nav-item dropdown"> |
|||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Others</a> |
|||
<div class="dropdown-menu"> |
|||
<a class="dropdown-item" href="{{ url_for('objects_item.item_raw_content', id=dict_item['id']) }}"><i class="far fa-file"></i> Raw Content</a> |
|||
<a class="dropdown-item" href="{{ url_for('objects_item.item_download', id=dict_item['id']) }}"><i class="fas fa-download"></i> Download</i></a> |
|||
</div> |
|||
</li> |
|||
</ul> |
|||
|
|||
|
|||
<div class="tab-content" id="pills-tabContent"> |
|||
<div class="tab-pane fade show active" id="pills-content" role="tabpanel" aria-labelledby="pills-content-tab"> |
|||
<p class="my-0"> <pre class="border">{{ dict_item['content'] }}</pre></p> |
|||
</div> |
|||
<div class="tab-pane fade" id="pills-html2text" role="tabpanel" aria-labelledby="pills-html2text-tab"> |
|||
<p class="my-0"> <pre id="html2text-container" class="border"></pre></p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script> |
|||
var ltags |
|||
var ltagsgalaxies |
|||
$(document).ready(function(){ |
|||
$('#tableDup').DataTable(); |
|||
// $('#tableb64').DataTable({ |
|||
// "aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]], |
|||
// "iDisplayLength": 5, |
|||
// "order": [[ 1, "asc" ]] |
|||
// }); |
|||
$(".rotate").click(function(){ |
|||
$(this).toggleClass("down") ; |
|||
}) |
|||
}); |
|||
|
|||
$('#pills-html2text-tab').on('shown.bs.tab', function (e) { |
|||
if ($('#html2text-container').is(':empty')){ |
|||
$.get("{{ url_for('objects_item.html2text') }}?id={{ dict_item['id'] }}").done(function(data){ |
|||
$('#html2text-container').text(data); |
|||
}); |
|||
|
|||
} |
|||
}); |
|||
</script> |
|||
|
|||
{% if dict_item['crawler'] %} |
|||
<script> |
|||
var ctx = canvas.getContext('2d'), img = new Image(); |
|||
|
|||
/// turn off image smoothing |
|||
ctx.webkitImageSmoothingEnabled = false; |
|||
ctx.imageSmoothingEnabled = false; |
|||
|
|||
img.onload = pixelate; |
|||
img.addEventListener("error", img_error); |
|||
var draw_img = false; |
|||
|
|||
img.src = "{{ url_for('showsavedpastes.screenshot', filename=dict_item['crawler']['screenshot']) }}"; |
|||
|
|||
function pixelate() { |
|||
|
|||
/// use slider value |
|||
if( blocks.value == 50 ){ |
|||
size = 1; |
|||
} else { |
|||
var size = (blocks.value) * 0.01; |
|||
} |
|||
|
|||
canvas.width = img.width; |
|||
canvas.height = img.height; |
|||
|
|||
/// cache scaled width and height |
|||
w = canvas.width * size; |
|||
h = canvas.height * size; |
|||
|
|||
/// draw original image to the scaled size |
|||
ctx.drawImage(img, 0, 0, w, h); |
|||
|
|||
/// pixelated |
|||
ctx.drawImage(canvas, 0, 0, w, h, 0, 0, canvas.width, canvas.height); |
|||
|
|||
} |
|||
|
|||
function img_error() { |
|||
img.onerror=null; |
|||
img.src="{{ url_for('static', filename='image/AIL.png') }}"; |
|||
blocks.value = 50; |
|||
pixelate; |
|||
} |
|||
|
|||
blocks.addEventListener('change', pixelate, false); |
|||
</script> |
|||
{% endif %} |
|||
|
|||
</body> |
|||
|
|||
|
|||
</html> |
|||
쓰기
미리보기
불러오는 중...
취소
저장
Reference in new issue