Giter Club home page Giter Club logo

freeotpplus's Introduction

FreeOTP Plus

FreeOTP Plus forked the same functionality of FreeOTP provided by RedHat with the following enhancement:

  • Export settings to Google Drive or other document providers
  • Import settings from Google Drive or other document providers
  • Lots of stability improvement
  • Support Android 6.0 permissions.
  • Enhanced UI with material design with dark theme support
  • Search bar to search token
  • Provide more token details for better interoperatibility with other apps
  • Utilize modern camera hardware to scan QR code faster
  • Option to require Biometric / PIN authentication to launch the app
  • Heuristic based offline icon for tokens of 250+ websites
  • More settings to customize the app functionality

Most part of the code is re-written with modern Jetpack libraries and Kotlin language.

Get it on F-Droid Get it on Google Play Get it on GitHub

Requirements

  • Android 5.0+

Screenshots

Build Dependencies

  • Android SDK
  • Android Studio 4.0+

Translate

Crowdin can be used for translation if you are uncomfortable working with strings.xml files.
If your language is not listed, please open an issue so we can add it.
If you don't like to use Crowdin feel free to submit a pull with the updated/added locales.

Link: https://crowdin.com/project/freeotpplus

freeotpplus's People

Contributors

6543 avatar andrew-t avatar ariasuni avatar error401de avatar francewhoa avatar gabriel-tandil avatar gamescripting avatar helloworld1 avatar inson1 avatar jamestheawesomedude avatar jharting avatar kasefuchs avatar mrzeznik avatar mueller-ma avatar nickoriginal avatar nillebor avatar npmccallum avatar philkes avatar pietervw avatar poussinou avatar sandeepshahi avatar schra avatar tidoni avatar tkterris avatar tycho avatar tzagim avatar xdcyw 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  avatar  avatar  avatar  avatar  avatar

freeotpplus's Issues

Import error

Expected behavior
After clicking on a document through the import feature, I expected the app to load the document.

Actual behavior
After clicking the document to import the app crashes.

How to reproduce
download the FREEOTPPLUS app https://f-droid.org/repo/org.liberty.android.freeotpplus_1.apk
click on the three dots at the top right corner
click on import
click on any data App crashes
Infinix note 4
Operating system: android 7.0
version 1.0

04-22 16:51:54.917 11973 12304 E AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 04-22 16:51:54.917 11973 12304 E AndroidRuntime: Process: org.liberty.android.freeotpplus, PID: 11973 04-22 16:51:54.917 11973 12304 E AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground() 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java:318) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.lang.Thread.run(Thread.java:761) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.Gson.fromJson(Gson.java:887) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.Gson.fromJson(Gson.java:852) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.Gson.fromJson(Gson.java:801) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.Gson.fromJson(Gson.java:773) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at org.fedorahosted.freeotp.TokenPersistence.importFromJSON(TokenPersistence.kt:112) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at org.fedorahosted.freeotp.MainActivity$3.doInBackground(MainActivity.java:324) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at org.fedorahosted.freeotp.MainActivity$3.doInBackground(MainActivity.java:310) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:304) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: ... 4 more 04-22 16:51:54.917 11973 12304 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) 04-22 16:51:54.917 11973 12304 E AndroidRuntime: ... 13 more

Update on F-Droid

On Google Play there is 1.2 version, on F-Droid 1.0. Will You update app on F-Droid?

[Feature] Add downloaded QR code

Scanning a QR code is a common way to add a new token but often I need to add a token when I only have my phone and it's impossible to scan a code on your own phone screen. This app would be much more usable if we could download the QR code image then import it.

[Question] Importing data from FreeOTP

FreeOTP doesn't provide a way to export the stored keys. Would it be possible to import the data from FreeOTP into FreeOTP+ using a backup made with Titanium Backup? Any other ways this could be done?

Steam

Hey, can anyone help me add steam authy into this? Im using winauth in windows and it works fine there but i want to use freeotp on android, thanks in advance.

NVM, did it

[Feature Request] Tap on exposed token to hide it.

At the moment (at least with 1.4), clicking on an already exposed token just refreshes the time limit before it hides itself again.

