relaycorp / relaynet-gateway-android

Awala Gateway for Android
https://relaynet.network/users
GNU General Public License v3.0
7 stars 0 forks source link
android awala awala-gateway

Awala Gateway for Android

The Awala Gateway for Android is a private gateway for Android 6+ devices. This repository contains the source code for the app, which is also a reference implementation of a private gateway in the Awala protocol suite.

This document is aimed at advanced users and (prospective) contributors. We aim to make the app as simple and intuitive as possible, and we're therefore not planning on publishing end-user documentation at this point. To learn more about using Awala, visit awala.network/users.

Awala bindings

This private gateway implements Awala bindings as follows:

The local communication with endpoints does not use TLS, but all other connections are external and therefore require TLS.

By default, instances of this gateway are paired to Relaycorp's Belgian gateway (belgium.relaycorp.services).

Security and privacy considerations

The items below summarize the security and privacy considerations specific to this app. For a more general overview of the security considerations in Awala, please refer to RS-019.

External communication

In addition to communicating with its public gateway, this app communicates with the following:

This app doesn't track usage (for example, using Google Analytics), nor does it use ads.

App signing

We use app signing by Google Play to distribute this app on Google Play. We use gradle-play-publisher as part of our automated release process to upload an Android App Bundle to the Play Store using an upload key stored as a GitHub project secret.

This app may be available on F-Droid in the future.

Limitations

Courier synchronization over non-DHCP WiFi connections is unsupported

Unfortunately, Android doesn't offer a reliable way to get the default internet gateway in the local network, so we have to rely on DHCP and assume the DHCP server has the same IP address as the courier. This is reliable enough for the average user, but it means that advanced users won't be able to skip DHCP when connecting to their couriers over WiFi.

Naming rationale

We're referring to this app as "Awala" in the user interface, even though this is obviously one of the components that make up the network, in order to hide technical details from the end user. The terms "private gateway" or "gateway" may be more accurate, but we don't think they sound user-friendly.

However, we do use the terms "private gateway" or "gateway" in the code base because we absolutely need accuracy there.

Architecture

The app follows clean architecture principles. Domain logic is separated from external elements such as UI and data. The main components / layers / packages are:

Components are tied by dependency injection using Dagger. Kotlin coroutines and flow are used for threading and reactive design. For the views, material components were preferred whenever possible.

Development

The project requires Android Studio 4+.

Contributing

We love contributions! If you haven't contributed to a Relaycorp project before, please take a minute to read our guidelines first.