miniOrange_2factor - Version 1.0.5

Version Notes

bug fixes

Download this release

Release Info

Developer miniOrange inc.
Extension miniOrange_2factor
Version 1.0.5
Comparing to
See all releases


Code changes from version 1.0.4 to 1.0.5

app/code/community/miniOrange/2factor/Block/mo2fConfig.php CHANGED
@@ -87,17 +87,15 @@ class MiniOrange_2factor_Block_mo2fConfig extends Mage_Core_Block_Template{
87
  }
88
 
89
  public function getConfig($config,$id=""){
90
- $customer = Mage::helper('MiniOrange_2factor');
91
- if($id!=""){
92
- return $customer->getConfig($config,$id);
93
- }
94
- else if( !Mage::getSingleton('customer/session')->isLoggedIn() ) {
95
  $admin = Mage::getSingleton('admin/session')->getUser();
96
  $id = $admin->getUserId();
97
- return $customer->getConfig($config,$id);
98
  }
99
  else{
100
- return $customer->getConfig($config,$id);
 
101
  }
102
  }
103
 
87
  }
88
 
89
  public function getConfig($config,$id=""){
90
+ $user = Mage::helper('MiniOrange_2factor');
91
+ if( !Mage::getSingleton('customer/session')->isLoggedIn() ) {
 
 
 
92
  $admin = Mage::getSingleton('admin/session')->getUser();
93
  $id = $admin->getUserId();
94
+ return $user->getConfig($config,$id);
95
  }
96
  else{
97
+ $id = Mage::getSingleton('customer/session')->getCustomer()->getId();
98
+ return $user->getConfig($config,$id);
99
  }
100
  }
101
 
app/code/community/miniOrange/2factor/Controllers/Adminhtml/IndexController.php CHANGED
@@ -2,8 +2,7 @@
2
 
3
  class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
