Spaces:
Sleeping
Sleeping
File size: 31,115 Bytes
d5e86a3 362c11a 10fb061 0efc6d0 362c11a 80583a7 c154d30 0ecc366 2212fb0 d5e86a3 0efc6d0 a7e37bd 0efc6d0 0ecc366 a7e37bd 9cac03a be9bd12 9cac03a 0ecc366 be9bd12 0ecc366 9cac03a 0ecc366 be9bd12 a7e37bd be9bd12 e384056 be9bd12 93e3b9c be9bd12 e384056 be9bd12 c154d30 be9bd12 eb2dfe7 be9bd12 0efc6d0 be9bd12 0ecc366 be9bd12 0efc6d0 e384056 0efc6d0 be9bd12 0efc6d0 a0ece88 0efc6d0 e384056 0efc6d0 a0ece88 be9bd12 0efc6d0 be9bd12 0efc6d0 e384056 be9bd12 a0ece88 be9bd12 a0ece88 0efc6d0 be9bd12 0efc6d0 be9bd12 0efc6d0 be9bd12 0efc6d0 be9bd12 0efc6d0 be9bd12 0efc6d0 be9bd12 0efc6d0 47ec987 0efc6d0 47ec987 0efc6d0 be9bd12 0efc6d0 90ae917 be9bd12 a0ece88 be9bd12 a0ece88 be9bd12 a0ece88 be9bd12 0ecc366 be9bd12 eb2dfe7 8345dc8 be9bd12 8345dc8 be9bd12 80583a7 a7e37bd be9bd12 eb2dfe7 a0ece88 be9bd12 a0ece88 be9bd12 0ecc366 be9bd12 0ecc366 a0ece88 be9bd12 a0ece88 be9bd12 9cac03a be9bd12 93e3b9c a0ece88 be9bd12 93e3b9c a0ece88 be9bd12 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 |
import streamlit as st
from utils.functions import (
get_phone_info,
simple_checks,
analyze_message,
update_stats,
add_to_history,
is_fake_number,
add_fake_number,
get_email_info,
analyze_url,
extract_text_from_image,
get_analysis_history,
get_statistics
)
import os
import re
import requests
from phonenumbers import parse, is_valid_number, NumberParseException
def extract_urls(text):
url_pattern = re.compile(r'(https?://[^\s]+)|(www\.[^\s]+)')
urls = url_pattern.findall(text)
urls = [url[0] or url[1] for url in urls]
return urls
def check_urls_with_phishtank(urls):
phishing_urls = []
for url in urls:
params = {'format': 'json', 'url': url}
try:
response = requests.post('https://checkurl.phishtank.com/checkurl/', data=params)
if response.status_code == 200:
data = response.json()
in_database = data.get('results', {}).get('in_database', False)
valid = data.get('results', {}).get('valid', False)
if in_database and valid:
phishing_urls.append(url)
else:
st.warning(f"Błąd podczas sprawdzania URL w PhishTank: {response.status_code}")
except Exception as e:
st.error(f"Błąd podczas sprawdzania URL w PhishTank: {e}")
return phishing_urls
def check_urls_with_safe_browsing(urls):
api_key = os.getenv('GOOGLE_SAFE_BROWSING_API_KEY')
if not api_key:
return None
unsafe_urls = []
headers = {'Content-Type': 'application/json'}
client_body = {
'client': {
'clientId': 'yourcompanyname',
'clientVersion': '1.0'
},
'threatInfo': {
'threatTypes': ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"],
'platformTypes': ["ANY_PLATFORM"],
'threatEntryTypes': ["URL"],
'threatEntries': [{'url': url} for url in urls]
}
}
try:
response = requests.post(
f'https://safebrowsing.googleapis.com/v4/threatMatches:find?key={api_key}',
headers=headers,
json=client_body
)
if response.status_code == 200:
data = response.json()
matches = data.get('matches', [])
unsafe_urls = [match['threat']['url'] for match in matches]
else:
st.error(f"Błąd podczas komunikacji z Google Safe Browsing API: {response.status_code}")
except Exception as e:
st.error(f"Błąd podczas sprawdzania URL w Google Safe Browsing: {e}")
return unsafe_urls
def analyze_sms(message, phone_number, additional_info, language):
st.subheader(get_translation('sms_analysis_header', language))
# Informacje o numerze telefonu
country, operator = get_phone_info(phone_number)
if country and operator:
st.write(get_translation('phone_info', language))
st.write(f"- **{get_translation('country_label', language)}:** {country}")
st.write(f"- **{get_translation('operator_label', language)}:** {operator}")
else:
st.write(get_translation('unable_to_retrieve', language))
# Sprawdzenie, czy numer jest w bazie fałszywych numerów
fraud_detected = is_fake_number(phone_number)
if fraud_detected:
st.warning(get_translation('number_reported_warning', language))
# Przeprowadź proste sprawdzenia heurystyczne
warnings = simple_checks(message, language)
if warnings:
st.warning(get_translation('red_flags_found', language))
for warn in warnings:
st.write(f"- {warn}")
# Analiza URL
urls = extract_urls(message)
if urls:
st.subheader(get_translation('url_analysis_header', language))
st.write(get_translation('extracted_urls', language))
for url in urls:
st.write(f"- {url}")
# Sprawdzanie URL w PhishTank
phishing_urls_phishtank = check_urls_with_phishtank(urls)
if phishing_urls_phishtank:
st.warning(get_translation('phishtank_warning', language))
for url in phishing_urls_phishtank:
st.write(f"- {url}")
else:
st.write(get_translation('no_phishtank_threats', language))
# Sprawdzanie URL w Google Safe Browsing
phishing_urls_safe_browsing = check_urls_with_safe_browsing(urls)
if phishing_urls_safe_browsing is None:
st.warning(get_translation('api_key_missing', language).format('Google Safe Browsing'))
elif phishing_urls_safe_browsing:
st.warning(get_translation('safe_browsing_warning', language))
for url in phishing_urls_safe_browsing:
st.write(f"- {url}")
else:
st.write(get_translation('no_safe_browsing_threats', language))
else:
st.write(get_translation('no_urls_found', language))
# Analiza wiadomości z użyciem modelu AI
api_key = os.getenv('SAMBANOVA_API_KEY')
if not api_key:
st.error(get_translation('api_key_missing', language).format('SambaNova'))
else:
with st.spinner(get_translation('analyzing_message', language)):
try:
analysis_text, risk_text, recommendations_text = analyze_message(
message, phone_number, additional_info, api_key, language
)
st.subheader(get_translation('message_analysis_header', language))
st.markdown(analysis_text)
st.subheader(get_translation('risk_assessment_header', language))
st.markdown(risk_text)
st.subheader(get_translation('user_recommendations_header', language))
st.markdown(recommendations_text)
# Aktualizacja statystyk na podstawie oceny ryzyka
try:
match = re.search(r'(\d+)/10', risk_text)
fraud_detected = int(match.group(1)) >= 7 if match else fraud_detected
update_stats(fraud_detected=fraud_detected)
except Exception as e:
st.error(f"Błąd podczas aktualizacji statystyk: {e}")
# Dodanie analizy do historii
add_to_history(message, phone_number, analysis_text, risk_text, recommendations_text)
except Exception as e:
st.error(f"Błąd podczas analizy wiadomości: {e}")
st.info(get_translation('remember_caution', language))
# Zgłoszenie numeru jako oszustwo
if fraud_detected:
if st.button(get_translation('report_button', language)):
try:
parsed_number = parse(phone_number, None)
if is_valid_number(parsed_number):
success = add_fake_number(phone_number)
if success:
st.success(get_translation('number_reported', language))
else:
st.info(get_translation('number_already_reported', language))
else:
st.error(get_translation('invalid_number', language))
except NumberParseException:
st.error(get_translation('failed_to_parse', language))
def analyze_email(email_content, sender_email, language):
st.subheader(get_translation('email_analysis_header', language))
# Informacje o adresie e-mail nadawcy
domain_info = get_email_info(sender_email)
if domain_info:
st.write(get_translation('email_sender_info', language))
st.write(f"- **{get_translation('domain_label', language)}:** {domain_info['domain']}")
st.write(f"- **{get_translation('organization_label', language)}:** {domain_info['organization']}")
st.write(f"- **{get_translation('country_label', language)}:** {domain_info['country']}")
else:
st.write(get_translation('unable_to_retrieve_email', language))
# Przeprowadź proste sprawdzenia heurystyczne
warnings = simple_checks(email_content, language)
if warnings:
st.warning(get_translation('red_flags_found', language))
for warn in warnings:
st.write(f"- {warn}")
# Analiza URL
urls = extract_urls(email_content)
if urls:
st.subheader(get_translation('url_analysis_header', language))
st.write(get_translation('extracted_urls', language))
for url in urls:
st.write(f"- {url}")
# Sprawdzanie URL w PhishTank
phishing_urls_phishtank = check_urls_with_phishtank(urls)
if phishing_urls_phishtank:
st.warning(get_translation('phishtank_warning', language))
for url in phishing_urls_phishtank:
st.write(f"- {url}")
else:
st.write(get_translation('no_phishtank_threats', language))
# Sprawdzanie URL w Google Safe Browsing
phishing_urls_safe_browsing = check_urls_with_safe_browsing(urls)
if phishing_urls_safe_browsing is None:
st.warning(get_translation('api_key_missing', language).format('Google Safe Browsing'))
elif phishing_urls_safe_browsing:
st.warning(get_translation('safe_browsing_warning', language))
for url in phishing_urls_safe_browsing:
st.write(f"- {url}")
else:
st.write(get_translation('no_safe_browsing_threats', language))
else:
st.write(get_translation('no_urls_found', language))
# Analiza wiadomości z użyciem modelu AI
api_key = os.getenv('SAMBANOVA_API_KEY')
if not api_key:
st.error(get_translation('api_key_missing', language).format('SambaNova'))
else:
with st.spinner(get_translation('analyzing_message', language)):
try:
analysis_text, risk_text, recommendations_text = analyze_message(
email_content, sender_email, "", api_key, language
)
st.subheader(get_translation('message_analysis_header', language))
st.markdown(analysis_text)
st.subheader(get_translation('risk_assessment_header', language))
st.markdown(risk_text)
st.subheader(get_translation('user_recommendations_header', language))
st.markdown(recommendations_text)
# Aktualizacja statystyk na podstawie oceny ryzyka
try:
match = re.search(r'(\d+)/10', risk_text)
fraud_detected = int(match.group(1)) >= 7 if match else False
update_stats(fraud_detected=fraud_detected)
except Exception as e:
st.error(f"Błąd podczas aktualizacji statystyk: {e}")
# Dodanie analizy do historii
add_to_history(email_content, sender_email, analysis_text, risk_text, recommendations_text)
except Exception as e:
st.error(f"Błąd podczas analizy wiadomości: {e}")
st.info(get_translation('remember_caution', language))
def analyze_website(url, language):
st.subheader(get_translation('website_analysis_header', language))
# Sprawdzanie URL w PhishTank
phishing_urls_phishtank = check_urls_with_phishtank([url])
if phishing_urls_phishtank:
st.warning(get_translation('phishtank_warning', language))
st.write(f"- {url}")
else:
st.write(get_translation('no_phishtank_threats', language))
# Sprawdzanie URL w Google Safe Browsing
phishing_urls_safe_browsing = check_urls_with_safe_browsing([url])
if phishing_urls_safe_browsing is None:
st.warning(get_translation('api_key_missing', language).format('Google Safe Browsing'))
elif phishing_urls_safe_browsing:
st.warning(get_translation('safe_browsing_warning', language))
st.write(f"- {url}")
else:
st.write(get_translation('no_safe_browsing_threats', language))
# Analiza treści strony
try:
page_content = analyze_url(url)
st.subheader(get_translation('website_content_analysis', language))
st.write(page_content)
except Exception as e:
st.error(f"Błąd podczas pobierania zawartości strony: {e}")
def analyze_phone_number(phone_number, language):
st.subheader(get_translation('phone_number_analysis_header', language))
# Informacje o numerze telefonu
country, operator = get_phone_info(phone_number)
if country and operator:
st.write(get_translation('phone_info', language))
st.write(f"- **{get_translation('country_label', language)}:** {country}")
st.write(f"- **{get_translation('operator_label', language)}:** {operator}")
else:
st.write(get_translation('unable_to_retrieve', language))
# Sprawdzenie, czy numer jest w bazie fałszywych numerów
if is_fake_number(phone_number):
st.warning(get_translation('number_reported_warning', language))
else:
st.info(get_translation('number_not_reported', language))
def analyze_image(image_file, language):
st.subheader(get_translation('image_analysis_header', language))
# Wyświetlenie obrazu
st.image(image_file)
# Ekstrakcja tekstu z obrazu
try:
extracted_text = extract_text_from_image(image_file)
st.write(get_translation('extracted_text', language))
st.write(extracted_text)
# Analiza wyodrębnionego tekstu
analyze_sms(extracted_text, "", "", language)
except Exception as e:
st.error(f"Błąd podczas analizy obrazu: {e}")
def show_history(language):
st.subheader(get_translation('history_header', language))
# Zakładamy, że funkcja `get_analysis_history` zwraca listę analiz
history = get_analysis_history()
if history:
for record in history:
st.write(f"**{get_translation('date_label', language)}:** {record['date']}")
st.write(f"**{get_translation('analysis_type_label', language)}:** {record['type']}")
st.write(f"**{get_translation('details_label', language)}:** {record['details']}")
st.markdown("---")
else:
st.write(get_translation('no_history', language))
def show_statistics(language):
st.subheader(get_translation('statistics_header', language))
# Zakładamy, że funkcja `get_statistics` zwraca słownik ze statystykami
stats = get_statistics()
st.write(f"{get_translation('total_analyses', language)}: **{stats['total']}**")
st.write(f"{get_translation('fraud_detected', language)}: **{stats['fraud']}**")
st.write(f"{get_translation('safe_detected', language)}: **{stats['safe']}**")
def get_translation(key, language):
translations = {
'Polish': {
'analysis_center_title': "Centrum Analizy",
'select_analysis_type': "Wybierz typ analizy:",
'sms_analysis': "Analiza SMS",
'email_analysis': "Analiza E-mail",
'website_analysis': "Analiza Strony Internetowej",
'phone_number_analysis': "Analiza Numeru Telefonu",
'image_analysis': "Analiza Obrazu",
'history': "Historia Analiz",
'statistics': "Statystyki",
'sms_analysis_header': "Analiza SMS",
'email_analysis_header': "Analiza E-mail",
'website_analysis_header': "Analiza Strony Internetowej",
'phone_number_analysis_header': "Analiza Numeru Telefonu",
'image_analysis_header': "Analiza Obrazu",
'enter_sms_content': "Wprowadź treść SMS",
'sender_phone_number': "Numer telefonu nadawcy (z kodem kierunkowym kraju, np. +48123456789)",
'analyze_button': "Analizuj",
'enter_email_content': "Wprowadź treść e-maila",
'sender_email_address': "Adres e-mail nadawcy",
'enter_website_url': "Wprowadź adres URL strony do analizy",
'upload_image': "Prześlij obraz do analizy",
'no_image_selected': "Proszę wybrać obraz do analizy.",
'enter_phone_number': "Wprowadź numer telefonu do analizy",
'email_sender_info': "Informacje o nadawcy e-mail:",
'domain_label': "Domena",
'organization_label': "Organizacja",
'unable_to_retrieve_email': "Nie można uzyskać informacji o nadawcy e-mail.",
'phone_info': "Informacje o numerze telefonu:",
'country_label': "Kraj",
'operator_label': "Operator",
'unable_to_retrieve': "Nie można uzyskać informacji o numerze telefonu.",
'number_reported_warning': "Ostrzeżenie: Ten numer został wcześniej zgłoszony jako oszustwo!",
'number_not_reported': "Ten numer nie został zgłoszony jako oszustwo.",
'red_flags_found': "Znaleziono następujące potencjalne czerwone flagi:",
'url_analysis_header': "Analiza URL",
'extracted_urls': "Wyodrębnione URL z treści:",
'phishtank_warning': "Następujące URL są oznaczone jako phishing przez PhishTank:",
'no_phishtank_threats': "Brak zagrożeń phishingowych według PhishTank.",
'api_key_missing': "Brak klucza API dla usługi: {}.",
'safe_browsing_warning': "Następujące URL są oznaczone jako niebezpieczne przez Google Safe Browsing:",
'no_safe_browsing_threats': "Brak zagrożeń według Google Safe Browsing.",
'no_urls_found': "Brak URL w treści.",
'analyzing_message': "Analizowanie treści za pomocą modelu AI...",
'message_analysis_header': "Analiza treści:",
'risk_assessment_header': "Ocena ryzyka oszustwa:",
'user_recommendations_header': "Zalecenia dla użytkownika:",
'remember_caution': "📌 Pamiętaj: Bądź ostrożny z komunikacjami od nieznanych nadawców.",
'report_button': "Zgłoś numer jako oszustwo",
'number_reported': "Numer został zgłoszony jako oszustwo.",
'number_already_reported': "Numer został już wcześniej zgłoszony jako oszustwo.",
'invalid_number': "Podany numer telefonu jest nieprawidłowy.",
'failed_to_parse': "Nie udało się przetworzyć numeru telefonu. Upewnij się, że jest w poprawnym formacie.",
'website_content_analysis': "Analiza zawartości strony:",
'extracted_text': "Wyodrębniony tekst z obrazu:",
'history_header': "Historia Analiz",
'no_history': "Brak zapisanej historii analiz.",
'statistics_header': "Statystyki",
'total_analyses': "Łączna liczba analiz",
'fraud_detected': "Wykryte oszustwa",
'safe_detected': "Bezpieczne przypadki",
'date_label': "Data",
'analysis_type_label': "Typ Analizy",
'details_label': "Szczegóły",
},
'English': {
'analysis_center_title': "Analysis Center",
'select_analysis_type': "Select analysis type:",
'sms_analysis': "SMS Analysis",
'email_analysis': "Email Analysis",
'website_analysis': "Website Analysis",
'phone_number_analysis': "Phone Number Analysis",
'image_analysis': "Image Analysis",
'history': "Analysis History",
'statistics': "Statistics",
'sms_analysis_header': "SMS Analysis",
'email_analysis_header': "Email Analysis",
'website_analysis_header': "Website Analysis",
'phone_number_analysis_header': "Phone Number Analysis",
'image_analysis_header': "Image Analysis",
'enter_sms_content': "Enter SMS content",
'sender_phone_number': "Sender's phone number (with country code, e.g., +123456789)",
'analyze_button': "Analyze",
'enter_email_content': "Enter email content",
'sender_email_address': "Sender's email address",
'enter_website_url': "Enter website URL to analyze",
'upload_image': "Upload image for analysis",
'no_image_selected': "Please select an image to analyze.",
'enter_phone_number': "Enter phone number to analyze",
'email_sender_info': "Email sender information:",
'domain_label': "Domain",
'organization_label': "Organization",
'unable_to_retrieve_email': "Unable to retrieve email sender information.",
'phone_info': "Phone number information:",
'country_label': "Country",
'operator_label': "Operator",
'unable_to_retrieve': "Unable to retrieve phone number information.",
'number_reported_warning': "Warning: This number has been previously reported as fraud!",
'number_not_reported': "This number has not been reported as fraud.",
'red_flags_found': "The following potential red flags were found:",
'url_analysis_header': "URL Analysis",
'extracted_urls': "Extracted URLs from the content:",
'phishtank_warning': "The following URLs are flagged as phishing by PhishTank:",
'no_phishtank_threats': "No phishing threats detected by PhishTank.",
'api_key_missing': "API key missing for service: {}.",
'safe_browsing_warning': "The following URLs are flagged as unsafe by Google Safe Browsing:",
'no_safe_browsing_threats': "No threats detected by Google Safe Browsing.",
'no_urls_found': "No URLs found in the content.",
'analyzing_message': "Analyzing content using AI model...",
'message_analysis_header': "Content Analysis:",
'risk_assessment_header': "Fraud Risk Assessment:",
'user_recommendations_header': "User Recommendations:",
'remember_caution': "📌 Remember: Be cautious with communications from unknown senders.",
'report_button': "Report number as fraud",
'number_reported': "Number has been reported as fraud.",
'number_already_reported': "Number has already been reported as fraud.",
'invalid_number': "The provided phone number is invalid.",
'failed_to_parse': "Failed to parse the phone number. Ensure it is in the correct format.",
'website_content_analysis': "Website content analysis:",
'extracted_text': "Extracted text from image:",
'history_header': "Analysis History",
'no_history': "No analysis history found.",
'statistics_header': "Statistics",
'total_analyses': "Total analyses",
'fraud_detected': "Frauds detected",
'safe_detected': "Safe cases",
'date_label': "Date",
'analysis_type_label': "Analysis Type",
'details_label': "Details",
},
'German': {
'analysis_center_title': "Analysezentrum",
'select_analysis_type': "Wählen Sie den Analysetyp:",
'sms_analysis': "SMS-Analyse",
'email_analysis': "E-Mail-Analyse",
'website_analysis': "Website-Analyse",
'phone_number_analysis': "Telefonnummernanalyse",
'image_analysis': "Bildanalyse",
'history': "Analyseverlauf",
'statistics': "Statistiken",
'sms_analysis_header': "SMS-Analyse",
'email_analysis_header': "E-Mail-Analyse",
'website_analysis_header': "Website-Analyse",
'phone_number_analysis_header': "Telefonnummernanalyse",
'image_analysis_header': "Bildanalyse",
'enter_sms_content': "SMS-Inhalt eingeben",
'sender_phone_number': "Telefonnummer des Absenders (mit Ländercode, z.B. +49123456789)",
'analyze_button': "Analysieren",
'enter_email_content': "E-Mail-Inhalt eingeben",
'sender_email_address': "E-Mail-Adresse des Absenders",
'enter_website_url': "Zu analysierende Website-URL eingeben",
'upload_image': "Bild für die Analyse hochladen",
'no_image_selected': "Bitte wählen Sie ein Bild zur Analyse aus.",
'enter_phone_number': "Telefonnummer zur Analyse eingeben",
'email_sender_info': "Informationen zum E-Mail-Absender:",
'domain_label': "Domain",
'organization_label': "Organisation",
'unable_to_retrieve_email': "Informationen zum E-Mail-Absender können nicht abgerufen werden.",
'phone_info': "Informationen zur Telefonnummer:",
'country_label': "Land",
'operator_label': "Anbieter",
'unable_to_retrieve': "Informationen zur Telefonnummer können nicht abgerufen werden.",
'number_reported_warning': "Warnung: Diese Nummer wurde bereits als Betrug gemeldet!",
'number_not_reported': "Diese Nummer wurde nicht als Betrug gemeldet.",
'red_flags_found': "Die folgenden potenziellen Warnsignale wurden gefunden:",
'url_analysis_header': "URL-Analyse",
'extracted_urls': "Extrahierte URLs aus dem Inhalt:",
'phishtank_warning': "Die folgenden URLs wurden von PhishTank als Phishing markiert:",
'no_phishtank_threats': "Keine Phishing-Bedrohungen von PhishTank erkannt.",
'api_key_missing': "API-Schlüssel für Dienst fehlt: {}.",
'safe_browsing_warning': "Die folgenden URLs wurden von Google Safe Browsing als unsicher markiert:",
'no_safe_browsing_threats': "Keine Bedrohungen von Google Safe Browsing erkannt.",
'no_urls_found': "Keine URLs im Inhalt gefunden.",
'analyzing_message': "Analyse des Inhalts mit KI-Modell...",
'message_analysis_header': "Inhaltsanalyse:",
'risk_assessment_header': "Betrugsrisikobewertung:",
'user_recommendations_header': "Empfehlungen für den Benutzer:",
'remember_caution': "📌 Denken Sie daran: Seien Sie vorsichtig mit Mitteilungen von unbekannten Absendern.",
'report_button': "Nummer als Betrug melden",
'number_reported': "Nummer wurde als Betrug gemeldet.",
'number_already_reported': "Nummer wurde bereits als Betrug gemeldet.",
'invalid_number': "Die angegebene Telefonnummer ist ungültig.",
'failed_to_parse': "Die Telefonnummer konnte nicht verarbeitet werden. Stellen Sie sicher, dass sie im richtigen Format vorliegt.",
'website_content_analysis': "Analyse des Website-Inhalts:",
'extracted_text': "Aus dem Bild extrahierter Text:",
'history_header': "Analyseverlauf",
'no_history': "Kein Analyseverlauf gefunden.",
'statistics_header': "Statistiken",
'total_analyses': "Gesamtzahl der Analysen",
'fraud_detected': "Erkannte Betrugsfälle",
'safe_detected': "Sichere Fälle",
'date_label': "Datum",
'analysis_type_label': "Analysetyp",
'details_label': "Details",
}
}
return translations.get(language, translations['English']).get(key, key)
def show_analysis(language):
st.title(get_translation('analysis_center_title', language))
analysis_options = [
get_translation('sms_analysis', language),
get_translation('email_analysis', language),
get_translation('website_analysis', language),
get_translation('phone_number_analysis', language),
get_translation('image_analysis', language),
get_translation('history', language),
get_translation('statistics', language)
]
selected_analysis = st.radio(
get_translation('select_analysis_type', language),
analysis_options
)
if selected_analysis == get_translation('sms_analysis', language):
with st.form("sms_form"):
message = st.text_area(get_translation('enter_sms_content', language), height=150)
phone_number = st.text_input(get_translation('sender_phone_number', language))
submitted = st.form_submit_button(get_translation('analyze_button', language))
if submitted:
if not message.strip():
st.error(get_translation('enter_sms_content', language))
elif not phone_number.strip():
st.error(get_translation('sender_phone_number', language))
else:
additional_info = ""
analyze_sms(message, phone_number, additional_info, language)
elif selected_analysis == get_translation('email_analysis', language):
with st.form("email_form"):
email_content = st.text_area(get_translation('enter_email_content', language), height=150)
sender_email = st.text_input(get_translation('sender_email_address', language))
submitted = st.form_submit_button(get_translation('analyze_button', language))
if submitted:
if not email_content.strip():
st.error(get_translation('enter_email_content', language))
elif not sender_email.strip():
st.error(get_translation('sender_email_address', language))
else:
analyze_email(email_content, sender_email, language)
elif selected_analysis == get_translation('website_analysis', language):
with st.form("website_form"):
url = st.text_input(get_translation('enter_website_url', language))
submitted = st.form_submit_button(get_translation('analyze_button', language))
if submitted:
if not url.strip():
st.error(get_translation('enter_website_url', language))
else:
analyze_website(url, language)
elif selected_analysis == get_translation('phone_number_analysis', language):
with st.form("phone_number_form"):
phone_number = st.text_input(get_translation('enter_phone_number', language))
submitted = st.form_submit_button(get_translation('analyze_button', language))
if submitted:
if not phone_number.strip():
st.error(get_translation('enter_phone_number', language))
else:
analyze_phone_number(phone_number, language)
elif selected_analysis == get_translation('image_analysis', language):
with st.form("image_form"):
image_file = st.file_uploader(get_translation('upload_image', language), type=['png', 'jpg', 'jpeg'])
submitted = st.form_submit_button(get_translation('analyze_button', language))
if submitted:
if image_file is None:
st.error(get_translation('no_image_selected', language))
else:
analyze_image(image_file, language)
elif selected_analysis == get_translation('history', language):
show_history(language)
elif selected_analysis == get_translation('statistics', language):
show_statistics(language)
|