diff --git a/CS3.1.py b/CS3.1.py new file mode 100644 index 0000000..3a36bed --- /dev/null +++ b/CS3.1.py @@ -0,0 +1,115 @@ +import threading +import json +from flask import Flask, jsonify, request +import sqlite3 +import socket +app = Flask(__name__) + +socket_server = socket.socket() +socket_server.bind(("localhost", 8888)) +def get_db_connection(): + conn = sqlite3.connect("usr.db") + conn.row_factory = sqlite3.Row + return conn +def isuserxist(name): + cn = get_db_connection() + csr = cn.cursor() + csr.execute('SELECT * FROM users WHERE name = ?', (name,)) + rst = csr.fetchone() + cn.close() + if rst is not None: + return True + else: + return False + + +def ispsswdright(name,passwd): + cn = get_db_connection() + csr = cn.cursor() + csr.execute("SELECT COUNT(*) FROM users WHERE name=?", (name,)) + row_count = csr.fetchone()[0] + password = None + if row_count > 0: + csr.execute("SELECT passwd FROM users WHERE name=?", (name,)) + password = csr.fetchone()[0] + if password == passwd: + return True + else: + return False +@app.route("/api/register", methods=['POST']) +def register(usr = None,pwd = None): + conn = get_db_connection() + vl = request.get_json() + if usr == None and pwd == None: + usr = vl.get('username') + pwd = vl.get('password') + + csr2 = conn.cursor() + csr2.execute('SELECT * FROM users WHERE name = ?', (usr,)) + result = csr2.fetchone() + if result is not None: + return jsonify({ + "success": False, + "message": "Username already exists" + }), 403 + else: + try: + conn = get_db_connection() + cursor = conn.cursor() + + cursor.execute("INSERT INTO users (name, passwd) VALUES (?, ?)", (usr, pwd)) + conn.commit() + except sqlite3.Error as e: + print (e) + return jsonify({ + "success": False, + "message": str(e) + }), 500 + else: + return jsonify({ + "success": True, + "message": "User registered successfully" + }) + finally: + conn.close() +def handle_socket_message(data): + try: + action = data.get('type') + if action == 'register': + return register(data.get('username'), data.get('password')) + elif action == 'login': + if isuserxist(data['username']): + if ispsswdright(data['username'], data['password']): + return {"status": "success", "message": "Login successful"} + return {"status": "error", "message": "Invalid credentials"} + except Exception as e: + return {"status": "error", "message": str(e)} +def run_socket_server(): + socket_server.listen() + print("Socket server running on port 8888") + while True: + conn, addr = socket_server.accept() + print(f"Socket client connected: {addr}") + try: + while True: + data = conn.recv(1024) + if not data: break + + try: + json_data = json.loads(data.decode()) + response = handle_socket_message(json_data) + conn.sendall(json.dumps(response).encode()) + except json.JSONDecodeError: + conn.sendall(json.dumps( + {"success": "error", "message": "Invalid JSON"} + ).encode()) + except ConnectionResetError: + print(f"Client {addr} disconnected") + finally: + conn.close() +if __name__ == '__main__': + threading.Thread(target=run_socket_server, daemon=True).start() + with get_db_connection() as conn: + conn.execute('''CREATE TABLE IF NOT EXISTS users + (name TEXT, passwd TEXT)''') + app.run(port=5001)