#!/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 ipaddressALLOWED_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()
#!/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 backend
running on localhost.
Logins from outside ALLOWED_NETWORKS are refused.
"""
import sys
import json
import 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()