Git Product home page Git Product logo

guardian-vpn-android's Introduction

guardian-vpn-android

CircleCI

VPN Clients for the Project Guardian's Android VPN product

Build

$ git submodule update --init --recursive

guardian-vpn-android's People

Contributors

cnevinc avatar conjuror avatar daisy-pliu avatar holidaybear avatar moz-hwine avatar mxlius avatar pharspher avatar rlr avatar severinrudie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

guardian-vpn-android's Issues

Uninstalling/reinstalling VPN app without signing out will add a device each time in “My devices” section

Affected versions:

  • version 1.1.0 (1360) production build;

Affected Platforms:

  • Android 10.0;

Prerequisites:

  • Have the VPN app installed and running;
  • Be signed in on only 1 device;

Steps to reproduce:

  1. Tap long on the VPN app icon;
  2. Pick “App info” option;
  3. Uninstall the VPN;
  4. Go to Google Play Store and reinstall the VPN app;
  5. Start the VPN;
  6. Tap Settings->My devices option;
  7. Observe the device list;

Expected result:

  • One device is listed.

Actual result:

  • The device was duplicated.

Notes:

  • Each time we repeat the STRs, the user device will be duplicated, ending up with max_device_limit achieved, even if the user used, in fact. only one device.
    duplicated

General details missing in My devices screen

Affected versions:

  • version 1.1.0 (1360) production build;
  • version 1.0.7 production build;

Affected Platforms:

  • Android 10.0;
  • iOS 13.1.2;

Prerequisites:

  • Have the VPN app installed and running;
  • Be signed in;

Steps to reproduce:

  1. Start the VPN app;
  2. Tap “Settings” option from the screen footer;
  3. Tap “My devices” option;

Expected result:

  • The following text is displayed on the top of the screen, before the device list: “Devices with Mozilla vPN installed using your account. Connect up to 5 devices”.

Actual result:

  • The text is not displayed.

Notes:

  • The text would inform the user about devices general details for his VPN app.
  • The text is available on Windows;
    Screenshot_20201008-155710

FPN android-notification says "You disconnected", even though I might not have done anything to cause the disconnection

This is just a wording concern.

I've noticed two things when using FPN:

(1) After I've had FPN connected for a while (many hours, I think?), it tends to automatically disconnect for some reason. (I'm not sure if this is common or it's just me -- it's possible it's due to my "Google Fi" VPN automatically co-opting my phone's VPN configuration after some period of time, and forcing FPN off?)

(2) Whenever I become disconnected, I get an Android notification saying:

VPN is off
You disconnected

I'm specifically filing this bug about that wording.

MY CONCERN:
The phrase "You disconnected" sounds like it's saying that I took some action that resulted in the VPN disconnecting. This is often incorrect, & it can cause confusion. ("Wait, it says You disconnected, but I don't remember disconnecting... Did I accidentally mash the button? [no, I did not]")

SUGGESTION: Reword this language to something clearer, that doesn't imply that I personally/intentionally took any action.
For example, maybe it should say:

  • "You are disconnected"
  • "You were disconnected"
  • ...or maybe we don't need to bother with the second line of text at all? (It already says "VPN is off" which is maybe enough information?)

Support for Always-On VPN mode

Android has an Always-On VPN mode which can be turned on by the user via System VPN settings.

Android can start a VPN service when the device boots and keep it running while the device is on. This feature is called always-on VPN and is available in Android 7.0 (API Level 24) or higher. While Android maintains the service lifecycle, it’s your VPN service that’s responsible for the VPN-gateway connection. Always-on VPN can also block connections that don’t use the VPN.

Currently, Mozilla VPN doesn't work well when "always-on" is enabled in system Settings. It simply doesn't work - service isn't started on boot, and Android displays a persistent notification telling the user that VPN app isn't configured correctly.

Because the system (and not a person) starts and stops an always-on connection, you need to adapt your app’s behavior and user interface:
1) Disable any UI that disconnects the connection because the system and Settings app control the connection.
2) Save any config between each app start and configure a connection with the latest settings.
  Because the system starts your app on demand, the person using the device might not always want to configure a connection.

For (2), we already persist all of the relevant configurations (selected server config, etc).
For (1), the user experience is such that when user manually disables the VPN from the app, Android will display a persistent notification telling the user that the VPN app is disconnect. I think that since the notification is obviously directly connected to the user action within the app, it's okay if we allow user to manually disable VPN from the UI (that is, don't change any of the current UIs).

We have no clear way to detect that "always-on" mode is enabled. When it's enabled, our VPN service will be started without any extra flags. This is what Android docs suggest we use as a way to determine if we've been started by the system - always add extra flags when we're starting it from within the app.

We support API23+, and there's no "always-on" functionality on API23. We'll need to make sure we behave sensibly there.

App updates cause the VPN to silently disconnect

STR:
(1) Wait until the Play Store shows that you've got an update available for Firefox VPN. (Don't update yet, though)

