feat: content too large
This commit is contained in:
+13
-6
@@ -13,6 +13,7 @@ class Parameters:
|
||||
data_dir: str
|
||||
bind: str
|
||||
token: str
|
||||
max_size_bytes: int
|
||||
|
||||
@classmethod
|
||||
def from_namespace(cls, args: argparse.Namespace) -> "Parameters":
|
||||
@@ -54,12 +55,6 @@ def parse_parameters() -> Parameters:
|
||||
default=__get_env_str("DATA_DIR", os.path.join(os.getcwd(), "data")),
|
||||
help="directory where files are/will be stored (default: ./data) (env var: DATA_DIR)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--bind",
|
||||
default=__get_env_str("BIND", "0.0.0.0"),
|
||||
help="server bind address (default: 0.0.0.0) (env var: BIND)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-t",
|
||||
"--token",
|
||||
@@ -67,5 +62,17 @@ def parse_parameters() -> Parameters:
|
||||
default=os.getenv("TOKEN"),
|
||||
help="secret token for update requests (env var: TOKEN)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-size-bytes",
|
||||
type=int,
|
||||
default=__get_env_int("MAX_SIZE", 2000000),
|
||||
help="max size of accepted archives (in bytes) (default: 2000000 -> 2MB) (env var: MAX_SIZE)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--bind",
|
||||
default=__get_env_str("BIND", "0.0.0.0"),
|
||||
help="server bind address (default: 0.0.0.0) (env var: BIND)",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
return Parameters.from_namespace(args)
|
||||
|
||||
@@ -17,6 +17,7 @@ class _StaplerRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||
self.default_host = params.host
|
||||
self.token = params.token
|
||||
self.data_dir = params.data_dir
|
||||
self.max_size_bytes = params.max_size_bytes
|
||||
super().__init__(*args, directory=params.data_dir, **kwargs)
|
||||
|
||||
def list_directory(self, *_, **__):
|
||||
@@ -36,6 +37,8 @@ class _StaplerRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||
content_length = int(self.headers["Content-Length"])
|
||||
if content_length == 0:
|
||||
return self.send_error(http.HTTPStatus.LENGTH_REQUIRED, "No body found")
|
||||
if content_length > self.max_size_bytes:
|
||||
return self.send_error(http.HTTPStatus.CONTENT_TOO_LARGE, "Archive too large")
|
||||
try:
|
||||
file_bytes = io.BytesIO(self.rfile.read(content_length))
|
||||
target_path = os.path.join(self.data_dir, sub_path)
|
||||
|
||||
Reference in New Issue
Block a user