rafaldembski commited on
Commit
80583a7
1 Parent(s): 64db32c

Update pages/Analysis.py

Browse files
Files changed (1) hide show
  1. pages/Analysis.py +132 -87
pages/Analysis.py CHANGED
@@ -8,124 +8,175 @@ from utils.functions import (
8
  add_fake_number,
9
  is_fake_number,
10
  update_stats,
11
- add_to_history
 
12
  )
 
 
13
 
14
  # Definiowanie tłumaczeń dla tej podstrony
15
  page_translations = {
16
  'Polish': {
17
  'header': "📊 Analiza SMS",
18
- 'content': """Tutaj znajduje się interfejs do analizy wiadomości SMS. Wprowadź treść wiadomości poniżej, aby sprawdzić, czy jest ona potencjalnym oszustwem.""",
19
  'input_placeholder': "Wprowadź treść SMS...",
20
- 'analyze_button': "Analizuj",
 
21
  'result_positive': "Ostrzeżenie: Wiadomość może być oszustwem!",
22
  'result_negative': "Wiadomość wydaje się być bezpieczna.",
23
  'report_button': "Zgłoś numer jako oszustwo",
24
- 'history_header': "Historia Analiz"
 
 
 
 
 
 
 
25
  },
26
  'German': {
27
  'header': "📊 SMS-Analyse",
28
- 'content': """Hier befindet sich die Benutzeroberfläche zur Analyse von SMS-Nachrichten. Geben Sie den Text der Nachricht unten ein, um zu überprüfen, ob es sich um einen potenziellen Betrugsversuch handelt.""",
29
  'input_placeholder': "Geben Sie den SMS-Inhalt ein...",
30
- 'analyze_button': "Analysieren",
 
31
  'result_positive': "Warnung: Die Nachricht könnte ein Betrug sein!",
32
  'result_negative': "Die Nachricht scheint sicher zu sein.",
33
  'report_button': "Nummer als Betrug melden",
34
- 'history_header': "Analyseverlauf"
 
 
 
 
 
 
 
35
  },
36
  'English': {
37
  'header': "📊 SMS Analysis",
38
- 'content': """Here is the interface for analyzing SMS messages. Enter the content of the message below to check if it is a potential fraud attempt.""",
39
  'input_placeholder': "Enter SMS content...",
40
- 'analyze_button': "Analyze",
 
41
  'result_positive': "Warning: The message may be a fraud!",
42
  'result_negative': "The message appears to be safe.",
43
- 'report_button': "Report number as fraud",
44
- 'history_header': "Analysis History"
 
 
 
 
 
 
 
45
  }
46
  }
47
 
48
- def main(language):
49
- st.header(page_translations[language]['header'])
50
- st.write(page_translations[language]['content'])
 
51
 
