mirror of
https://github.com/9001/copyparty.git
synced 2025-10-10 02:22:21 -06:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from typing import Any
|
|
|
|
_ = r"""
|
|
the fastest hook in the west
|
|
(runs directly inside copyparty, not as a subprocess)
|
|
|
|
example usage as global config:
|
|
--xbu I,bin/hooks/import-me.py
|
|
|
|
example usage as a volflag (per-volume config):
|
|
-v srv/inc:inc:r:rw,ed:c,xbu=I,bin/hooks/import-me.py
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
(share filesystem-path srv/inc as volume /inc,
|
|
readable by everyone, read-write for user 'ed',
|
|
running this plugin on all uploads with the params listed below)
|
|
|
|
example usage as a volflag in a copyparty config file:
|
|
[/inc]
|
|
srv/inc
|
|
accs:
|
|
r: *
|
|
rw: ed
|
|
flags:
|
|
xbu: I,bin/hooks/import-me.py
|
|
|
|
parameters explained,
|
|
I = import; do not fork / subprocess
|
|
|
|
IMPORTANT NOTE:
|
|
because this hook is running inside copyparty, you need to
|
|
be EXCEPTIONALLY CAREFUL to avoid side-effects, for example
|
|
DO NOT os.chdir() or anything like that, and also make sure
|
|
that the name of this file is unique (cannot be the same as
|
|
an existing python module/library)
|
|
"""
|
|
|
|
|
|
def main(ka: dict[str, Any]) -> dict[str, str]:
|
|
# "ka" is a dictionary with info from copyparty...
|
|
|
|
# but because we are running inside copyparty, we don't need such courtesies;
|
|
import inspect
|
|
|
|
cf = inspect.currentframe().f_back.f_back.f_back
|
|
t = "hello from hook; I am able to peek into copyparty's memory like so:\n function name: %s\n variables:\n %s\n"
|
|
t2 = "\n ".join([("%r: %r" % (k, v))[:99] for k, v in cf.f_locals.items()][:9])
|
|
print(t % (cf.f_code, t2))
|
|
|
|
# must return a dictionary with:
|
|
# "rc": the retcode; 0 is ok
|
|
return {"rc": 0}
|