google / google-authenticator Goto Github PK
View Code? Open in Web Editor NEWOpen source version of Google Authenticator (except the Android app)
License: Apache License 2.0
Open source version of Google Authenticator (except the Android app)
License: Apache License 2.0
Original issue 26 created by valient on 2011-01-18T08:24:54.000Z:
Noticed that DISALLOW_REUSE was not being correctly maintained. To more easily demonstrate the problem, I extracted invalidate_timebased_code into a separate test program and called it multiple times in a loop, here is the progression:
ABABABABABABABA
" DISALLOW_REUSE 43177960
" TOTP_AUTH
1234567
ABABABABABABABA
" DISALLOW_REUSE 43177960 43177961
" TOTP_AUTH
1234567
ABABABABABABABA
" DISALLOW_REUSE 43177960 43177961 43177962
" TOTP_AUTH
1234567
ABABABABABABABA
" DISALLOW_REUSE 43177960 43177961 43177962 43177963
" TOTP_AUTH
1234567
ABABABABABABABA
" DISALLOW_REUSE43177961 43177962 43177963 43177964
" TOTP_AUTH
1234567
ABABABABABABABA
" DISALLOW_REUSE43177961 43177962 43177963 43177964 43177965
" TOTP_AUTH
1234567
ABABABABABABABA
" DISALLOW_REUSE4317796143177963 43177964 43177965 43177966
" TOTP_AUTH
1234567
... It continues to get worse every 2 iterations.
My wrapper code used for testing:
int main(int argc, char **argv)
{
char *buf = strdup("ABABABABABABABA\n"
"" DISALLOW_REUSE\n"
"" TOTP_AUTH\n"
"1234567\n");
int tm = get_timestamp();
for(int i=0; i<10; ++i, ++tm) {
invalidate_timebased_code(tm, &buf);
}
return 0;
}
Original issue 2 created by [email protected] on 2010-09-25T08:57:19.000Z:
What version of the product are you using? On what operating system?
Android
Original issue 49 created by fsundqvist on 2011-03-07T17:19:14.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
Install and use Google Authenticator on Windows Phone 7, but it doesn't exist in the marketplace.
What version of the product are you using? On what operating system?
Windows Phone 7
Please provide any additional information below.
http://create.msdn.com/en-US/
Original issue 40 created by Philip.Magalios on 2011-02-21T20:27:08.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
Expected to see a propt to enter access code.
Logged in with no interruption
What version of the product are you using? On what operating system?
Ubuntu 10.04.1 LTS
Please provide any additional information below.
When I disable PublickeyAuthentication I get the prompt to enter verification code.
Original issue 44 created by bencorrado on 2011-02-28T05:25:46.000Z:
What steps will reproduce the problem?
1.Add 5 or more unique accounts to the Android app until not all accounts can be seen at once on the main screen.
2.Scroll down and look at the bottom account/code.
3.When any code updates, the view is brought back to the top, you then have to scroll to the code of interest again.
What is the expected output? What do you see instead?
The expected output would be that the screen position/view would stay in the same place even when codes both in and outside the view have updated. Currently when any code updates, the view is brought back to the top, you then have to scroll to the code of interest again.
What version of the product are you using? On what operating system?
Android Google Authenticator 0.54 on Android 2.2.1 on a Motorola Droid
Please provide any additional information below.
Additionally it would be nice to reorder the accounts. So that ones used most often can be at the top of the list.
Original issue 43 created by nanfloyd on 2011-02-26T23:01:28.000Z:
Source is version 52 release is 54.
Original issue 38 created by fraser.scott on 2011-02-19T14:06:53.000Z:
Not sure if this should really be an 'issue' as such, but there are links to IETF site that are 404ing.
Page: https://code.google.com/p/google-authenticator/
Link to 'draft' in second paragraph: http://www.ietf.org/id/draft-mraihi-totp-timebased-06.txt
returns 404
Link to 'TOTP RFC Draft' in 'Links' menu on left: http://www.ietf.org/id/draft-mraihi-totp-timebased-05.txt
returns 404
The following URL seems to be the desired correct one:
Original issue 19 created by jongtsmith on 2010-11-14T13:38:36.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
Expect to be able to find Google Authenticator for download. Don't see this - get a not found error.
What version of the product are you using? On what operating system?
I am using a Sony X10 Mini Pro with the Android 2.1 update 1 software
Please provide any additional information below.
Can't see any reason why the app would not run on a SonyEricsson X10 Mini Pro. I see from the HTC Wildfire bug report that this may be because... "the manifest for the application does not include <supports-screens android:smallScreens="true" />
Is this app really unable to run on a QVGA (320x240) device? If it can, simply adding the supports-screens entry to the manifest should fix this problem, I believe."
Original issue 22 created by Abubakar.Masood on 2011-01-07T18:49:34.000Z:
Can generate the keys properly but gives an "UNKNOWN ERROR" instead of prompting for authorization and secret key.
Any help will be greatly appreciated.
Original issue 18 created by david.search on 2010-11-05T00:07:34.000Z:
Attempts to login with the pam module enabled will fail if a secret file is not setup. This patch causes google_authenticator() to return PAM_IGNORE and not ask for a code if the user has not setup a secret file or if there was an error reading the file.
It also changes the return code for failed authentication to PAM_AUTH_ERR instead of PAM_SESSION_ERR as I think that is more appropriate, but that shouldn't matter too much.
The existing functionality (require a code and fail if one doesn't exists) can be activated like so:
auth [success=ok default=bad] pam_google_authenticator.so
Original issue 45 created by falargle on 2011-02-28T23:36:47.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
PIN numbers should move up and down, unobscured. Instead, due to the way the ListView is sized, the bottom PIN will get cut off as it scrolls past the bottom of the ListView
What version of the product are you using? On what operating system?
0.54, under Android 2.2.1.
Please provide any additional information below.
I've attached a patch against 2b7e90a4d3ceb770aec1c8e12600ce85c3389a59 that changes the layout to expand the PIN ListView to the full amount of available space, regardless of content size. This has the side-effect of showing a divider at the bottom of the last item in the list, but this is pretty standard for Android ListViews.
Original issue 23 created by Abubakar.Masood on 2011-01-12T16:11:30.000Z:
How can a user run the google-authenticator app for a blackberry, not having internet access?
Original issue 41 created by patrick.oreilly on 2011-02-22T10:59:28.000Z:
Situation: Someone looking over your shoulder has already seen you type your password, how both you and the intruder are prompted for the OTP. All they have to do is look over your shoulder and the OTP is on full display all the time when the app is open.
Solution: The OTP is hidden (e.g. ******) with two buttons as part of the section for that account; copy and show/hide.
If the code is to be entered on the mobile device then it need never been seen by anyone, it can be copied and pasted directly into the verification page. Otherwise the use can opt to only show/hide when they are ready to use it.
Original issue 7 created by bkgoodman on 2010-10-14T18:07:45.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 36 created by gindox on 2011-02-18T13:36:04.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
This QR code is invalid.
What version of the product are you using? On what operating system?
Version 0.54
Please provide any additional information below.
Original issue 42 created by afrazkhan on 2011-02-23T12:44:13.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
Expect to login. Instead auth.log says "Invalid verification code".
What version of the product are you using? On what operating system?
No version number in source, but it's the one from 2011.02.23 at 12:00 GMT. Running Ubuntu 10.04LTS.
Please provide any additional information below.
Could this be to do with timezones? Does the application use the time in generating the verification codes?
If so, is there a way to specify the key as "counter based" instead of "time based" when generating it? I see that the Android application allows for both if you manually enter the key ID (instead of using the QR code).
Original issue 33 created by simsimkhalid on 2011-02-17T16:57:03.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
What version of the product are you using? On what operating system?
Please provide any additional information below.
Original issue 14 created by [email protected] on 2010-10-20T14:07:59.000Z:
Hi,
This is more a comment than a bug. I believe this project has great potential, and I am currently looking at ways to at ways to implement this via freeradius (mainly using the pam module at this stage). The current issue I have is the security of the scratch codes. Doing the maths on it, 8 digit codes really dont cut it, especially when implemented as a standalone system.
What I would be interested in seeing is a way in increase this number up to around 16 to 32 digits (I have already written some code to get it up to 16 - but am running into issues with not all the scratch codes being accepted, and also hitting the hard limit on the file size). An alternative would also be to add char's into the mix...
For my system the fact that the secret file is located in a user home directory on isnt really an issue... but it might also be worth centralizing all the files in one location, and having the pam module select the correct file based on the username / uid. This would also reduce the risk associated with cross mounts as someone else mentioned in another issue.
Feedback/comments welcome. Anyone after the 16 digit code let me know.
Cheers,
Jake
Original issue 37 created by 0bruj0 on 2011-02-19T04:09:40.000Z:
I didnt know where to put this so ill leave it here:
http://code.google.com/p/gauth4win/
http://code.google.com/p/gauthj2me/
I tried cloning the repository but i just keept getting server error 500 when trying to checkout so i made a new project.
Original issue 20 created by alopecoid on 2010-12-14T20:08:35.000Z:
Hi,
Please add an option to hide the notification area icon. This icon is always showing while using Google Authenticator, which takes up a lot of real estate on the notification area. Perhaps a better option would be to only show this icon while an OTP request is in progress.
Thank you!
Original issue 24 created by torqroll on 2011-01-14T13:53:21.000Z:
I enabled google authenticator for sshd access on my Ubuntu 10.04 machine by installing the pam module and adding the appropriate "required" to sshd_config. Works fine so long as I am logged into the console. But since I am using home directory encryption, when I log out, my home directory gets unmounted. Then when ssh from elsewhere, since my home directory is not mounted, ~/.google_authenticator cannot be read, so the pam_google_authenticator module will fail.
Several other people have pointed out the security risks of stashing the key and scratch codes in the clear in the user's home directory. This is different in that you must either choose to have two factor authentication, or home directory encryption, but not both. Not good.
What steps will reproduce the problem?
What version of the product are you using? On what operating system?
Would be good if the google code had a version number!
Ubuntu 10.04.
Original issue 11 created by bkgoodman on 2010-10-14T18:09:01.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 4 created by w.romain on 2010-10-04T12:04:44.000Z:
The following is feedback/discussion and not a bug report.
Although google-authenticator seems primarily designed for Google Apps, I have been experimenting with it as a way to provide multi-factor authentication with SSH.
In case there is interest, I prepared some RPMs available at:
http://cern.ch/rwartel/google-authenticator/pam-google-authenticator-1.0-1.i386.rpm (built on a RHEL5 variant)
http://cern.ch/rwartel/google-authenticator/pam-google-authenticator-1.0-1.src.rpm
http://cern.ch/rwartel/google-authenticator/pam-google-authenticator-1.0.src.tgz
http://cern.ch/rwartel/google-authenticator/pam-google-authenticator-debuginfo-1.0-1.i386.rpm (built on a RHEL5 variant)
http://cern.ch/rwartel/google-authenticator/pam-google-authenticator.spec
The system works well and the client application is also very nice, but at this stage we have decided not to deploy it on our systems.
The main issue is the fact that the secret (used to generate OTP) is available in plain text in the home directory of users.
From our perspective, this seriously undermines the security model of google-authenticator for SSH authentication:
The code could easily be modified to store the share secret in a location different from the home directories or from the server itself, for example by implementing a central service for storing the secrets (Yubikeys typically do this). However, ultimately, the issue is that the OTPs are generated based on a shared secret. Shared secrets are extremely difficult to protect and always result in additional risks to be managed.
This is of course inherent to RFC 4226, and I am surprised/curious that no other standard was chosen?
I assume you have considered using systems based on public/private keys, why were they excluded?
Other solutions seem to exist as well, for instance based on hashes, like RFC 1938/2289: "added security is provided by the property that no secret information need be stored on any system, including the server being protected."
Any feedback welcome!
Original issue 48 created by northdevonflyer on 2011-03-06T18:17:51.000Z:
What steps will reproduce the problem?
1.Use alpha numeric password with special characters"+,_"etc
2.Run Authenticator, enter account and password
3.Get Error message in red "illegal character:"
What is the expected output? What do you see instead?
Authentication code. Fails to accept password
What version of the product are you using? On what operating system?
Latest from ANdroid Market march 6th2011 Android 2.2.1
Please provide any additional information below.
samsung galaxy s GTi9000
Original issue 47 created by davidvatz on 2011-03-06T17:56:45.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
What version of the product are you using? On what operating system?
Using Google Authenticator 1.1.0, on Blackberry 6.0 Bundle 1741 (v6.0.0.431, Platform 4.4.0.315)
Please provide any additional information below.
Original issue 30 created by darkwarez.pl on 2011-02-15T03:33:27.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
I want symbian os authenticator, i see void instead
What version of the product are you using? On what operating system?
i cant use any version, im using symbian os nokia
Please provide any additional information below.
please tell me if authenticator for symbian on is planned?
Original issue 39 created by fraser.scott on 2011-02-19T23:10:21.000Z:
Hi,
I have created a couple of patches to allow me to use google-authenticator with OpenVPN.
0001-Added-lpam.patch
This simple adds -lpam to the Makefile so OpenVPN can dlopen
0002-supports-AUTHTOK.patch
This adds support for AUTHTOK so that you can enter the 6 digit code immediately followed by the unix password for two-factor auth. Using OpenVPN through Gnome's network manager doesn't allow you to have multiple prompts it seems, so both factors can be entered at once.
Example PAM config for common-auth:
auth required pam_google_authenticator.so
auth required pam_unix.so nullok_secure try_first_pass
Please note, I'm not a C developer and I haven't fully tested my patch yet, but I thought it might be useful.
Cheers,
zeroXten
Original issue 12 created by bkgoodman on 2010-10-14T18:09:20.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 1 created by mannjona on 2010-09-24T02:58:11.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
it is not found
What version of the product are you using? On what operating system?
HTC Wildfire running Andoid 2.1
Please provide any additional information below.
I believe this is because the manifest for the application does not include <supports-screens android:smallScreens="true" />
Is this app really unable to run on a QVGA (320x240) device? If it can, simply adding the supports-screens entry to the manifest should fix this problem, I believe.
Original issue 6 created by bkgoodman on 2010-10-14T18:07:18.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 8 created by bkgoodman on 2010-10-14T18:08:24.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 17 created by takahashi.shuhei on 2010-11-04T16:41:28.000Z:
"make install" invokes sudo to install PAM modules to /lib/security, but this is really bad behavior.
You should instruct users to type "sudo make install" instead, or just removing "sudo" is okay since it's a common manner to do that.
Reproduced in current hg head (74cba81d48).
Original issue 9 created by bkgoodman on 2010-10-14T18:08:28.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 34 created by Abubakar.Masood on 2011-02-17T17:14:32.000Z:
Any possible way to incorporate google authenticator with pptp access with MS CHAP v2 encryption and working with winbind and Samba?
Any help will be greatly appreciated
Original issue 21 created by voyager.106 on 2010-12-15T21:09:21.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
What version of the product are you using? On what operating system?
Original issue 28 created by valient on 2011-01-20T08:27:03.000Z:
Fix DISALLOW_REUSE updating. See issue #ย 26
Original issue 10 created by bkgoodman on 2010-10-14T18:08:51.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 29 created by david.seese on 2011-02-13T23:46:41.000Z:
Can you please add a version for WebOS?
Original issue 32 created by [email protected] on 2011-02-15T23:42:53.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
User Y should be able to login without using two verification when the $HOME/.google_authenticator doesn't exist; this allows testing of two step verification without having to enable it for all users.
What version of the product are you using? On what operating system?
Debian. 9:77c50ff7b7fa.
Please provide any additional information below.
None.
Original issue 5 created by [email protected] on 2010-10-14T13:56:50.000Z:
It would be nice to have the option to encrypt the key on android/iphone/blackberry such that the user must enter some pin before using the key to generate a HOTP/TOTP result (this is similar to how some SecurID devices work)
Original issue 27 created by valient on 2011-01-18T08:49:42.000Z:
After enabling the PAM module, only users that have setup google authenticator can login.
It may be desirable to allow incremental deployment - allow making authenticator optional if a user hasn't configured it.
diff -r bd9e0af3a6d5 libpam/pam_google_authenticator.c
--- a/libpam/pam_google_authenticator.c Tue Dec 07 11:49:07 2010 -0800
+++ b/libpam/pam_google_authenticator.c Tue Jan 18 00:44:06 2011 -0800
@@ -28,6 +28,7 @@
#include <syslog.h>
#include <time.h>
#include <unistd.h>
+#include <errno.h>
#define PAM_SM_AUTH
#define PAM_SM_SESSION
@@ -571,6 +575,19 @@ static int google_authenticator(pam_hand
}
}
+#ifdef ALLOW_UNCONFIGURED_USERS
(secret_filename != NULL) &&
(access(secret_filename, F_OK) == -1) &&
(errno == ENOENT)) {
// Clean up
if (secret) {
memset(secret, 0, secretLen);
Original issue 15 created by bkgoodman on 2010-10-20T19:42:03.000Z:
I have this project built and installed on my system, but I cannot get it working at all.
I just installed the newest, stable version of openssh, and compiled it --with-pam support. I have the "auth required" line at the top of /etc/pam.d/ssh and the ssh file set to "UsePAM yes" and "ChallengeResponseAuthentication yes".
Despite starting and stoping sshd, and trying all sorts of combination of enabling password and secret key info, it still appears as nothing is happening.
I get no mention of even trying to access the module in /var/log/messages or /var/log/secure.
I have tried running sshd in debug mode, and don't see any explicit references to it (not sure if I should - I do see some references to PAM though).
I am able to login normally through whatever methods I allow - It just doesn't do anything with the module.
Any idea how I can go about debugging?
-BKG
Original issue 35 created by [email protected] on 2011-02-17T21:52:38.000Z:
Most OTP implementations (in fact every one I've seen except google's) requires and generates keys in base 16. If the app is to be useful with anything except google logins (and I personally have no wish to have multiple different authenticator apps on my phone) it needs to support that.
Original issue 25 created by jim.kleckner on 2011-01-17T19:12:34.000Z:
In addition to PAM support, it would be extremely useful to have a reference implementation of an Apache auth module for web services.
Original issue 31 created by cyrusjk on 2011-02-15T19:36:05.000Z:
Like secure tokens, it is helpful to know that the currently displayed code is about to change. It is difficult to verify you entered the correct code if the displayed code has already changed. Tokens I have used may show a declining bar that reaches zero as the time for that value ends, or a blinking icon when the validity of that value is about to end. A similar or cooler approach could be applied here.
Original issue 46 created by lionel.benson on 2011-03-03T16:31:59.000Z:
>What steps will reproduce the problem?
Request verification code by text (since authenticator not working)
>What is the expected output? What do you see instead?
Each time a receive a text it is from a different phone number
>What version of the product are you using? On what operating system?
N/A
> Please provide any additional information below.
Receiving text from different phone numbers makes it different to operate a spam control on my phone. If the number is the same then I can add this to my phone book. I am not sure if this is being done for security reasons but other institutions that use a similar texting system use the same phone number or ID to send their verification codes, e.g. Bank of America uses the same number.
Thank you.
Original issue 3 created by w.romain on 2010-09-26T15:36:40.000Z:
The user should be asked for a verification code, instead only the standard password prompt is displayed:
$ ssh 192.168.3.5
[email protected]'s password:
Permission denied, please try again.
Even when the correct password is typed, sshd always returns "Permission denied, please try again." to the user.
Syslog displays:
Sep 26 17:26:28 localhost sshd(pam_google_authenticator)[8051]: Did not receive verification code from user
Sep 26 17:26:30 localhost sshd[8051]: Failed password for XXXXXXXX from 192.168.3.2 port 57761 ssh2
libpam has been cloned today (26th September, 17:00 CEST).
This issue could be replicated on fully patched Ubuntu Lucid and RHEL 5.4 systems.
Not sure if this is simply a PAM configuration issue.
On the RHEL 5.4 test system, the /etc/pam.d/sshd file contains:
auth required pam_google_authenticator.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so
Original issue 13 created by bkgoodman on 2010-10-14T18:24:41.000Z:
I am running a Fedora Core 6 system (Don't laugh).
Upon running "make install" and trying to login, the login didn't work and /var/log/secure showed the following:
PAM unable to dlopen(/lib64/security/pam_google_authenticator.so)
It turns out, the "make install" had placed this file in /lib/security rather than in /lib64/security, which was required by my system.
Moving the file into the appropriate directory resolved the issue.
Original issue 50 created by denis.shaposhnikov on 2011-03-11T21:21:49.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
I expect it'll finish build without any problems. Instead it stops with next error:
pam_google_authenticator.c:26:23: error: sys/fsuid.h: No such file or
directory
What version of the product are you using? On what operating system?
I'm trying to build latest version from the hg on FreeBSD 8.2-RELEASE.
Please provide any additional information below.
Original issue 16 created by waylonis on 2010-10-28T19:08:57.000Z:
What steps will reproduce the problem?
What is the expected output? What do you see instead?
I would expect, for both counter and time-based passwords, that it would automatically choose a new password. Instead, I see the same password and have to press on the refresh button.
What version of the product are you using? On what operating system?
1.0.3.322 on iOS 4.1
Please provide any additional information below.
I would be great to add a setting to say "Generate new password(s) whenever I launch/activate the app".
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.