52
- # Input box for SMS content
53
- sms_content = st.text_area(
54
- label="",
55
- placeholder=page_translations[language]['input_placeholder'],
56
- height=150
57
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- # Analyze button
60
- if st.button(page_translations[language]['analyze_button']):
61
- if sms_content.strip() == "":
62
- if language == 'Polish':
63
- st.warning("Proszę wprowadzić treść wiadomości.")
64
- elif language == 'German':
65
- st.warning("Bitte geben Sie den Nachrichtentext ein.")
66
- else:
67
- st.warning("Please enter the message content.")
68
  else:
69
- # Pobierz numer telefonu (przykładowy, możesz dodać input)
70
- phone_number = st.text_input("Numer telefonu nadawcy:", value="", max_chars=15)
 
 
 
 
 
 
71
 
72
- if phone_number:
73
- # Weryfikacja numeru telefonu
74
- country, operator = get_phone_info(phone_number)
75
- if not country:
76
- if language == 'Polish':
77
- st.error("Nieprawidłowy numer telefonu.")
78
- elif language == 'German':
79
- st.error("Ungültige Telefonnummer.")
80
- else:
81
- st.error("Invalid phone number.")
82
  else:
83
- # Proste sprawdzenia heurystyczne
84
- warnings = simple_checks(sms_content)
85
- for warning in warnings:
86
- st.warning(warning)
87
-
88
- # Analiza wiadomości
89
- additional_info = f"Kraj: {country}, Operator: {operator}"
90
- analysis, risk, recommendations = analyze_message(sms_content, phone_number, additional_info, os.getenv('SAMBANOVA_API_KEY'))
91
 
92
- st.subheader("📄 Analiza Treści")
93
- st.write(analysis)
 
 
 
 
94
 
95
- st.subheader("⚖️ Ocena Ryzyka")
96
- st.write(risk)
 
 
 
 
 
 
97
 
98
- st.subheader("✅ Zalecenia")
99
- st.write(recommendations)
 
 
 
 
 
 
 
 
 
 
 
 
100
 
101
- # Aktualizacja statystyk
102
- fraud_detected = "Wiadomość może być oszustwem" in analysis or "Betrug" in analysis or "fraud" in analysis
103
- update_stats(fraud_detected=fraud_detected)
 
 
 
 
 
 
 
 
 
 
104
 
105
- # Dodanie do historii
106
- add_to_history(sms_content, phone_number, analysis, risk, recommendations)
107
 
108
- # Zgłoś numer jako oszustwo
109
- if fraud_detected:
110
- if st.button(page_translations[language]['report_button']):
111
- success = add_fake_number(phone_number)
112
- if success:
113
- if language == 'Polish':
114
- st.success("Numer został zgłoszony jako oszustwo.")
115
- elif language == 'German':
116
- st.success("Nummer wurde als Betrug gemeldet.")
117
- else:
118
- st.success("Number reported as fraud.")
119
- else:
120
- if language == 'Polish':
121
- st.info("Numer został już zgłoszony jako oszustwo.")
122
- elif language == 'German':
123
- st.info("Nummer wurde bereits als Betrug gemeldet.")
124
- else:
125
- st.info("Number has already been reported as fraud.")
126
 
127
  # Wyświetlanie historii analiz
128
- st.subheader(page_translations[language]['history_header'])
129
  history = get_history()
130
  if history:
131
  for entry in reversed(history[-5:]): # Wyświetl ostatnie 5 analiz
@@ -135,11 +186,5 @@ def main(language):
135
  st.write(f"**Ocena Ryzyka:** {entry['risk_assessment']}")
136
  st.write(f"**Zalecenia:** {entry['recommendations']}")
137
  else:
138
- if language == 'Polish':
139
- st.info("Brak historii analiz.")
140
- elif language == 'German':
141
- st.info("Keine Analysehistorie vorhanden.")
142
- else:
143
- st.info("No analysis history available.")
144
-
145
- # Nie dodawaj "if __name__ == '__main__':" w podstronach
 
8
  add_fake_number,
9
  is_fake_number,
10
  update_stats,
11
+ add_to_history,
12
+ get_history
13
  )
14
+ import os
15
+ import re # Dodany import do obsługi wyrażeń regularnych
16
 
17
  # Definiowanie tłumaczeń dla tej podstrony