4
  {
5
- private $defaultCustomerKey = "16352";
6
- private $defaultApiKey = "AJG97LGpOVVwFUuuPSij5IH6Kvlu6qEj";
7
 
8
  public function indexAction(){
9
  $this->loadLayout();
@@ -36,7 +35,7 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
36
  $id = $admin->getUserId();
37
  $content = json_decode($customer->check_customer($email), true);
38
  if( strcasecmp( $content['status'], 'CUSTOMER_NOT_FOUND') == 0 ){
39
- $content = json_decode($customer->send_otp_token($email,'EMAIL',$this->defaultCustomerKey,$this->defaultApiKey), true); //send otp for verification
40
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
41
  Mage::getSingleton('admin/session')->setMytextid($content['txId']);
42
  Mage::getSingleton('admin/session')->setOTPsent(1);
@@ -45,7 +44,6 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
45
  $this->saveConfig('miniorange_2factor_email',$email,$id);
46
  $this->saveConfig('miniorange_2factor_pass',$password,$id);
47
  $this->saveConfig('miniorange_2factor_phone',$phone,$id);
48
- $this->saveConfig('miniorange_2factor_admin_registered',$id,$id);
49
  $this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
50
  $this->redirect("miniorange_2factor/adminhtml_index/index");
51
  }
@@ -68,7 +66,8 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
68
  $storeConfig = new Mage_Core_Model_Config();
69
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
70
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
71
- $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
 
72
  $this->saveConfig('miniorange_2factor_pass',"",$id);
73
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
74
  $this->saveConfig('miniorange_2factor_show_configure',1,$id);
@@ -104,11 +103,11 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
104
  $phone = Mage::getSingleton('core/session')->getaddPhone();
105
  if(strcmp($otp,"")!=0){
106
  $transactionId = Mage::getSingleton('admin/session')->getMytextid();
107
- $content = json_decode($customer->validate_otp_token( 'EMAIL', null, $transactionId , $otp , $this->defaultCustomerKey, $this->defaultApiKey),true);
108
-
109
  if(strcasecmp($content['status'], 'SUCCESS') == 0) { //OTP validated and generate QRCode
110
  $adminregistered = $helper->getConfig('mainAdmin',$id);
111
- if($adminregistered!="" && $adminregistered==$id){
 
112
  $this->mo2f_create_customer();
113
  }
114
  else{
@@ -165,7 +164,8 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
165
  $storeConfig = new Mage_Core_Model_Config();
166
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
167
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
168
- $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
 
169
  $this->saveConfig('miniorange_2factor_pass',"",$id);
170
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
171
  $this->saveConfig('miniorange_2factor_show_configure',1,$id);
@@ -203,9 +203,7 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
203
  if($helper->is_curl_installed()){
204
  $email = $params['additional_email'];
205
  $phone = $params['additional_phone'];
206
- $admin = Mage::getSingleton('admin/session')->getUser();
207
- $id = $admin->getUserId();
208
- $content = json_decode($customer->send_otp_token($email,'EMAIL',$this->defaultCustomerKey,$this->defaultApiKey), true);
209
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
210
  $admin = Mage::getSingleton('admin/session')->getUser();
211
  $id = $admin->getUserId();
@@ -345,12 +343,11 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
345
  $admin = Mage::getSingleton('admin/session')->getUser();
346
  $id = $admin->getUserId();
347
  $email = $helper->getConfig('email',$id);
348
- $content = json_decode($customer->send_otp_token($email,'EMAIL',$this->defaultCustomerKey,$this->defaultApiKey), true); //send otp for verification
349
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
350
  Mage::getSingleton('admin/session')->setMytextid($content['txId']);
351
  $this->saveConfig('miniorange_2factor_show_otp',1,$id);
352
  $this->saveConfig('miniorange_2factor_login',0,$id);
353
- $this->saveConfig('miniorange_2factor_admin_registered',$id,$id);
354
  $this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
355
  $this->redirect("miniorange_2factor/adminhtml_index/index");
356
  }
@@ -377,7 +374,6 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
377
  $id = $admin->getUserId();
378
  $this->saveConfig('miniorange_2factor_show_otp',null,$id);
379
  $this->saveConfig('miniorange_2factor_login',null,$id);
380
- $this->saveConfig('miniorange_2factor_admin_registered',null,$id);
381
  $this->saveConfig('miniorange_2factor_email',"",$id);
382
  $this->saveConfig('miniorange_2factor_pass',"",$id);
383
  $this->saveConfig('miniorange_2factor_phone',"",$id);
@@ -432,7 +428,8 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
432
  $storeConfig = new Mage_Core_Model_Config();
433
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
434
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
435
- $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
 
436
  $this->saveConfig('miniorange_2factor_pass',"",$id);
437
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
438
  $this->saveConfig('miniorange_2factor_show_configure',1,$id);
@@ -452,7 +449,8 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
452
  $storeConfig = new Mage_Core_Model_Config();
453
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
454
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
455
- $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
 
456
  $this->saveConfig('miniorange_2factor_pass',"",$id);
457
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
458
  $this->saveConfig('miniorange_2factor_login',0,$id);
@@ -492,7 +490,7 @@ class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Contro
492
  private function forgotPass($email){
493
  $customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
494
  $params = $this->getRequest()->getParams();
495
- $content = json_decode($customer->forgot_password($email,$this->defaultCustomerKey,$this->defaultApiKey), true);
496
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
497
  $this->displayMessage('Your new password has been generated and sent to '.$email.'.',"SUCCESS");
498
  $this->redirect("miniorange_2factor/adminhtml_index/index");
2
 
3
  class MiniOrange_2factor_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
4
  {
5
+
 
6
 
7
  public function indexAction(){
8
  $this->loadLayout();
35
  $id = $admin->getUserId();
36
  $content = json_decode($customer->check_customer($email), true);
37
  if( strcasecmp( $content['status'], 'CUSTOMER_NOT_FOUND') == 0 ){
38
+ $content = json_decode($customer->send_otp_token($email,'EMAIL',$helper->getdefaultCustomerKey(),$helper->getdefaultApiKey()), true); //send otp for verification
39
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
40
  Mage::getSingleton('admin/session')->setMytextid($content['txId']);
41
  Mage::getSingleton('admin/session')->setOTPsent(1);
44
  $this->saveConfig('miniorange_2factor_email',$email,$id);
45
  $this->saveConfig('miniorange_2factor_pass',$password,$id);
46
  $this->saveConfig('miniorange_2factor_phone',$phone,$id);
 
47
  $this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
48
  $this->redirect("miniorange_2factor/adminhtml_index/index");
49
  }
66
  $storeConfig = new Mage_Core_Model_Config();
67
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
68
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
69
+ $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
70
+ $storeConfig ->saveConfig('miniOrange/2factor/mainAdmin',$id, 'default', 0);
71
  $this->saveConfig('miniorange_2factor_pass',"",$id);
72
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
73
  $this->saveConfig('miniorange_2factor_show_configure',1,$id);
103
  $phone = Mage::getSingleton('core/session')->getaddPhone();
104
  if(strcmp($otp,"")!=0){
105
  $transactionId = Mage::getSingleton('admin/session')->getMytextid();
106
+ $content = json_decode($customer->validate_otp_token( 'EMAIL', null, $transactionId , $otp , $helper->getdefaultCustomerKey(), $helper->getdefaultApiKey()),true);
 
107
  if(strcasecmp($content['status'], 'SUCCESS') == 0) { //OTP validated and generate QRCode
108
  $adminregistered = $helper->getConfig('mainAdmin',$id);
109
+ if($adminregistered==null){
110
+ Mage();
111
  $this->mo2f_create_customer();
112
  }
113
  else{
164
  $storeConfig = new Mage_Core_Model_Config();
165
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
166
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
167
+ $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
168
+ $storeConfig ->saveConfig('miniOrange/2factor/mainAdmin',$id, 'default', 0);
169
  $this->saveConfig('miniorange_2factor_pass',"",$id);
170
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
171
  $this->saveConfig('miniorange_2factor_show_configure',1,$id);
203
  if($helper->is_curl_installed()){
204
  $email = $params['additional_email'];
205
  $phone = $params['additional_phone'];
206
+ $content = json_decode($customer->send_otp_token($email,'EMAIL',$helper->getdefaultCustomerKey(),$helper->getdefaultApiKey()), true);
 
 
207
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
208
  $admin = Mage::getSingleton('admin/session')->getUser();
209
  $id = $admin->getUserId();
343
  $admin = Mage::getSingleton('admin/session')->getUser();
344
  $id = $admin->getUserId();
345
  $email = $helper->getConfig('email',$id);
346
+ $content = json_decode($customer->send_otp_token($email,'EMAIL',$helper->getdefaultCustomerKey(),$helper->getdefaultApiKey()), true); //send otp for verification
347
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
348
  Mage::getSingleton('admin/session')->setMytextid($content['txId']);
349
  $this->saveConfig('miniorange_2factor_show_otp',1,$id);
350
  $this->saveConfig('miniorange_2factor_login',0,$id);
 
351
  $this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
352
  $this->redirect("miniorange_2factor/adminhtml_index/index");
353
  }
374
  $id = $admin->getUserId();
375
  $this->saveConfig('miniorange_2factor_show_otp',null,$id);
376
  $this->saveConfig('miniorange_2factor_login',null,$id);
 
377
  $this->saveConfig('miniorange_2factor_email',"",$id);
378
  $this->saveConfig('miniorange_2factor_pass',"",$id);
379
  $this->saveConfig('miniorange_2factor_phone',"",$id);
428
  $storeConfig = new Mage_Core_Model_Config();
429
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
430
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
431
+ $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
432
+ $storeConfig ->saveConfig('miniOrange/2factor/mainAdmin',$id, 'default', 0);
433
  $this->saveConfig('miniorange_2factor_pass',"",$id);
434
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
435
  $this->saveConfig('miniorange_2factor_show_configure',1,$id);
449
  $storeConfig = new Mage_Core_Model_Config();
450
  $storeConfig ->saveConfig('miniOrange/2factor/customerKey',$customerKey['id'], 'default', 0);
451
  $storeConfig ->saveConfig('miniOrange/2factor/apiKey',$customerKey['apiKey'], 'default', 0);
452
+ $storeConfig ->saveConfig('miniOrange/2factor/2factorToken',$customerKey['token'], 'default', 0);
453
+ $storeConfig ->saveConfig('miniOrange/2factor/mainAdmin',$id, 'default', 0);
454
  $this->saveConfig('miniorange_2factor_pass',"",$id);
455
  $this->saveConfig('miniorange_2factor_show_otp',0,$id);
456
  $this->saveConfig('miniorange_2factor_login',0,$id);
490
  private function forgotPass($email){
491
  $customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
492
  $params = $this->getRequest()->getParams();
493
+ $content = json_decode($customer->forgot_password($email,$helper->getdefaultCustomerKey(),$helper->getdefaultApiKey()), true);
494
  if(strcasecmp($content['status'], 'SUCCESS') == 0){
495
  $this->displayMessage('Your new password has been generated and sent to '.$email.'.',"SUCCESS");
496
  $this->redirect("miniorange_2factor/adminhtml_index/index");
app/code/community/miniOrange/2factor/Helper/Data.php CHANGED
@@ -1,7 +1,9 @@
1
  <?php
2
  class MiniOrange_2factor_Helper_Data extends Mage_Core_Helper_Abstract
3
  {
4
- public $hostname = "https://auth.miniorange.com";
 
 
5
 
6
  function adminExists($username){
7
  $adminuser = Mage::getModel('admin/user');
@@ -18,6 +20,16 @@ class MiniOrange_2factor_Helper_Data extends Mage_Core_Helper_Abstract
18
  return $this->hostname;
19
  }
20
 
 
 
 
 
 
 
 
 
 
 
21
  function getAdmin($username){
22
  $adminuser = Mage::getModel('admin/user');
23
  $adminuser->loadByUsername($username);
@@ -69,7 +81,7 @@ class MiniOrange_2factor_Helper_Data extends Mage_Core_Helper_Abstract
69
  $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_login');
70
  break;
71
  case 'mainAdmin':
72
- $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_admin_registered');
73
  break;
74
  case 'downloaded':
75
  $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_downloaded_app');
@@ -77,12 +89,15 @@ class MiniOrange_2factor_Helper_Data extends Mage_Core_Helper_Abstract
77
  case 'phone':
78
  $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_phone');
79
  break;
80
- case 'customer_mobile_configured':
81
  $result = Mage::getModel('customer/customer')->load($id)->getData('miniorange_phone');
82
  break;
83
- case 'customer_phone':
84
  $result = Mage::getModel('customer/customer')->load($id)->getData('miniorange_mobileconfigured');
85
  break;
 
 
 
86
  default:
87
  return;
88
  break;
1
  <?php
2
  class MiniOrange_2factor_Helper_Data extends Mage_Core_Helper_Abstract
3
  {
4
+ private $hostname = "https://auth.miniorange.com";
5
+ private $defaultCustomerKey = "16352";
6
+ private $defaultApiKey = "AJG97LGpOVVwFUuuPSij5IH6Kvlu6qEj";
7
 
8
  function adminExists($username){
9
  $adminuser = Mage::getModel('admin/user');
20
  return $this->hostname;
21
  }
22
 
23
+ function getdefaultCustomerKey(){
24
+ return $this->defaultCustomerKey;
25
+ }
26
+
27
+
28
+ function getdefaultApiKey(){
29
+ return $this->defaultApiKey;
30
+ }
31
+
32
+
33
  function getAdmin($username){
34
  $adminuser = Mage::getModel('admin/user');
35
  $adminuser->loadByUsername($username);
81
  $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_login');
82
  break;
83
  case 'mainAdmin':
84
+ $result = $result = Mage::getStoreConfig('miniOrange/2factor/mainAdmin');
85
  break;
86
  case 'downloaded':
87
  $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_downloaded_app');
89
  case 'phone':
90
  $result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_phone');
91
  break;
92
+ case 'customer_phone':
93
  $result = Mage::getModel('customer/customer')->load($id)->getData('miniorange_phone');
94
  break;
95
+ case 'customer_mobile_configured':
96
  $result = Mage::getModel('customer/customer')->load($id)->getData('miniorange_mobileconfigured');
97
  break;
98
+ case 'miniorange_email':
99
+ $result = Mage::getModel('customer/customer')->load($id)->getData('miniorange_email');
100
+ break;
101
  default:
102
  return;
103
  break;
app/code/community/miniOrange/2factor/Helper/mo2fUtility.php CHANGED
@@ -23,10 +23,10 @@ Contains Request Calls to Customer service.
23
  **/
24
  class MiniOrange_2factor_Helper_mo2fUtility extends Mage_Core_Helper_Abstract{
25
 
26
- public $email;
27
- public $phone;
28
- public $hostname = "https://auth.miniorange.com";
29
- public $pluginName = 'Magento 2 Factor Authentication Plugin';
30
 
31
  function check_customer($email){
32
  $url = $this->hostname . '/moas/rest/customer/check-if-exists';
23
  **/
24
  class MiniOrange_2factor_Helper_mo2fUtility extends Mage_Core_Helper_Abstract{
25
 
26
+ private $email;
27
+ private $phone;
28
+ private $hostname = "https://auth.miniorange.com";
29
+ private $pluginName = 'Magento 2 Factor Authentication Plugin';
30
 
31
  function check_customer($email){
32
  $url = $this->hostname . '/moas/rest/customer/check-if-exists';
app/code/community/miniOrange/2factor/Model/Observer.php CHANGED
@@ -184,12 +184,15 @@ class MiniOrange_2factor_Model_Observer
184
  Mage::dispatchEvent('admin_session_user_login_success',array('user'=>$user));
185
  }
186
 
187
-
188
- //-----------------//
189
- public function customerLogin(Varien_Event_Observer $observer){
190
  $request = Mage::app()->getRequest();
191
  $session = Mage::getSingleton('customer/session');
192
- $session->setBeforeAuthUrl(Mage::getUrl('twofactorauth/Index/configureTwoFactorPage'));
 
 
 
 
 
193
  }
194
 
195
 
@@ -199,14 +202,13 @@ class MiniOrange_2factor_Model_Observer
199
  throw Mage::exception('Mage_Core','Authentication Failed! Please try again!',2);
200
  }
201
 
202
- if (Mage::helper('MiniOrange_2factor')->getConfig('isCustomerEnabled') && Mage::helper('MiniOrange_2factor')->getConfig('miniorange_mobileconfigured')) {
203
  $redirectUrl = Mage::getModel('core/url')->getUrl('twofactorauth/Index/validationPage');
204
  $session = Mage::getSingleton('customer/session');
205
  $session->setOriginalAfterAuthUrl($session->getAfterAuthUrl());
206
- $session->setAfterAuthUrl($redirectUrl);
207
  }
208
  else{
209
- Mage::helper('MiniOrange_2factor')->displayMessage('Admin has Enabled Two Factor Authentication for your account. Please configure your account below.','NOTICE');
210
  return $this;
211
  }
212
 
184
  Mage::dispatchEvent('admin_session_user_login_success',array('user'=>$user));
185
  }
186
 
187
+ public function customerLogin(Varien_Event_Observer $observer){
 
 
188
  $request = Mage::app()->getRequest();
189
  $session = Mage::getSingleton('customer/session');
190
+ $customer = $session->getCustomer();
191
+ $id = $customer->getId();
192
+ if (Mage::helper('MiniOrange_2factor')->getConfig('isCustomerEnabled') && !Mage::helper('MiniOrange_2factor')->getConfig('customer_mobile_configured',$id)) {
193
+ Mage::helper('MiniOrange_2factor')->displayMessage('Admin has Enabled Two Factor Authentication for your account. Please configure your account below.','NOTICE');
194
+ $session->setAfterAuthUrl(Mage::getUrl('twofactorauth/Index/configureTwoFactorPage'));
195
+ }
196
  }
197
 
198
 
202
  throw Mage::exception('Mage_Core','Authentication Failed! Please try again!',2);
203
  }
204
 
205
+ if (Mage::helper('MiniOrange_2factor')->getConfig('isCustomerEnabled')) {
206
  $redirectUrl = Mage::getModel('core/url')->getUrl('twofactorauth/Index/validationPage');
207
  $session = Mage::getSingleton('customer/session');
208
  $session->setOriginalAfterAuthUrl($session->getAfterAuthUrl());
209
+ $session->setBeforeAuthUrl($redirectUrl);
210
  }
211
  else{
 
212
  return $this;
213
  }
214
 
app/code/community/miniOrange/2factor/etc/config.xml CHANGED
@@ -7,28 +7,10 @@
7
  <!-- This must exactly match the namespace and module's folder names, with directory separators replaced by underscores -->
8
  <MiniOrange_2factor>
9
  <!-- The version of our module -->
10
- <version>1.0.4</version>
11
  </MiniOrange_2factor>
12
  </modules>
13
- <!-- We are making changes to the frontend-->
14
- <frontend>
15
- <routers>
16
- <MiniOrange_2factor_customer>
17
- <use>standard</use>
18
- <args>
19
- <module>MiniOrange_2factor_Customer</module>
20
- <frontName>twofactorauth</frontName>
21
- </args>
22
- </MiniOrange_2factor_customer>
23
- </routers>
24
- <layout>
25
- <updates>
26
- <miniOrange_2factor_layout>
27
- <file>miniorange_2factor_layout.xml</file>
28
- </miniOrange_2factor_layout>
29
- </updates>
30
- </layout>
31
- </frontend>
32
  <!-- we are making changes to the backend -->
33
  <admin>
34
  <routers>
@@ -113,32 +95,6 @@
113
  </observers>
114
  </controller_action_layout_generate_blocks_before>
115
  -->
116
- <customer_login>
117
- <observers>
118
- <miniorange_login>
119
- <class>MiniOrange_2factor/observer</class>
120
- <method>customerLogin</method>
121
- </miniorange_login>
122
- </observers>
123
- </customer_login>
124
- <customer_customer_authenticated>
125
- <observers>
126
- <miniorange_login_authenticated>
127
- <type>singleton</type>
128
- <class>MiniOrange_2factor/observer</class>
129
- <method>customerAuthenticateAfter</method>
130
- </miniorange_login_authenticated>
131
- </observers>
132
- </customer_customer_authenticated>
133
- <miniOrange_validation_event>
134
- <observers>
135
- <validation>
136
- <type>singleton</type>
137
- <class>MiniOrange_2factor/observer</class>
138
- <method>validationHandler</method>
139
- </validation>
140
- </observers>
141
- </miniOrange_validation_event>
142
  </events>
143
  <!-- Defining our resources -->
144
  <resources>
7
  <!-- This must exactly match the namespace and module's folder names, with directory separators replaced by underscores -->
8
  <MiniOrange_2factor>
9
  <!-- The version of our module -->
10
+ <version>1.0.5</version>
11
  </MiniOrange_2factor>
12
  </modules>
13
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  <!-- we are making changes to the backend -->
15
  <admin>
16
  <routers>
95
  </observers>
96
  </controller_action_layout_generate_blocks_before>
97
  -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  </events>
99
  <!-- Defining our resources -->
100
  <resources>
app/code/community/miniOrange/2factor/sql/MiniOrange_2factor_setup/mysql4-install-0.0.1.php CHANGED
@@ -14,7 +14,6 @@ $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorang
14
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_show_configure', 'int null');
15
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_validated', 'int null');
16
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_login', 'int null');
17
- $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_admin_registered', 'int null');
18
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_downloaded_app', 'int null');
19
 
20
 
14
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_show_configure', 'int null');
15
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_validated', 'int null');
16
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_login', 'int null');
 
17
  $installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_downloaded_app', 'int null');
18
 
19
 
app/design/adminhtml/default/default/template/miniorange_2factor/mo2fConfig.phtml CHANGED
@@ -149,7 +149,7 @@
149
  </tr>
150
  <tr>
151
  <td><b><font color="#FF0000">*</font>Phone number:</b></td>
152
- <td><input class="" type="text" name="phone" id="additional_phone" required title="Phone with country code eg. +1xxxxxxxxxx" placeholder="Phone with country code eg. +1xxxxxxxxxx" value="" pattern="[\+]?[0-9]{1,4}\s?[0-9]{10}"/><span class="required">*We will call only if you need support.</span></td>
153
  </tr>
154
  </table>
155
  <br>
@@ -261,8 +261,8 @@
261
  <div style="margin-left:4%;"><b>Note:</b> This option is checked by default. It will enable 2-Factor only for admins, other users can still login with their password.<p>[ <a id="preview4" href="#slider2">Click Here</a> for a preview. ]</p></div>
262
  <br>
263
  <!--<input type="checkbox" id="mo2f_customer_activation" name="customer_activation" value="1" <?php echo $this->isCustomerEnabled(); ?> /><b>Enable 2-Factor for Customers.</b>
264
- <div style="margin-left:4%;"><b>Note:</b> This will enable 2-Factor for your customers.</div>
265
- <br>-->
266
  <div class="button-align"><input type="submit" name="submit" value="Save Settings" class="button button-primary button-large" /></div>
267
  </form>
268
  </div>
149
  </tr>
150
  <tr>
151
  <td><b><font color="#FF0000">*</font>Phone number:</b></td>
152
+ <td><input class="" type="text" name="additional_phone" id="additional_phone" required title="Phone with country code eg. +1xxxxxxxxxx" placeholder="Phone with country code eg. +1xxxxxxxxxx" value="" pattern="[\+]?[0-9]{1,4}\s?[0-9]{10}"/><span class="required">*We will call only if you need support.</span></td>
153
  </tr>
154
  </table>
155
  <br>
261
  <div style="margin-left:4%;"><b>Note:</b> This option is checked by default. It will enable 2-Factor only for admins, other users can still login with their password.<p>[ <a id="preview4" href="#slider2">Click Here</a> for a preview. ]</p></div>
262
  <br>
263
  <!--<input type="checkbox" id="mo2f_customer_activation" name="customer_activation" value="1" <?php echo $this->isCustomerEnabled(); ?> /><b>Enable 2-Factor for Customers.</b>
264
+ <div style="margin-left:4%;"><b>Note:</b> This will enable 2-Factor for your customers.</div>-->
265
+ <br>
266
  <div class="button-align"><input type="submit" name="submit" value="Save Settings" class="button button-primary button-large" /></div>
267
  </form>
268
  </div>
package.xml CHANGED
@@ -1,72 +1,30 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>miniOrange_2factor</name>
4
- <version>1.0.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU General Public License (GPL)</license>
7
  <channel>community</channel>
8
  <extends/>
9
- <summary>Enable Two Factor Authentication (2FA)- Supports QR code, Soft token, otp over sms).</summary>
10
- <description>Two-Factor Authentication ( 2 Factor Authentication )&#xD;
11
  &#xD;
12
- Why Two-Factor?&#xD;
13
- &#xD;
14
- For any application- Identity is the perimeter that needs to be protected better!. Currently this protection is through a password. But passwords aren't enough. 76% of breaches exploit stolen credentials&#xD;
15
- &#xD;
16
- Too many passwords to remember, makes it a nightmare for users&#xD;
17
- Passwords are easily lost, stolen, guessed.&#xD;
18
- People use the same password for many accounts&#xD;
19
- So every time you login into your Web site there is a chance that someone is sniffing or logging the password, which can later be used to login to your store. Clearly passwords are not enough for protecting your store. &#xD;
20
- &#xD;
21
- Use Two-Factor Authentication&#xD;
22
- &#xD;
23
- The most practical way to strengthen authentication is to require a second factor after the username/password stage. Since a password is something that you know, ensuring that the you can thwart attackers that steal or gain access to your password.&#xD;
24
- miniOrange Two-Factor Authentication Overview&#xD;
25
- &#xD;
26
- miniOrange Two-Factor Authentication provides a highly secure &amp; easy to setup Two-Factor Authentication for your Magento store. Rather than relying on a password alone, which can be phished or guessed, miniOrange Two Factor authentication adds a second layer of security to your Magento store. You can protect your store by using miniOrange Two Factor authentication, which combines something you know or something you have (smartphone) to reliably confirm your identity.&#xD;
27
- &#xD;
28
- Features/Benefits&#xD;
29
- &#xD;
30
- Secure login into your Magento backend&#xD;
31
- With miniOrange Two-Factor Authentication you can can:&#xD;
32
- &#xD;
33
- Securely login using our miniOrange Authenticator app&#xD;
34
- Both iPhone and Android phones are supported.&#xD;
35
- If your phone is lost or stolen or discharged, it offers an alternate login method.&#xD;
36
- If your phone is offline, you can use a one time passcode (soft token) generated by app to login.&#xD;
37
- The code generated are time based and keep changin every 30 seconds so even if someone knows your password, they will not be able to login to your backend.&#xD;
38
- Choose 15+ different authentication methods&#xD;
39
- * One time passcodes (OTP) over SMS &#xD;
40
- * OTP over Email &#xD;
41
- * OTP over SMS and Email &#xD;
42
- * Out of Band SMS &#xD;
43
- * Out of Band Email &#xD;
44
- * Soft Token &#xD;
45
- * Push Notification &#xD;
46
- * USB based Hardware token (yubico) &#xD;
47
- * Security Questions &#xD;
48
- * Mobile Authentication &#xD;
49
- * Voice Authentication (Biometrics) &#xD;
50
- * Phone Verification &#xD;
51
- * Device Identification &#xD;
52
- * Location &#xD;
53
- * Time of Access &#xD;
54
- * User Behavior&#xD;
55
- &#xD;
56
- Feature phone, landline are also supported. You need to contact info@miniorange.com to enable it. Trusted Device, Location, Time of access and user behavior is also supported. You need to enable this by contacting info@miniorange.com&#xD;
57
- &#xD;
58
- For a complete list of authentication methods please visit http://miniorange.com/strong_auth . If you want to have any other 2-factor for your Magento site, Contact us.&lt;/p&gt;&#xD;
59
- You can choose from any of the above authentication methods to augment your password based authentication. miniOrange authentication service works with all phone types, from landlines to smart-phone platforms.&#xD;
60
  &#xD;
61
  Contact Us&#xD;
62
  &#xD;
63
  For support please email us at info@miniorange.com or call us at +1 978 658 9387</description>
64
- <notes>==1.0.4==&#xD;
65
- Bug fixes</notes>
66
  <authors><author><name>miniOrange inc.</name><user>miniOrange</user><email>info@miniorange.com</email></author></authors>
67
- <date>2015-08-26</date>
68
- <time>12:17:34</time>
69
- <contents><target name="magecommunity"><dir name="miniOrange"><dir name="2factor"><dir name="Block"><file name="mo2fConfig.php" hash="c186ecae80ba3945783d95712165f26a"/></dir><dir name="Controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="acef2dddf89298d518291c3cdbfd2d48"/><dir name="Login"><file name="miniOrangeController.php" hash="78d1f305733dc764a87229ea4646a479"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="c90ef98e0f72abd5c74558bbac00cc86"/><file name="mo2fUtility.php" hash="e6d60914e7ee4dd4d868290594860bcc"/></dir><dir name="Model"><file name="Observer.php" hash="b14c81c7622df4d1ea2276e0d46e36d0"/><file name="Words.php" hash="ee26cc8582d5bbad5632a6e02129f815"/></dir><dir name="etc"><file name="adminhtml.xml" hash="955f9f87d1a5df39eea9fd69379af0ee"/><file name="config.xml" hash="b848a5790d0f87f572a5cf00a3fb7120"/></dir><dir name="sql"><dir name="MiniOrange_2factor_setup"><file name="mysql4-install-0.0.1.php" hash="d48e85b9510d3a29784e75315b3c8ae4"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="miniorange_2factor_admin.xml" hash="49671205b07f54681d1f93fec9ee4d67"/></dir><dir name="template"><dir name="miniorange_2factor"><file name="login.phtml" hash="36f8b7177bafaf4e916b1d9e5f382e50"/><file name="mo2fConfig.phtml" hash="335e3975d294f4f39666913bdbe031fc"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="miniorange_2factor.xml" hash="609cb91239fb4a89f64ae28d4b5b5398"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><dir name="MiniOrange_2factor"><file name="appstore.png" hash="1ac5eb0f971fd8cbeac4d3e4449cd9f0"/><file name="arrow.png" hash="47bdba61de621d8ca74c16f6dd5b6565"/><file name="authenticate.png" hash="052bcae5504f3a9c61365ecf8ab0c4e7"/><file name="authvalidate.png" hash="a01eaf3a0002b3e7115813fd4e4efe1a"/><file name="cachesetting.png" hash="15942adf97c0d48abdf2c583c94eb4f5"/><file name="clickconfiguremobile.png" hash="3ee49ca9596e3ad507d66aca43466ea3"/><file name="clickconfiguremobile2.png" hash="fc0ff15007ea57e3ceef75235056dc88"/><file name="configurefirsttime.png" hash="c6982bcd3f70080d893e3da11d2a77d8"/><file name="configuremobile.png" hash="013d6599af7a31fb53a895d877ab1ffe"/><file name="forgot-phone.png" hash="64cfe82547e4db88d025346477025cfe"/><file name="forgotphone.png" hash="4272645ec478f1479fc3dc56df5dd89b"/><file name="loggedin.png" hash="70cc5cad9c475ef9420aa3d70bc43102"/><file name="login1.png" hash="c0dce259d0e2e84957ba77c6e2e78abb"/><file name="login2.png" hash="99e2c32c2fd5f9c9acf6a8002e1d44ac"/><file name="login3.png" hash="305c7bbdb97da888970b7225641757f0"/><file name="loginsettings.png" hash="811b9792a0e47f7e483d01a7ded0ccd0"/><file name="mail.png" hash="751f9588f2e2aac3ec47a6b0ebb2fa4d"/><file name="miniorange_logo.png" hash="b1cd21c2deeb5f199fb55de487bf950b"/><file name="mobileconfigurebutton.png" hash="747a6057cd50099e1cb3b5041320bd85"/><file name="mobilescan.png" hash="dec68c53b12944a45140d909af803fdd"/><file name="mobilesuccess.png" hash="d977fd41088cf0677f33e77de13da56c"/><file name="otp.png" hash="74dc1d7644af2013d256852d26bc920b"/><file name="phone-offline.png" hash="81b25f8125b13fd4d96c23a6fa84574e"/><file name="playStore.png" hash="fbca6f8b28d05c3bcd833965289a20c2"/><file name="processing.png" hash="56b1a14bd1558354250a7a232a4d16e7"/><file name="register.png" hash="37be41049f1d79215322a8cf908bf7b3"/><file name="right.png" hash="2321d72c95ee1fd5708199f56f213136"/><file name="savecache.png" hash="cf686304f47b080ec98930be8bb0f869"/><file name="scanqr.png" hash="dc4c1d070d9b336c790cd2d1d5315ee6"/><file name="sendingotp.png" hash="28c93249e717916d0f3c974b1cd2af7d"/><file name="settings.png" hash="a3e0382615d3f19f5a0dab4d4accbf2d"/><file name="softokenmobile.png" hash="624d589cdfa031df456e25a2ff034e63"/><file name="softtoken.png" hash="804bd9b0a3a600e6f349a6aa4ea00899"/><file name="sync.png" hash="8fffca24e6184fc3f9af8e20feac430b"/><file name="wrong.png" hash="6bd49538f79c4722610c5535f38213af"/></dir></dir></dir></dir></dir></target></contents>
70
  <compatible/>
71
  <dependencies><required><php><min>5.3.10</min><max>5.6.11</max></php><extension><name>curl</name><min>7.40.0</min><max>7.44.0</max></extension></required></dependencies>
72
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>miniOrange_2factor</name>
4
+ <version>1.0.5</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU General Public License (GPL)</license>
7
  <channel>community</channel>
8
  <extends/>
9
+ <summary>This plugin enablesTwo Factor Authentication for admins for your Magento backend.</summary>
10
+ <description>With miniOrange Two factor authentication product is a professionally developed product that can increase the safety of your magento admin login by adding a strong two-factor authentification to it. First the admin downloads the miniOrange authenticator app onto his phone and keeps it handy. In the next step (secure key exchange), the admin is shown a unique encrypted QR code on the screen and asked to scan it with the miniOrange authenticator app. The admin scans the encrypted QR code on the screen with the app. This is actually a secure and unique key exchange that happens between the admin and the miniOrange authentication server. From this point onwards, only the authentication server and the admins phone can generate the same one time passcode because they are the only ones that have the secret key associated with this admin.&#xD;
11
  &#xD;
12
+ After the secure key exchange step, the login is splitted into two steps.&#xD;
13
+ The first is the standard form where you must insert your magento login userid and password.&#xD;
14
+ In the second step you are shown an encrypted QR code on the screen that you can scan succesfully ONLY with your own phone. The QR code scan will be validated by an authentification server. Thus, a user can only access the magento backend if username, password and the QR code match.&#xD;
15
+ If the phone does not have internet connectivity - Admins can simply swipe the screen on their app and a unique one time passcode will appear which will remain valid for one minute. By entering this number, they can login.&#xD;
16
+ If the phone is lost or stolen - Admins can use the alternate two factor method where they can deliver a one time passcode to their email and use that to login.&#xD;
17
+ If the admins do not have smart phones and hence can not use apps, then they can use OTP over SMS as their second factor.If the admins only have a landline, they can use phone verification where they will get a call which will say a unique one time passcode and they can use it to login. For ease of use, the miniOrange two factor authentication product also has the ability to remember the device that the admin is logging in from so that it wont ask for the second factor again and again if the admin prefers the system to remember his device.&#xD;
18
+ About the miniOrange two factor authentication method, it is a unique method providing a strong two-factor authentication, combining something you know (a PIN or password) with a physical device generating encrypted one time passwords (which is your phone). It protects your online identity from malware and hackers on a high security level. Features: - Superior security - Easy to use.&#xD;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  &#xD;
20
  Contact Us&#xD;
21
  &#xD;
22
  For support please email us at info@miniorange.com or call us at +1 978 658 9387</description>
23
+ <notes>bug fixes</notes>
 
24
  <authors><author><name>miniOrange inc.</name><user>miniOrange</user><email>info@miniorange.com</email></author></authors>
25
+ <date>2015-08-27</date>
26
+ <time>12:36:59</time>
27
+ <contents><target name="magecommunity"><dir name="miniOrange"><dir name="2factor"><dir name="Block"><file name="mo2fConfig.php" hash="f346c34cfde56cb966956e318ec5ba8c"/></dir><dir name="Controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="91fb470c3971fcece6de35dd52b05309"/><dir name="Login"><file name="miniOrangeController.php" hash="78d1f305733dc764a87229ea4646a479"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="3a2351470af49914b3a233d0a28a850f"/><file name="mo2fUtility.php" hash="e4a203051b31feeec976d0a25ed277a6"/></dir><dir name="Model"><file name="Observer.php" hash="65fb169508d5043da2ae98386d0f588a"/><file name="Words.php" hash="ee26cc8582d5bbad5632a6e02129f815"/></dir><dir name="etc"><file name="adminhtml.xml" hash="955f9f87d1a5df39eea9fd69379af0ee"/><file name="config.xml" hash="bc19c00e0481dbc2d31ae3a653ddb5ff"/></dir><dir name="sql"><dir name="MiniOrange_2factor_setup"><file name="mysql4-install-0.0.1.php" hash="e91ca384273d63ae47efe68c4830c85f"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="miniorange_2factor_admin.xml" hash="49671205b07f54681d1f93fec9ee4d67"/></dir><dir name="template"><dir name="miniorange_2factor"><file name="login.phtml" hash="36f8b7177bafaf4e916b1d9e5f382e50"/><file name="mo2fConfig.phtml" hash="c081fca498b12e919b67ea879209285d"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="miniorange_2factor.xml" hash="609cb91239fb4a89f64ae28d4b5b5398"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><dir name="MiniOrange_2factor"><file name="appstore.png" hash="1ac5eb0f971fd8cbeac4d3e4449cd9f0"/><file name="arrow.png" hash="47bdba61de621d8ca74c16f6dd5b6565"/><file name="authenticate.png" hash="052bcae5504f3a9c61365ecf8ab0c4e7"/><file name="authvalidate.png" hash="a01eaf3a0002b3e7115813fd4e4efe1a"/><file name="cachesetting.png" hash="15942adf97c0d48abdf2c583c94eb4f5"/><file name="clickconfiguremobile.png" hash="3ee49ca9596e3ad507d66aca43466ea3"/><file name="clickconfiguremobile2.png" hash="fc0ff15007ea57e3ceef75235056dc88"/><file name="configurefirsttime.png" hash="c6982bcd3f70080d893e3da11d2a77d8"/><file name="configuremobile.png" hash="013d6599af7a31fb53a895d877ab1ffe"/><file name="forgot-phone.png" hash="64cfe82547e4db88d025346477025cfe"/><file name="forgotphone.png" hash="4272645ec478f1479fc3dc56df5dd89b"/><file name="loggedin.png" hash="70cc5cad9c475ef9420aa3d70bc43102"/><file name="login1.png" hash="c0dce259d0e2e84957ba77c6e2e78abb"/><file name="login2.png" hash="99e2c32c2fd5f9c9acf6a8002e1d44ac"/><file name="login3.png" hash="305c7bbdb97da888970b7225641757f0"/><file name="loginsettings.png" hash="811b9792a0e47f7e483d01a7ded0ccd0"/><file name="mail.png" hash="751f9588f2e2aac3ec47a6b0ebb2fa4d"/><file name="miniorange_logo.png" hash="b1cd21c2deeb5f199fb55de487bf950b"/><file name="mobileconfigurebutton.png" hash="747a6057cd50099e1cb3b5041320bd85"/><file name="mobilescan.png" hash="dec68c53b12944a45140d909af803fdd"/><file name="mobilesuccess.png" hash="d977fd41088cf0677f33e77de13da56c"/><file name="otp.png" hash="74dc1d7644af2013d256852d26bc920b"/><file name="phone-offline.png" hash="81b25f8125b13fd4d96c23a6fa84574e"/><file name="playStore.png" hash="fbca6f8b28d05c3bcd833965289a20c2"/><file name="processing.png" hash="56b1a14bd1558354250a7a232a4d16e7"/><file name="register.png" hash="37be41049f1d79215322a8cf908bf7b3"/><file name="right.png" hash="2321d72c95ee1fd5708199f56f213136"/><file name="savecache.png" hash="cf686304f47b080ec98930be8bb0f869"/><file name="scanqr.png" hash="dc4c1d070d9b336c790cd2d1d5315ee6"/><file name="sendingotp.png" hash="28c93249e717916d0f3c974b1cd2af7d"/><file name="settings.png" hash="a3e0382615d3f19f5a0dab4d4accbf2d"/><file name="softokenmobile.png" hash="624d589cdfa031df456e25a2ff034e63"/><file name="softtoken.png" hash="804bd9b0a3a600e6f349a6aa4ea00899"/><file name="sync.png" hash="8fffca24e6184fc3f9af8e20feac430b"/><file name="wrong.png" hash="6bd49538f79c4722610c5535f38213af"/></dir></dir></dir></dir></dir></target></contents>
28
  <compatible/>
29
  <dependencies><required><php><min>5.3.10</min><max>5.6.11</max></php><extension><name>curl</name><min>7.40.0</min><max>7.44.0</max></extension></required></dependencies>
30
  </package>