From 587756a51b85c846951740645ffa5cf84fd4c118 Mon Sep 17 00:00:00 2001 From: Thastertyn Date: Tue, 4 Feb 2025 22:44:32 +0100 Subject: [PATCH] Initial Proxy coed --- .../commands/account_deposit_command.py | 18 +++++++++++++-- src/bank_protocol/exceptions.py | 6 +++++ src/bank_protocol/proxy_handler.py | 23 +++++++++++++++++++ src/core/request.py | 9 +++++++- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/bank_protocol/commands/account_deposit_command.py b/src/bank_protocol/commands/account_deposit_command.py index 8bdea17..88c4681 100644 --- a/src/bank_protocol/commands/account_deposit_command.py +++ b/src/bank_protocol/commands/account_deposit_command.py @@ -1,7 +1,21 @@ -from core.request import Request +from core import Request +from bank_protocol.exceptions import InvalidRequest def account_deposit(request: Request): - pass + split_body = request.body.split("/") + split_ip = split_body[1].split(" ") + + account = split_body[0] + ip = split_ip[0] + amount = split_ip[1] + + if not account.isdigit(): + raise InvalidRequest("Account must be a number") + + account_parsed = int(account) + + if account_parsed < 10_000 or account_parsed > 99_999: + raise InvalidRequest("Account number out of range") __all__ = ["account_deposit"] diff --git a/src/bank_protocol/exceptions.py b/src/bank_protocol/exceptions.py index a4e1a02..c1f6d95 100644 --- a/src/bank_protocol/exceptions.py +++ b/src/bank_protocol/exceptions.py @@ -2,6 +2,12 @@ from core.exceptions import BankNodeError +class ProxyError(BankNodeError): + def __init__(self, message): + super().__init__(message) + self.message = message + + class InvalidRequest(BankNodeError): def __init__(self, message): super().__init__(message) diff --git a/src/bank_protocol/proxy_handler.py b/src/bank_protocol/proxy_handler.py index e69de29..dc5539b 100644 --- a/src/bank_protocol/proxy_handler.py +++ b/src/bank_protocol/proxy_handler.py @@ -0,0 +1,23 @@ +import socket +from typing import Tuple + +from core import Request, Response +from bank_protocol.exceptions import ProxyError + + +class BankProxy(): + def __init__(self, request: Request, address: Tuple): + self.request = request + self.address = address + + def proxy_request(self) -> Response: + try: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket: + client_socket.connect(self.address) + + client_socket.sendall(self.request.as_request()) + + response = client_socket.recv(1024) + return response + except socket.error as e: + raise ProxyError("Proxy error") from e diff --git a/src/core/request.py b/src/core/request.py index 2d2de02..0bf9c43 100644 --- a/src/core/request.py +++ b/src/core/request.py @@ -21,8 +21,15 @@ class Request(): else: raise InvalidRequest("Invalid request") + def as_request(self): + """Returns a valid request string with CRLF ending""" + return str(self) + "\r\n" + def __str__(self): - return f"{self.command_code} {self.body}" + if self.body: + return f"{self.command_code} {self.body}" + else: + return self.command_code __all__ = ["Request"]