mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
huh, formatter wasn't kicking in
This commit is contained in:
parent
d7bd75911d
commit
17359972f3
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -47,6 +47,8 @@
|
||||||
"[html]": {
|
"[html]": {
|
||||||
"editor.formatOnSave": false,
|
"editor.formatOnSave": false,
|
||||||
},
|
},
|
||||||
|
"editor.codeActionsOnSaveTimeout": 9001,
|
||||||
|
"editor.formatOnSaveTimeout": 9001,
|
||||||
//
|
//
|
||||||
// things you may wanna edit:
|
// things you may wanna edit:
|
||||||
//
|
//
|
||||||
|
|
|
@ -197,18 +197,18 @@ class HttpCli(object):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if 'content-type' not in self.headers:
|
if "content-type" not in self.headers:
|
||||||
raise Pebkac("you can't post without a content-type header")
|
raise Pebkac("you can't post without a content-type header")
|
||||||
|
|
||||||
ctype = self.headers['content-type'].lower()
|
ctype = self.headers["content-type"].lower()
|
||||||
|
|
||||||
if 'multipart/form-data' in ctype:
|
if "multipart/form-data" in ctype:
|
||||||
return self.handle_post_multipart()
|
return self.handle_post_multipart()
|
||||||
|
|
||||||
if 'text/plain' in ctype:
|
if "text/plain" in ctype:
|
||||||
return self.handle_post_json()
|
return self.handle_post_json()
|
||||||
|
|
||||||
if 'application/octet-stream' in ctype:
|
if "application/octet-stream" in ctype:
|
||||||
return self.handle_post_binary()
|
return self.handle_post_binary()
|
||||||
|
|
||||||
raise Pebkac("don't know how to handle a {} POST".format(ctype))
|
raise Pebkac("don't know how to handle a {} POST".format(ctype))
|
||||||
|
@ -228,32 +228,32 @@ class HttpCli(object):
|
||||||
raise Pebkac('invalid action "{}"'.format(act))
|
raise Pebkac('invalid action "{}"'.format(act))
|
||||||
|
|
||||||
def handle_post_json(self):
|
def handle_post_json(self):
|
||||||
if 'content-length' not in self.headers:
|
if "content-length" not in self.headers:
|
||||||
raise Pebkac('you must supply a content-length for JSON POST')
|
raise Pebkac("you must supply a content-length for JSON POST")
|
||||||
|
|
||||||
remains = int(self.headers['content-length'])
|
remains = int(self.headers["content-length"])
|
||||||
if remains > 1024 * 1024:
|
if remains > 1024 * 1024:
|
||||||
raise Pebkac('json 2big')
|
raise Pebkac("json 2big")
|
||||||
|
|
||||||
enc = 'utf-8'
|
enc = "utf-8"
|
||||||
ctype = ctype = self.headers['content-type'].lower()
|
ctype = ctype = self.headers["content-type"].lower()
|
||||||
if 'charset' in ctype:
|
if "charset" in ctype:
|
||||||
enc = ctype.split('charset')[1].strip(' =').split(';')[0].strip()
|
enc = ctype.split("charset")[1].strip(" =").split(";")[0].strip()
|
||||||
|
|
||||||
json_buf = b''
|
json_buf = b""
|
||||||
while len(json_buf) < remains:
|
while len(json_buf) < remains:
|
||||||
json_buf += self.sr.recv(32 * 1024)
|
json_buf += self.sr.recv(32 * 1024)
|
||||||
|
|
||||||
self.log('decoding {} bytes of {} json'.format(len(json_buf), enc))
|
self.log("decoding {} bytes of {} json".format(len(json_buf), enc))
|
||||||
try:
|
try:
|
||||||
body = json.loads(json_buf.decode(enc, 'replace'))
|
body = json.loads(json_buf.decode(enc, "replace"))
|
||||||
except:
|
except:
|
||||||
raise Pebkac("you POSTed invalid json")
|
raise Pebkac("you POSTed invalid json")
|
||||||
|
|
||||||
print(body)
|
print(body)
|
||||||
|
|
||||||
def handle_post_binary(self):
|
def handle_post_binary(self):
|
||||||
raise Exception('todo')
|
raise Exception("todo")
|
||||||
|
|
||||||
def handle_login(self):
|
def handle_login(self):
|
||||||
pwd = self.parser.require("cppwd", 64)
|
pwd = self.parser.require("cppwd", 64)
|
||||||
|
@ -381,11 +381,11 @@ class HttpCli(object):
|
||||||
file_sz = os.path.getsize(fsenc(fs_path))
|
file_sz = os.path.getsize(fsenc(fs_path))
|
||||||
except:
|
except:
|
||||||
is_gzip = True
|
is_gzip = True
|
||||||
fs_path += '.gz'
|
fs_path += ".gz"
|
||||||
try:
|
try:
|
||||||
file_sz = os.path.getsize(fsenc(fs_path))
|
file_sz = os.path.getsize(fsenc(fs_path))
|
||||||
except:
|
except:
|
||||||
raise Pebkac('404 Not Found')
|
raise Pebkac("404 Not Found")
|
||||||
|
|
||||||
#
|
#
|
||||||
# if-modified
|
# if-modified
|
||||||
|
@ -446,25 +446,25 @@ class HttpCli(object):
|
||||||
|
|
||||||
decompress = False
|
decompress = False
|
||||||
if is_gzip:
|
if is_gzip:
|
||||||
if 'gzip' not in self.headers.get('accept-encoding', '').lower():
|
if "gzip" not in self.headers.get("accept-encoding", "").lower():
|
||||||
decompress = True
|
decompress = True
|
||||||
elif 'user-agent' in self.headers:
|
elif "user-agent" in self.headers:
|
||||||
ua = self.headers['user-agent']
|
ua = self.headers["user-agent"]
|
||||||
if re.match(r'MSIE [4-6]\.', ua) and ' SV1' not in ua:
|
if re.match(r"MSIE [4-6]\.", ua) and " SV1" not in ua:
|
||||||
decompress = True
|
decompress = True
|
||||||
|
|
||||||
if not decompress:
|
if not decompress:
|
||||||
extra_headers.append('Content-Encoding: gzip')
|
extra_headers.append("Content-Encoding: gzip")
|
||||||
|
|
||||||
if decompress:
|
if decompress:
|
||||||
open_func = gzip.open
|
open_func = gzip.open
|
||||||
open_args = [fsenc(fs_path), 'rb']
|
open_args = [fsenc(fs_path), "rb"]
|
||||||
# Content-Length := original file size
|
# Content-Length := original file size
|
||||||
upper = gzip_orig_sz(fs_path)
|
upper = gzip_orig_sz(fs_path)
|
||||||
else:
|
else:
|
||||||
open_func = open
|
open_func = open
|
||||||
# 512 kB is optimal for huge files, use 64k
|
# 512 kB is optimal for huge files, use 64k
|
||||||
open_args = [fsenc(fs_path), 'rb', 64 * 1024]
|
open_args = [fsenc(fs_path), "rb", 64 * 1024]
|
||||||
|
|
||||||
#
|
#
|
||||||
# send reply
|
# send reply
|
||||||
|
|
|
@ -418,9 +418,9 @@ def chkcmd(*argv):
|
||||||
|
|
||||||
|
|
||||||
def gzip_orig_sz(fn):
|
def gzip_orig_sz(fn):
|
||||||
with open(fsenc(fn), 'rb') as f:
|
with open(fsenc(fn), "rb") as f:
|
||||||
f.seek(-4, 2)
|
f.seek(-4, 2)
|
||||||
return struct.unpack('I', f.read(4))[0]
|
return struct.unpack("I", f.read(4))[0]
|
||||||
|
|
||||||
|
|
||||||
class Pebkac(Exception):
|
class Pebkac(Exception):
|
||||||
|
|
|
@ -3,18 +3,6 @@ echo not a script
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
|
|
||||||
##
|
|
||||||
## prep debug env (vscode embedded terminal)
|
|
||||||
|
|
||||||
renice 20 -p $$
|
|
||||||
|
|
||||||
|
|
||||||
##
|
|
||||||
## cleanup after a busted shutdown
|
|
||||||
|
|
||||||
ps ax | awk '/python[23]?[ ]-m copyparty/ {print $1}' | tee /dev/stderr | xargs kill
|
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## create a test payload
|
## create a test payload
|
||||||
|
|
||||||
|
@ -54,3 +42,12 @@ wget -S --header='Accept-Encoding: gzip' -U 'MSIE 6.0; SV1' http://127.0.0.1:123
|
||||||
|
|
||||||
# replace variable name
|
# replace variable name
|
||||||
# (^|[^\w])oldname([^\w]|$) => $1newname$2
|
# (^|[^\w])oldname([^\w]|$) => $1newname$2
|
||||||
|
|
||||||
|
# monitor linter progress
|
||||||
|
htop -d 2 -p $(ps ax | awk '/electron[ ]/ {printf "%s%s", v, $1;v=","}')
|
||||||
|
|
||||||
|
# prep debug env (vscode embedded terminal)
|
||||||
|
renice 20 -p $$
|
||||||
|
|
||||||
|
# cleanup after a busted shutdown
|
||||||
|
ps ax | awk '/python[23]? -m copyparty/ {print $1}' | tee /dev/stderr | xargs kill
|
||||||
|
|
|
@ -2,7 +2,8 @@ self := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
||||||
vend := $(self)/../../copyparty/web/deps
|
vend := $(self)/../../copyparty/web/deps
|
||||||
|
|
||||||
all:
|
all:
|
||||||
service docker start
|
-service docker start
|
||||||
|
-systemctl start docker
|
||||||
|
|
||||||
docker build -t build-copyparty-deps .
|
docker build -t build-copyparty-deps .
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue