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)