Giter VIP home page Giter VIP logo

viscerion's Introduction

Viscerion, Unofficial Android client for WireGuard

Build Status CI Crowdin

Get it on Google Play

Refreshed take at the official Android client with a nicer UI and additional features. Built with the best of Android Jetpack.

Building

$ git clone https://github.com/msfjarvis/viscerion --recursive
$ cd viscerion
$ ./gradlew assembleDebug

Note: on macOS you might need to install the GNU coreutils package through homebrew.

Contributing

Please read the contribution guidelines at CONTRIBUTING.md.

Support development

Viscerion is developed solely by me as a side project that has overgrown the ideal size of one. Continuing development on this alongside my college is very draining for no real gain. The open source Kumbaya has worn off for me and GitHub stars don't pay my bills, so having actual monetary compensation would justify my time spent so far and motivate me to dedicate more of it to this project.

Donate on flattr ko-fi

CI infrastructure provided by

Packet

viscerion's People

Contributors

dependabot-preview[bot] avatar erickuck avatar franciscofranco avatar hello71 avatar imgbot[bot] avatar imgbotapp avatar msasikanth avatar msfjarvis avatar nicholaschum avatar out386 avatar rafhaanshah avatar revathskumar avatar skrilltrax avatar smaeul avatar subhrajyotisen avatar trishika avatar zhao-gang avatar zx2c4 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  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

viscerion's Issues

[BUG] 5.1.1 - Tasker Intent stop sending after 1-2 mins idle

Describe the bug
Tasker intents not working after device has been idle for 1-2 minutes.

To Reproduce
Steps to reproduce the behavior:

  1. send intent from tasker
Action: me.msfjarvis.viscerion.SET_TUNNEL_UP
Extra: tunnel_name:my_tunnel
Extra: integration_secret:_secret_
Package: me.msfjarvis.viscerion
Class: com.wireguard.android.services.TaskerIntegrationReceiver
  1. nothing.

Expected behavior
Tunnel up or down.

Screenshots
Viscerion - Cached Processes

Device information (please complete the following information):

  • Device: Pixel 3A XL
  • OS: Android 10 / Q Beta 5
  • Version 5.1.1

Additional context
The tasker intents haven't always worked on the Android 10 Betas if the Viscerion app wasn't used recently. I've been waiting for 8c57fed from #142 to appear in the play store, which happened quite recently. This didn't resolve the issue. I followed the steps in #148, and updated to 5.1.1, and noticed that the Viscerion processes don't appear to be running, rather appear as cached processes, see screenshot. I also rebooted the phone to see if that helped. No joy.

Thanks for a great app nonetheless.

Flawed custom font

The new custom in-app Actor font has uneven number positioning like Raleway. Switch to a font with consistent numbering. For example, Raleway's edit called Rawline fixes it. I don't think this is acceptable for an app with numbers...

Whitelists in place of blacklists

I got an email from a Chinese user who said this:

I live in china,The apps I use are all domestic,Domestic app does not need to use vpn,So when I use the wireguard-kt app, I need a lot of anti-selection.So I want to add the positive selection feature so that my small number of apps can pass the vpn,thank you for your help.

I personally feel this use-case is prevalent outside the country too,
like for people who use VPNs to change their IP location to a country
where their favourite streaming service does not block a show or any similar
situation. Feasibility analysis is pending but this will definitely
make for a good addition.

wg-quick tunnel notifications should be unique to each tunnel

Currently we re-use a constant notification ID for the wg-quick tunnel notification which has the unintended side effect that starting a 2nd tunnel on top of an existing tunnel causes it's notification to get dismissed and replaced with the notification for the newer one. While not a massive problem I'd still prefer separate notifications for each tunnel so we'll need to come up with some kind of method to create unique ids from tunnel names.

v2.0.0 release checklist

Things are looking very good so far, I've really only seen
one bug so far but I'll keep this tracker up until the actual
release to add things to as and when I discover them.

  • Globally excluded tunnels don't immediately apply, exporting and reimporting them seems to do the trick.

Material Components redesign tracker

  • TunnelCreatorActivity has no action bar to save items
  • AMOLED/Dark themes have zero distinction between bottom bar and window background (f17847d)
  • Is adding a bottom margin really the best way to ensure bottombar doesn't overlap with peers in Tunnel{Editor,Creator} flows?
  • Snackbars need to be readjusted to show above the BottomAppBar
  • Navigation button needs to be change to a back button when we move to inner fragments

Security considerations for Viscerion

Considering this is a VPN app and users probably do things ranging from
whistleblowing to bringing a different flavour to porn recommendations
using it, it would be unwise to not give some thought to this aspect of
things.

What would you as a user like to see in Viscerion to ensure that the app
atleast feels secure to you?

Known issues

This issue will be maintained as a constantly updated bugtracker
to reflect issues that have been discovered and not patched yet.
Users are encouraged to report issues here first and then escalate
them to separate issues once I flag the issue as critical enough.

