From 1a4d71e6feb0d77b1ae81726e5eaf80fce36ade9 Mon Sep 17 00:00:00 2001 From: Sarthak Biswas Date: Mon, 3 Apr 2023 12:33:48 +0530 Subject: [PATCH] added database setup for ids --- securetea/lib/ids/database.py | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 securetea/lib/ids/database.py diff --git a/securetea/lib/ids/database.py b/securetea/lib/ids/database.py new file mode 100644 index 00000000..5ce10749 --- /dev/null +++ b/securetea/lib/ids/database.py @@ -0,0 +1,83 @@ +import os +import datetime +import json +from sqlalchemy import create_engine, Integer, String, Column, MetaData, select, Table, DateTime + +class DatabaseLogs: + """ + A class that stores the IDS logs in a sqlite3 database. + function insert_log accepts logs of the user and stores it in database. + function retrive_log takes the users ID as input and returns the corresponding logs. + + + + """ + + def __init__(self, data): + """ + Initializing the variables + """ + + self.data = data + + self.user = self.data['user'] + self.msg = self.data['msg'] + self.From = "None" + if self.data['From']: + self.From = self.data['From'] + + + self.db_path = "../db/logs.sqlite3" + self.db_name = "logs.sqlite3" + + # creates the sqlite3 database if it does not exits + + self.db_exits = True + + if not os.path.isfile(self.db_path): + os.makedirs(os.path.dirname(self.db_path), exist_ok=True) + + with open(self.db_path, "w") as f: + self.db_exits = False + + self.abs_path = os.path.abspath(self.db_path) + self.sqlite_abs_path = f"sqlite:///{self.abs_path}" + + self.engine = create_engine(self.sqlite_abs_path, echo=True) + self.metadata = MetaData() + + self.users = Table('user_logs', self.metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('userID', String), + Column('From', String), + Column('date', DateTime) + ) + + if not self.db_exits: + self.metadata.create_all(self.engine) + + + # insert the waf logs in database + + def insert_log(self): + + with self.engine.connect() as conn: + conn.execute(self.users.insert().values(userID=self.user, From=self.From, From=self.From, date=datetime.datetime.now())) + + # retrive the waf logs from the database + + def retrive_log(self): + + self.conn = self.engine.connect() + + self.query = select(self.users).where(self.users.c.userID == self.user) + + self.res = self.conn.execute(self.query).fetchall() + + json_data = {'msg': self.res[0][2], + 'From': self.res[0][3] + } + + self.jsonDump = json.dumps(json_data) + + return self.jsonDump \ No newline at end of file