server-to-server
First real project of this working group.
Usage (requires nodejs):
First, run:
npm install
Creating token
However you use this tool, whether as a webform, a CLI client, or a proxy, you will need access to the server it is connecting to. This means you need its whereabouts (host, port, URL base path), and token.
All requests use a http authorization that starts with either 'Bearer ' or 'Basic ', and is followed by a token. The token usually looks like base64 hash, but it can be any string. For a remoteStorage server, you can use https://creds.5apps.com/ to get a token. For any of the other server types, create a user with username and password on the server, and run this tool to get your token:
TOKEN=`node makeToken.js --username=dswg --password=dswgdswg`echo Token is \"$TOKEN\"node readToken.js --hash=$TOKEN
Method 1: html form upload, translated to remoteStorage/Cozy/ownCloud/Swell, with or without proxy
./startall.sh
Method 2: Command line to remoteStorage/Cozy/ownCloud/Swell
First create your token as explained above; then run this in the terminal to pick a remote filename:
REMOTE_FILENAME=`date +%s%N`
You can now upload example.png to all test servers. If you get a 412 or 409 response, re-run the previous command, to pick a new remote filename and avoid clashes.
echo sending file to example remoteStorage servernode client.js --operation=create --in=example.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=remotestorage --host=storage.5apps.com --port=443 --base-path=/dswg/test/ --token=3a0d6830acea73605bde4e919b107886 echo sending file to example Cozy servernode client.js --operation=create --in=example.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=cozy --host=paulsharing2.cozycloud.cc --port=443 --base-path=/cozy/ --token=VXBzYzBEMFhydWhlOWJqNXFCM1U0SGNaaWRERWtBZ2Q6ZEM0S3ZsZkJ3cXJpTUozYUNBakc2cUxkZFBrUGdyNXo= echo sending file to example ownCloud servernode client.js --operation=create --in=example.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=owncloud --host=owncloud.michielbdejong.com --port=443 --base-path=/remote.php/webdav/ --token=b2h5dUg4RWlwaWUxY2hvbzVzaGFpc2hlZXphaVNvaDJhdG91ZjNhYTphaENlMW9hYm9oMmFlcGhvbzVrYWhnaGFlbjlsZWFRdWFpMHpvb2tp echo sending file to example Swell servernode client.js --operation=create --in=example.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=swell --host=wave.p2pvalue.eu --port=443 --base-path=/shared/ --token=YXVzZXJuYW1lOmFwYXNzd29yZA==
- The response will be visible on the terminal console. Find the "ETag" response header, and if it's for instance
etag: '"asdfasdfasdf"'
, then runEXISTING_ETAG=asdfasdfasdf
(so without the single and double quotes) - For servers that have self-signed certificates, set the
--tls-conf=allow-self-signed
option. - For servers that run http instead of https, set the
--tls-conf=http
option. - If you see zero bytes files appearing on your server, check if your webserver supports chunked transfer encoding (lighttpd is known to violate the http/1.1 spec here).
For a 'READ' operation, do:
echo reading file from example remoteStorage servernode client.js --operation=read --out=remotestorage-read.png --remote-file-name=$REMOTE_FILENAME --server-type=remotestorage --host=storage.5apps.com --port=443 --base-path=/dswg/test/ --token=3a0d6830acea73605bde4e919b107886 echo reading file from example Cozy servernode client.js --operation=read --out=cozy-read.png --remote-file-name=$REMOTE_FILENAME --server-type=cozy --host=paulsharing2.cozycloud.cc --port=443 --base-path=/cozy/ --token=VXBzYzBEMFhydWhlOWJqNXFCM1U0SGNaaWRERWtBZ2Q6ZEM0S3ZsZkJ3cXJpTUozYUNBakc2cUxkZFBrUGdyNXo= echo reading file from example ownCloud servernode client.js --operation=read --out=owncloud-read.png --remote-file-name=$REMOTE_FILENAME --server-type=owncloud --host=owncloud.michielbdejong.com --port=443 --base-path=/remote.php/webdav/ --token=b2h5dUg4RWlwaWUxY2hvbzVzaGFpc2hlZXphaVNvaDJhdG91ZjNhYTphaENlMW9hYm9oMmFlcGhvbzVrYWhnaGFlbjlsZWFRdWFpMHpvb2tp # Coming soon, see https://github.com/Decentralized-Sharing-Working-Group/server-to-server/issues/24 # # echo reading file from example Swell server # node client.js --operation=read --out=swell-read.png --remote-file-name=$REMOTE_FILENAME --server-type=swell --host=wave.p2pvalue.eu --port=443 --base-path=/shared/ --token=YXVzZXJuYW1lOmFwYXNzd29yZA==
If you followed the instructions before, the $REMOTE_FILENAME
and $EXISTING_ETAG
variables will now be defined, for the server that you are testing against. To check this, run:
echo Remote filename "$REMOTE_FILENAME", existing ETag "$EXISTING_ETAG"
If this looked correct, then for an 'UPDATE' operation, do:
echo updating file on example remoteStorage servernode client.js --operation=update --in=remotestorage-read.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=remotestorage --host=storage.5apps.com --port=443 --base-path=/dswg/test/ --existing-etag=$EXISTING_ETAG --token=3a0d6830acea73605bde4e919b107886 echo updating file on example Cozy servernode client.js --operation=update --in=cozy-read.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=cozy --host=paulsharing2.cozycloud.cc --port=443 --base-path=/cozy/ --existing-etag=$EXISTING_ETAG --token=VXBzYzBEMFhydWhlOWJqNXFCM1U0SGNaaWRERWtBZ2Q6ZEM0S3ZsZkJ3cXJpTUozYUNBakc2cUxkZFBrUGdyNXo= echo updating file on example ownCloud servernode client.js --operation=update --in=owncloud-read.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=owncloud --host=owncloud.michielbdejong.com --port=443 --base-path=/remote.php/webdav/ --existing-etag=$EXISTING_ETAG --token=b2h5dUg4RWlwaWUxY2hvbzVzaGFpc2hlZXphaVNvaDJhdG91ZjNhYTphaENlMW9hYm9oMmFlcGhvbzVrYWhnaGFlbjlsZWFRdWFpMHpvb2tp # Coming soon, see https://github.com/Decentralized-Sharing-Working-Group/server-to-server/issues/24 # # echo updating file on example Swell server # node client.js --operation=update --in=swell-read.png --content-type=image/png --remote-file-name=$REMOTE_FILENAME --server-type=swell --host=wave.p2pvalue.eu --port=443 --base-path=/shared/ --existing-etag=$EXISTING_ETAG --token=YXVzZXJuYW1lOmFwYXNzd29yZA== Update your `EXISTING_ETAG` variable from the update response, and now you can try out the 'DELETE' operation: ````bashecho deleting file from example remoteStorage servernode client.js --operation=delete --remote-file-name=$REMOTE_FILENAME --server-type=remotestorage --host=storage.5apps.com --port=443 --base-path=/dswg/test/ --existing-etag=$EXISTING_ETAG --token=3a0d6830acea73605bde4e919b107886 echo deleting file from example Cozy servernode client.js --operation=delete --remote-file-name=$REMOTE_FILENAME --server-type=cozy --host=paulsharing2.cozycloud.cc --port=443 --base-path=/cozy/ --existing-etag=$EXISTING_ETAG --token=VXBzYzBEMFhydWhlOWJqNXFCM1U0SGNaaWRERWtBZ2Q6ZEM0S3ZsZkJ3cXJpTUozYUNBakc2cUxkZFBrUGdyNXo= echo deleting file from example ownCloud servernode client.js --operation=delete --remote-file-name=$REMOTE_FILENAME --server-type=owncloud --host=owncloud.michielbdejong.com --port=443 --base-path=/remote.php/webdav/ --existing-etag=$EXISTING_ETAG --token=b2h5dUg4RWlwaWUxY2hvbzVzaGFpc2hlZXphaVNvaDJhdG91ZjNhYTphaENlMW9hYm9oMmFlcGhvbzVrYWhnaGFlbjlsZWFRdWFpMHpvb2tp # Coming soon, see https://github.com/Decentralized-Sharing-Working-Group/server-to-server/issues/24 # # echo deleting file from example Swell server # node client.js --operation=delete --remote-file-name=$REMOTE_FILENAME --server-type=swell --host=wave.p2pvalue.eu --port=443 --base-path=/shared/ --existing-etag=$EXISTING_ETAG --token=YXVzZXJuYW1lOmFwYXNzd29yZA==
Method 3: Any-to-any proxy
Sixteen proxy examples (put this in front of your remoteStorage server to get a Cozy API to it for free):
node translator --server-type-front=remotestorage --server-type-back=remotestorage --host-back=storage.5apps.com --port-back=443 --base-path-back=/dswg/test/ --port-front=8211node translator --server-type-front=cozy --server-type-back=remotestorage --host-back=storage.5apps.com --port-back=443 --base-path-back=/dswg/test/ --port-front=8212node translator --server-type-front=owncloud --server-type-back=remotestorage --host-back=storage.5apps.com --port-back=443 --base-path-back=/dswg/test/ --port-front=8213node translator --server-type-front=swell --server-type-back=remotestorage --host-back=storage.5apps.com --port-back=443 --base-path-back=/dswg/test/ --port-front=8214 node translator --server-type-front=remotestorage --server-type-back=cozy --host-back=paulsharing2.cozycloud.cc --port-back=443 --base-path-back=/cozy/ --port-front=8221node translator --server-type-front=cozy --server-type-back=cozy --host-back=paulsharing2.cozycloud.cc --port-back=443 --base-path-back=/cozy/ --port-front=8222node translator --server-type-front=owncloud --server-type-back=cozy --host-back=paulsharing2.cozycloud.cc --port-back=443 --base-path-back=/cozy/ --port-front=8223node translator --server-type-front=swell --server-type-back=cozy --host-back=paulsharing2.cozycloud.cc --port-back=443 --base-path-back=/cozy/ --port-front=8224 node translator --server-type-front=remotestorage --server-type-back=owncloud --host-back=owncloud.michielbdejong.com --port-back=443 --base-path-back=/remote.php/webdav/ --port-front=8231node translator --server-type-front=cozy --server-type-back=owncloud --host-back=owncloud.michielbdejong.com --port-back=443 --base-path-back=/remote.php/webdav/ --port-front=8232node translator --server-type-front=owncloud --server-type-back=owncloud --host-back=owncloud.michielbdejong.com --port-back=443 --base-path-back=/remote.php/webdav/ --port-front=8233node translator --server-type-front=swell --server-type-back=owncloud --host-back=owncloud.michielbdejong.com --port-back=443 --base-path-back=/remote.php/webdav/ --port-front=8234 node translator --server-type-front=remotestorage --server-type-back=swell --host-back=wave.p2pvalue.eu --port-back=443 --base-path-back=/shared/ --port-front=8241node translator --server-type-front=cozy --server-type-back=swell --host-back=wave.p2pvalue.eu --port-back=443 --base-path-back=/shared/ --port-front=8242node translator --server-type-front=owncloud --server-type-back=swell --host-back=wave.p2pvalue.eu --port-back=443 --base-path-back=/shared/ --port-front=8243node translator --server-type-front=swell --server-type-back=swell --host-back=wave.p2pvalue.eu --port-back=443 --base-path-back=/shared/ --port-front=8244
Method 4: Starting everything on server-to-server.michielbdejong.com
Run:
npm install -g forever./startall.sh