mirror of
https://github.com/rclone/rclone.git
synced 2024-11-26 10:25:03 +01:00
138 lines
4.5 KiB
Markdown
138 lines
4.5 KiB
Markdown
|
---
|
|||
|
title: "Proton Drive"
|
|||
|
description: "Rclone docs for Proton Drive"
|
|||
|
versionIntroduced: "v1.64.0"
|
|||
|
---
|
|||
|
|
|||
|
# {{< icon "fa fa-atom-simple" >}} Proton Drive
|
|||
|
|
|||
|
[Proton Drive](https://proton.me/drive) is an end-to-end encrypted Swiss vault
|
|||
|
for your files that protects your data.
|
|||
|
|
|||
|
This is a rclone backend for Proton Drive which supports the file transfer
|
|||
|
features of Proton Drive using the same client-side encryption.
|
|||
|
|
|||
|
Due to the fact that Proton Drive doesn't publish its API documentation, this
|
|||
|
backend is implemented with the best effort by reading the open-sourced client
|
|||
|
source code and observing the Proton Drive traffic on the browser.
|
|||
|
|
|||
|
Paths are specified as `remote:path`
|
|||
|
|
|||
|
Paths may be as deep as required, e.g. `remote:directory/subdirectory`.
|
|||
|
|
|||
|
## Configurations
|
|||
|
|
|||
|
Here is an example of how to make a remote called `remote`. First run:
|
|||
|
|
|||
|
rclone config
|
|||
|
|
|||
|
This will guide you through an interactive setup process:
|
|||
|
|
|||
|
```
|
|||
|
No remotes found, make a new one?
|
|||
|
n) New remote
|
|||
|
s) Set configuration password
|
|||
|
q) Quit config
|
|||
|
n/s/q> n
|
|||
|
name> remote
|
|||
|
Type of storage to configure.
|
|||
|
Choose a number from below, or type in your own value
|
|||
|
[snip]
|
|||
|
XX / Proton Drive
|
|||
|
\ "Proton Drive"
|
|||
|
[snip]
|
|||
|
Storage> protondrive
|
|||
|
User name
|
|||
|
user> you@protonmail.com
|
|||
|
Password.
|
|||
|
y) Yes type in my own password
|
|||
|
g) Generate random password
|
|||
|
n) No leave this optional password blank
|
|||
|
y/g/n> y
|
|||
|
Enter the password:
|
|||
|
password:
|
|||
|
Confirm the password:
|
|||
|
password:
|
|||
|
Option 2fa.
|
|||
|
2FA code (if the account requires one)
|
|||
|
Enter a value. Press Enter to leave empty.
|
|||
|
2fa> 123456
|
|||
|
Remote config
|
|||
|
--------------------
|
|||
|
[remote]
|
|||
|
type = protondrive
|
|||
|
user = you@protonmail.com
|
|||
|
pass = *** ENCRYPTED ***
|
|||
|
--------------------
|
|||
|
y) Yes this is OK
|
|||
|
e) Edit this remote
|
|||
|
d) Delete this remote
|
|||
|
y/e/d> y
|
|||
|
```
|
|||
|
|
|||
|
**NOTE:** The Proton Drive encryption keys need to have been already generated
|
|||
|
after a regular login via the browser, otherwise attempting to use the
|
|||
|
credentials in `rclone` will fail.
|
|||
|
|
|||
|
Once configured you can then use `rclone` like this,
|
|||
|
|
|||
|
List directories in top level of your Proton Drive
|
|||
|
|
|||
|
rclone lsd remote:
|
|||
|
|
|||
|
List all the files in your Proton Drive
|
|||
|
|
|||
|
rclone ls remote:
|
|||
|
|
|||
|
To copy a local directory to an Proton Drive directory called backup
|
|||
|
|
|||
|
rclone copy /home/source remote:backup
|
|||
|
|
|||
|
### Modified time
|
|||
|
|
|||
|
Proton Drive Bridge does not support modification times yet.
|
|||
|
|
|||
|
### Restricted filename characters
|
|||
|
|
|||
|
Invalid UTF-8 bytes will be [replaced](/overview/#invalid-utf8), also left and
|
|||
|
right spaces will be removed ([code reference](https://github.com/ProtonMail/WebClients/blob/b4eba99d241af4fdae06ff7138bd651a40ef5d3c/applications/drive/src/app/store/_links/validation.ts#L51))
|
|||
|
|
|||
|
### Duplicated files
|
|||
|
|
|||
|
Proton Drive can not have two files with exactly the same name and path. If the
|
|||
|
conflict occurs, depending on the advanced config, the file might or might not
|
|||
|
be overwritten.
|
|||
|
|
|||
|
### Caching
|
|||
|
|
|||
|
The cache is currently built for the case when the rclone is the only instance
|
|||
|
performing operations to the mount point. The event system, which is the proton
|
|||
|
API system that provides visibility of what has changed on the drive, is yet
|
|||
|
to be implemented, so updates from other clients won’t be reflected in the
|
|||
|
cache. Thus, if there are concurrent clients accessing the same mount point,
|
|||
|
then we might have a problem with caching the stale data.
|
|||
|
|
|||
|
## Limitations
|
|||
|
|
|||
|
This backend uses the
|
|||
|
[Proton-API-Bridge](https://github.com/henrybear327/Proton-API-Bridge), which
|
|||
|
is based on [go-proton-api](https://github.com/henrybear327/go-proton-api), a
|
|||
|
fork of the [official repo](https://github.com/ProtonMail/go-proton-api).
|
|||
|
|
|||
|
There is no official API documentation available from Proton Drive. But, thanks
|
|||
|
to Proton open sourcing [proton-go-api](https://github.com/ProtonMail/go-proton-api)
|
|||
|
and the web, iOS, and Android client codebases, we don't need to completely
|
|||
|
reverse engineer the APIs by observing the web client traffic!
|
|||
|
|
|||
|
[proton-go-api](https://github.com/ProtonMail/go-proton-api) provides the basic
|
|||
|
building blocks of API calls and error handling, such as 429 exponential
|
|||
|
back-off, but it is pretty much just a barebone interface to the Proton API.
|
|||
|
For example, the encryption and decryption of the Proton Drive file are not
|
|||
|
provided in this library.
|
|||
|
|
|||
|
The Proton-API-Bridge, attempts to bridge the gap, so rclone can be built on
|
|||
|
top of this quickly. This codebase handles the intricate tasks before and after
|
|||
|
calling Proton APIs, particularly the complex encryption scheme, allowing
|
|||
|
developers to implement features for other software on top of this codebase.
|
|||
|
There are likely quite a few errors in this library, as there isn't official
|
|||
|
documentation available.
|