Linh Vuu
added files
c44d66d
raw history blame
No virus
7.39 kB
import os
import streamlit as st
import pandas as pd
import time
from getmac import get_mac_address as gma
from requests import get
import platform, uuid, psutil
import json
# Security
#passlib,hashlib,bcrypt,scrypt
import hashlib
# Set direction as current folder
sourceFileDir = os.path.dirname(os.path.abspath(__file__))
os.chdir(sourceFileDir)
def make_hashes(password):
return hashlib.sha256(str.encode(password)).hexdigest()
def check_hashes(password, hashed_text):
if make_hashes(password) == hashed_text:
return hashed_text
return False
# DB Management
import sqlite3
conn = sqlite3.connect('data.db')
c = conn.cursor()
# DB Functions
def create_user_table():
c.execute('CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY AUTOINCREMENT,\
username TEXT NOT NULL, password TEXT NOT NULL)')
def add_user_data(username, password):
c.execute('INSERT INTO users(username, password) VALUES (?,?)',(username,password))
conn.commit()
def login_user(username, password):
c.execute('SELECT * FROM users WHERE username =? AND password = ?',(username,password))
data = c.fetchall()
return data
def view_all_users():
c.execute('SELECT * FROM users')
data = c.fetchall()
return data
def create_login_table():
# c.execute('DROP TABLE login')
c.execute('CREATE TABLE IF NOT EXISTS login(login_id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL,\
login_time TEXT NOT NULL, login_duration TEXT NOT NULL,\
device_name TEXT, device_uuid TEXT, mac_address TEXT, device_vendor TEXT, device_version TEXT, device_model TEXT, device_ram TEXT,\
ip_v6 TEXT, ip_v4 TEXT, ip_country TEXT, ip_region TEXT, ip_city TEXT, ip_lat TEXT, ip_lon TEXT, ip_timezone TEXT, isp_name TEXT, isp_org TEXT, isp_as TEXT)')
def add_login_data(username, login_time, login_duration,\
device_name, device_uuid, mac_address, device_vendor, device_version, device_model, device_ram,\
ip_v6, ip_v4, ip_country, ip_region, ip_city, ip_lat, ip_lon, ip_timezone, isp_name, isp_org, isp_as):
# c.execute('INSERT INTO login(username, login_time, login_duration,\
# device_name, device_uuid, mac_address, device_vendor, device_version, device_model, device_ram\
# ip_address, isp, lat, long, district, city) VALUES (?, ?, ?, ?, "1b1520d5-3dd0-4101-bda8-a0e22fc23ac2", ?, ?, "2001:ee0:4f84:6a70:652e:732d:859a:76e9", "Vietnam Posts and Telecommunications Group", 10.736807957581838, 106.66109367487196, "1", "Ho Chi Minh")',\
# (username, login_time, login_duration, device_name, mac_address, device_vendor))
c.execute('INSERT INTO login(username, login_time, login_duration,\
device_name, device_uuid, mac_address, device_vendor, device_version, device_model, device_ram,\
ip_v6, ip_v4, ip_country, ip_region, ip_city, ip_lat, ip_lon, ip_timezone, isp_name, isp_org, isp_as)\
VALUES (?, ?, ?, \
?, ?, ?, ?, ?, ?, ?, \
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',\
(username, login_time, login_duration,\
device_name, device_uuid, mac_address, device_vendor, device_version, device_model, device_ram,\
ip_v6, ip_v4, ip_country, ip_region, ip_city, ip_lat, ip_lon, ip_timezone, isp_name, isp_org, isp_as))
conn.commit()
# Export data to CSV
def export_csv():
# Export table login
db_df = pd.read_sql_query('SELECT * FROM login', conn)
db_df.to_csv('login.csv', index=False)
# Export table users
db_df = pd.read_sql_query('SELECT * FROM users', conn)
db_df.to_csv('users.csv', index=False)
def get_from_api(url, value=""):
# Use get method to fetch details from URL API
response = get(url + value)
if response.status_code != 200:
raise Exception("[!] Invalid request!")
return response.content.decode()
def get_ip_info(ip_v4):
# Get information from the ipv4
isp = get_from_api("http://ip-api.com/json/", ip_v4)
# Convert dictionary string to dictionary
isp = json.loads(isp)
# Get information from the dictionary
ip_country = isp["country"]
ip_region = isp["regionName"]
ip_city = isp["city"]
ip_lat = isp["lat"]
ip_lon = isp["lon"]
ip_timezone = isp["timezone"]
isp_name = isp["isp"]
isp_org = isp["org"]
isp_as = isp["as"]
return ip_country, ip_region, ip_city, ip_lat, ip_lon, ip_timezone, isp_name, isp_org, isp_as
def main():
"""Banking Advanced Authentication Module"""
menu = ["Home", "SignUp", "User Login", "Testing Tool"]
choice = st.sidebar.selectbox("Menu",menu)
if choice == "Home":
st.subheader("Banking Advanced Authentication Module")
elif choice == "SignUp":
st.subheader("Create New Account")
new_user = st.text_input("Username")
new_password = st.text_input("Password",type='password')
if st.button("Signup"):
create_user_table()
add_user_data(new_user,make_hashes(new_password))
st.success("You have successfully created a valid Account")
st.info("Go to Login Menu to login")
elif choice == "User Login":
col1, col2, col3 = st.columns(3)
with col1:
st.image("img/blank.png")
with col2:
st.image("img/blank.png")
with col3:
st.image("img/Standard_Chartered.png")
with st.container():
st.subheader("Login")
time_start = time.time()
username = st.text_input("Username")
password = st.text_input("Password",type='password')
login = st.button("Login")
if login:
login_time = time.time()
hashed_pswd = make_hashes(password)
result = login_user(username,check_hashes(password,hashed_pswd))
if result:
login_duration = login_time - time_start
# Collect device information
device_name = platform.node()
device_uuid = uuid.getnode()
mac_address = gma()
device_vendor = get_from_api("https://api.macvendors.com/", mac_address)
device_version = platform.version()
device_model = platform.platform()
device_ram = str(round(psutil.virtual_memory().total / (1024.0 **3)))+" GB"
# Collect IP information
ip_v6 = get_from_api('https://ident.me')
ip_v4 = get_from_api('https://api.ipify.org')
ip_country, ip_region, ip_city, ip_lat, ip_lon, ip_timezone, isp_name, isp_org, isp_as = get_ip_info(ip_v4)
create_login_table()
verification = False
############## Here is to put IF ELSE & Face verification logic to determine if it is the real user **********
##
##
##
## => verification = True
verification = True
if verification:
add_login_data(username, login_time, login_duration,\
device_name, device_uuid, mac_address, device_vendor, device_version, device_model, device_ram,\
ip_v6, ip_v4, ip_country, ip_region, ip_city, ip_lat, ip_lon, ip_timezone, isp_name, isp_org, isp_as)
# To export database to csv file (can be commented out if not needed)
# export_csv()
st.success("Logged In as {}".format(username))
task = st.selectbox("Task",["Add Post","Analytics","Profiles"])
if task == "Add Post":
st.subheader("Add Your Post")
elif task == "Analytics":
st.subheader("Analytics")
elif task == "Profiles":
st.subheader("User Profiles")
user_result = view_all_users()
clean_db = pd.DataFrame(user_result,columns=["Username","Password"])
st.dataframe(clean_db)
else:
st.warning("Not the real user => Fail to login.")
else:
st.warning("Incorrect Username/Password")
else:
st.subheader("Testing tool")
if __name__ == '__main__':
main()