dev1461 commited on
Commit
80e7d3c
Β·
verified Β·
1 Parent(s): 6c5f9b0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +93 -104
app.py CHANGED
@@ -2,147 +2,136 @@ import gradio as gr
2
  import numpy as np
3
  import random
4
 
5
- # =========================
6
- # DATABASE (temporary)
7
- # =========================
8
  users = {}
9
-
10
- # Store OTP temporarily
11
  otp_store = {}
12
 
 
 
 
 
 
 
13
  # =========================
14
  # SIGNUP
15
  # =========================
16
  def signup(username, password):
17
  if username in users:
18
- return "❌ User already exists"
19
-
20
  users[username] = password
21
- return "βœ… Signup successful! Please login."
22
-
23
 
24
  # =========================
25
- # LOGIN (STEP 1)
26
  # =========================
27
  def login(username, password):
28
  if username in users and users[username] == password:
29
  otp = random.randint(1000, 9999)
30
  otp_store[username] = otp
31
- return f"βœ… OTP generated: {otp} (demo purpose)"
32
- else:
33
- return "❌ Invalid credentials"
34
-
35
 
36
  # =========================
37
- # OTP VERIFY (STEP 2)
38
  # =========================
39
  def verify_otp(username, otp_input):
40
  if username in otp_store and str(otp_store[username]) == str(otp_input):
41
- return "βœ… Login Successful", True
42
- else:
43
- return "❌ Invalid OTP", False
44
-
45
 
46
  # =========================
47
- # PREDICT FUNCTION
48
  # =========================
49
- def predict(logged_in, duration, src_bytes, dst_bytes, failed_logins,
50
- count, error_rate, same_srv_rate, diff_srv_rate,
51
- host_count, login_attempts):
52
-
53
  if not logged_in:
54
  return "🚫 Please login first"
55
 
56
- data = np.array([
57
- duration, src_bytes, dst_bytes, failed_logins,
58
- count, error_rate, same_srv_rate, diff_srv_rate,
59
- host_count, login_attempts
60
- ])
61
-
62
  score = np.sum(data)
63
 
64
  if score < 30:
65
- status = "βœ… Normal Traffic"
66
- explanation = "Low activity detected."
67
  elif score < 60:
68
- status = "⚠️ Suspicious Activity"
69
- explanation = "Moderate anomaly detected."
70
  else:
71
- status = "🚨 Attack Detected!"
72
- explanation = "High anomaly detected."
73
-
74
- return f"""
75
- {status}
76
-
77
- Risk Score: {score:.2f}
78
-
79
- 0–30 β†’ Normal
80
- 30–60 β†’ Suspicious
81
- 60+ β†’ Attack
82
-
83
- Analysis: {explanation}
84
- """
85
-
86
 
87
  # =========================
88
  # UI
89
  # =========================
90
  with gr.Blocks() as demo:
91
 