List of issues known and unpatched so far

Resolved in 5.0.0

  • [x] Settings exits abruptly on first run, works fine after.
  • [x] Exclusions count is unreliable

[BUG] Tasker integration doesn't work in 5.1.0

Describe the bug
Since upgrading to 5.1.0 the Tasker integration doesn't work anymore. When I downgrade to 5.0.0. everything is working fine again.

To Reproduce
Steps to reproduce the behavior:

  1. Send an intent from Tasker
Action: me.msfjarvis.viscerion.SET_TUNNEL_UP
Extra: tunnel_name:xyz
Extra: integration_secret:secret
Package: me.msfjarvis.viscerion
Class: com.wireguard.android.services.TaskerIntegrationReceiver
Target: Broadcast Receiver
  1. Nothing happens

Expected behavior
Tunnel should go up or down

Device information (please complete the following information):

  • Device: Samsung Galaxy S10
  • OS: stock Android 9
  • Backend: Go userspace backend v.0.0.20190517
  • Version 5.1.0

[BUG] Hostnames should resolve to their IPs while saving

Describe the bug

Apparently sometime between v4.0.0 and v5.1.1, DNS names have started being enforced as numeric. I'm trying to confirm this as well as compare behaviour with the official client atm.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the editing mode for any tunnel
  2. Try changing Interface DNS to one.one.one.one
  3. Saving fails with an error about DNS needing to be numeric

Expected behavior
Non-numeric DNS should be accepted.

Screenshots
If applicable, add screenshots to help explain your problem.

Device information (please complete the following information):

  • Device: Google Pixel 2
  • OS: Q Beta 5
  • Backend: Go userspace
  • Version 5.1.1

Additional context
Add any other context about the problem here.

Add option to force userspace implementation

For testing purposes and if a kernel has an extremely out-of-date module, having a preference in Settings to force use of the userspace WireGuard implementation instead of the kernel module would be useful.

Restart intent service on boot

Currently the Tasker receiver service is only started when toggling the switch on which will not persist across reboots. We should be starting the service on the on boot receiver to remedy this.

Upgrade to Kotlin 1.3.30

e: /home/msfjarvis/git-repos/wireguard-kt/app/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt: (266, 32): Type inference failed. Please try to specify type arguments explicitly.
e: /home/msfjarvis/git-repos/wireguard-kt/app/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt: (266, 42): Type mismatch: inferred type is ObservableList<String>? but (MutableCollection<out String!>..Collection<String!>) was expected
e: /home/msfjarvis/git-repos/wireguard-kt/app/src/main/java/com/wireguard/android/util/Extensions.kt: (122, 5): Val cannot be reassigned
e: /home/msfjarvis/git-repos/wireguard-kt/app/src/main/java/com/wireguard/android/viewmodel/ConfigProxy.kt: (23, 28): Type inference failed. Please try to specify type arguments explicitly.

Regression checklist

Current known regressions from the 0.0.20180929 tagged release.

  • Deleting individual tunnels is absolutely haywire
  • Dark and black elements show inconsistently in themes
  • Selecting the public key field in the Interface card causes a crash
  • Tunnel import doesn't show user friendly errors
  • Snackbars in tunnel editor overlap with the add peer button

Resources don't refresh on MIUI when theme changes occur

Chink code power appears to have changed the drawable cache variable from mDrawableCache so the eyebleed fuckery in ThemeChangeAwareActivity doesn't seem to achieve anything on MIUI. Not a blocking bug but worth looking at nonetheless.

Custom font and AMOLED black theme

When using the AMOLED theme and the new custom font, text is very hard to read because the color is almost the same as the background color in detail cards. It's a dark gray on black on the configuration selection screen as well.

Use coroutines in place of Java Futures

