41 lines · 1.1 KB · Python
RawDownload
#!/usr/bin/env python3"""A demo proxy for rclone serve sftp/webdav/ftp, etc. This takes the incoming user/pass and converts it into an sftp backendrunning on localhost. Logins from outside ALLOWED_NETWORKS are refused.""" import sysimport jsonimport ipaddress ALLOWED_NETWORKS = ["127.0.0.0/8", "::1/128"] def allowed(ip):    """Return True if ip is in one of ALLOWED_NETWORKS."""    if ip is None:        return False    address = ipaddress.ip_address(ip)    return any(address in ipaddress.ip_network(network) for network in ALLOWED_NETWORKS) def main():    i = json.load(sys.stdin)    # Exiting non zero refuses the login - rclone logs whatever we    # write on stderr, so say why.    if not allowed(i.get("client_ip")):        sys.exit("client_ip %s not allowed" % i.get("client_ip"))    o = {        "type": "sftp",              # type of backend        "_root": "",                 # root of the fs        "_obscure": "pass",          # comma sep list of fields to obscure        "user": i["user"],        "pass": i["pass"],        "host": "127.0.0.1",    }    json.dump(o, sys.stdout, indent="\t") if __name__ == "__main__":    main()