18
  page_translations = {
19
  'Polish': {
20
  'header': "📊 Analiza SMS",
21
+ 'content': """Tutaj znajduje się interfejs do analizy wiadomości SMS. Wprowadź treść wiadomości oraz numer telefonu nadawcy, aby sprawdzić, czy jest ona potencjalnym oszustwem.""",
22
  'input_placeholder': "Wprowadź treść SMS...",
23
+ 'phone_input_label': "Numer telefonu nadawcy (w formacie międzynarodowym, np. +48123123123)",
24
+ 'analyze_button': "Analizuj wiadomość",
25
  'result_positive': "Ostrzeżenie: Wiadomość może być oszustwem!",
26
  'result_negative': "Wiadomość wydaje się być bezpieczna.",
27
  'report_button': "Zgłoś numer jako oszustwo",
28
+ 'history_header': "Historia Analiz",
29
+ 'no_history': "Brak historii analiz.",
30
+ 'invalid_api_key': "Brak klucza API. Ustaw zmienną środowiskową SAMBANOVA_API_KEY w ustawieniach aplikacji.",
31
+ 'info_reminder': "📌 Pamiętaj: zawsze zachowuj ostrożność przy otrzymywaniu wiadomości od nieznanych nadawców. Nie udostępniaj poufnych informacji i nie klikaj w podejrzane linki.",
32
+ 'error_message_empty': "Proszę wprowadzić treść wiadomości.",
33
+ 'error_phone_empty': "Proszę wprowadzić numer telefonu nadawcy.",
34
+ 'invalid_phone': "Nieprawidłowy numer telefonu.",
35
+ 'already_reported': "Numer został już zgłoszony jako oszustwo."
36
  },
37
  'German': {
38
  'header': "📊 SMS-Analyse",
39
+ 'content': """Hier befindet sich die Benutzeroberfläche zur Analyse von SMS-Nachrichten. Geben Sie den Text der Nachricht sowie die Telefonnummer des Absenders ein, um zu überprüfen, ob es sich um einen potenziellen Betrugsversuch handelt.""",
40
  'input_placeholder': "Geben Sie den SMS-Inhalt ein...",
41
+ 'phone_input_label': "Telefonnummer des Absenders (im internationalen Format, z.B. +49123123123)",
42
+ 'analyze_button': "Nachricht analysieren",
43
  'result_positive': "Warnung: Die Nachricht könnte ein Betrug sein!",
44
  'result_negative': "Die Nachricht scheint sicher zu sein.",
45
  'report_button': "Nummer als Betrug melden",
46
+ 'history_header': "Analyseverlauf",
47
+ 'no_history': "Keine Analysehistorie vorhanden.",
48
+ 'invalid_api_key': "Fehlender API-Schlüssel. Setzen Sie die Umgebungsvariable SAMBANOVA_API_KEY in den App-Einstellungen.",
49
+ 'info_reminder': "📌 Erinnerung: Seien Sie immer vorsichtig beim Empfang von Nachrichten von unbekannten Absendern. Teilen Sie keine vertraulichen Informationen und klicken Sie nicht auf verdächtige Links.",
50
+ 'error_message_empty': "Bitte geben Sie den Nachrichtentext ein.",
51
+ 'error_phone_empty': "Bitte geben Sie die Telefonnummer des Absenders ein.",
52
+ 'invalid_phone': "Ungültige Telefonnummer.",
53
+ 'already_reported': "Nummer wurde bereits als Betrug gemeldet."
54
  },
55
  'English': {
56
  'header': "📊 SMS Analysis",
57
+ 'content': """Here is the interface for analyzing SMS messages. Enter the message content and the sender's phone number to check if it is a potential fraud attempt.""",
58
  'input_placeholder': "Enter SMS content...",
59
+ 'phone_input_label': "Sender's Phone Number (in international format, e.g., +123123123123)",
60
+ 'analyze_button': "Analyze Message",
61
  'result_positive': "Warning: The message may be a fraud!",
62
  'result_negative': "The message appears to be safe.",
63
+ 'report_button': "Report Number as Fraud",
64
+ 'history_header': "Analysis History",
65
+ 'no_history': "No analysis history available.",
66
+ 'invalid_api_key': "Missing API key. Set the SAMBANOVA_API_KEY environment variable in the app settings.",
67
+ 'info_reminder': "📌 Reminder: Always exercise caution when receiving messages from unknown senders. Do not share confidential information and avoid clicking on suspicious links.",
68
+ 'error_message_empty': "Please enter the message content.",
69
+ 'error_phone_empty': "Please enter the sender's phone number.",
70
+ 'invalid_phone': "Invalid phone number.",
71
+ 'already_reported': "Number has already been reported as fraud."
72
  }
73
  }
74
 
75
+ def show_analysis(language):
76
+ translations = page_translations.get(language, page_translations['Polish']) # Domyślnie Polish
77
+ st.header(translations['header'])
78
+ st.write(translations['content'])
79
 
80
+ with st.form("sms_form"):
81
+ message = st.text_area("Treść wiadomości SMS", placeholder=translations['input_placeholder'], height=150)
82
+ phone_number = st.text_input("Numer telefonu nadawcy", placeholder=translations['phone_input_label'])
83
+
84
+ st.markdown("### Dodatkowe Informacje")
85
+ # Dodane pytania
86
+ frequency = st.selectbox(
87
+ "Jak często otrzymujesz wiadomości od tego numeru?",
88
+ ('Pierwszy raz', 'Sporadycznie', 'Regularnie')
89
+ )
90
+ last_received = st.selectbox(
91
+ "Kiedy ostatnio otrzymałeś podobną wiadomość?",
92
+ ('Dziś', 'W ciągu ostatniego tygodnia', 'W ciągu ostatniego miesiąca', 'Dłużej')
93
+ )
94
+ confidence_level = st.slider(
95
+ "Jak bardzo jesteś pewny, że wiadomość jest autentyczna?",
96
+ 1, 5, 3,
97
+ help="1: Bardzo mało pewny, 5: Bardzo pewny"
98
+ )
99
+ unexpected = st.radio(
100
+ "Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?",
101
+ ('Tak', 'Nie')
102
+ )
103
+ additional_notes = st.text_area("Dodatkowe uwagi lub informacje (opcjonalnie)", height=100)
104
+
105
+ submitted = st.form_submit_button(translations['analyze_button'])
106
 