This needs to be prioritised along with the conversion of the last few straggler classes to Kotlin (See issue #50).

The coroutines-rewrite branch implements a very basic wrapper around the API which can be built upon and then be utilised to get rid of the AsyncWorker class as well as the Java Futures in one go.

New icon!

Super important for the Play release milestone. I have an icon from a friend which I feel just might work but can't hurt to gather some feedback.

Caveats here: Not adaptive as of now

ic_launcher

enable receiving intents?

Awesome app! I was wondering if you would be open to adding the ability for the app to receive intents. I believe the official wireguard app has a section for this for future use, but it's all commented out.

I'd love to be able to start/connect to a vpn profile through an intent so I can use with Tasker.

Awesome app!

[FEATURE] Live log

Is your feature request related to a problem? Please describe.
When issues arise while trying to connect to a VPN server it would be nice to have a live log of what the exact issue is. Rather than having to go into the settings, exporting the logs and opening them in a text editor on your phone, you could immediately see what's going on.

Describe the solution you'd like
A textfield with the live log, this field would automatically update as Wireguard provides more logs. Possibly (but not required at all) would be colour highlighting.

Describe alternatives you've considered
An alternative solution would be to have a more easily accessible 'export logs' button (so you don't have to go into settings, export logs). In addition to that, rather than saving the log, it could immediately open in a text editor/HTML viewer.

Additional context
Ugly mockup I made
mockup

Pretty-print saved filenames in log and tunnel export

Currently we just print the actual filenames returned from the Storage Access Framework which translate to things like "/document/primary:viscerion-export.zip". This is not human-friendly at all and we should do better.

Global exclusions behavioral inconsistencies

Noticed the following issues happening which will be handled by a proper rework sooner than later

  • Global exclusions get duplicated in configurations

Possible fix would probably be to introduce a boolean in the ApplicationData class to mark as globally excluded and then disallow deselection in the interface dialog. Saving and reading from config still seems to be a hit-or-miss in terms of syncing with the global exclusions since even the globally excluded applications are stored as individual exclusions in the configurations to allow wg-quick to be able to read it but that breaks our listings because those apps shouldn't actually be treated like a normal interface exclusion.

  • Removing apps from global exclusions doesn't remove them from tunnel configurations

Seems to be tricky but we can probably just diff our before and after lists of applications and then remove the now globally un-excluded application from all configs, then write it back to each tunnel.

Black theme

On devices with an AMOLED screen, a black theme would be a nice option along with the existing dark theme.

Gradle Version Inconsistency

Gradle plugin 3.3.0-alpha12

gradle-wrapper.properties
distributionUrl=https://services.gradle.org/distributions/gradle-4.10.2-all.zip

this works with Canary Channel of android studio

and produce this error
Unsupported method: NativeArtifact.getSourceFolders(). The version of Gradle you connect to does not support that method. To resolve the problem you can change/upgrade the target version of Gradle you connect to. Alternatively, you can ignore this exception and read other information from the model

Steps to reproduce

try to do gradle sync with above configurations in stable realease of android studio

Solution

Please add both versions of gradle for Canary and Stable channel of Android Studio in README.md . Then the concerned developer can pick version of gradle according to her/his version of android studio

IPv6 has something wrong under HE tunnelbroker

Same as WireGuard official Android Client...

Other Client can Ping the Android Client, Android Client can't Ping others.
Look like IPv6 no route..

My Win10 an iOS use TunSafe work will...

or, maybe it's the GoBackend bug...

Alternate config stores?

The ConfigStore interface leaves room for more implementations than just FileConfigStore. I firmly believe this can be leveraged to provide a DatabaseConfigStore which can then be provided as a backup target to Google's backup service, allowing users to have their tunnels back right when they install the app from the Play Store (working towards that), without having to import them back from a previous export.

Jetifier build overhead

Jetifier adds a sizeable build-time overhead so it'll be worthwhile to look into how it can be disabled without breaking application functionality.

[BUG] The application crashes when i try to open the application

Project Information

Expected behavior

When I try to open the application, the application should be open and all the options contained in it should be displayed so that users can easily get the most out of these options.

Actual behavior

When I try to open the application, the application crashes

How to reproduce

  • Download the application

  • try to open the Application

  • Note the Error

  • Browser/App version: Current Version 5.1.1

  • Operating system: 6.0

Recording Of The Bug

20190726_152705

Logcat

D/AndroidRuntime(27294): Shutting down VM

E/AndroidRuntime(27294): FATAL EXCEPTION: main

E/AndroidRuntime(27294): Process: me.msfjarvis.viscerion, PID: 27294

E/AndroidRuntime(27294): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.res.Resources.getAssets()' on a null object reference

E/AndroidRuntime(27294): 	at android.app.LoadedApk.getAssets(LoadedApk.java:582)

E/AndroidRuntime(27294): 	at android.app.LoadedApk.makeApplication(LoadedApk.java:649)

E/AndroidRuntime(27294): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4964)

E/AndroidRuntime(27294): 	at android.app.ActivityThread.access$1600(ActivityThread.java:177)

E/AndroidRuntime(27294): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)

E/AndroidRuntime(27294): 	at android.os.Handler.dispatchMessage(Handler.java:102)

E/AndroidRuntime(27294): 	at android.os.Looper.loop(Looper.java:135)

E/AndroidRuntime(27294): 	at android.app.ActivityThread.main(ActivityThread.java:5910)

E/AndroidRuntime(27294): 	at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime(27294): 	at java.lang.reflect.Method.invoke(Method.java:372)

E/AndroidRuntime(27294): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)

E/AndroidRuntime(27294): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

Traffic stats

WireGuard should show the statistics for the traffic going through it's tunnels.

Look into re-enabling ProGuard

Didn't have a lot of time to see why minify was breaking things in 1.0.0 so I opted for the blanket fix of completely disabling it for 1.0.1. This obviously needs to be remedied.

Amazon Prime Video App

Amazon Prime Video App does not seem to get whitelisted correctly. Netflix seems to work, but Prime refuses to play videos based upon 'Geo IP.'

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.