Simon Bruder
ecd7808dd1
Older scripts (that now have no real purpose) or ones that require packages that are not in nixpkgs are not updated. They should either be removed or fixed at a later date.
64 lines
2.1 KiB
Python
Executable file
64 lines
2.1 KiB
Python
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i python3 -p "python3.withPackages(ps: with ps; [ ps.flask ps.requests ])"
|
|
from flask import Flask, redirect
|
|
import requests
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
def get_files(uuid, password):
|
|
r = requests.get(
|
|
"https://www.odrive.com/rest/weblink/list_folder",
|
|
params={"weblinkUri": f"/{uuid}", "password": password},
|
|
)
|
|
return dict(
|
|
(item["name"], item["downloadUrl"]) for item in r.json()["data"]["items"]
|
|
)
|
|
|
|
|
|
@app.route("/")
|
|
def help():
|
|
return """<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>rclone proxy for odrive</title>
|
|
<meta charset="utf-8">
|
|
</head>
|
|
<body>
|
|
<h1>rclone proxy for odrive</h1>
|
|
<p style="max-width: 720px;">Fill the two fields with the UUID (the
|
|
part after https://www.odrive.com/s/) and the access password. You
|
|
will be redirected to the proxied directory listing. Point rclone
|
|
at that URL and it should be able to download the files
|
|
(<code>rclone copy --http-url "YOUR_URL_HERE" :http:
|
|
remote:bucket</code>).</p>
|
|
<input id="uuid" name="uuid" placeholder="uuid" size="40">
|
|
<input id="password" name="password" placeholder="password" size="30">
|
|
<input id="submit" type="submit" value="Get link">
|
|
<script>
|
|
document.querySelector("#submit").onclick = () => {
|
|
const uuid = document.querySelector("#uuid").value
|
|
const password = document.querySelector("#password").value
|
|
location = `/${uuid}/${encodeURIComponent(password)}`
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>"""
|
|
|
|
|
|
@app.route("/<string:uuid>/<string:password>/")
|
|
def index(uuid, password):
|
|
res = f'<!DOCTYPE html><html><head><title>Index of /{uuid}</title><meta charset="utf-8"></head><body><h1>Index of /{uuid}</h1><pre>'
|
|
for name, url in get_files(uuid, password).items():
|
|
res += f'<a href="{name}">{name}</a>\n'
|
|
res += "</pre></body></html>"
|
|
return res
|
|
|
|
|
|
@app.route("/<string:uuid>/<string:password>/<string:name>")
|
|
def file(uuid, password, name):
|
|
return redirect(get_files(uuid, password)[name])
|
|
|
|
|
|
app.run()
|