Version Description
- Google chart API replaced with jquery-qrcode
- QR codes now contain a heading saying WordPress (Feature request by Flemming Mahler)
- Danish translation & updated .pot file.
- Plugin now logs login attempts recognized as Man-in-the-middle attacks.
Download this release
Release Info
Developer | Henrik.Schack |
Plugin | Google Authenticator |
Version | 0.47 |
Comparing to | |
See all releases |
Code changes from version 0.46 to 0.47
- google-authenticator.php +38 -29
- jquery.qrcode.min.js +28 -0
- lang/google-authenticator-da_DK.mo +0 -0
- lang/google-authenticator-da_DK.po +113 -0
- lang/google-authenticator-es_ES.mo +0 -0
- lang/google-authenticator-es_ES.po +131 -0
- lang/google-authenticator-fr_FR.mo +0 -0
- lang/google-authenticator-fr_FR.po +133 -0
- lang/google-authenticator.pot +33 -40
- readme.txt +45 -23
- screenshot-5.jpg +0 -0
google-authenticator.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Google Authenticator
|
|
4 |
Plugin URI: http://henrik.schack.dk/google-authenticator-for-wordpress
|
5 |
Description: Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry app as One Time Password generator.
|
6 |
Author: Henrik Schack
|
7 |
-
Version: 0.
|
8 |
Author URI: http://henrik.schack.dk/
|
9 |
Compatibility: WordPress 3.8
|
10 |
Text Domain: google-authenticator
|
@@ -22,6 +22,7 @@ Domain Path: /lang
|
|
22 |
Thanks to Ian Dunn for fixing some depricated function calls.
|
23 |
Thanks to Kimmo Suominen for fixing the iPhone description issue.
|
24 |
Thanks to Alex Concha for some security tips.
|
|
|
25 |
|
26 |
----------------------------------------------------------------------------
|
27 |
|
@@ -64,17 +65,21 @@ function init() {
|
|
64 |
add_action( 'login_footer', array( $this, 'loginfooter' ) );
|
65 |
add_filter( 'authenticate', array( $this, 'check_otp' ), 50, 3 );
|
66 |
|
67 |
-
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
|
68 |
add_action( 'wp_ajax_GoogleAuthenticator_action', array( $this, 'ajax_callback' ) );
|
|
|
69 |
|
70 |
add_action( 'personal_options_update', array( $this, 'personal_options_update' ) );
|
71 |
add_action( 'profile_personal_options', array( $this, 'profile_personal_options' ) );
|
72 |
add_action( 'edit_user_profile', array( $this, 'edit_user_profile' ) );
|
73 |
add_action( 'edit_user_profile_update', array( $this, 'edit_user_profile_update' ) );
|
74 |
|
|
|
|
|
75 |
load_plugin_textdomain( 'google-authenticator', false, basename( dirname( __FILE__ ) ) . '/lang' );
|
76 |
}
|
77 |
|
|
|
78 |
/**
|
79 |
* Check the verification code entered by the user.
|
80 |
*/
|
@@ -122,11 +127,12 @@ function verify( $secretkey, $thistry, $relaxedmode, $lasttimeslot ) {
|
|
122 |
// meaning current login attempt has to be in the future compared to
|
123 |
// last successful login.
|
124 |
if ( $lasttimeslot >= ($tm+$i) ) {
|
|
|
125 |
return false;
|
126 |
}
|
127 |
// Return timeslot in which login happened.
|
128 |
return $tm+$i;
|
129 |
-
}
|
130 |
}
|
131 |
return false;
|
132 |
}
|
@@ -145,6 +151,14 @@ function create_secret() {
|
|
145 |
return $secret;
|
146 |
}
|
147 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
|
149 |
/**
|
150 |
* Add verification code field to login form.
|
@@ -291,14 +305,14 @@ function profile_personal_options() {
|
|
291 |
echo "<td>\n";
|
292 |
echo "<input name=\"GA_secret\" id=\"GA_secret\" value=\"{$GA_secret}\" readonly=\"readonly\" type=\"text\" size=\"25\" />";
|
293 |
echo "<input name=\"GA_newsecret\" id=\"GA_newsecret\" value=\"".__("Create new secret",'google-authenticator')."\" type=\"button\" class=\"button\" />";
|
294 |
-
echo "<input name=\"show_qr\" id=\"show_qr\" value=\"".__("Show/Hide QR code",'google-authenticator')."\" type=\"button\" class=\"button\" onclick=\"
|
295 |
echo "</td>\n";
|
296 |
echo "</tr>\n";
|
297 |
|
298 |
echo "<tr>\n";
|
299 |
echo "<th></th>\n";
|
300 |
echo "<td><div id=\"GA_QR_INFO\" style=\"display: none\" >";
|
301 |
-
echo "<
|
302 |
|
303 |
echo '<span class="description"><br/> ' . __( 'Scan this with the Google Authenticator app.', 'google-authenticator' ) . '</span>';
|
304 |
echo "</div></td>\n";
|
@@ -316,44 +330,41 @@ function profile_personal_options() {
|
|
316 |
echo "<td>\n";
|
317 |
echo "<input name=\"GA_password\" id=\"GA_password\" readonly=\"readonly\" value=\"".$GA_password."\" type=\"text\" size=\"25\" />";
|
318 |
echo "<input name=\"GA_createpassword\" id=\"GA_createpassword\" value=\"".__("Create new password",'google-authenticator')."\" type=\"button\" class=\"button\" />";
|
319 |
-
echo "<span class=\"description\" id=\"GA_passworddesc\">".__(' Password is not stored in cleartext, this is your only chance to see it.','google-authenticator')."</span>\n";
|
320 |
echo "</td>\n";
|
321 |
echo "</tr>\n";
|
322 |
}
|
323 |
-
|
324 |
|
325 |
echo "</tbody></table>\n";
|
326 |
echo "<script type=\"text/javascript\">\n";
|
327 |
echo "var GAnonce='".wp_create_nonce('GoogleAuthenticatoraction')."';\n";
|
328 |
|
329 |
-
echo "var qrcodewarningtext = '";
|
330 |
-
echo __( "WARNING:\\n\\nShowing the QR code will use the Google Chart API to do so.\\nIf you do not trust Google, please press Cancel and enter the code manually.",'google-authenticator' );
|
331 |
-
echo "';\n";
|
332 |
-
|
333 |
echo <<<ENDOFJS
|
334 |
-
|
335 |
jQuery('#GA_newsecret').bind('click', function() {
|
|
|
|
|
336 |
var data=new Object();
|
337 |
data['action'] = 'GoogleAuthenticator_action';
|
338 |
data['nonce'] = GAnonce;
|
339 |
jQuery.post(ajaxurl, data, function(response) {
|
340 |
jQuery('#GA_secret').val(response['new-secret']);
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
jQuery('#GA_QR_INFO').show('slow');
|
345 |
});
|
346 |
});
|
347 |
|
|
|
348 |
jQuery('#GA_description').bind('focus blur change keyup', function() {
|
349 |
-
// Only
|
350 |
if (jQuery('#GA_QR_INFO').is(':visible')) {
|
351 |
-
|
352 |
-
|
353 |
-
jQuery('#GA_QRCODE').attr('src',qrcodeurl);
|
354 |
}
|
355 |
});
|
356 |
|
|
|
357 |
jQuery('#GA_createpassword').bind('click',function() {
|
358 |
var data=new Object();
|
359 |
data['action'] = 'GoogleAuthenticator_action';
|
@@ -385,16 +396,14 @@ function profile_personal_options() {
|
|
385 |
}
|
386 |
}
|
387 |
|
388 |
-
function
|
389 |
if (jQuery('#GA_QR_INFO').is(':hidden')) {
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
jQuery('#GA_QRCODE').attr('src',qrcodeurl);
|
394 |
-
jQuery('#GA_QR_INFO').show('slow');
|
395 |
-
}
|
396 |
} else {
|
397 |
jQuery('#GA_QR_INFO').hide('slow');
|
|
|
398 |
}
|
399 |
}
|
400 |
</script>
|
@@ -516,10 +525,10 @@ function edit_user_profile_update() {
|
|
516 |
function ajax_callback() {
|
517 |
global $user_id;
|
518 |
|
519 |
-
// Some AJAX security
|
520 |
check_ajax_referer( 'GoogleAuthenticatoraction', 'nonce' );
|
521 |
|
522 |
-
// Create new secret
|
523 |
$secret = $this->create_secret();
|
524 |
|
525 |
$result = array( 'new-secret' => $secret );
|
4 |
Plugin URI: http://henrik.schack.dk/google-authenticator-for-wordpress
|
5 |
Description: Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry app as One Time Password generator.
|
6 |
Author: Henrik Schack
|
7 |
+
Version: 0.47
|
8 |
Author URI: http://henrik.schack.dk/
|
9 |
Compatibility: WordPress 3.8
|
10 |
Text Domain: google-authenticator
|
22 |
Thanks to Ian Dunn for fixing some depricated function calls.
|
23 |
Thanks to Kimmo Suominen for fixing the iPhone description issue.
|
24 |
Thanks to Alex Concha for some security tips.
|
25 |
+
Thanks to S�bastien Prunier for his Spanish and French translations.
|
26 |
|
27 |
----------------------------------------------------------------------------
|
28 |
|
65 |
add_action( 'login_footer', array( $this, 'loginfooter' ) );
|
66 |
add_filter( 'authenticate', array( $this, 'check_otp' ), 50, 3 );
|
67 |
|
68 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
69 |
add_action( 'wp_ajax_GoogleAuthenticator_action', array( $this, 'ajax_callback' ) );
|
70 |
+
}
|
71 |
|
72 |
add_action( 'personal_options_update', array( $this, 'personal_options_update' ) );
|
73 |
add_action( 'profile_personal_options', array( $this, 'profile_personal_options' ) );
|
74 |
add_action( 'edit_user_profile', array( $this, 'edit_user_profile' ) );
|
75 |
add_action( 'edit_user_profile_update', array( $this, 'edit_user_profile_update' ) );
|
76 |
|
77 |
+
add_action('admin_enqueue_scripts', array($this, 'add_qrcode_script'));
|
78 |
+
|
79 |
load_plugin_textdomain( 'google-authenticator', false, basename( dirname( __FILE__ ) ) . '/lang' );
|
80 |
}
|
81 |
|
82 |
+
|
83 |
/**
|
84 |
* Check the verification code entered by the user.
|
85 |
*/
|
127 |
// meaning current login attempt has to be in the future compared to
|
128 |
// last successful login.
|
129 |
if ( $lasttimeslot >= ($tm+$i) ) {
|
130 |
+
error_log("Google Authenticator plugin: Man-in-the-middle attack detected (Could also be 2 legit login attempts within the same 30 second period)");
|
131 |
return false;
|
132 |
}
|
133 |
// Return timeslot in which login happened.
|
134 |
return $tm+$i;
|
135 |
+
}
|
136 |
}
|
137 |
return false;
|
138 |
}
|
151 |
return $secret;
|
152 |
}
|
153 |
|
154 |
+
/**
|
155 |
+
* Add the script to generate QR codes.
|
156 |
+
*/
|
157 |
+
function add_qrcode_script() {
|
158 |
+
wp_enqueue_script('jquery');
|
159 |
+
wp_register_script('qrcode_script', plugins_url('jquery.qrcode.min.js', __FILE__),array("jquery"));
|
160 |
+
wp_enqueue_script('qrcode_script');
|
161 |
+
}
|
162 |
|
163 |
/**
|
164 |
* Add verification code field to login form.
|
305 |
echo "<td>\n";
|
306 |
echo "<input name=\"GA_secret\" id=\"GA_secret\" value=\"{$GA_secret}\" readonly=\"readonly\" type=\"text\" size=\"25\" />";
|
307 |
echo "<input name=\"GA_newsecret\" id=\"GA_newsecret\" value=\"".__("Create new secret",'google-authenticator')."\" type=\"button\" class=\"button\" />";
|
308 |
+
echo "<input name=\"show_qr\" id=\"show_qr\" value=\"".__("Show/Hide QR code",'google-authenticator')."\" type=\"button\" class=\"button\" onclick=\"ShowOrHideQRCode();\" />";
|
309 |
echo "</td>\n";
|
310 |
echo "</tr>\n";
|
311 |
|
312 |
echo "<tr>\n";
|
313 |
echo "<th></th>\n";
|
314 |
echo "<td><div id=\"GA_QR_INFO\" style=\"display: none\" >";
|
315 |
+
echo "<div id=\"GA_QRCODE\"/></div>";
|
316 |
|
317 |
echo '<span class="description"><br/> ' . __( 'Scan this with the Google Authenticator app.', 'google-authenticator' ) . '</span>';
|
318 |
echo "</div></td>\n";
|
330 |
echo "<td>\n";
|
331 |
echo "<input name=\"GA_password\" id=\"GA_password\" readonly=\"readonly\" value=\"".$GA_password."\" type=\"text\" size=\"25\" />";
|
332 |
echo "<input name=\"GA_createpassword\" id=\"GA_createpassword\" value=\"".__("Create new password",'google-authenticator')."\" type=\"button\" class=\"button\" />";
|
333 |
+
echo "<span class=\"description\" id=\"GA_passworddesc\"> ".__(' Password is not stored in cleartext, this is your only chance to see it.','google-authenticator')."</span>\n";
|
334 |
echo "</td>\n";
|
335 |
echo "</tr>\n";
|
336 |
}
|
|
|
337 |
|
338 |
echo "</tbody></table>\n";
|
339 |
echo "<script type=\"text/javascript\">\n";
|
340 |
echo "var GAnonce='".wp_create_nonce('GoogleAuthenticatoraction')."';\n";
|
341 |
|
|
|
|
|
|
|
|
|
342 |
echo <<<ENDOFJS
|
343 |
+
//Create new secret and display it
|
344 |
jQuery('#GA_newsecret').bind('click', function() {
|
345 |
+
// Remove existing QRCode
|
346 |
+
jQuery('#GA_QRCODE').html("");
|
347 |
var data=new Object();
|
348 |
data['action'] = 'GoogleAuthenticator_action';
|
349 |
data['nonce'] = GAnonce;
|
350 |
jQuery.post(ajaxurl, data, function(response) {
|
351 |
jQuery('#GA_secret').val(response['new-secret']);
|
352 |
+
var qrcode="otpauth://totp/WordPress:"+escape(jQuery('#GA_description').val())+"?secret="+jQuery('#GA_secret').val()+"&issuer=WordPress";
|
353 |
+
jQuery('#GA_QRCODE').qrcode(qrcode);
|
354 |
+
jQuery('#GA_QR_INFO').show('slow');
|
|
|
355 |
});
|
356 |
});
|
357 |
|
358 |
+
// If the user starts modifying the description, hide the qrcode
|
359 |
jQuery('#GA_description').bind('focus blur change keyup', function() {
|
360 |
+
// Only remove QR Code if it's visible
|
361 |
if (jQuery('#GA_QR_INFO').is(':visible')) {
|
362 |
+
jQuery('#GA_QR_INFO').hide('slow');
|
363 |
+
jQuery('#GA_QRCODE').html("");
|
|
|
364 |
}
|
365 |
});
|
366 |
|
367 |
+
// Create new app password
|
368 |
jQuery('#GA_createpassword').bind('click',function() {
|
369 |
var data=new Object();
|
370 |
data['action'] = 'GoogleAuthenticator_action';
|
396 |
}
|
397 |
}
|
398 |
|
399 |
+
function ShowOrHideQRCode() {
|
400 |
if (jQuery('#GA_QR_INFO').is(':hidden')) {
|
401 |
+
var qrcode="otpauth://totp/WordPress:"+escape(jQuery('#GA_description').val())+"?secret="+jQuery('#GA_secret').val()+"&issuer=WordPress";
|
402 |
+
jQuery('#GA_QRCODE').qrcode(qrcode);
|
403 |
+
jQuery('#GA_QR_INFO').show('slow');
|
|
|
|
|
|
|
404 |
} else {
|
405 |
jQuery('#GA_QR_INFO').hide('slow');
|
406 |
+
jQuery('#GA_QRCODE').html("");
|
407 |
}
|
408 |
}
|
409 |
</script>
|
525 |
function ajax_callback() {
|
526 |
global $user_id;
|
527 |
|
528 |
+
// Some AJAX security.
|
529 |
check_ajax_referer( 'GoogleAuthenticatoraction', 'nonce' );
|
530 |
|
531 |
+
// Create new secret.
|
532 |
$secret = $this->create_secret();
|
533 |
|
534 |
$result = array( 'new-secret' => $secret );
|
jquery.qrcode.min.js
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
|
2 |
+
write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
|
3 |
+
for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
|
4 |
+
7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
|
5 |
+
0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
|
6 |
+
setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
|
7 |
+
j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
|
8 |
+
b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
|
9 |
+
c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
|
10 |
+
0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
|
11 |
+
(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
|
12 |
+
78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
|
13 |
+
j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
|
14 |
+
a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
|
15 |
+
a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
|
16 |
+
2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
|
17 |
+
LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
|
18 |
+
this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
|
19 |
+
[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
|
20 |
+
116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
|
21 |
+
43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
|
22 |
+
3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
|
23 |
+
55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
|
24 |
+
45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
|
25 |
+
(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
|
26 |
+
correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
|
27 |
+
j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
|
28 |
+
d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);
|
lang/google-authenticator-da_DK.mo
ADDED
Binary file
|
lang/google-authenticator-da_DK.po
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Google Authenticator\n"
|
4 |
+
"POT-Creation-Date: 2014-01-11 08:17+0100\n"
|
5 |
+
"PO-Revision-Date: 2014-01-11 08:20+0100\n"
|
6 |
+
"Last-Translator: Henrik Schack <henrik@schack.dk>\n"
|
7 |
+
"Language-Team: \n"
|
8 |
+
"Language: da\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.6.3\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
15 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
16 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
17 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
18 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
|
21 |
+
#: google-authenticator.php:166
|
22 |
+
msgid ""
|
23 |
+
"If you don't have Google Authenticator enabled for your WordPress account, "
|
24 |
+
"leave this field empty."
|
25 |
+
msgstr ""
|
26 |
+
"Hvis ikke du har aktiveret Google Authenticator for din konto, så lad være "
|
27 |
+
"med at skrive noget her."
|
28 |
+
|
29 |
+
#: google-authenticator.php:166
|
30 |
+
msgid "Google Authenticator code"
|
31 |
+
msgstr "Google Authenticator kode"
|
32 |
+
|
33 |
+
#: google-authenticator.php:231
|
34 |
+
msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
|
35 |
+
msgstr "<strong>ERROR</strong>: Google Authenticator kodeordet er forkert."
|
36 |
+
|
37 |
+
#: google-authenticator.php:234
|
38 |
+
msgid ""
|
39 |
+
"<strong>ERROR</strong>: The Google Authenticator code is incorrect or has "
|
40 |
+
"expired."
|
41 |
+
msgstr ""
|
42 |
+
"<strong>ERROR</strong>: Google Authenticator koden er forkert eller udløbet."
|
43 |
+
|
44 |
+
#: google-authenticator.php:274
|
45 |
+
msgid "WordPressBlog"
|
46 |
+
msgstr "WordPressBlog"
|
47 |
+
|
48 |
+
#: google-authenticator.php:277 google-authenticator.php:469
|
49 |
+
msgid "Google Authenticator Settings"
|
50 |
+
msgstr "Google Authenticator indstillinger"
|
51 |
+
|
52 |
+
#: google-authenticator.php:282 google-authenticator.php:481
|
53 |
+
msgid "Active"
|
54 |
+
msgstr "Aktiv"
|
55 |
+
|
56 |
+
#: google-authenticator.php:290
|
57 |
+
msgid "Relaxed mode"
|
58 |
+
msgstr "Afslappet tilstand"
|
59 |
+
|
60 |
+
#: google-authenticator.php:292
|
61 |
+
msgid ""
|
62 |
+
" Relaxed mode allows for more time drifting on your phone clock (±4 "
|
63 |
+
"min)."
|
64 |
+
msgstr ""
|
65 |
+
"Afslappet tilstand tillader mere upræcis tid på din telefon (±4 min)."
|
66 |
+
|
67 |
+
#: google-authenticator.php:297
|
68 |
+
msgid "Description"
|
69 |
+
msgstr "Beskrivelse"
|
70 |
+
|
71 |
+
#: google-authenticator.php:298
|
72 |
+
msgid ""
|
73 |
+
" Description that you'll see in the Google Authenticator app on your phone."
|
74 |
+
msgstr "Beskrivelsen du vil se i Google Authenticator app'en på din telefon."
|
75 |
+
|
76 |
+
#: google-authenticator.php:302
|
77 |
+
msgid "Secret"
|
78 |
+
msgstr "Hemmelig kode"
|
79 |
+
|
80 |
+
#: google-authenticator.php:305
|
81 |
+
msgid "Create new secret"
|
82 |
+
msgstr "Opret ny hemmelig kode"
|
83 |
+
|
84 |
+
#: google-authenticator.php:306
|
85 |
+
msgid "Show/Hide QR code"
|
86 |
+
msgstr "Vis/Gem QR kode"
|
87 |
+
|
88 |
+
#: google-authenticator.php:315
|
89 |
+
msgid "Scan this with the Google Authenticator app."
|
90 |
+
msgstr "Scan dette med Google Authenticator app'en."
|
91 |
+
|
92 |
+
#: google-authenticator.php:320
|
93 |
+
msgid "Enable App password"
|
94 |
+
msgstr "Aktiver app kodeord"
|
95 |
+
|
96 |
+
#: google-authenticator.php:322
|
97 |
+
msgid " Enabling an App password will decrease your overall login security."
|
98 |
+
msgstr ""
|
99 |
+
"Aktiverer du app kodeords featuren, påvirker det din sikkerhed generelt."
|
100 |
+
|
101 |
+
#: google-authenticator.php:330
|
102 |
+
msgid "Create new password"
|
103 |
+
msgstr "Opret nyt kodeord"
|
104 |
+
|
105 |
+
#: google-authenticator.php:331
|
106 |
+
msgid ""
|
107 |
+
" Password is not stored in cleartext, this is your only chance to see it."
|
108 |
+
msgstr ""
|
109 |
+
"Kodeordet gemmes ikke i klartekst, dette er din eneste chance for at se det."
|
110 |
+
|
111 |
+
#: google-authenticator.php:474
|
112 |
+
msgid "Hide settings from user"
|
113 |
+
msgstr "Skjul indstillinger for bruger"
|
lang/google-authenticator-es_ES.mo
ADDED
Binary file
|
lang/google-authenticator-es_ES.po
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2010 Google Authenticator
|
2 |
+
# This file is distributed under the same license as the Google Authenticator package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Google Authenticator 0.37\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/tag/google-authenticator\n"
|
7 |
+
"POT-Creation-Date: 2011-08-21 14:25:45+00:00\n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2014-01-11 10:07+0100\n"
|
12 |
+
"Last-Translator: \n"
|
13 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
+
"X-Generator: Poedit 1.6.3\n"
|
15 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
16 |
+
"Language: es_ES\n"
|
17 |
+
|
18 |
+
#: google-authenticator.php:131
|
19 |
+
msgid ""
|
20 |
+
"If you don't have Google Authenticator enabled for your WordPress account, "
|
21 |
+
"leave this field empty."
|
22 |
+
msgstr ""
|
23 |
+
"Si no tiene Google Authenticator habilitado en su cuenta de WordPress, deje "
|
24 |
+
"este campo vacío."
|
25 |
+
|
26 |
+
#: google-authenticator.php:131
|
27 |
+
msgid "Google Authenticator code"
|
28 |
+
msgstr "Código Google Authenticator"
|
29 |
+
|
30 |
+
#: google-authenticator.php:176
|
31 |
+
msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
|
32 |
+
msgstr "<strong>ERROR</strong>: El codigo es incorrecto."
|
33 |
+
|
34 |
+
#: google-authenticator.php:179
|
35 |
+
msgid ""
|
36 |
+
"<strong>ERROR</strong>: The Google Authenticator code is incorrect or has "
|
37 |
+
"expired."
|
38 |
+
msgstr "<strong>ERROR</strong>: El código es incorrecto o caducado."
|
39 |
+
|
40 |
+
#: google-authenticator.php:215
|
41 |
+
msgid "WordPress Blog"
|
42 |
+
msgstr "Blog de WordPress"
|
43 |
+
|
44 |
+
#: google-authenticator.php:218 google-authenticator.php:392
|
45 |
+
msgid "Google Authenticator Settings"
|
46 |
+
msgstr "Opciones Google Authenticator"
|
47 |
+
|
48 |
+
#: google-authenticator.php:223 google-authenticator.php:396
|
49 |
+
msgid "Active"
|
50 |
+
msgstr "Activar"
|
51 |
+
|
52 |
+
#: google-authenticator.php:235
|
53 |
+
msgid "Relaxed mode"
|
54 |
+
msgstr "Modo relajado"
|
55 |
+
|
56 |
+
#: google-authenticator.php:237
|
57 |
+
msgid ""
|
58 |
+
" Relaxed mode allows for more time drifting on your phone clock (±4 "
|
59 |
+
"min)."
|
60 |
+
msgstr ""
|
61 |
+
"El modo relajado permite tener más tiempo de reloj en su teléfono (±4 "
|
62 |
+
"min)."
|
63 |
+
|
64 |
+
#: google-authenticator.php:242
|
65 |
+
msgid "Description"
|
66 |
+
msgstr "Descripción"
|
67 |
+
|
68 |
+
#: google-authenticator.php:243
|
69 |
+
msgid ""
|
70 |
+
" Description that you'll see in the Google Authenticator app on your phone."
|
71 |
+
msgstr ""
|
72 |
+
"Descripción que se verá en la aplicación Google Authenticator en su teléfono."
|
73 |
+
|
74 |
+
#: google-authenticator.php:247
|
75 |
+
msgid "Secret"
|
76 |
+
msgstr "Secreto"
|
77 |
+
|
78 |
+
#: google-authenticator.php:250
|
79 |
+
msgid "Create new secret"
|
80 |
+
msgstr "Crear nueva clave secreta"
|
81 |
+
|
82 |
+
#: google-authenticator.php:251
|
83 |
+
msgid "Show/Hide QR code"
|
84 |
+
msgstr "Mostar/Esconder QR Code"
|
85 |
+
|
86 |
+
#: google-authenticator.php:259
|
87 |
+
msgid "Scan this with the Google Authenticator app."
|
88 |
+
msgstr "Escanear esto con la aplicación Google Authenticator."
|
89 |
+
|
90 |
+
#: google-authenticator.php:264
|
91 |
+
msgid "Enable App password"
|
92 |
+
msgstr "Permitir contraseña de aplicación"
|
93 |
+
|
94 |
+
#: google-authenticator.php:266
|
95 |
+
msgid " Enabling an App password will decrease your overall login security."
|
96 |
+
msgstr "Permitir una contraseña de aplicación disminuirá su seguridad global."
|
97 |
+
|
98 |
+
#: google-authenticator.php:274
|
99 |
+
msgid "Create new password"
|
100 |
+
msgstr "Crear nueva contraseña"
|
101 |
+
|
102 |
+
#: google-authenticator.php:275
|
103 |
+
msgid ""
|
104 |
+
" Password is not stored in cleartext, this is your only chance to see it."
|
105 |
+
msgstr ""
|
106 |
+
"La contraseña no está almacenada en formato de texto, es su única "
|
107 |
+
"oportunidad de verla."
|
108 |
+
|
109 |
+
#. Plugin Name of the plugin/theme
|
110 |
+
msgid "Google Authenticator"
|
111 |
+
msgstr ""
|
112 |
+
|
113 |
+
#. Plugin URI of the plugin/theme
|
114 |
+
msgid "http://henrik.schack.dk/google-authenticator-for-wordpress"
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#. Description of the plugin/theme
|
118 |
+
msgid ""
|
119 |
+
"Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry "
|
120 |
+
"app as One Time Password generator."
|
121 |
+
msgstr ""
|
122 |
+
"La autentificación en dos pasos por wordpress utiliza una app Android/iPhone/"
|
123 |
+
"Blackberry como 'One Time Password generator.'"
|
124 |
+
|
125 |
+
#. Author of the plugin/theme
|
126 |
+
msgid "Henrik Schack"
|
127 |
+
msgstr ""
|
128 |
+
|
129 |
+
#. Author URI of the plugin/theme
|
130 |
+
msgid "http://henrik.schack.dk/"
|
131 |
+
msgstr ""
|
lang/google-authenticator-fr_FR.mo
ADDED
Binary file
|
lang/google-authenticator-fr_FR.po
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2010 Google Authenticator
|
2 |
+
# This file is distributed under the same license as the Google Authenticator package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Google Authenticator 0.37\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/tag/google-authenticator\n"
|
7 |
+
"POT-Creation-Date: 2011-08-21 14:25:45+00:00\n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2014-01-11 10:15+0100\n"
|
12 |
+
"Last-Translator: \n"
|
13 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
+
"X-Generator: Poedit 1.6.3\n"
|
15 |
+
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
16 |
+
"Language: fr_FR\n"
|
17 |
+
|
18 |
+
#: google-authenticator.php:131
|
19 |
+
msgid ""
|
20 |
+
"If you don't have Google Authenticator enabled for your WordPress account, "
|
21 |
+
"leave this field empty."
|
22 |
+
msgstr ""
|
23 |
+
"Si vous n'avez pas activé Google ASuthenticator pour votre compte wordpress, "
|
24 |
+
"laissez ce champ vide."
|
25 |
+
|
26 |
+
#: google-authenticator.php:131
|
27 |
+
msgid "Google Authenticator code"
|
28 |
+
msgstr "Code Google Authenticator"
|
29 |
+
|
30 |
+
#: google-authenticator.php:176
|
31 |
+
msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
|
32 |
+
msgstr "<strong>ERREUR</strong>: Le code Google Authenticator est incorrect."
|
33 |
+
|
34 |
+
#: google-authenticator.php:179
|
35 |
+
msgid ""
|
36 |
+
"<strong>ERROR</strong>: The Google Authenticator code is incorrect or has "
|
37 |
+
"expired."
|
38 |
+
msgstr ""
|
39 |
+
"<strong>ERREUR</strong>: Le code Google Authenticator est incorrect ou "
|
40 |
+
"périmé."
|
41 |
+
|
42 |
+
#: google-authenticator.php:215
|
43 |
+
msgid "WordPress Blog"
|
44 |
+
msgstr "Blog WordPress"
|
45 |
+
|
46 |
+
#: google-authenticator.php:218 google-authenticator.php:392
|
47 |
+
msgid "Google Authenticator Settings"
|
48 |
+
msgstr "Réglages Google Authenticator"
|
49 |
+
|
50 |
+
#: google-authenticator.php:223 google-authenticator.php:396
|
51 |
+
msgid "Active"
|
52 |
+
msgstr "Activer"
|
53 |
+
|
54 |
+
#: google-authenticator.php:235
|
55 |
+
msgid "Relaxed mode"
|
56 |
+
msgstr "Mode relax"
|
57 |
+
|
58 |
+
#: google-authenticator.php:237
|
59 |
+
msgid ""
|
60 |
+
" Relaxed mode allows for more time drifting on your phone clock (±4 "
|
61 |
+
"min)."
|
62 |
+
msgstr ""
|
63 |
+
"Le mode relax vous permet d'avoir plus de temps de latence sur le chrono de "
|
64 |
+
"votre téléphone (±4 min)."
|
65 |
+
|
66 |
+
#: google-authenticator.php:242
|
67 |
+
msgid "Description"
|
68 |
+
msgstr "Description"
|
69 |
+
|
70 |
+
#: google-authenticator.php:243
|
71 |
+
msgid ""
|
72 |
+
" Description that you'll see in the Google Authenticator app on your phone."
|
73 |
+
msgstr ""
|
74 |
+
"Voici la description que vous verrez dans l'app Gogogle Authentiator de "
|
75 |
+
"votre téléphone."
|
76 |
+
|
77 |
+
#: google-authenticator.php:247
|
78 |
+
msgid "Secret"
|
79 |
+
msgstr "Code secret"
|
80 |
+
|
81 |
+
#: google-authenticator.php:250
|
82 |
+
msgid "Create new secret"
|
83 |
+
msgstr "Créer nouveau code secret"
|
84 |
+
|
85 |
+
#: google-authenticator.php:251
|
86 |
+
msgid "Show/Hide QR code"
|
87 |
+
msgstr "Montrer/Cacher le QR Code"
|
88 |
+
|
89 |
+
#: google-authenticator.php:259
|
90 |
+
msgid "Scan this with the Google Authenticator app."
|
91 |
+
msgstr "Scanner ceci avec votre app Google Authenticator"
|
92 |
+
|
93 |
+
#: google-authenticator.php:264
|
94 |
+
msgid "Enable App password"
|
95 |
+
msgstr "Autoriser mot de passe de l'app"
|
96 |
+
|
97 |
+
#: google-authenticator.php:266
|
98 |
+
msgid " Enabling an App password will decrease your overall login security."
|
99 |
+
msgstr ""
|
100 |
+
"Autoriser un mot de passe d'app réduira votre sécurité globale de connexion."
|
101 |
+
|
102 |
+
#: google-authenticator.php:274
|
103 |
+
msgid "Create new password"
|
104 |
+
msgstr "Créer nouveau mot de passe"
|
105 |
+
|
106 |
+
#: google-authenticator.php:275
|
107 |
+
msgid ""
|
108 |
+
" Password is not stored in cleartext, this is your only chance to see it."
|
109 |
+
msgstr ""
|
110 |
+
"Le mot de passe n'est pas stocké en texte clair, c'est votre seule "
|
111 |
+
"opportunité de le voir."
|
112 |
+
|
113 |
+
#. Plugin Name of the plugin/theme
|
114 |
+
msgid "Google Authenticator"
|
115 |
+
msgstr "Google Authenticator"
|
116 |
+
|
117 |
+
#. Plugin URI of the plugin/theme
|
118 |
+
msgid "http://henrik.schack.dk/google-authenticator-for-wordpress"
|
119 |
+
msgstr ""
|
120 |
+
|
121 |
+
#. Description of the plugin/theme
|
122 |
+
msgid ""
|
123 |
+
"Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry "
|
124 |
+
"app as One Time Password generator."
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#. Author of the plugin/theme
|
128 |
+
msgid "Henrik Schack"
|
129 |
+
msgstr ""
|
130 |
+
|
131 |
+
#. Author URI of the plugin/theme
|
132 |
+
msgid "http://henrik.schack.dk/"
|
133 |
+
msgstr ""
|
lang/google-authenticator.pot
CHANGED
@@ -1,101 +1,96 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the same license as the Google Authenticator package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Google Authenticator 0.
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/google-authenticator\n"
|
7 |
-
"POT-Creation-Date:
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"PO-Revision-Date:
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
-
#: google-authenticator.php:
|
16 |
-
msgid ""
|
17 |
-
"If you don't have Google Authenticator enabled for your WordPress account, "
|
18 |
-
"leave this field empty."
|
19 |
msgstr ""
|
20 |
|
21 |
-
#: google-authenticator.php:
|
22 |
msgid "Google Authenticator code"
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: google-authenticator.php:
|
26 |
msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
|
27 |
msgstr ""
|
28 |
|
29 |
-
#: google-authenticator.php:
|
30 |
-
msgid ""
|
31 |
-
"<strong>ERROR</strong>: The Google Authenticator code is incorrect or has "
|
32 |
-
"expired."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: google-authenticator.php:
|
36 |
-
msgid "
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: google-authenticator.php:
|
40 |
msgid "Google Authenticator Settings"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: google-authenticator.php:
|
44 |
msgid "Active"
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: google-authenticator.php:
|
48 |
msgid "Relaxed mode"
|
49 |
msgstr ""
|
50 |
|
51 |
-
#: google-authenticator.php:
|
52 |
-
msgid ""
|
53 |
-
" Relaxed mode allows for more time drifting on your phone clock (±4 "
|
54 |
-
"min)."
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: google-authenticator.php:
|
58 |
msgid "Description"
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: google-authenticator.php:
|
62 |
-
msgid ""
|
63 |
-
" Description that you'll see in the Google Authenticator app on your phone."
|
64 |
msgstr ""
|
65 |
|
66 |
-
#: google-authenticator.php:
|
67 |
msgid "Secret"
|
68 |
msgstr ""
|
69 |
|
70 |
-
#: google-authenticator.php:
|
71 |
msgid "Create new secret"
|
72 |
msgstr ""
|
73 |
|
74 |
-
#: google-authenticator.php:
|
75 |
msgid "Show/Hide QR code"
|
76 |
msgstr ""
|
77 |
|
78 |
-
#: google-authenticator.php:
|
79 |
msgid "Scan this with the Google Authenticator app."
|
80 |
msgstr ""
|
81 |
|
82 |
-
#: google-authenticator.php:
|
83 |
msgid "Enable App password"
|
84 |
msgstr ""
|
85 |
|
86 |
-
#: google-authenticator.php:
|
87 |
msgid " Enabling an App password will decrease your overall login security."
|
88 |
msgstr ""
|
89 |
|
90 |
-
#: google-authenticator.php:
|
91 |
msgid "Create new password"
|
92 |
msgstr ""
|
93 |
|
94 |
-
#: google-authenticator.php:
|
95 |
-
msgid ""
|
96 |
-
" Password is not stored in cleartext, this is your only chance to see it."
|
97 |
msgstr ""
|
98 |
|
|
|
|
|
|
|
99 |
#. Plugin Name of the plugin/theme
|
100 |
msgid "Google Authenticator"
|
101 |
msgstr ""
|
@@ -105,9 +100,7 @@ msgid "http://henrik.schack.dk/google-authenticator-for-wordpress"
|
|
105 |
msgstr ""
|
106 |
|
107 |
#. Description of the plugin/theme
|
108 |
-
msgid ""
|
109 |
-
"Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry "
|
110 |
-
"app as One Time Password generator."
|
111 |
msgstr ""
|
112 |
|
113 |
#. Author of the plugin/theme
|
1 |
+
# Copyright (C) 2014 Google Authenticator
|
2 |
# This file is distributed under the same license as the Google Authenticator package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Google Authenticator 0.47\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/google-authenticator\n"
|
7 |
+
"POT-Creation-Date: 2014-01-11 07:14:22+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n"
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
+
#: google-authenticator.php:166
|
16 |
+
msgid "If you don't have Google Authenticator enabled for your WordPress account, leave this field empty."
|
|
|
|
|
17 |
msgstr ""
|
18 |
|
19 |
+
#: google-authenticator.php:166
|
20 |
msgid "Google Authenticator code"
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: google-authenticator.php:231
|
24 |
msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: google-authenticator.php:234
|
28 |
+
msgid "<strong>ERROR</strong>: The Google Authenticator code is incorrect or has expired."
|
|
|
|
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: google-authenticator.php:274
|
32 |
+
msgid "WordPressBlog"
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: google-authenticator.php:277 google-authenticator.php:469
|
36 |
msgid "Google Authenticator Settings"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: google-authenticator.php:282 google-authenticator.php:481
|
40 |
msgid "Active"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: google-authenticator.php:290
|
44 |
msgid "Relaxed mode"
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: google-authenticator.php:292
|
48 |
+
msgid " Relaxed mode allows for more time drifting on your phone clock (±4 min)."
|
|
|
|
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: google-authenticator.php:297
|
52 |
msgid "Description"
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: google-authenticator.php:298
|
56 |
+
msgid " Description that you'll see in the Google Authenticator app on your phone."
|
|
|
57 |
msgstr ""
|
58 |
|
59 |
+
#: google-authenticator.php:302
|
60 |
msgid "Secret"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: google-authenticator.php:305
|
64 |
msgid "Create new secret"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: google-authenticator.php:306
|
68 |
msgid "Show/Hide QR code"
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: google-authenticator.php:315
|
72 |
msgid "Scan this with the Google Authenticator app."
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: google-authenticator.php:320
|
76 |
msgid "Enable App password"
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: google-authenticator.php:322
|
80 |
msgid " Enabling an App password will decrease your overall login security."
|
81 |
msgstr ""
|
82 |
|
83 |
+
#: google-authenticator.php:330
|
84 |
msgid "Create new password"
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: google-authenticator.php:331
|
88 |
+
msgid " Password is not stored in cleartext, this is your only chance to see it."
|
|
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: google-authenticator.php:474
|
92 |
+
msgid "Hide settings from user"
|
93 |
+
msgstr ""
|
94 |
#. Plugin Name of the plugin/theme
|
95 |
msgid "Google Authenticator"
|
96 |
msgstr ""
|
100 |
msgstr ""
|
101 |
|
102 |
#. Description of the plugin/theme
|
103 |
+
msgid "Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry app as One Time Password generator."
|
|
|
|
|
104 |
msgstr ""
|
105 |
|
106 |
#. Author of the plugin/theme
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: Henrik.Schack
|
|
3 |
Donate Link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=henrik%40schack%2edk&lc=US&item_name=Google%20Authenticator&item_number=Google%20Authenticator&no_shipping=0&no_note=1&tax=0&bn=PP%2dDonationsBF&charset=UTF%2d8
|
4 |
Tags: authentication,otp,password,security,login,android,iphone,blackberry
|
5 |
Requires at least: 3.8
|
6 |
-
Tested up to: 3.8
|
7 |
-
Stable tag: 0.
|
8 |
|
9 |
Google Authenticator for your WordPress blog.
|
10 |
|
@@ -40,10 +40,8 @@ No, you'll have to delete the existing account from the Google Authenticator app
|
|
40 |
|
41 |
= I am unable to log in using this plugin, what's wrong ? =
|
42 |
|
43 |
-
The Google Authenticator verification codes are time based, so it's crucial that the clock in your phone is accurate and in sync with the clock on the server where your WordPress installation is hosted.
|
44 |
-
|
45 |
If you have an Android phone, you can use an app like [ClockSync](https://market.android.com/details?id=ru.org.amip.ClockSync) to set your clock in case your Cell provider doesn't provide accurate time information
|
46 |
-
|
47 |
Another option is to enable "relaxed mode" in the settings for the plugin, this will enable more valid codes by allowing up to a 4 min. timedrift in each direction.
|
48 |
|
49 |
= I have several users on my WordPress installation, is that a supported configuration ? =
|
@@ -52,11 +50,25 @@ Yes, each user has his own Google Authenticator settings.
|
|
52 |
|
53 |
= During installation I forgot the thing about making sure my webhost is capable of providing accurate time information, I'm now unable to login, please help. =
|
54 |
|
55 |
-
If you have SSH or FTP access to your webhosting account, you can manually delete the plugin from your WordPress installation,
|
56 |
just delete the wp-content/plugins/google-authenticator directory, and you'll be able to login using username/password again.
|
57 |
|
58 |
= I don't own a Smartphone, isn't there another way to generate these secret codes ? =
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
|
62 |
== Screenshots ==
|
@@ -68,12 +80,18 @@ Yes, there is a webbased version here : http://gauth.apps.gbraad.nl/ Github proj
|
|
68 |
|
69 |
== Changelog ==
|
70 |
|
71 |
-
= 0.
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
* Man-in-the-middle attack protection added.
|
73 |
* Show warning before displaying the QR code.
|
74 |
* FAQ updated.
|
75 |
|
76 |
-
= 0.45 =
|
77 |
* Spaces in the description field should now work on iPhones.
|
78 |
* Some depricated function calls replaced.
|
79 |
* Code inputfield easier to use for .jp users now.
|
@@ -82,7 +100,7 @@ Yes, there is a webbased version here : http://gauth.apps.gbraad.nl/ Github proj
|
|
82 |
* PHP notices occurring during app password login removed.
|
83 |
|
84 |
|
85 |
-
= 0.44 =
|
86 |
* Installation/FAQ section updated.
|
87 |
* Simplified Chinese translation by Kaijia Feng added.
|
88 |
* Tabindex on loginpage removed, no longer needed, was used by older WordPress installations.
|
@@ -91,39 +109,39 @@ Yes, there is a webbased version here : http://gauth.apps.gbraad.nl/ Github proj
|
|
91 |
* Compatibility with Ryan Hellyer's plugin http://geek.ryanhellyer.net/products/deactivate-google-authenticator/
|
92 |
* Must enter all 6 code digits.
|
93 |
|
94 |
-
= 0.43 =
|
95 |
* It's now possible for an admin to hide the Google Authenticaator settings on a per-user basis. (Feature request by : Skate-O)
|
96 |
|
97 |
-
= 0.42 =
|
98 |
* Autocomplete disabled on code input field. (Feature request by : hiphopsmurf)
|
99 |
|
100 |
-
= 0.41 =
|
101 |
* Italian translation by Aldo Latino added.
|
102 |
|
103 |
-
= 0.40 =
|
104 |
* Bugfix, typo corrected and PHP notices removed. Thanks to Dion Hulse for his patch.
|
105 |
|
106 |
-
= 0.39 =
|
107 |
* Bugfix, Description was not saved to WordPress database when updating profile. Thanks to xxdesmus for noticing this.
|
108 |
|
109 |
-
= 0.38 =
|
110 |
* Usability fix, input field for codes changed from password to text type.
|
111 |
|
112 |
-
= 0.37 =
|
113 |
* The plugin now supports "relaxed mode" when authenticating. If selected, codes from 4 minutes before and 4 minutes after will work. 30 seconds before and after is still the default setting.
|
114 |
|
115 |
-
= 0.36 =
|
116 |
* Bugfix, now an App password can only be used for XMLRPC/APP-Request logins.
|
117 |
|
118 |
-
= 0.35 =
|
119 |
* Initial WordPress app support added (XMLRPC).
|
120 |
|
121 |
-
= 0.30 =
|
122 |
* Code cleanup
|
123 |
* Changed generation of secret key, to no longer have requirement of SHA256 on the server
|
124 |
* German translation
|
125 |
|
126 |
-
= 0.20 =
|
127 |
* Initial release
|
128 |
|
129 |
|
@@ -131,7 +149,7 @@ Yes, there is a webbased version here : http://gauth.apps.gbraad.nl/ Github proj
|
|
131 |
|
132 |
Thanks to:
|
133 |
|
134 |
-
[Tobias
|
135 |
|
136 |
[Pascal de Bruijn](http://blog.pcode.nl/) for his "relaxed mode" idea.
|
137 |
|
@@ -143,4 +161,8 @@ Thanks to:
|
|
143 |
|
144 |
[Kaijia Feng](http://www.kaijia.me/) for his Simplified Chinese translation.
|
145 |
|
146 |
-
[Alex Concha](http://www.buayacorp.com/) for his security tips.
|
|
|
|
|
|
|
|
3 |
Donate Link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=henrik%40schack%2edk&lc=US&item_name=Google%20Authenticator&item_number=Google%20Authenticator&no_shipping=0&no_note=1&tax=0&bn=PP%2dDonationsBF&charset=UTF%2d8
|
4 |
Tags: authentication,otp,password,security,login,android,iphone,blackberry
|
5 |
Requires at least: 3.8
|
6 |
+
Tested up to: 3.8.1
|
7 |
+
Stable tag: 0.47
|
8 |
|
9 |
Google Authenticator for your WordPress blog.
|
10 |
|
40 |
|
41 |
= I am unable to log in using this plugin, what's wrong ? =
|
42 |
|
43 |
+
The Google Authenticator verification codes are time based, so it's crucial that the clock in your phone is accurate and in sync with the clock on the server where your WordPress installation is hosted.
|
|
|
44 |
If you have an Android phone, you can use an app like [ClockSync](https://market.android.com/details?id=ru.org.amip.ClockSync) to set your clock in case your Cell provider doesn't provide accurate time information
|
|
|
45 |
Another option is to enable "relaxed mode" in the settings for the plugin, this will enable more valid codes by allowing up to a 4 min. timedrift in each direction.
|
46 |
|
47 |
= I have several users on my WordPress installation, is that a supported configuration ? =
|
50 |
|
51 |
= During installation I forgot the thing about making sure my webhost is capable of providing accurate time information, I'm now unable to login, please help. =
|
52 |
|
53 |
+
If you have SSH or FTP access to your webhosting account, you can manually delete the plugin from your WordPress installation,
|
54 |
just delete the wp-content/plugins/google-authenticator directory, and you'll be able to login using username/password again.
|
55 |
|
56 |
= I don't own a Smartphone, isn't there another way to generate these secret codes ? =
|
57 |
+
|
58 |
+
Yes, there is a webbased version here : http://gauth.apps.gbraad.nl/
|
59 |
+
Github project here : https://github.com/gbraad/html5-google-authenticator
|
60 |
+
|
61 |
+
= Can I create backupcodes ? =
|
62 |
+
|
63 |
+
No, but if you're using an Android smartphone you can replace the Google Authenticator app with [Authenticator Plus](https://play.google.com/store/apps/details?id=com.mufri.authenticatorplus).
|
64 |
+
It's a really nice app that can import your existing settings, sync between devices and backup/restore using your sd-card.
|
65 |
+
It's not a free app, but it's well worth the money.
|
66 |
+
|
67 |
+
= Any known incompatabilities ? =
|
68 |
+
|
69 |
+
Yes, the Man-in-the-middle attack/replay detection code isn't compatible with the test/setup mode in the "Stop spammer registration plugin",
|
70 |
+
please remember to remove the "Check credentials on all login attempts" checkmark before installing my plugin.
|
71 |
+
|
72 |
|
73 |
|
74 |
== Screenshots ==
|
80 |
|
81 |
== Changelog ==
|
82 |
|
83 |
+
= 0.47 =
|
84 |
+
* Google chart API replaced with jquery-qrcode
|
85 |
+
* QR codes now contain a heading saying WordPress (Feature request by Flemming Mahler)
|
86 |
+
* Danish translation & updated .pot file.
|
87 |
+
* Plugin now logs login attempts recognized as Man-in-the-middle attacks.
|
88 |
+
|
89 |
+
= 0.46 =
|
90 |
* Man-in-the-middle attack protection added.
|
91 |
* Show warning before displaying the QR code.
|
92 |
* FAQ updated.
|
93 |
|
94 |
+
= 0.45 =
|
95 |
* Spaces in the description field should now work on iPhones.
|
96 |
* Some depricated function calls replaced.
|
97 |
* Code inputfield easier to use for .jp users now.
|
100 |
* PHP notices occurring during app password login removed.
|
101 |
|
102 |
|
103 |
+
= 0.44 =
|
104 |
* Installation/FAQ section updated.
|
105 |
* Simplified Chinese translation by Kaijia Feng added.
|
106 |
* Tabindex on loginpage removed, no longer needed, was used by older WordPress installations.
|
109 |
* Compatibility with Ryan Hellyer's plugin http://geek.ryanhellyer.net/products/deactivate-google-authenticator/
|
110 |
* Must enter all 6 code digits.
|
111 |
|
112 |
+
= 0.43 =
|
113 |
* It's now possible for an admin to hide the Google Authenticaator settings on a per-user basis. (Feature request by : Skate-O)
|
114 |
|
115 |
+
= 0.42 =
|
116 |
* Autocomplete disabled on code input field. (Feature request by : hiphopsmurf)
|
117 |
|
118 |
+
= 0.41 =
|
119 |
* Italian translation by Aldo Latino added.
|
120 |
|
121 |
+
= 0.40 =
|
122 |
* Bugfix, typo corrected and PHP notices removed. Thanks to Dion Hulse for his patch.
|
123 |
|
124 |
+
= 0.39 =
|
125 |
* Bugfix, Description was not saved to WordPress database when updating profile. Thanks to xxdesmus for noticing this.
|
126 |
|
127 |
+
= 0.38 =
|
128 |
* Usability fix, input field for codes changed from password to text type.
|
129 |
|
130 |
+
= 0.37 =
|
131 |
* The plugin now supports "relaxed mode" when authenticating. If selected, codes from 4 minutes before and 4 minutes after will work. 30 seconds before and after is still the default setting.
|
132 |
|
133 |
+
= 0.36 =
|
134 |
* Bugfix, now an App password can only be used for XMLRPC/APP-Request logins.
|
135 |
|
136 |
+
= 0.35 =
|
137 |
* Initial WordPress app support added (XMLRPC).
|
138 |
|
139 |
+
= 0.30 =
|
140 |
* Code cleanup
|
141 |
* Changed generation of secret key, to no longer have requirement of SHA256 on the server
|
142 |
* German translation
|
143 |
|
144 |
+
= 0.20 =
|
145 |
* Initial release
|
146 |
|
147 |
|
149 |
|
150 |
Thanks to:
|
151 |
|
152 |
+
[Tobias Bäthge](http://tobias.baethge.com/) for his code rewrite and German translation.
|
153 |
|
154 |
[Pascal de Bruijn](http://blog.pcode.nl/) for his "relaxed mode" idea.
|
155 |
|
161 |
|
162 |
[Kaijia Feng](http://www.kaijia.me/) for his Simplified Chinese translation.
|
163 |
|
164 |
+
[Alex Concha](http://www.buayacorp.com/) for his security tips.
|
165 |
+
|
166 |
+
[Jerome Etienne](http://jetienne.com/) for his jquery-qrcode plugin.
|
167 |
+
|
168 |
+
[Sébastien Prunier](http://orizhial.com/) for his Spanish and French translation.
|
screenshot-5.jpg
ADDED
Binary file
|