92
- gr.Markdown("# πŸ” Secure IDS with Authentication & 2FA")
93
-
94
- # SIGNUP
95
- gr.Markdown("## πŸ“ Signup")
96
- su_user = gr.Textbox(label="Username")
97
- su_pass = gr.Textbox(label="Password", type="password")
98
- su_btn = gr.Button("Signup")
99
- su_out = gr.Textbox()
100
-
101
- su_btn.click(signup, inputs=[su_user, su_pass], outputs=su_out)
102
-
103
- gr.Markdown("---")
104
-
105
- # LOGIN
106
- gr.Markdown("## πŸ”‘ Login")
107
-
108
- li_user = gr.Textbox(label="Username")
109
- li_pass = gr.Textbox(label="Password", type="password")
110
- login_btn = gr.Button("Login")
111
-
112
- login_out = gr.Textbox()
113
-
114
- login_btn.click(login, inputs=[li_user, li_pass], outputs=login_out)
115
-
116
- # OTP
117
- gr.Markdown("## πŸ”’ Enter OTP")
118
-
119
- otp_input = gr.Textbox(label="OTP")
120
- otp_btn = gr.Button("Verify OTP")
121
-
122
- otp_out = gr.Textbox()
123
- logged_state = gr.State(False)
124
-
125
- otp_btn.click(
126
- verify_otp,
127
- inputs=[li_user, otp_input],
128
- outputs=[otp_out, logged_state]
129
- )
130
-
131
- gr.Markdown("---")
132
-
133
- # IDS
134
- gr.Markdown("## πŸ“Š Network Analysis")
135
-
136
- inputs = [gr.Number(label=f"Feature {i+1}") for i in range(10)]
137
-
138
- predict_btn = gr.Button("Analyze")
139
-
140
- output = gr.Markdown()
141
-
142
- predict_btn.click(
143
- predict,
144
- inputs=[logged_state] + inputs,
145
- outputs=output
146
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
 
148
  demo.launch()
 
2
  import numpy as np
3
  import random
4
 
 
 
 
5
  users = {}
 
 
6
  otp_store = {}
7
 
8
+ # =========================
9
+ # STATE NAVIGATION
10
+ # =========================
11
+ def go_to(page):
12
+ return page
13
+
14
  # =========================
15
  # SIGNUP
16
  # =========================
17
  def signup(username, password):
18
  if username in users:
19
+ return "❌ User already exists", "signup"
 
20
  users[username] = password
21
+ return "βœ… Signup successful! Please login.", "login"
 
22
 
23
  # =========================
24
+ # LOGIN
25
  # =========================
26
  def login(username, password):
27
  if username in users and users[username] == password:
28
  otp = random.randint(1000, 9999)
29
  otp_store[username] = otp
30
+ return f"OTP: {otp} (demo)", "otp", username
31
+ return "❌ Invalid credentials", "login", ""
 
 
32
 
33
  # =========================
34
+ # OTP VERIFY
35
  # =========================
36
  def verify_otp(username, otp_input):
37
  if username in otp_store and str(otp_store[username]) == str(otp_input):
38
+ return "βœ… Login Successful", "dashboard", True
39
+ return "❌ Invalid OTP", "otp", False
 
 
40
 
41
  # =========================
42
+ # PREDICT
43
  # =========================
44
+ def predict(logged_in, *inputs):
 
 
 
45
  if not logged_in:
46
  return "🚫 Please login first"
47
 
48
+ data = np.array(inputs)
 
 
 
 
 
49
  score = np.sum(data)
50
 
51
  if score < 30:
52
+ return f"βœ… Normal Traffic\n\nScore: {score:.2f}"
 
53
  elif score < 60:
54
+ return f"⚠️ Suspicious Activity\n\nScore: {score:.2f}"
 
55
  else:
56
+ return f"🚨 Attack Detected!\n\nScore: {score:.2f}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
  # =========================
59
  # UI
60
  # =========================
61
  with gr.Blocks() as demo:
62
 
63
+ page = gr.State("home")
64
+ current_user = gr.State("")
65
+ logged_in = gr.State(False)
66
+
67
+ # ================= HOME =================
68
+ with gr.Column(visible=True) as home_page:
69
+ gr.Markdown("# πŸ” Secure IDS System")
70
+ login_btn = gr.Button("Login")
71
+ signup_btn = gr.Button("Signup")
72
+
73
+ # ================= SIGNUP =================
74
+ with gr.Column(visible=False) as signup_page:
75
+ gr.Markdown("## Signup")
76
+ su_user = gr.Textbox(label="Username")
77
+ su_pass = gr.Textbox(label="Password", type="password")
78
+ su_btn = gr.Button("Create Account")
79
+ su_out = gr.Textbox()
80
+
81
+ # ================= LOGIN =================
82
+ with gr.Column(visible=False) as login_page:
83
+ gr.Markdown("## Login")
84
+ li_user = gr.Textbox(label="Username")
85
+ li_pass = gr.Textbox(label="Password", type="password")
86
+ li_btn = gr.Button("Login")
87
+ li_out = gr.Textbox()
88
+
89
+ # ================= OTP =================
90
+ with gr.Column(visible=False) as otp_page:
91
+ gr.Markdown("## Enter OTP")
92
+ otp_input = gr.Textbox()
93
+ otp_btn = gr.Button("Verify")
94
+ otp_out = gr.Textbox()
95
+
96
+ # ================= DASHBOARD =================
97
+ with gr.Column(visible=False) as dashboard_page:
98
+ gr.Markdown("## IDS Dashboard")
99
+
100
+ inputs = [gr.Number(label=f"Feature {i+1}") for i in range(10)]
101
+ pred_btn = gr.Button("Analyze")
102
+ output = gr.Markdown()
103
+
104
+ # ================= NAVIGATION LOGIC =================
105
+ def render(page_name):
106
+ return (
107
+ gr.update(visible=page_name=="home"),
108
+ gr.update(visible=page_name=="signup"),
109
+ gr.update(visible=page_name=="login"),
110
+ gr.update(visible=page_name=="otp"),
111
+ gr.update(visible=page_name=="dashboard")
112
+ )
113
+
114
+ # Home buttons
115
+ login_btn.click(lambda: "login", None, page).then(render, page,
116
+ [home_page, signup_page, login_page, otp_page, dashboard_page])
117
+
118
+ signup_btn.click(lambda: "signup", None, page).then(render, page,
119
+ [home_page, signup_page, login_page, otp_page, dashboard_page])
120
+
121
+ # Signup action
122
+ su_btn.click(signup, [su_user, su_pass], [su_out, page]).then(render, page,
123
+ [home_page, signup_page, login_page, otp_page, dashboard_page])
124
+
125
+ # Login action
126
+ li_btn.click(login, [li_user, li_pass], [li_out, page, current_user]).then(render, page,
127
+ [home_page, signup_page, login_page, otp_page, dashboard_page])
128
+
129
+ # OTP verify
130
+ otp_btn.click(verify_otp, [current_user, otp_input],
131
+ [otp_out, page, logged_in]).then(render, page,
132
+ [home_page, signup_page, login_page, otp_page, dashboard_page])
133
+
134
+ # Prediction
135
+ pred_btn.click(predict, [logged_in] + inputs, output)
136
 
137
  demo.launch()