File size: 8,711 Bytes
c44d66d |
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 |
import os
import streamlit as st
from PIL import Image
from streamlit_extras.switch_page_button import switch_page
from baam_functions import *
from pathlib import Path
import re
import datetime
import pandas as pd
# Set parent direction as current folder
sourceFileDir = Path(os.path.dirname(os.path.abspath(__file__))).parent.absolute()
os.chdir(sourceFileDir)
logo = Image.open('img/logo.png')
st.set_page_config(page_title = "BAAM", page_icon = logo)
# Get user_dict & location from previous page
username = st.session_state['username']
raw_location = st.session_state['raw_location']
# typing_speed = st.session_state['typing_speed']
# Header of the page
col1, col2, col3 = st.columns([6,6,2])
with col1:
st.subheader("Welcome " + username)
with col2:
st.write(' ')
with col3:
st.image("img/Standard_Chartered.png", width=100)
# Body of the page
# col1, col2 = st.columns(2)
# # Bank sidebar
# with col1:
# st.image("img/bank_sidebar.png")
# with col1:
st.header('Testing tool')
# new_title = '<p style="font-family:Roboto; font-size: 40px;">Testing tool</p>'
# st.markdown(new_title, unsafe_allow_html=True)
# Select box
use_cases = ['','Real time','Custom','1', '2','3','4','5']
option = st.selectbox('Select test case',use_cases)
# Select real time
if option == 'Real time':
st.write('You selected use case:', option)
# Record testing time
login_time = datetime.datetime.now()
# Collect user's information when logging in
# user_dict, location = collect_data(username, raw_location, login_time, typing_speed)
user_dict, location = collect_data(username, raw_location, login_time)
# Display user's current information on the page
show_test_data(user_dict, location)
# Submit button
submit_test_case(user_dict, location)
elif option == '':
st.warning('Please select use case')
elif option == 'Custom':
# Collect input as lat, long
coor_input = st.text_input('Enter location (lattitude, longitude)')
# Collect IPv4
ip_v4 = st.text_input('Enter IP Address (IPv4) (eg. 123.20.144.183)')
# Collect device name
device_name = st.text_input('Enter Device Name (eg. Linhs-MacBook-Air-2.local)')
# Collect mac address
mac_address = st.text_input('Enter Device Mac address (eg. 8c:7a:aa:f2:e5:88)')
# Collect other information
device_uuid = st.text_input('Enter Device UUID (eg. 24291951679256)')
device_model = st.text_input('Enter Device Model (eg. macOS-12.5.1-arm64-arm-64bit)')
# typing_speed = st.slider('Select username & password typing speed (characters per minute). Note: Average Typing Speed is between 190 and 200 characters per minute.', 0, 500)
if coor_input and ip_v4 and mac_address:
# Record testing time
login_time = datetime.datetime.now()
# Split lat, long from coor input
collect_coor = lambda x : [i for i in re.split(",", x) if i != ""]
coor = collect_coor(coor_input)
lat = coor[0]
lon = coor[1]
# Get information from IP
ip_country, ip_region, ip_city, ip_lat, ip_lon, isp_name, isp_org, is_vpn, is_proxy, is_tor, is_relay = get_ip_info(ip_v4)
# Get location from lat, long
location, suburb, district, city, country = get_location(lat, lon)
# Get device information from mac address
device_vendor = get_from_api("https://api.macvendors.com/", mac_address)
device_ram = str(round(psutil.virtual_memory().total / (1024.0 **3)))+" GB"
# Store everything in a dictionary
user_dict = {
"username": username,
"login_time": login_time,
# "typing_speed": typing_speed,
"device_name": device_name,
"device_uuid": device_uuid,
"mac_address": mac_address,
"device_vendor": device_vendor,
"device_model": device_model,
"device_ram": device_ram,
"ip_v4": ip_v4,
"ip_country": ip_country,
"ip_region": ip_region,
"ip_city": ip_city,
"ip_lat": ip_lat,
"ip_lon": ip_lon,
"isp_name": isp_name,
"isp_org": isp_org,
"is_vpn": is_vpn,
"is_proxy": is_proxy,
"is_tor": is_tor,
"is_relay": is_relay,
"lat": lat,
"lon": lon,
"suburb": suburb,
"district": district,
"city": city,
"country": country
}
# Update location, user_dict to pass to other pages
st.session_state['location'] = location
st.session_state['user_dict'] = user_dict
# Display user's current information on the page
show_test_data(user_dict, location)
# Submit button
submit_test_case(user_dict, location)
else:
st.write('You selected test case:', option)
if option == '1':
st.write('Case: Lili normal transaction')
elif option == '4':
st.write('Case: Scammer using Hong Kong VPN')
else:
st.write('Other cases, try your self!')
file_csv = 'test_cases.csv'
df = pd.read_csv(file_csv,sep=',')
# st.write(df)
# read data from a csv WHERE test_case = 'test case selected' to get the following information.
login_time = df[df['test_id'] == int(option)]['login_time'].values[0]
# typing_speed = df[df['test_id'] == int(option)]['typing_speed'].values[0]
device_name = df[df['test_id'] == int(option)]['device_name'].values[0]
device_uuid = df[df['test_id'] == int(option)]['device_uuid'].values[0]
mac_address = df[df['test_id'] == int(option)]['mac_address'].values[0]
device_vendor = df[df['test_id'] == int(option)]['device_vendor'].values[0]
device_model = df[df['test_id'] == int(option)]['device_model'].values[0]
device_ram = df[df['test_id'] == int(option)]['device_ram'].values[0]
ip_v4 = df[df['test_id'] == int(option)]['ip_v4'].values[0]
ip_country = df[df['test_id'] == int(option)]['ip_country'].values[0]
ip_region = df[df['test_id'] == int(option)]['ip_region'].values[0]
ip_city = df[df['test_id'] == int(option)]['ip_city'].values[0]
ip_lat = df[df['test_id'] == int(option)]['ip_lat'].values[0]
ip_lon = df[df['test_id'] == int(option)]['ip_lon'].values[0]
isp_name = df[df['test_id'] == int(option)]['isp_name'].values[0]
isp_org = df[df['test_id'] == int(option)]['isp_org'].values[0]
is_vpn = df[df['test_id'] == int(option)]['is_vpn'].values[0]
is_proxy = df[df['test_id'] == int(option)]['is_proxy'].values[0]
is_tor = df[df['test_id'] == int(option)]['is_tor'].values[0]
is_relay = df[df['test_id'] == int(option)]['is_relay'].values[0]
lat = df[df['test_id'] == int(option)]['lat'].values[0]
lon = df[df['test_id'] == int(option)]['lon'].values[0]
suburb = df[df['test_id'] == int(option)]['suburb'].values[0]
district = df[df['test_id'] == int(option)]['district'].values[0]
city = df[df['test_id'] == int(option)]['city'].values[0]
country = df[df['test_id'] == int(option)]['country'].values[0]
# Store everything in a dictionary
user_dict = {
"username": username,
"login_time": login_time,
# "typing_speed": typing_speed,
"device_name": device_name,
"device_uuid": device_uuid,
"mac_address": mac_address,
"device_vendor": device_vendor,
"device_model": device_model,
"device_ram": device_ram,
"ip_v4": ip_v4,
"ip_country": ip_country,
"ip_region": ip_region,
"ip_city": ip_city,
"ip_lat": ip_lat,
"ip_lon": ip_lon,
"isp_name": isp_name,
"isp_org": isp_org,
"is_vpn": is_vpn,
"is_proxy": is_proxy,
"is_tor": is_tor,
"is_relay": is_relay,
"lat": lat,
"lon": lon,
"suburb": suburb,
"district": district,
"city": city,
"country": country
}
location, suburb, district, city, country = get_location(str(lat), str(lon))
# Display user's current information on the page
show_test_data(user_dict, location)
# Submit button
submit_test_case(user_dict, location) |