Being able to toggle the tokens to display with the same action as exposing would be beneficial security wise, but with still keeping the functionality of refreshing the time-out when exposing the token again.

Unable to scan QR, image looks distorted, bad aspect ratio

OnePlus 6's camera, as far as I can tell, defaults to a 4:3 aspect ratio. This seems to confuse this app. Interestingly enough, the original FreeOTP does not have this problem. I've attached a screenshot of what's supposed to be a square.
Screenshot_20191012-232554

Search among tokens

Right now I have 21 tokens registered. Finding the one I need can sometimes be tedious. It would be great if I could search/filter them.

Exposing the secrets in the "Edit" dialog breaches security

When editing an existing OTP entry, the "Edit" dialog displays the underlying secret. While I appreciate that this really helps debugging the application and is very convenient, it is in my opinion a strong security risk. Same potentially applies to exporting (backing up) secrets.

In a scenario where an attacker get's temporary physical access to an unlocked phone, all secrets are compromised.

If the secrets were not displayed, temporary physical access to an unlocked phone would only expose the current (30sec-valid) one-time code.

How to add Steam?

Is it also possible to add the Steam Autheticator token to FreeOTP+?
If yes, how?

import from freeotp

is it possible to this because what I can se is that freeotp dont have any backup settings

Account information in darkmode / low light are hard to read

Hello!
When in darkmode and low brightness (at night) it's very hard to read the accounts information written in black over dark grey.
Maybe account information should be in brighter color over dark grey background,like the 6 digit code.

[Feature Request] import FreeOTP's tokens.xml

Hi, it would be nice to be able to directly import FreeOTP's tokens.
On a rooted phone, one has access to tokens.xml and can copy it to somewhere FreeOTPPlus can read it from. If this step is left to the user, FreeOTPPlus itself would not need root access priviliges.

Feature request: Store keys in folders

When having 20+ logins stored in app it's cumbersome to locate correct login.

A folder structure that let users categorise login based on service type would really make life easier

Field labels are meaningless

In add token screen the two topmost fields are missing proper labels. In fact they entirely miss labels and the placeholder text does not help much. To the best of my judgement the first field is the account name but "18c5d…" doesn't mean anything to me.

Please relabel those fields to improve UX with this form.

Copycat on Google Play

Hi @helloworld1

I found this app on the Google Play Store. This guy just took your source code, added some ads in it and put it on the Store, without warning this is free software...

As you are the owner of the source code, feel free to open a request to google here to remove this copy from the Store, if it's your wish ;)

Don't forget to tell Google that:

  • The app is licensed under Apache v2 license and this guy is violating it;
  • He is falsely claiming he made the app;
  • Provide some screenshots of your own app.

Question about issue FreeOTP

hello thank you for your work with this freeotp fork.
I have a few questions:

  1. freeotp/freeotp-android#172 you know something about this bug. It seems to work well with your Plus version, you confirm me
  2. Since when do you work with this fork you have plans for the future.
  3. The original version has been abandoned or will be further developed.

Thanks again for the fork, just yesterday I was trying out the original version, it was giving me problems with everything (qr images etc...)

[Feature request] Export/Import to local storage

I have found this application as I was searching for a way to Export/Import settings to local storage for FreeOTP.

It would be great if this app could write and read to/from a removable SD card in the phone for those security aware not wanting data in the cloud.

Great app otherwise!

Import data from freeotp

If I remember correctly, I backed up the freeotp data via adb. How do I migrate to freeotp+?
Thanks in advance.

how/do backups work?

Hi,

I would like to switch from Authy to a floss product. However I am worried that if I lose my phone I will be SOL.

I just installed FreeOTP+ on my phone. I added 1 account to it. If I make a backup now, then add 3 more accounts, will my original backup be able to communicate with all 4 accounts? Or do I need to backup each time I add an account?

What is the difference between exporting json and URI format? Does it matter? I see they can both be imported, so maybe it doesn't.

Also what is the function of "Add Token"?

I am not a computer programmer or any related profession so sometimes I miss things that seem obvious to those in the industry.

Custom icons do not persist

If you set custom icons for the codes, they will not persist after exiting and relaunching the app.

Perhaps images should be copied into app data folder with built in content provider.

Add a token with 7 digits

