From b55ae450182eef426737a626ea9d9b127c1b9c60 Mon Sep 17 00:00:00 2001 From: Falk Werner Date: Sat, 4 Feb 2023 09:36:37 +0100 Subject: [PATCH] allow to specify path, url and authentication token via command line --- example/authenticator/simple/authenticator.sh | 2 +- example/provider/python/webfuse_provider.py | 26 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/example/authenticator/simple/authenticator.sh b/example/authenticator/simple/authenticator.sh index 5a4bf93..23ee163 100755 --- a/example/authenticator/simple/authenticator.sh +++ b/example/authenticator/simple/authenticator.sh @@ -2,7 +2,7 @@ AUTH_TOKEN="$1" -if [[ "$AUTH_TOKEN" == "user:bob;token=foo" ]] +if [[ "$AUTH_TOKEN" == "simple_token" ]] then echo "$(date): webfuse: auth granted: $AUTH_TOKEN" >> /tmp/webfuse_auth.log else diff --git a/example/provider/python/webfuse_provider.py b/example/provider/python/webfuse_provider.py index 73298ee..041126c 100755 --- a/example/provider/python/webfuse_provider.py +++ b/example/provider/python/webfuse_provider.py @@ -7,6 +7,7 @@ import os import stat import errno import getpass +import argparse import websockets INVALID_FD = 0xffffffffffffffff @@ -252,9 +253,10 @@ class MessageWriter: class FilesystemProvider: """Webfuse filesystem provider.""" - def __init__(self, path, url): + def __init__(self, path, url, token): self.root = os.path.abspath(path) self.url = url + self.token = token self.commands = { 0x01: FilesystemProvider.access, 0x02: FilesystemProvider.getattr, @@ -282,7 +284,7 @@ class FilesystemProvider: } async def run(self): - extra_headers = [("X-Auth-Token", "user:bob;token=foo")] + extra_headers = [("X-Auth-Token", self.token)] if self.token != "" else [] # pylint: disable-next=no-member async with websockets.connect(self.url, extra_headers=extra_headers) as connection: while True: @@ -575,10 +577,24 @@ class FilesystemProvider: writer.write_u64(buffer.f_namemax) def getcreds(self, _, writer): - credentials = getpass.getpass(prompt="credentials: ") + credentials = self.token if self.token == "" else getpass.getpass(prompt="credentials: ") writer.write_str(credentials) +def main(): + parser = argparse.ArgumentParser(prog='webfuse_provider') + parser.add_argument('-p', '--path', type=str, required=False, default='.', + help='path to provide (default: \".\")') + parser.add_argument('-u', '--url', type=str, required=True, + help='URL of webfuse server, e.g. \"ws://localhost:8081\"') + parser.add_argument('-t', '--token', type=str, required=False, default='', + help='authentication token (default: contents of environment variable WEBFUSE_TOKEN)') + args = parser.parse_args() + token = args.token if args.token != "" else os.environ.get('WEBFUSE_TOKEN') + provider = FilesystemProvider(args.path, args.url, token) + try: + asyncio.run(provider.run()) + except KeyboardInterrupt as _: + pass if __name__ == '__main__': - provider = FilesystemProvider('.', 'ws://localhost:8081') - asyncio.run(provider.run()) + main()