Initial Proxy coed
This commit is contained in:
parent
a70d052cbf
commit
587756a51b
@ -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"]
|
||||
|
@ -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)
|
||||
|
@ -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
|
@ -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"]
|
||||
|
Loading…
x
Reference in New Issue
Block a user