Settings

Theme

Show HN: A file server for Android, end-to-end encryption, web access

20 points by brugeman 5 years ago · 7 comments · 2 min read


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

a7b3fa 5 years ago

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/

  • brugemanOP 5 years ago

    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!

llagerlof 5 years ago

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.
  • brugemanOP 5 years ago

    Strange! Can you please share the device model?

    Thank you for reporting this!

    • llagerlof 5 years ago

      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

      • brugemanOP 5 years ago

        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!

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection