Spaces:
Sleeping
Sleeping
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) | |