Up1

Up1 provides a very simple web interface to share files end-to-end encrypted via an autogenerated url. It works without any registration or login, the encryption takes place in the clients browser, so the server will know nothing about the files content (see an example installation on on https://share.riseup.net).


Note

For this guide you should be familiar with the basic concepts of

Prerequisites

Node and npm

We’re using Node.js in the stable version 8:

[isabell@stardust ~]$ uberspace tools version show node
Using 'Node.js' version: '8'
[isabell@stardust ~]$

We will need to update the Node Packet Manager npm:

[isabell@stardust ~]$ npm install npm@latest -g
+ npm@6.4.1
updated 1 package in 14.629s
[isabell@stardust ~]$ hash -r
[isabell@stardust ~]$ npm --version
6.4.1
[isabell@stardust ~]$

This should return a version from 6.0.0 upwards.

Domain

Your URL needs to be setup:

[isabell@stardust ~]$ uberspace web domain list
isabell.uber.space
[isabell@stardust ~]$

Installation

First get the Up1 source code from Github:

[isabell@stardust ~]$ git clone https://github.com/Upload/Up1 up1
Cloning into 'up1'...
remote: Enumerating objects: 37, done.
remote: Counting objects: 100% (37/37), done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 37 (delta 0), reused 16 (delta 0), pack-reused 0
Unpacking objects: 100% (37/37), done.
Note: checking out '059f199a6f94fc6c90cde1e4dab0b5b85b49533c'.
[isabell@stardust ~]$

You have now downloaded the master development branch, because this might behave like a beta version of the software, you should check out the latest release.

Please be sure to replace the pseudo version number 66.6 here with the latest version number from the release feed:

[isabell@stardust ~]$ cd ~/up1
[isabell@stardust up1]$ git checkout tags/v66.6
You are in 'detached HEAD' state. You can look around, [...]
[isabell@stardust up1]$ git checkout -b latest
Switched to a new branch 'latest'
[isabell@stardust up1]$

Then run npm to install all the dependencies:

[isabell@stardust ~]$ cd ~/up1/server
[isabell@stardust server]$ npm install
[...]
added 131 packages from 90 contributors and audited 219 packages in 6.04s
found 17 vulnerabilities (4 low, 8 moderate, 5 high)
run `npm audit fix` to fix them, or `npm audit` for details
[isabell@stardust server]$

You probably got the error that there are vulnerabilities to fix, so follow the instruction and run npm audit fix to install the latest package versions:

[isabell@stardust ~]$ cd ~/up1/server
[isabell@stardust server]$ npm audit fix
[...]
fixed 17 of 17 vulnerabilities in 219 scanned packages
[isabell@stardust server]$

Configuration

Change the configuration

Copy the example settings files to create your own configuration:

[isabell@stardust ~]$ cd ~/up1
[isabell@stardust up1]$ cp server/server.conf.example server/server.conf
[isabell@stardust up1]$ cp client/config.js.example client/config.js
[isabell@stardust up1]$

Now edit ~/up1/server/server.conf and set a random string for api_key and delete_key:

Note

You can use the following code, for example, to create a random string: [isabell@stardust ~]$ head /dev/urandom | tr -dc A-Za-z0-9 | head -c 20 ; echo ''

 {
 "api_key": "<any_random_string>",
 "delete_key": "<any_other_random_string>",
 "maximum_file_size": 50000000,

 "path": {
   "i": "../i",
   "client": "../client"
 },

 "http": {
   "enabled": true,
   "listen": ":9002"
 },

Then add the same api_key to the file ~/up1/client/config.js:

upload.config.api_key = '<random_string_from_above>'

If you want to, you can also edit the website footer and contact informations to your details in the same file:

upload.config.footer = '<a href="https://github.com/Upload/Up1" target="_blank">Source Code</a> - <a href="mailto:isabell@stardust.uber.space" id="contact" target="_blank">Contact</a>'

Configure web server

Note

Up1 is running on port 9002.

To make the application accessible from the outside, configure a web backend:

[isabell@stardust ~]$ uberspace web backend set / --http --port <port>
Set backend for / to port <port>; please make sure something is listening!
You can always check the status of your backend using "uberspace web backend list".
[isabell@stardust ~]$

Setup daemon

Create ~/etc/services.d/up1.ini with the following content:

[program:up1]
directory=%(ENV_HOME)s/up1/server/
command=node %(ENV_HOME)s/up1/server/server.js

Tell supervisord to refresh its configuration and start the service:

[isabell@stardust ~]$ supervisorctl reread
up1: available
[isabell@stardust ~]$ supervisorctl update
up1: added process group
[isabell@stardust ~]$ supervisorctl status
up1                            RUNNING   pid 26020, uptime 0:00:45
[isabell@stardust ~]$

If it’s not in state RUNNING, check your configuration.

Check Website

Point your browser to your domain for example https://isabell.uber.space


Tested with Up1 1.0 and Uberspace 7.1.16.0

Written by: ezra <ezra@posteo.de>