Hello, It's not possible to add a token with and 7 digits codes (used with some services).
Thanks in advance :)

Scan QR code quits without adding the scan to list of accounts

I have this happening with the several slack accounts (different teams) where I use the same email address. It seems that if the email address is not the same then you can add multiples with the QR scanner.

Steps to reproduce:

  1. Join a slack team with an email address
  2. Turn on 2FA for that account and scan the QR code, enter the given code into slack and finish the 2FA process
  3. Join another slack team with the same email address
  4. Turn on 2FA for that account and scan the QR code

Result:

  1. Scanner will close without adding the account

Expected result:

  1. Possibility to add multiple slack accounts

Workaround:

  1. Manually enter the time-based key in FreeOTP+ generated by slack when clicking the can't scan this barcode link

Version and device:

  1. Sony Z5 Compact running Android 7.1.1 with FreeOTP+ version 1.0 from the FDROID store

EDIT: If there's any logs I can provide then please let me know which ones you'd like to see.

Translations?

Hi, even if there are few strings to translate, it would be an useful feature have localization. I found the strings.xml file under values, but no folder for specific languages (for example values-it for Italian strings).

Can I send a pull request with the translation in Italian?

Correct Version label

Would be cool to have something like labled version releases... would make it much more easy to release in the fdroid!

Previously added keys disappear after import

Steps to reproduce:

  1. Install app
  2. Add a key
  3. Import a previous backup

expected result:

the keys imported from backup and the key added in step 2 are available in the app

actual result:

only keys from the backup are available, and the key added in step 2 is missing. What's more, adding keys with QR code doesn't work

Deleting all app data solved the issue. I imported the backup first, and added keys later.

FreeOTP+ - Design Patterns - Thesis Survey

Ladies and Gentlemen,
as part of my master thesis at the TU-Chemnitz (Germany) in Applied Computer Science (Professorship Operating Systems, Supervision Dr. Marcus Hilbrich) I search for design patterns in Open Source Android applications and investigate how they got into the source code. If you don't know what design patterns are, that's no big deal. You can still support me.

One of the applications investigated is the app "FreeOTP+".
Since you are or have been a contributor to this app, I ask you to complete this survey.

If you complete the survey, you will help me to assess how well Android application developers know about design patterns and how they get into the source code.
The questionnaire takes about 15 minutes to complete and is available in English and German.

Please fill out the questionnaire now: https://bildungsportal.sachsen.de/umfragen/limesurvey/index.php/331639?newtest=Y&lang=en

Thank you very much for your support!

Yours sincerely,
Marcel Müller
[email protected]

---- German Version: ---

Sehr geehrte Damen und Herren,
im Rahmen meiner Masterarbeit an der TU-Chemnitz (Deutschland) in Angewandter Informatik (Professur Betriebssysteme, Betreuung Dr. Marcus Hilbrich) suche ich nach Entwurfsmustern in Open Source Android-Anwendungen und untersuche, wie sie in den Quellcode gelangt sind. Sollten Sie nicht wissen, was Entwurfsmuster sind, ist das nicht schlimm. Sie können mich trotzdem unterstützen.

Eine der untersuchten Applikationen ist die App "FreeOTP+".
Da Sie Mitwirkender an dieser App sind oder waren, bitte ich Sie, diese Umfrage auszufüllen.

Wenn Sie die Umfrage ausfüllen, helfen Sie mir einzuschätzen, wie hoch der Bekanntheitsgrad von Entwurfsmustern bei Entwicklern von Android Applikationen ist und wie die Entwurfsmuster in den Quellcode gelangen.
Die Beantwortung des Fragebogens dauert nur ca. 15 Minuten und er ist in Englisch und Deutsch verfügbar.

Bitte füllen Sie jetzt den Fragebogen aus: https://bildungsportal.sachsen.de/umfragen/limesurvey/index.php/331639?newtest=Y&lang=en

Vielen Dank für Ihre Unterstützung!

Mit freundlichem Gruß,
Marcel Müller
[email protected]

Encrypted(?) Storage

I have some questions: How does the app store keys? And how does it export them to external storage (e.g. GDrive)? Do you employ encryption? Thank you!

FreeOTP+ crashes on QR codes that aren't valid OTP codes

