Hacker News new | ask | show | jobs
Show HN: A file server for Android, end-to-end encryption, web access
20 points by brugeman 2038 days ago
Recently I've been playing with an idea of a file server on my Android phone, with a web browser access.

I wanted to replace:

- AirDroid - sending files to my own PC or laptop.

- ShareIt - sending big files over the local network to my family devices.

- Dropbox - sharing select files with other people over the Internet.

Requirements I had in mind:

- end-to-end encryption, no sign ups, no accounts, no passwords

- local connection if devices are on the same network

- asynchronous access, server should work seamlessly in the background

This week I finally managed to stitch the pieces together and get something usable and useful. I now have full access to my phone on my laptop browser, I can share files with a link without uploading to the cloud, and the local network is used whenever possible.

The file server app is on the PlayStore[1], web-client is here[2], and you can check out the roadmap[3].

Shoutouts to these great tools that made it possible:

- libsodium[4], and it's JS version, are used for the end-to-end encryption

- StreamSaver.js[5], to save large files from a non-HTTP transport without buffering it in RAM. Had to patch it to add back pressure when the download is paused.

Current limitations:

- p2p only works on local networks, wait until WebRTC transport is implemented in the server

- when downloading several files, a Zip is generated, with a 4Gb size limit, wait until I figure out the way to fix this. With a single file, it's downloaded in plain and without limits.

Please roast this thing!

--

[1] PlayStore: https://play.google.com/store/apps/details?id=im.recall.android

[2] Web client: http://web.recall.im

[3] Roadmap: https://recall.im

[4] LibSodium: https://github.com/jedisct1/libsodium

[5] StreamSaver.js: https://github.com/jimmywarting/StreamSaver.js

[*] A demo of some files I shared, served by my phone: http://web.recall.im/#peer=c7e0f38a7f60752b4fa3017807fc731f2c8cb87b3d7d35c8131196c74daa847c;share_id=476c946195b047d3898c51291cd37dfb

2 comments

I was wondering how it compares to Syncthing[0], which I currently use to sync files between my phone and PC.

It looks like the main difference is that Recall doesn't require you to install anything on the receiving device. You can just install Recall on your phone, and then download files via a web page. So basically you get the privacy of Syncthing with the convenience of Dropbox. That's really cool!

[0] https://syncthing.net/

The primary difference is that Syncthing is focusing on synchronization, meaning that some files/folders take space on both devices and are kept in sync. It's essentially a cron-ed rsync (Dropbox is built around the same concept internally).

Recall is primarily a file server. The analogy that I have is that it's a zero-config FTP server with a web client with a nicer UX. Auto-sync of select files is on my roadmap, but at this point it's just a 'remote access to your files in a browser'.

Another big diff is that Syncthing is open source, so it's security and privacy are verifiable. Recall is closed source at this point (although you could peek at the JS client to figure out how it works), and I'm not yet ready to make a promise to open it in the near future. So, be aware.

Thank you for your kind words, I really appreciate that!

I tried install it from the play store, but

    This app is incompatible with your device.
I saw it requires Android 7, but mine is 9.
Strange! Can you please share the device model?

Thank you for reporting this!

DROID INFO REPORT

DEVICE

Model: moto e6 play (bali)

Manufacturer: motorola

Baseband Version: MOLY.LR12A.R3.MP.V71.11.P15

RIL Version: android reference-ril 1.0

Build Number: POA29.550-99

Build Fingerprint: motorola/bali/bali:9/POA29.550-99/5fb8e:user/release-keys

Bootloader: bali-8627a2f-20200807101233-20200807233812

Java VM: ART 2.1.0

OS Version: P (9)

SDK: 28

DISPLAY

Resolution: 720x1440 pixels

Software Density: 320 dpi (xhdpi)

Refresh Rate: 59.26 Hz

PROCESSOR

CPU Architecture: ARMv7 Processor rev 4 (v7l)

Board: bali

Chipset: MT6739WW

Cores: 4

Clock Speed: 1495 MHz - 1495 MHz

Instruction Sets: armeabi-v7a, armeabi

CPU Features: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm aes pmull sha1 sha2 crc32

CPU Governor: schedplus

Kernel Version: 4.4.146+

Kernel Architecture: armv7l

GRAPHICS

Renderer: PowerVR Rogue GE8100

Vendor: Imagination Technologies

OpenGL Version: OpenGL ES 3.2

RAM

Total: 1862 MB

Java Heap: 256 MB

STORAGE

Internal: 23.5 GB

External: 14.8 GB

FEATURES

Bluetooth: Yes

Bluetooth LE: Yes

GPS: Yes

NFC: No

USB Accessory: Yes

WiFi: Yes

WiFi Direct: Yes

SENSORS

ACCELEROMETER

LIGHT

PROXIMITY

I'm sorry to say that you have 32bit CPU (ARMv7), and I only build for 64bit versions. There are quite a few libraries I need to compile myself to build the app, and supporting several architectures is too much work for me at the moment. If you leave your email at the website I will notify you when the 32-bit build is ready.

Thank you for your interest and feedback, it means a lot to me!

Ok. Thanks.