diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 062e2cf6..f8dcffb1 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1491,6 +1491,7 @@ def add_hooks(ap): def add_stats(ap): ap2 = ap.add_argument_group("grafana/prometheus metrics endpoint") ap2.add_argument("--stats", action="store_true", help="enable openmetrics at /.cpr/metrics for admin accounts") + ap2.add_argument("--stats-u", metavar="U,U", type=u, default="", help="comma-separated list of users allowed to access /.cpr/metrics even if they aren't admin") ap2.add_argument("--nos-hdd", action="store_true", help="disable disk-space metrics (used/free space)") ap2.add_argument("--nos-vol", action="store_true", help="disable volume size metrics (num files, total bytes, vmaxb/vmaxn)") ap2.add_argument("--nos-vst", action="store_true", help="disable volume state metrics (indexing, analyzing, activity)") diff --git a/copyparty/metrics.py b/copyparty/metrics.py index 0ad65abe..cd2e4a00 100644 --- a/copyparty/metrics.py +++ b/copyparty/metrics.py @@ -17,10 +17,10 @@ class Metrics(object): self.hsrv = hsrv def tx(self, cli: "HttpCli") -> bool: - if not cli.avol: + args = cli.args + if not cli.avol and cli.uname.lower() not in args.stats_u_set: raise Pebkac(403, "'stats' not allowed for user " + cli.uname) - args = cli.args if not args.stats: raise Pebkac(403, "the stats feature is not enabled in server config") diff --git a/copyparty/svchub.py b/copyparty/svchub.py index 65420924..9c954528 100644 --- a/copyparty/svchub.py +++ b/copyparty/svchub.py @@ -1081,7 +1081,7 @@ class SvcHub(object): vs = os.path.expandvars(os.path.expanduser(vs)) setattr(al, k, vs) - for k in "idp_adm".split(" "): + for k in "idp_adm stats_u".split(" "): vs = getattr(al, k) vsa = [x.strip() for x in vs.split(",")] vsa = [x.lower() for x in vsa if x]