STR:

  1. Find a QR code that isn't properly formatted as an OTP code - Stripe generated an invalid QR code for me but for obvious reasons I don't want to put that up on GitHub; https://duckduckgo.com/?q=!qrcode+strugee.net&t=ffab&ia=answer reproduces this just fine instead
  2. Start FreeOTP+ and use the option to scan the QR code
  3. Point the camera at the QR code on the screen
  4. Crash

Here's the stack trace I pulled from adb:

05-07 03:50:14.354 32075 32075 D AndroidRuntime: Shutting down VM
05-07 03:50:14.355 32075 32075 E AndroidRuntime: FATAL EXCEPTION: main
05-07 03:50:14.355 32075 32075 E AndroidRuntime: Process: org.liberty.android.freeotpplus, PID: 32075
05-07 03:50:14.355 32075 32075 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at org.fedorahosted.freeotp.Token.<init>(Token.java:60)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at org.fedorahosted.freeotp.Token.<init>(Token.java:190)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at org.fedorahosted.freeotp.Token.<init>(Token.java:194)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at org.fedorahosted.freeotp.TokenPersistence.addWithToast(TokenPersistence.java:38)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at org.fedorahosted.freeotp.add.ScanActivity$1.onPostExecute(ScanActivity.java:101)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at org.fedorahosted.freeotp.add.ScanActivity$1.onPostExecute(ScanActivity.java:97)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at android.os.AsyncTask.finish(AsyncTask.java:695)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at android.os.AsyncTask.-wrap1(Unknown Source:0)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:164)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:6494)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
05-07 03:50:14.355 32075 32075 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
05-07 03:50:14.370   894  2453 W ActivityManager:   Force finishing activity org.liberty.android.freeotpplus/org.fedorahosted.freeotp.add.ScanActivity

Proposal for standard data exchange format

I don't know how active this project is, but if the developers are still working on it, please consider adding a standard data exchange format.

It would be as simple as:

One otpauth URI per line.

This URI format is already standard (see: https://github.com/google/google-authenticator/wiki/Key-Uri-Format). All the TOTP applications already know how to parse it. So, for data exchange output, simply write one otpauth URI per line to an output file. On input, read one line at a time and parse it as an otpauth URI.

At least one developer may be willing to go along with this if others do: Authenticator-Extension/Authenticator#282 (comment).

[Only Hint] Question about using server side application

Hi Devs and excuse me for the off-topic question.
I'm very newby to 2FA, and I'm searching an application that does not include any subsystem Google.
The matter is very delicate and I would not like to create problems for users during authentication.
Could you simply suggest me the best way using FreeOTPPlus?
I manage some debian (VPS) servers.

Many thanks!

Davide

Imported backup disappear after app closes

I've imported a previously exported backup, but when I exit and enter the app again, it's empty.
I've tried importing, exporting with the actual app and then reimporting, but without success.
Version 1.0 installed with F-Droid

[Feature Request] Option to enable/disable 'Auto copy to clipboard'

Dear developer,
Every time we click on account to view the TOTP, it automatically copies the OTP to clipboard.
There should be option to enable/disable this feature. This will prevent the OTP revealing to clipboard snooping apps running background.

Kindly incorporate this feature.

App crashes on Android 8.1 on IMPORT

App is crashing while importing .db file on Android 8.1
This happens every time importing using any file explorer (stock/third party) or any file hosting service app (GDrive, dropbox etc)
Kindly fix the issue.

[Feature request] Save screen capture

Some sites only allow you to use your mobile application. If I take a screenshot and save it, they will not notice the difference.

Can you implement it? Thank you

Export and import on another device (not sure it's an issue)

I'm trying to export tokens form one device to import them on another device to have two OTP generators (they should work in parallel, one as a backup of the other). I have github and gitlub tokens active, but when imported (successfully) on the second device the OTP generated by the second device is not valid for login on gitlab.
Am I doing something wrong? Is there some part of seed/secret that is not exported?
Thank you

Current version not available in F-Droid Store

Dear team,

when I take a look in the play store the current version is 1.2, in the F-Droid store the current version is 1.0. What's the reason for this gap? Is there a bug in the build process?

Please fix this.

Kind Regards,

Krawei

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.