|
|
|
import os |
|
import streamlit as st |
|
import pandas as pd |
|
import numpy as np |
|
from PIL import Image |
|
from streamlit_extras.switch_page_button import switch_page |
|
from baam_functions import * |
|
from pathlib import Path |
|
|
|
|
|
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) |
|
|
|
def main(): |
|
|
|
|
|
user_dict = st.session_state['user_dict'] |
|
location = st.session_state['location'] |
|
score_dict = st.session_state['score_dict'] |
|
risk_threshold = st.session_state['risk_threshold'] |
|
|
|
|
|
username = user_dict.get('username', '') |
|
|
|
|
|
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) |
|
|
|
if not(score_dict): |
|
st.write('This is the 1st login time of this username.') |
|
|
|
else: |
|
|
|
device_score = score_dict.get('device_score', '') |
|
ip_score = score_dict.get('ip_score', '') |
|
location_score = score_dict.get('location_score', '') |
|
jump_score = score_dict.get('jump_score', '') |
|
vpn_score = score_dict.get('vpn_score', '') |
|
total_score = score_dict.get('total_score', '') |
|
|
|
|
|
col = ['login_time','device_name', 'device_uuid','mac_address', 'device_vendor', 'device_model', 'device_ram',\ |
|
'ip_v4','ip_country', 'ip_region', 'ip_city', 'ip_lat', 'ip_lon', 'isp_name','isp_org',\ |
|
'is_vpn', 'is_proxy', 'is_tor', 'is_relay', \ |
|
'lat', 'lon','suburb', 'district', 'city', 'country'] |
|
|
|
user_db = pd.DataFrame(get_login_history(username)).T |
|
|
|
user_db.columns= col |
|
st.subheader("Historical data: ") |
|
st.write(user_db) |
|
print(user_db) |
|
|
|
|
|
st.subheader("Current login: ") |
|
show_test_data(user_dict, location) |
|
|
|
user_db['lat'] = pd.to_numeric(user_db['lat']) |
|
user_db['lon'] = pd.to_numeric(user_db['lon']) |
|
|
|
col1, col2 = st.columns([4,6]) |
|
with col1: |
|
st.write('Device score', round(device_score)) |
|
st.write('IP score', round(ip_score)) |
|
st.write('Location score', round(location_score)) |
|
st.write('Jump score', round(jump_score)) |
|
st.write('VPN score', round(vpn_score)) |
|
st.write('----------------------') |
|
st.write('Total score') |
|
st.write('device_score + ip_score + location_score - (jump_score + vpn_score)', round(total_score)) |
|
|
|
if total_score > risk_threshold: |
|
st.write('Total score > Risk threshold') |
|
st.image("img/passed_da.png", width=200) |
|
else: |
|
st.write('Total score < Risk threshold') |
|
st.image("img/failed_da.png", width=200) |
|
|
|
with col2: |
|
st.map(user_db[['lat', 'lon']]) |
|
|
|
if __name__ == '__main__': |
|
main() |
|
|