(2) Open the Firefox VPN app and connect.

(3) Switch to Google Play Store, and accept the Firefox VPN app update.

ACTUAL RESULTS:
Firefox VPN silently disconnects (and its icon in your Android tray disappears). It don't get any notification or warning that I'm unprotected.

EXPECTED RESULTS:
Not sure what's feasible, but we should avoid silently disconnecting, if at all possible. e.g. perhaps (if doable):

  • reestablish the VPN connection automatically so the user is only in a not-protected state briefly
  • or show some messaging to let the user know that an update was just installed & they might need to reconnect
  • or maybe we should just prevent automatic updates (of our own app) while the VPN is connected
  • or maybe something else (again, no idea what's possible)

"VPN Connected" notification only arrives *when the VPN disconnects*, on my Garmin 645 Music watch

STR:
(1) Have a Garmin watch, configured to show you notifications from your Android apps on your phone.
(2) Open the Mozilla VPN app and click the slider to connect.
(3) Wait a little bit (optional), and then click the slider again to disconnect.

ACTUAL RESULTS:

  • When I connect to the VPN, no notification shows up on my watch.
  • When I disconnect from the VPN, then a notification shows up on my watch -- but the notification incorrectly says "VPN Connected" (when in fact I'm now disconnected)

EXPECTED RESULTS:
To the extent that our notifications are sent to smart watches, we should make sure they show the right message.

(I'm guessing this has to do with us inadvertently misusing some piece of the Android persistent-notification API.)

Customize user-agent string when access backend APIs

Sample UserAgent string from Windows client

Guardian / 0.2 (Microsoft Windows NT 10.0.17763.0; x64)

We need confirmation from the product side that how much information we need from the client

Guardian/0.2_219(Android 9.0; arm64-v8a)
  • AppName: Guardian
  • VersionName: 0.2
  • BuildNumber: 219
  • OS version: Android 9.0
  • ABI: arm64-v8a

Suggest including the build number(219) as well.
ABI(arm64-v8a) is useful, but we can always get the quantitative data from Google Play Console. Is it required? @chrismore

VPN icons still rendered the "connected" status even after I was disconnected

No idea how this happened, but my Firefox VPN on Android got into a broken/misleading state today.

Details:

  • Initially, I was connected to the VPN.
  • After some time, I was disconnected (this happens to me periodically, not sure why; see #187 where I discuss this as well).
  • After some more time, I opened my Firefox VPN app, and it showed a broken/inconsistent state:
    ** The slider & globe icon rendered as if I were still connected...
    ** ...but the text said that I was not connected -- it said "VPN is off. Turn it on to protect your entire device"

Screenshot:
Screenshot_20200415-133209

compile: version "go1.12" does not match go tool version "go1.13.3"

This was reported to me via a side-channel:

the android studio output showed the following for the :libwg:externalNativeBuildDebug task compile: version "go1.12" does not match go tool version "go1.13.3" go1.13.3 was downloaded and used in the compilation process and is not the systems golang version

Not sure if this is a missing upper bound on software deps and/or an assumption built into the build process, but worth having knowledge to ensure everything stays in sync.

Cache server list from previous pull from Guardian

if after opening the vpn client after a previous Internet connection and pull from the Guardian API, cache the server list until the next connection is made and then refresh it. This will prevent the client from showing a blank list and in some cases, the VPN will be able to get through a firewall with the WireGuard UDP even if it isn't able to pull the list from the Guardian API.

Shuold see sign-in page After back from terms of service

Steps To Reproduce

  1. fresh launch app
  2. tap [get started]
  3. tap [terms of services]
  4. tap [X] button

Expected behavior

  1. see welcome page
  2. see sign in page
  3. see terms of services
  4. back to sign in page

Actual behavior
4. back to welcome page

Device info (please complete the following information):

  • Version : 10/4 (Fri) demo version

Reproduce rate
8/8

Additional context

  1. same issue on sign up page

need product effort to define flow

Find my Device doesn't work when VPN is on

Usually, I can say "Google, help me find my phone" to my Google Home and my phone will ring. This doesn't work when Mozilla VPN is on. It doesn't work even if I mark the Find my Device application as Unprotected.

It seems that Android can never connect to the device when the VPN is on. So you cannot lock, ring, or erase the device from https://www.google.com/android/find

Able to attempt connection with no server list

Steps to reproduce

  1. Cut network connect with no internet. I was able to replicate this on airplane wifi where I was connected to wifi AND not really be on the internet

  2. Open the FPN VPN on Android

  3. See main interface with on/off switch. Denote a blank server list.

  4. Attempt to connect

Expected results

No connection attempted

Actual Results

On/off switch functional. Says connected and disconnected states, but since the sever list is blank and there is no connection, it is not real

I would recommend we:

a) Cache the server list from the previous connect (unless this is a new install and there will be no default list (issue #158)

b) If the server list is blank, disable the on/off toggle button and display an error message saying no Internet connection is available.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.