107
+ if submitted:
108
+ if not message.strip():
109
+ st.error(translations['error_message_empty'])
110
+ elif not phone_number.strip():
111
+ st.error(translations['error_phone_empty'])
 
 
 
 
112
  else:
113
+ # Weryfikacja numeru telefonu
114
+ country, operator = get_phone_info(phone_number)
115
+ if not country:
116
+ st.error(translations['invalid_phone'])
117
+ else:
118
+ st.write(f"**Informacje o numerze telefonu:**")
119
+ st.write(f"- **Kraj:** {country}")
120
+ st.write(f"- **Operator:** {operator}")
121
 
122
+ # Sprawdzenie, czy numer jest w bazie fałszywych numerów
123
+ if is_fake_number(phone_number):
124
+ st.warning(translations['already_reported'])
 
 
 
 
 
 
 
125
  else:
126
+ st.info("Numer telefonu nie znajduje się w bazie fałszywych numerów.")
 
 
 
 
 
 
 
127
 
128
+ # Przeprowadź proste sprawdzenia heurystyczne
129
+ warnings = simple_checks(message)
130
+ if warnings:
131
+ st.warning("Znaleziono następujące potencjalne czerwone flagi:")
132
+ for warn in warnings:
133
+ st.write(f"- {warn}")
134
 
135
+ # Zbierz dodatkowe informacje
136
+ additional_info = f"""
137
+ **Jak często otrzymujesz wiadomości od tego numeru?** {frequency}
138
+ **Kiedy ostatnio otrzymałeś podobną wiadomość?** {last_received}
139
+ **Jak bardzo jesteś pewny, że wiadomość jest autentyczna?** {confidence_level}/5
140
+ **Czy otrzymanie tej wiadomości było dla Ciebie niespodziewane?** {unexpected}
141
+ **Dodatkowe uwagi lub informacje:** {additional_notes}
142
+ """
143
 
144
+ # Pobierz klucz API
145
+ api_key = os.getenv('SAMBANOVA_API_KEY')
146
+ if not api_key:
147
+ st.error(translations['invalid_api_key'])
148
+ else:
149
+ # Analiza za pomocą modelu AI
150
+ with st.spinner("Analizuję wiadomość przy użyciu modelu AI..."):
151
+ analysis_text, risk_text, recommendations_text = analyze_message(message, phone_number, additional_info, api_key)
152
+ st.subheader("📄 Analiza treści wiadomości:")
153
+ st.markdown(analysis_text)
154
+ st.subheader("⚖️ Ocena ryzyka oszustwa:")
155
+ st.markdown(risk_text)
156
+ st.subheader("✅ Zalecenia dla użytkownika:")
157
+ st.markdown(recommendations_text)
158
 
159
+ # Aktualizacja statystyk na podstawie oceny ryzyka
160
+ try:
161
+ # Zakładając, że risk_text zawiera np. "Ryzyko: 7/10"
162
+ # Możesz dostosować parsowanie w zależności od formatu
163
+ match = re.search(r'(\d+)/10', risk_text)
164
+ if match:
165
+ risk_score = int(match.group(1))
166
+ fraud_detected = risk_score >= 7 # Przykładowy próg
167
+ update_stats(fraud_detected=fraud_detected)
168
+ else:
169
+ fraud_detected = False
170
+ except:
171
+ fraud_detected = False
172
 
173
+ # Dodanie analizy do historii
174
+ add_to_history(message, phone_number, analysis_text, risk_text, recommendations_text)
175
 
176
+ st.info(translations['info_reminder'])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
 
178
  # Wyświetlanie historii analiz
179
+ st.subheader(translations['history_header'])
180
  history = get_history()
181
  if history:
182
  for entry in reversed(history[-5:]): # Wyświetl ostatnie 5 analiz
 
186
  st.write(f"**Ocena Ryzyka:** {entry['risk_assessment']}")
187
  st.write(f"**Zalecenia:** {entry['recommendations']}")
188
  else:
189
+ st.info(translations['no_history'])
190
+