Version Notes
= 1.0.0 =
First version of plugin.
Download this release
Release Info
| Developer | miniOrange inc. |
| Extension | miniOrange_2factor |
| Version | 1.0.0 |
| Comparing to | |
| See all releases | |
Version 1.0.0
- app/code/community/MiniOrange/2factor/Block/mo2fConfig.php +97 -0
- app/code/community/MiniOrange/2factor/Controllers/Adminhtml/IndexController.php +449 -0
- app/code/community/MiniOrange/2factor/Controllers/Adminhtml/Login/miniOrangeController.php +23 -0
- app/code/community/MiniOrange/2factor/Controllers/IndexController.php +42 -0
- app/code/community/MiniOrange/2factor/Helper/Data.php +4 -0
- app/code/community/MiniOrange/2factor/Helper/mo2fUtility.php +433 -0
- app/code/community/MiniOrange/2factor/Model/Observer.php +186 -0
- app/code/community/MiniOrange/2factor/Model/Words.php +18 -0
- app/code/community/MiniOrange/2factor/etc/adminhtml.xml +22 -0
- app/code/community/MiniOrange/2factor/etc/config.xml +117 -0
- app/code/community/MiniOrange/2factor/sql/MiniOrange_2factor_setup/mysql4-install-0.0.1.php +26 -0
- app/design/adminhtml/default/default/layout/miniorange_2factor_admin.xml +9 -0
- app/design/adminhtml/default/default/template/miniorange_2factor/login.phtml +234 -0
- app/design/adminhtml/default/default/template/miniorange_2factor/mo2fConfig.phtml +508 -0
- app/etc/modules/miniorange_2factor.xml +9 -0
- package.xml +55 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/appstore.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/arrow.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/authenticate.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/authvalidate.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/cachesetting.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/clickconfiguremobile.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/clickconfiguremobile2.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/configurefirsttime.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/configuremobile.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/forgot-phone.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/forgotphone.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/loggedin.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/login1.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/login2.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/login3.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/loginsettings.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/mail.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/miniorange_logo.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/mobileconfigurebutton.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/mobilescan.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/mobilesuccess.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/otp.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/phone-offline.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/playStore.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/processing.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/register.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/right.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/savecache.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/scanqr.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/sendingotp.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/settings.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/softokenmobile.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/softtoken.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/sync.png +0 -0
- skin/adminhtml/default/default/images/MiniOrange_2factor/wrong.png +0 -0
app/code/community/MiniOrange/2factor/Block/mo2fConfig.php
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
class MiniOrange_2factor_Block_mo2fConfig extends Mage_Core_Block_Template{
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
public function isEnabled(){
|
| 6 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 7 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 8 |
+
$id = $admin->getUserId();
|
| 9 |
+
if($customer->getConfig('isEnabled',$id)==1){
|
| 10 |
+
return 'checked';
|
| 11 |
+
}
|
| 12 |
+
else{
|
| 13 |
+
return '';
|
| 14 |
+
}
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
public function getadminurl($value){
|
| 18 |
+
return Mage::helper("adminhtml")->getUrl($value);
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public function getcurrentUrl(){
|
| 22 |
+
return Mage::getBaseUrl();
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function getHostURl(){
|
| 26 |
+
return Mage::helper('MiniOrange_2factor/mo2fUtility')->getHostURl();
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
public function getqrCode(){
|
| 30 |
+
return Mage::getSingleton('core/session')->getmo2fqrcode();
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
public function getTransactionId(){
|
| 35 |
+
return Mage::getSingleton('core/session')->getmo2ftransactionId();
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
public function downloaded(){
|
| 39 |
+
if($this->getConfig('downloaded')==1){
|
| 40 |
+
return "checked";
|
| 41 |
+
}
|
| 42 |
+
else{
|
| 43 |
+
return;
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function showEmail(){
|
| 48 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 49 |
+
$id = $admin->getUserId();
|
| 50 |
+
return $customer->showEmail($id);
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
public function saveConfig($url,$value){
|
| 54 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 55 |
+
$id = $admin->getUserId();
|
| 56 |
+
$data = array($url=>$value);
|
| 57 |
+
$model = Mage::getModel('admin/user')->load($id)->addData($data);
|
| 58 |
+
try {
|
| 59 |
+
$model->setId($id)->save();
|
| 60 |
+
} catch (Exception $e){
|
| 61 |
+
Mage::log($e->getMessage(), null, 'miniorage_error.log', true);
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
public function getImage($image){
|
| 66 |
+
$url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);
|
| 67 |
+
return $url.'adminhtml/default/default/images/MiniOrange_2factor/'.$image.'.png';
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
public function getEmail(){
|
| 71 |
+
return Mage::getStoreConfig('miniorange_2factor_options/register/miniorange_2factor_username');
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
public function getConfig($config,$id=""){
|
| 75 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 76 |
+
if($id!=""){
|
| 77 |
+
return $customer->getConfig($config,$id);
|
| 78 |
+
}
|
| 79 |
+
else{
|
| 80 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 81 |
+
$id = $admin->getUserId();
|
| 82 |
+
return $customer->getConfig($config,$id);
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
public function cURLEnabled(){
|
| 87 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 88 |
+
return $customer->is_curl_installed();
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
public function getForgotPassUrl(){
|
| 92 |
+
$url = $this->getHostURl();
|
| 93 |
+
return $url.'/moas/idp/userforgotpassword' ;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
}
|
app/code/community/MiniOrange/2factor/Controllers/Adminhtml/IndexController.php
ADDED
|
@@ -0,0 +1,449 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 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();
|
| 10 |
+
$this->renderLayout();
|
| 11 |
+
Mage::getSingleton('core/session')->unsErrorMessage();
|
| 12 |
+
Mage::getSingleton('core/session')->unsSuccessMessage();
|
| 13 |
+
Mage::getSingleton('admin/session')->unsshowLoginSettings();
|
| 14 |
+
Mage::getSingleton('admin/session')->unsOTPsent();
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
public function newUserAction(){
|
| 19 |
+
$params = $this->getRequest()->getParams();
|
| 20 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 21 |
+
if($customer->is_curl_installed()){
|
| 22 |
+
$email = $params['email'];
|
| 23 |
+
$password = $params['password'];
|
| 24 |
+
$phone = $params['phone'];
|
| 25 |
+
$confirmPassword = $params['confirmPassword'];
|
| 26 |
+
if(strcmp($password,$confirmPassword)!=0){
|
| 27 |
+
$this->displayMessage('Passwords do not match.',"ERROR");
|
| 28 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 29 |
+
}
|
| 30 |
+
else{
|
| 31 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 32 |
+
$id = $admin->getUserId();
|
| 33 |
+
$content = json_decode($customer->check_customer($email), true);
|
| 34 |
+
if( strcasecmp( $content['status'], 'CUSTOMER_NOT_FOUND') == 0 ){
|
| 35 |
+
$content = json_decode($customer->send_otp_token($email,'EMAIL',$this->defaultCustomerKey,$this->defaultApiKey), true); //send otp for verification
|
| 36 |
+
if(strcasecmp($content['status'], 'SUCCESS') == 0){
|
| 37 |
+
Mage::getSingleton('admin/session')->setMytextid($content['txId']);
|
| 38 |
+
Mage::getSingleton('admin/session')->setOTPsent(1);
|
| 39 |
+
$this->saveConfig('miniorange_2factor_show_otp',1,$id);
|
| 40 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 41 |
+
$this->saveConfig('miniorange_2factor_email',$email,$id);
|
| 42 |
+
$this->saveConfig('miniorange_2factor_pass',$password,$id);
|
| 43 |
+
$this->saveConfig('miniorange_2factor_phone',$phone,$id);
|
| 44 |
+
$this->saveConfig('miniorange_2factor_admin_registered',$id,$id);
|
| 45 |
+
$this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
|
| 46 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 47 |
+
}
|
| 48 |
+
else{
|
| 49 |
+
$this->displayMessage('You are already a registered user',"ERROR");
|
| 50 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 51 |
+
}
|
| 52 |
+
}
|
| 53 |
+
else{
|
| 54 |
+
$content = $customer->get_customer_key($email,$password);
|
| 55 |
+
$customerKey = json_decode($content, true);
|
| 56 |
+
if(json_last_error() == JSON_ERROR_NONE) {
|
| 57 |
+
$this->saveConfig('miniorange_2factor_email',$email,$id);
|
| 58 |
+
$this->saveConfig('miniorange_2factor_phone',$phone,$id);
|
| 59 |
+
$collection = Mage::getModel('admin/user')->getCollection();
|
| 60 |
+
foreach($collection as $item){
|
| 61 |
+
$ids=$item->getData('user_id');
|
| 62 |
+
$this->saveConfig('miniorange_2factor_customer_key',$customerKey['id'],$ids);
|
| 63 |
+
$this->saveConfig('miniorange_2factor_api_key',$customerKey['apiKey'],$ids);
|
| 64 |
+
$this->saveConfig('miniorange_2factor_token',$customerKey['token'],$ids);
|
| 65 |
+
$this->saveConfig('miniorange_2factor_admin_registered',$id,$ids);
|
| 66 |
+
if($ids!=$id){
|
| 67 |
+
$this->saveConfig('miniorange_2factor_validated',0,$ids);
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
$this->saveConfig('miniorange_2factor_pass',"",$id);
|
| 71 |
+
$this->saveConfig('miniorange_2factor_show_otp',0,$id);
|
| 72 |
+
$this->saveConfig('miniorange_2factor_show_configure',1,$id);
|
| 73 |
+
$this->saveConfig('miniorange_2factor_validated',1,$id);
|
| 74 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 75 |
+
$this->displayMessage('Registration Successful configure your mobile below',"SUCCESS");
|
| 76 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 77 |
+
}
|
| 78 |
+
else{
|
| 79 |
+
$this->saveConfig('miniorange_2factor_login',"1",$id);
|
| 80 |
+
$this->displayMessage('Invalid Credentials',"ERROR");
|
| 81 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 82 |
+
}
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
else{
|
| 87 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
public function validateNewUserAction(){
|
| 92 |
+
$params = $this->getRequest()->getParams();
|
| 93 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 94 |
+
if($customer->is_curl_installed()){
|
| 95 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 96 |
+
$id = $admin->getUserId();
|
| 97 |
+
$otp = $params['otp'];
|
| 98 |
+
$email = Mage::getSingleton('core/session')->getaddAdmin();
|
| 99 |
+
$phone = Mage::getSingleton('core/session')->getaddPhone();
|
| 100 |
+
if(strcmp($otp,"")!=0){
|
| 101 |
+
$transactionId = Mage::getSingleton('admin/session')->getMytextid();
|
| 102 |
+
$content = json_decode($customer->validate_otp_token( 'EMAIL', null, $transactionId , $otp , $this->defaultCustomerKey, $this->defaultApiKey),true);
|
| 103 |
+
|
| 104 |
+
if(strcasecmp($content['status'], 'SUCCESS') == 0) { //OTP validated and generate QRCode
|
| 105 |
+
$adminregistered = $customer->getConfig('mainAdmin',$id);
|
| 106 |
+
if($adminregistered!="" && $adminregistered==$id){
|
| 107 |
+
$this->mo2f_create_customer();
|
| 108 |
+
}
|
| 109 |
+
else{
|
| 110 |
+
$this->saveConfig('miniorange_2factor_email',$email,$id);
|
| 111 |
+
$this->saveConfig('miniorange_2factor_phone',$phone,$id);
|
| 112 |
+
$this->saveConfig('miniorange_2factor_pass',"",$id);
|
| 113 |
+
$this->saveConfig('miniorange_2factor_show_otp',0,$id);
|
| 114 |
+
$this->saveConfig('miniorange_2factor_show_configure',1,$id);
|
| 115 |
+
$this->saveConfig('miniorange_2factor_validated',1,$id);
|
| 116 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 117 |
+
$this->displayMessage('Registration Complete. Please Configure your mobile',"SUCCESS");
|
| 118 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
else{
|
| 122 |
+
$this->displayMessage('Please enter a valid otp',"ERROR");
|
| 123 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
else{
|
| 127 |
+
$this->displayMessage('Please enter a valid otp',"ERROR");
|
| 128 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 129 |
+
}
|
| 130 |
+
}
|
| 131 |
+
else{
|
| 132 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 133 |
+
}
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
public function existingUserAction(){
|
| 137 |
+
$params = $this->getRequest()->getParams();
|
| 138 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 139 |
+
if($customer->is_curl_installed()){
|
| 140 |
+
$email = $params['loginemail'];
|
| 141 |
+
$password = $params['loginpassword'];
|
| 142 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 143 |
+
$id = $admin->getUserId();
|
| 144 |
+
$content = $customer->get_customer_key($email,$password);
|
| 145 |
+
$customerKey = json_decode($content, true);
|
| 146 |
+
if(json_last_error() == JSON_ERROR_NONE) {
|
| 147 |
+
$this->saveConfig('miniorange_2factor_email',$email,$id);
|
| 148 |
+
$collection = Mage::getModel('admin/user')->getCollection();
|
| 149 |
+
foreach($collection as $item){
|
| 150 |
+
$ids=$item->getData('user_id');
|
| 151 |
+
$this->saveConfig('miniorange_2factor_customer_key',$customerKey['id'],$ids);
|
| 152 |
+
$this->saveConfig('miniorange_2factor_api_key',$customerKey['apiKey'],$ids);
|
| 153 |
+
$this->saveConfig('miniorange_2factor_token',$customerKey['token'],$ids);
|
| 154 |
+
if($ids!=$id){
|
| 155 |
+
$this->saveConfig('miniorange_2factor_validated',0,$ids);
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
$this->saveConfig('miniorange_2factor_pass',"",$id);
|
| 159 |
+
$this->saveConfig('miniorange_2factor_show_otp',0,$id);
|
| 160 |
+
$this->saveConfig('miniorange_2factor_show_configure',1,$id);
|
| 161 |
+
$this->saveConfig('miniorange_2factor_validated',1,$id);
|
| 162 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 163 |
+
$this->displayMessage('Registration Successful. Please Configure your mobile below',"SUCCESS");
|
| 164 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 165 |
+
}
|
| 166 |
+
else{
|
| 167 |
+
$this->saveConfig('miniorange_2factor_login',1,$id);
|
| 168 |
+
$this->displayMessage('Invalid Credentials',"ERROR");
|
| 169 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 170 |
+
}
|
| 171 |
+
}
|
| 172 |
+
else{
|
| 173 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 174 |
+
}
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
public function additionalAdminAction(){
|
| 178 |
+
$params = $this->getRequest()->getParams();
|
| 179 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 180 |
+
if($customer->is_curl_installed()){
|
| 181 |
+
$email = $params['additional_email'];
|
| 182 |
+
$phone = $params['additional_phone'];
|
| 183 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 184 |
+
$id = $admin->getUserId();
|
| 185 |
+
$content = json_decode($customer->send_otp_token($email,'EMAIL',$this->defaultCustomerKey,$this->defaultApiKey), true);
|
| 186 |
+
if(strcasecmp($content['status'], 'SUCCESS') == 0){
|
| 187 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 188 |
+
$id = $admin->getUserId();
|
| 189 |
+
Mage::getSingleton('admin/session')->setOTPsent(1);
|
| 190 |
+
Mage::getSingleton('admin/session')->setMytextid($content['txId']);
|
| 191 |
+
$this->saveConfig('miniorange_2factor_show_otp',1,$id);
|
| 192 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 193 |
+
Mage::getSingleton('core/session')->setaddAdmin($email);
|
| 194 |
+
Mage::getSingleton('core/session')->setaddPhone($phone);
|
| 195 |
+
$this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
|
| 196 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 197 |
+
}
|
| 198 |
+
else{
|
| 199 |
+
$this->displayMessage('Error while sending OTP.',"ERROR");
|
| 200 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 201 |
+
}
|
| 202 |
+
}
|
| 203 |
+
else{
|
| 204 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 205 |
+
}
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
public function enableAdminAction(){
|
| 209 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 210 |
+
if($customer->is_curl_installed()){
|
| 211 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 212 |
+
$id = $admin->getUserId();
|
| 213 |
+
$params = $this->getRequest()->getParams();
|
| 214 |
+
$email = $customer->getConfig('email',$id);
|
| 215 |
+
$validated = $customer->getConfig('validated',$id);
|
| 216 |
+
$showqr = $customer->getConfig('configure',$id);
|
| 217 |
+
Mage::getSingleton('admin/session')->setshowLoginSettings(1);
|
| 218 |
+
if($email!="" && $validated==1){
|
| 219 |
+
if($showqr==0){
|
| 220 |
+
$value = $params['adminrole_activation'];
|
| 221 |
+
if($value==1){
|
| 222 |
+
$this->saveConfig('miniorange_2factor_Admin_enable',1,$id);
|
| 223 |
+
$this->displayMessage('Enabled Two Factor for Admin',"SUCCESS");
|
| 224 |
+
}
|
| 225 |
+
else{
|
| 226 |
+
$this->saveConfig('miniorange_2factor_Admin_enable',0,$id);
|
| 227 |
+
$this->displayMessage('Disabled Two Factor for Admin',"ERROR");
|
| 228 |
+
}
|
| 229 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 230 |
+
}
|
| 231 |
+
else{
|
| 232 |
+
$this->displayMessage('You will have to configure your mobile before you can enable 2factor',"ERROR");
|
| 233 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 234 |
+
}
|
| 235 |
+
}
|
| 236 |
+
else{
|
| 237 |
+
$this->displayMessage('You will have to register before you can enable 2factor',"ERROR");
|
| 238 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 239 |
+
}
|
| 240 |
+
}
|
| 241 |
+
else{
|
| 242 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 243 |
+
}
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
public function supportSubmitAction(){
|
| 247 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 248 |
+
if($customer->is_curl_installed()){
|
| 249 |
+
$params = $this->getRequest()->getParams();
|
| 250 |
+
$user = Mage::getSingleton('admin/session')->getUser();
|
| 251 |
+
$customer->submit_contact_us($params['query_email'], $params['query_phone'], $params['query'], $user);
|
| 252 |
+
$this->displayMessage('Your query has been sent. We will get in touch with you soon',"SUCCESS");
|
| 253 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 254 |
+
}
|
| 255 |
+
else{
|
| 256 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 257 |
+
}
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
public function registrationSuccessAction(){
|
| 261 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 262 |
+
if($customer->is_curl_installed()){
|
| 263 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 264 |
+
$id = $admin->getUserId();
|
| 265 |
+
$url = Mage::helper("adminhtml")->getUrl('adminhtml/index/logout');
|
| 266 |
+
$this->displayMessage('You are Done. You can <a href="'.$url.'">log out</a> and log back in with mobile authentication.',"SUCCESS");
|
| 267 |
+
$this->saveConfig('miniorange_2factor_show_qr',0,$id);
|
| 268 |
+
$this->saveConfig('miniorange_2factor_show_configure',0,$id);
|
| 269 |
+
Mage::getSingleton('admin/session')->setshowLoginSettings(1);
|
| 270 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 271 |
+
}
|
| 272 |
+
else{
|
| 273 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 274 |
+
}
|
| 275 |
+
}
|
| 276 |
+
|
| 277 |
+
public function showQRCodeAction(){
|
| 278 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 279 |
+
if($customer->is_curl_installed()){
|
| 280 |
+
$params = $this->getRequest()->getParams();
|
| 281 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 282 |
+
$id = $admin->getUserId();
|
| 283 |
+
$email = $customer->getConfig('email',$id);
|
| 284 |
+
$validated = $customer->getConfig('validated',$id);
|
| 285 |
+
if($email!="" && $validated==1){
|
| 286 |
+
$this->saveConfig('miniorange_2factor_show_configure',1,$id);
|
| 287 |
+
$this->saveConfig('miniorange_2factor_downloaded_app',$params['showDownload'],$id);
|
| 288 |
+
$this->mo2f_get_qr_code_for_mobile($email,$id);
|
| 289 |
+
}
|
| 290 |
+
else{
|
| 291 |
+
$this->displayMessage('You will have to register before configuring your mobile',"ERROR");
|
| 292 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 293 |
+
}
|
| 294 |
+
}
|
| 295 |
+
else{
|
| 296 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 297 |
+
}
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
public function resendValidationOTPAction(){
|
| 301 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 302 |
+
if($customer->is_curl_installed()){
|
| 303 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 304 |
+
$id = $admin->getUserId();
|
| 305 |
+
$email = $customer->getConfig('email',$id);
|
| 306 |
+
$content = json_decode($customer->send_otp_token($email,'EMAIL',$this->defaultCustomerKey,$this->defaultApiKey), true); //send otp for verification
|
| 307 |
+
if(strcasecmp($content['status'], 'SUCCESS') == 0){
|
| 308 |
+
Mage::getSingleton('admin/session')->setMytextid($content['txId']);
|
| 309 |
+
$this->saveConfig('miniorange_2factor_show_otp',1,$id);
|
| 310 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 311 |
+
$this->saveConfig('miniorange_2factor_admin_registered',$id,$id);
|
| 312 |
+
$this->displayMessage('OTP has been sent to your Email. Please check your mail and enter the otp below.',"SUCCESS");
|
| 313 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 314 |
+
}
|
| 315 |
+
else{
|
| 316 |
+
$this->displayMessage('You are already a registered user',"ERROR");
|
| 317 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 318 |
+
}
|
| 319 |
+
}
|
| 320 |
+
else{
|
| 321 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 322 |
+
}
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
public function registrationTimeOut(){
|
| 326 |
+
Mage::getSingleton('core/session')->unsmo2fqrcode($response['qrCode']);
|
| 327 |
+
Mage::getSingleton('core/session')->unsmo2ftransactionId($response['txId']);
|
| 328 |
+
$this->displayMessage('Connection TimedOut. Please click on the Re-Configure button below to configure your mobile.',"ERROR");
|
| 329 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
public function cancelValidationAction(){
|
| 333 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 334 |
+
$id = $admin->getUserId();
|
| 335 |
+
$this->saveConfig('miniorange_2factor_show_otp',null,$id);
|
| 336 |
+
$this->saveConfig('miniorange_2factor_login',null,$id);
|
| 337 |
+
$this->saveConfig('miniorange_2factor_admin_registered',null,$id);
|
| 338 |
+
$this->saveConfig('miniorange_2factor_email',"",$id);
|
| 339 |
+
$this->saveConfig('miniorange_2factor_pass',"",$id);
|
| 340 |
+
$this->saveConfig('miniorange_2factor_phone',"",$id);
|
| 341 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
|
| 345 |
+
private function redirect($url){
|
| 346 |
+
$redirect = Mage::helper("adminhtml")->getUrl($url);
|
| 347 |
+
Mage::app()->getResponse()->setRedirect($redirect);
|
| 348 |
+
}
|
| 349 |
+
|
| 350 |
+
private function saveConfig($url,$value,$id){
|
| 351 |
+
$data = array($url=>$value);
|
| 352 |
+
$model = Mage::getModel('admin/user')->load($id)->addData($data);
|
| 353 |
+
try {
|
| 354 |
+
$model->setId($id)->save();
|
| 355 |
+
} catch (Exception $e){
|
| 356 |
+
Mage::log($e->getMessage(), null, 'miniorage_error.log', true);
|
| 357 |
+
}
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
private function displayMessage($message,$type){
|
| 361 |
+
Mage::getSingleton('core/session')->getMessages(true);
|
| 362 |
+
Mage::getSingleton('core/session')->unsSuccessMessage();
|
| 363 |
+
Mage::getSingleton('core/session')->unsErrorMessage();
|
| 364 |
+
if(strcasecmp( $type,"SUCCESS") == 0)
|
| 365 |
+
Mage::getSingleton('core/session')->setSuccessMessage($message);
|
| 366 |
+
else
|
| 367 |
+
Mage::getSingleton('core/session')->setErrorMessage($message);
|
| 368 |
+
}
|
| 369 |
+
|
| 370 |
+
private function mo2f_create_customer(){
|
| 371 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 372 |
+
if($customer->is_curl_installed()){
|
| 373 |
+
$admin = Mage::getSingleton('admin/session')->getUser();
|
| 374 |
+
$id = $admin->getUserId();
|
| 375 |
+
$email = $customer->getConfig('email',$id);
|
| 376 |
+
$password = $customer->getConfig('pass',$id);
|
| 377 |
+
$customerKey = json_decode($customer->create_customer($email,'',$password), true);
|
| 378 |
+
if(strcasecmp($customerKey['status'], 'CUSTOMER_USERNAME_ALREADY_EXISTS') == 0) { //admin already exists in miniOrange
|
| 379 |
+
$content = $customer->get_customer_key($email,$password);
|
| 380 |
+
$customerKey = json_decode($content, true);
|
| 381 |
+
if(json_last_error() == JSON_ERROR_NONE) {
|
| 382 |
+
$collection = Mage::getModel('admin/user')->getCollection();
|
| 383 |
+
foreach($collection as $item){
|
| 384 |
+
$ids=$item->getData('user_id');
|
| 385 |
+
$this->saveConfig('miniorange_2factor_customer_key',$customerKey['id'],$ids);
|
| 386 |
+
$this->saveConfig('miniorange_2factor_api_key',$customerKey['apiKey'],$ids);
|
| 387 |
+
$this->saveConfig('miniorange_2factor_token',$customerKey['token'],$ids);
|
| 388 |
+
if($ids!=$id){
|
| 389 |
+
$this->saveConfig('miniorange_2factor_validated',0,$ids);
|
| 390 |
+
}
|
| 391 |
+
}
|
| 392 |
+
$this->saveConfig('miniorange_2factor_pass',"",$id);
|
| 393 |
+
$this->saveConfig('miniorange_2factor_show_otp',0,$id);
|
| 394 |
+
$this->saveConfig('miniorange_2factor_show_configure',1,$id);
|
| 395 |
+
$this->saveConfig('miniorange_2factor_validated',1,$id);
|
| 396 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 397 |
+
$this->displayMessage('Registration Complete. Please Configure your mobile',"SUCCESS");
|
| 398 |
+
} else {
|
| 399 |
+
$this->displayMessage('An error occurred while creating customer',"ERROR");
|
| 400 |
+
}
|
| 401 |
+
}else{
|
| 402 |
+
$collection = Mage::getModel('admin/user')->getCollection();
|
| 403 |
+
foreach($collection as $item){
|
| 404 |
+
$ids=$item->getData('user_id');
|
| 405 |
+
$this->saveConfig('miniorange_2factor_customer_key',$customerKey['id'],$ids);
|
| 406 |
+
$this->saveConfig('miniorange_2factor_api_key',$customerKey['apiKey'],$ids);
|
| 407 |
+
$this->saveConfig('miniorange_2factor_token',$customerKey['token'],$ids);
|
| 408 |
+
if($ids!=$id){
|
| 409 |
+
$this->saveConfig('miniorange_2factor_validated',0,$ids);
|
| 410 |
+
}
|
| 411 |
+
}
|
| 412 |
+
$this->saveConfig('miniorange_2factor_pass',"",$id);
|
| 413 |
+
$this->saveConfig('miniorange_2factor_show_otp',0,$id);
|
| 414 |
+
$this->saveConfig('miniorange_2factor_login',0,$id);
|
| 415 |
+
$this->saveConfig('miniorange_2factor_show_configure',1,$id);
|
| 416 |
+
$this->saveConfig('miniorange_2factor_validated',1,$id);
|
| 417 |
+
$this->displayMessage('Registration Complete. Please Configure your mobile',"SUCCESS");
|
| 418 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 419 |
+
}
|
| 420 |
+
}
|
| 421 |
+
else{
|
| 422 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 423 |
+
}
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
|
| 427 |
+
private function mo2f_get_qr_code_for_mobile($email,$id){
|
| 428 |
+
$registerMobile = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 429 |
+
$customer = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 430 |
+
if($customer->is_curl_installed()){
|
| 431 |
+
$content = $registerMobile->register_mobile($email,$id);
|
| 432 |
+
$response = json_decode($content, true);
|
| 433 |
+
if(json_last_error() == JSON_ERROR_NONE) {
|
| 434 |
+
Mage::getSingleton('core/session')->setmo2fqrcode($response['qrCode']);
|
| 435 |
+
Mage::getSingleton('core/session')->setmo2ftransactionId($response['txId']);
|
| 436 |
+
$this->saveConfig('miniorange_2factor_show_qr',1,$id);
|
| 437 |
+
$this->saveConfig('miniorange_2factor_Admin_enable',1,$id);
|
| 438 |
+
$this->redirect("miniorange_2factor/adminhtml_index/index");
|
| 439 |
+
}
|
| 440 |
+
}
|
| 441 |
+
else{
|
| 442 |
+
$this->displayMessage('cURL is not enabled. Please <a id="cURL" href="#cURLfaq">click here</a> to see how to enable cURL.',"ERROR");
|
| 443 |
+
}
|
| 444 |
+
}
|
| 445 |
+
|
| 446 |
+
|
| 447 |
+
|
| 448 |
+
|
| 449 |
+
}
|
app/code/community/MiniOrange/2factor/Controllers/Adminhtml/Login/miniOrangeController.php
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class MiniOrange_2factor_Adminhtml_Login_miniOrangeController extends Mage_Adminhtml_Controller_Action
|
| 4 |
+
{
|
| 5 |
+
protected function _isAllowed(){
|
| 6 |
+
return true;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
public function loginAction(){
|
| 10 |
+
$this->_outTemplate('miniorange_2factor/login');
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
protected function _outTemplate($tplName, $data = array()){
|
| 14 |
+
$this->_initLayoutMessages('adminhtml/session');
|
| 15 |
+
$block = $this->getLayout()->createBlock('adminhtml/template')->setTemplate("$tplName.phtml");
|
| 16 |
+
foreach ($data as $index => $value) {
|
| 17 |
+
$block->assign($index, $value);
|
| 18 |
+
}
|
| 19 |
+
$html = $block->toHtml();
|
| 20 |
+
Mage::getSingleton('core/translate_inline')->processResponseBody($html);
|
| 21 |
+
$this->getResponse()->setBody($html);
|
| 22 |
+
}
|
| 23 |
+
}
|
app/code/community/MiniOrange/2factor/Controllers/IndexController.php
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class MiniOrange_2factor_IndexController extends Mage_Core_Controller_Front_Action
|
| 4 |
+
{
|
| 5 |
+
/*public function indexAction(){
|
| 6 |
+
$this->loadLayout();
|
| 7 |
+
$this->renderLayout();
|
| 8 |
+
}*/
|
| 9 |
+
|
| 10 |
+
/*public function checkemailAction(){
|
| 11 |
+
$params = $this->getRequest()->getParams();
|
| 12 |
+
$customer = Mage::helper('MiniOrange_2factor/customersetup');
|
| 13 |
+
$content = json_decode($customer->check_customer($params['email']), true);
|
| 14 |
+
if( strcasecmp( $content['status'], 'CUSTOMER_NOT_FOUND') == 0 ){
|
| 15 |
+
$content = json_decode($customer->send_otp_token($email), true); //send otp for verification
|
| 16 |
+
if(strcasecmp($content['status'], 'SUCCESS') == 0) {
|
| 17 |
+
Mage::getSingleton('core/session')->setMySessionVariable($content['txId']);
|
| 18 |
+
//save
|
| 19 |
+
}
|
| 20 |
+
}
|
| 21 |
+
$redirect = Mage::helper('core/url')->getHomeUrl().'customer/account/login#loginScreen';
|
| 22 |
+
$this->_redirectUrl($redirect);
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
protected function _customerExists($email){
|
| 27 |
+
//called to check if customer already exists
|
| 28 |
+
$websiteId = Mage::app()->getWebsite()->getId();
|
| 29 |
+
$customer = Mage::getModel('customer/customer');
|
| 30 |
+
if ($websiteId) {
|
| 31 |
+
$customer->setWebsiteId($websiteId);
|
| 32 |
+
}
|
| 33 |
+
$customer->loadByEmail($email);
|
| 34 |
+
if ($customer->getId()) {
|
| 35 |
+
return $customer;
|
| 36 |
+
}
|
| 37 |
+
return false;
|
| 38 |
+
}*/
|
| 39 |
+
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
?>
|
app/code/community/MiniOrange/2factor/Helper/Data.php
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
class MiniOrange_2factor_Helper_Data extends Mage_Core_Helper_Abstract
|
| 3 |
+
{
|
| 4 |
+
}
|
app/code/community/MiniOrange/2factor/Helper/mo2fUtility.php
ADDED
|
@@ -0,0 +1,433 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/** miniOrange enables user to log in through mobile authentication as an additional layer of security over password.
|
| 3 |
+
Copyright (C) 2015 miniOrange
|
| 4 |
+
|
| 5 |
+
This program is free software: you can redistribute it and/or modify
|
| 6 |
+
it under the terms of the GNU General Public License as published by
|
| 7 |
+
the Free Software Foundation, either version 3 of the License, or
|
| 8 |
+
(at your option) any later version.
|
| 9 |
+
|
| 10 |
+
This program is distributed in the hope that it will be useful,
|
| 11 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 12 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 13 |
+
GNU General Public License for more details.
|
| 14 |
+
|
| 15 |
+
You should have received a copy of the GNU General Public License
|
| 16 |
+
along with this program. If not, see <http://www.gnu.org/licenses/>
|
| 17 |
+
* @package miniOrange OAuth
|
| 18 |
+
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
|
| 19 |
+
*/
|
| 20 |
+
/**
|
| 21 |
+
This library is miniOrange Authentication Service.
|
| 22 |
+
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://test.miniorange.com";
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
function getHostURl(){
|
| 32 |
+
return $this->hostname;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
function check_customer($email){
|
| 36 |
+
$url = $this->hostname . '/moas/rest/customer/check-if-exists';
|
| 37 |
+
$ch = curl_init( $url );
|
| 38 |
+
|
| 39 |
+
$fields = array(
|
| 40 |
+
'email' => $email,
|
| 41 |
+
);
|
| 42 |
+
$field_string = json_encode( $fields );
|
| 43 |
+
|
| 44 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 45 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 46 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 47 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 48 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 49 |
+
|
| 50 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 51 |
+
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'charset: UTF - 8', 'Authorization: Basic' ) );
|
| 52 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 53 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 54 |
+
$content = curl_exec( $ch );
|
| 55 |
+
|
| 56 |
+
if( curl_errno( $ch ) ){
|
| 57 |
+
echo 'Request Error:' . curl_error( $ch );
|
| 58 |
+
exit();
|
| 59 |
+
}
|
| 60 |
+
curl_close( $ch );
|
| 61 |
+
|
| 62 |
+
return $content;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
function send_otp_token($email,$authType,$defaultCustomerKey,$defaultApiKey){
|
| 67 |
+
$url = $this->hostname . '/moas/api/auth/challenge';
|
| 68 |
+
$ch = curl_init($url);
|
| 69 |
+
$customerKey = $defaultCustomerKey;
|
| 70 |
+
$apiKey = $defaultApiKey;
|
| 71 |
+
|
| 72 |
+
$currentTimeInMillis = round(microtime(true) * 1000);
|
| 73 |
+
|
| 74 |
+
$stringToHash = $customerKey . $currentTimeInMillis . $apiKey;
|
| 75 |
+
$hashValue = hash("sha512", $stringToHash);
|
| 76 |
+
|
| 77 |
+
$customerKeyHeader = "Customer-Key: " . $customerKey;
|
| 78 |
+
$timestampHeader = "Timestamp: " . $currentTimeInMillis;
|
| 79 |
+
$authorizationHeader = "Authorization: " . $hashValue;
|
| 80 |
+
|
| 81 |
+
$fields = '';
|
| 82 |
+
if( $authType == 'EMAIL' ) {
|
| 83 |
+
$fields = array(
|
| 84 |
+
'customerKey' => $customerKey,
|
| 85 |
+
'email' => $email,
|
| 86 |
+
'authType' => $authType,
|
| 87 |
+
);
|
| 88 |
+
}else{
|
| 89 |
+
$fields = array(
|
| 90 |
+
'customerKey' => $customerKey,
|
| 91 |
+
'username' => $email,
|
| 92 |
+
'authType' => $authType,
|
| 93 |
+
);
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
$field_string = json_encode($fields);
|
| 97 |
+
|
| 98 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 99 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 100 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 101 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 102 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 103 |
+
|
| 104 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 105 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", $customerKeyHeader,
|
| 106 |
+
$timestampHeader, $authorizationHeader));
|
| 107 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 108 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 109 |
+
$content = curl_exec($ch);
|
| 110 |
+
|
| 111 |
+
if(curl_errno($ch)){
|
| 112 |
+
echo 'Request Error:' . curl_error($ch);
|
| 113 |
+
exit();
|
| 114 |
+
}
|
| 115 |
+
curl_close($ch);
|
| 116 |
+
return $content;
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
function validate_otp_token($authType,$username,$transactionId,$otpToken,$defaultCustomerKey,$defaultApiKey){
|
| 121 |
+
$url = $this->hostname . '/moas/api/auth/validate';
|
| 122 |
+
$ch = curl_init($url);
|
| 123 |
+
|
| 124 |
+
/* The customer Key provided to you */
|
| 125 |
+
$customerKey = $defaultCustomerKey;
|
| 126 |
+
|
| 127 |
+
/* The customer API Key provided to you */
|
| 128 |
+
$apiKey = $defaultApiKey;
|
| 129 |
+
|
| 130 |
+
/* Current time in milliseconds since midnight, January 1, 1970 UTC. */
|
| 131 |
+
$currentTimeInMillis = round(microtime(true) * 1000);
|
| 132 |
+
|
| 133 |
+
/* Creating the Hash using SHA-512 algorithm */
|
| 134 |
+
$stringToHash = $customerKey . $currentTimeInMillis . $apiKey;
|
| 135 |
+
$hashValue = hash("sha512", $stringToHash);
|
| 136 |
+
|
| 137 |
+
$customerKeyHeader = "Customer-Key: " . $customerKey;
|
| 138 |
+
$timestampHeader = "Timestamp: " . $currentTimeInMillis;
|
| 139 |
+
$authorizationHeader = "Authorization: " . $hashValue;
|
| 140 |
+
|
| 141 |
+
$fields = '';
|
| 142 |
+
if( $authType == 'SOFT TOKEN' ) {
|
| 143 |
+
/*check for soft token*/
|
| 144 |
+
$fields = array(
|
| 145 |
+
'customerKey' => $customerKey,
|
| 146 |
+
'username' => $username,
|
| 147 |
+
'token' => $otpToken,
|
| 148 |
+
'authType' => $authType
|
| 149 |
+
);
|
| 150 |
+
}else{
|
| 151 |
+
//*check for otp over sms/email
|
| 152 |
+
$fields = array(
|
| 153 |
+
'txId' => $transactionId,
|
| 154 |
+
'token' => $otpToken,
|
| 155 |
+
);
|
| 156 |
+
}
|
| 157 |
+
$field_string = json_encode($fields);
|
| 158 |
+
|
| 159 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 160 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 161 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 162 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 163 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 164 |
+
|
| 165 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 166 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", $customerKeyHeader,
|
| 167 |
+
$timestampHeader, $authorizationHeader));
|
| 168 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 169 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 170 |
+
$content = curl_exec($ch);
|
| 171 |
+
|
| 172 |
+
if(curl_errno($ch)){
|
| 173 |
+
echo 'Request Error:' . curl_error($ch);
|
| 174 |
+
exit();
|
| 175 |
+
}
|
| 176 |
+
curl_close($ch);
|
| 177 |
+
return $content;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
function create_customer($email,$phone,$password){
|
| 181 |
+
$url = $this->hostname . '/moas/rest/customer/add';
|
| 182 |
+
$ch = curl_init($url);
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
$fields = array(
|
| 186 |
+
'companyName' => $_SERVER['SERVER_NAME'],
|
| 187 |
+
'areaOfInterest' => 'Magento 2 Factor Authentication Plugin',
|
| 188 |
+
'email' => $email,
|
| 189 |
+
'phone' => $phone,
|
| 190 |
+
'password' => $password
|
| 191 |
+
);
|
| 192 |
+
$field_string = json_encode($fields);
|
| 193 |
+
|
| 194 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 195 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 196 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 197 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 198 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 199 |
+
|
| 200 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 201 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
| 202 |
+
'Content-Type: application/json',
|
| 203 |
+
'charset: UTF - 8',
|
| 204 |
+
'Authorization: Basic'
|
| 205 |
+
));
|
| 206 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 207 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 208 |
+
$content = curl_exec($ch);
|
| 209 |
+
|
| 210 |
+
if(curl_errno($ch)){
|
| 211 |
+
echo 'Request Error:' . curl_error($ch);
|
| 212 |
+
exit();
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
|
| 216 |
+
curl_close($ch);
|
| 217 |
+
return $content;
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
function get_customer_key($email,$password) {
|
| 221 |
+
$url = $this->hostname . "/moas/rest/customer/key";
|
| 222 |
+
$ch = curl_init($url);
|
| 223 |
+
|
| 224 |
+
$fields = array(
|
| 225 |
+
'email' => $email,
|
| 226 |
+
'password' => $password
|
| 227 |
+
);
|
| 228 |
+
$field_string = json_encode($fields);
|
| 229 |
+
|
| 230 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 231 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 232 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 233 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 234 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 235 |
+
|
| 236 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 237 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
| 238 |
+
'Content-Type: application/json',
|
| 239 |
+
'charset: UTF - 8',
|
| 240 |
+
'Authorization: Basic'
|
| 241 |
+
));
|
| 242 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 243 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 244 |
+
$content = curl_exec($ch);
|
| 245 |
+
if(curl_errno($ch)){
|
| 246 |
+
echo 'Request Error:' . curl_error($ch);
|
| 247 |
+
exit();
|
| 248 |
+
}
|
| 249 |
+
curl_close($ch);
|
| 250 |
+
|
| 251 |
+
return $content;
|
| 252 |
+
}
|
| 253 |
+
|
| 254 |
+
|
| 255 |
+
function submit_contact_us( $q_email, $q_phone, $query, $user) {
|
| 256 |
+
$url = $this->hostname . "/moas/rest/customer/contact-us";
|
| 257 |
+
$ch = curl_init($url);
|
| 258 |
+
$query = '[Magento 2 Factor Authentication Plugin]: ' . $query;
|
| 259 |
+
$fields = array(
|
| 260 |
+
'firstName' => $user->getFirstname(),
|
| 261 |
+
'lastName' => $user->getLastname(),
|
| 262 |
+
'company' => $_SERVER['SERVER_NAME'],
|
| 263 |
+
'email' => $q_email,
|
| 264 |
+
'phone' => $q_phone,
|
| 265 |
+
'query' => $query
|
| 266 |
+
);
|
| 267 |
+
$field_string = json_encode( $fields );
|
| 268 |
+
|
| 269 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 270 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 271 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 272 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 273 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 274 |
+
|
| 275 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 276 |
+
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'charset: UTF-8', 'Authorization: Basic' ) );
|
| 277 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 278 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 279 |
+
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5);
|
| 280 |
+
curl_setopt( $ch, CURLOPT_TIMEOUT, 20);
|
| 281 |
+
$content = curl_exec( $ch );
|
| 282 |
+
|
| 283 |
+
if(curl_errno($ch)){
|
| 284 |
+
return null;
|
| 285 |
+
}
|
| 286 |
+
curl_close($ch);
|
| 287 |
+
|
| 288 |
+
return true;
|
| 289 |
+
}
|
| 290 |
+
|
| 291 |
+
function adminExists($username){
|
| 292 |
+
$adminuser = Mage::getModel('admin/user');
|
| 293 |
+
$adminuser->loadByUsername($username);
|
| 294 |
+
if ($adminuser->getId()){
|
| 295 |
+
return true;
|
| 296 |
+
}
|
| 297 |
+
else{
|
| 298 |
+
return false;
|
| 299 |
+
}
|
| 300 |
+
}
|
| 301 |
+
|
| 302 |
+
function getAdmin($username){
|
| 303 |
+
$adminuser = Mage::getModel('admin/user');
|
| 304 |
+
$adminuser->loadByUsername($username);
|
| 305 |
+
if ($adminuser->getId()){
|
| 306 |
+
return $adminuser;
|
| 307 |
+
}
|
| 308 |
+
else{
|
| 309 |
+
return;
|
| 310 |
+
}
|
| 311 |
+
}
|
| 312 |
+
|
| 313 |
+
function register_mobile($useremail,$id){
|
| 314 |
+
$url = $this->hostname . '/moas/api/auth/register-mobile';
|
| 315 |
+
$ch = curl_init($url);
|
| 316 |
+
$email = $useremail;
|
| 317 |
+
|
| 318 |
+
/* The customer Key provided to you */
|
| 319 |
+
$customerKey = $this->getConfig('customerKey',$id);
|
| 320 |
+
|
| 321 |
+
/* The customer API Key provided to you */
|
| 322 |
+
$apiKey = $this->getConfig('apiKey',$id);
|
| 323 |
+
|
| 324 |
+
/* Current time in milliseconds since midnight, January 1, 1970 UTC. */
|
| 325 |
+
$currentTimeInMillis = round(microtime(true) * 1000);
|
| 326 |
+
|
| 327 |
+
/* Creating the Hash using SHA-512 algorithm */
|
| 328 |
+
$stringToHash = $customerKey . $currentTimeInMillis . $apiKey;
|
| 329 |
+
$hashValue = hash("sha512", $stringToHash);
|
| 330 |
+
|
| 331 |
+
$customerKeyHeader = "Customer-Key: " . $customerKey;
|
| 332 |
+
$timestampHeader = "Timestamp: " . $currentTimeInMillis;
|
| 333 |
+
$authorizationHeader = "Authorization: " . $hashValue;
|
| 334 |
+
|
| 335 |
+
$fields = array(
|
| 336 |
+
'username' => $email
|
| 337 |
+
);
|
| 338 |
+
|
| 339 |
+
$field_string = json_encode($fields);
|
| 340 |
+
|
| 341 |
+
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
|
| 342 |
+
curl_setopt( $ch, CURLOPT_ENCODING, "" );
|
| 343 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
| 344 |
+
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
|
| 345 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
|
| 346 |
+
|
| 347 |
+
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
|
| 348 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", $customerKeyHeader, $timestampHeader, $authorizationHeader));
|
| 349 |
+
curl_setopt( $ch, CURLOPT_POST, true);
|
| 350 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $field_string);
|
| 351 |
+
$content = curl_exec($ch);
|
| 352 |
+
|
| 353 |
+
if(curl_errno($ch)){
|
| 354 |
+
echo 'Request Error:' . curl_error($ch);
|
| 355 |
+
exit();
|
| 356 |
+
}
|
| 357 |
+
curl_close($ch);
|
| 358 |
+
return $content;
|
| 359 |
+
}
|
| 360 |
+
|
| 361 |
+
/*Function to extract config stored in the database*/
|
| 362 |
+
function getConfig($config,$id){
|
| 363 |
+
switch($config){
|
| 364 |
+
case 'isEnabled':
|
| 365 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_Admin_enable');
|
| 366 |
+
break;
|
| 367 |
+
case 'email':
|
| 368 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_email');
|
| 369 |
+
break;
|
| 370 |
+
case 'pass':
|
| 371 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_pass');
|
| 372 |
+
break;
|
| 373 |
+
case 'customerKey':
|
| 374 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_customer_key');
|
| 375 |
+
break;
|
| 376 |
+
case 'apiKey':
|
| 377 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_api_key');
|
| 378 |
+
break;
|
| 379 |
+
case 'apiToken':
|
| 380 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_token');
|
| 381 |
+
break;
|
| 382 |
+
case 'otp':
|
| 383 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_show_otp');
|
| 384 |
+
break;
|
| 385 |
+
case 'qrcode':
|
| 386 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_show_qr');
|
| 387 |
+
break;
|
| 388 |
+
case 'configure':
|
| 389 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_show_configure');
|
| 390 |
+
break;
|
| 391 |
+
case 'validated':
|
| 392 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_validated');
|
| 393 |
+
break;
|
| 394 |
+
case 'login':
|
| 395 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_login');
|
| 396 |
+
break;
|
| 397 |
+
case 'mainAdmin':
|
| 398 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_admin_registered');
|
| 399 |
+
break;
|
| 400 |
+
case 'downloaded':
|
| 401 |
+
$result = Mage::getModel('admin/user')->load($id)->getData('miniorange_2factor_downloaded_app');
|
| 402 |
+
break;
|
| 403 |
+
default:
|
| 404 |
+
return;
|
| 405 |
+
break;
|
| 406 |
+
}
|
| 407 |
+
return $result;
|
| 408 |
+
}
|
| 409 |
+
|
| 410 |
+
/*Function to show his partial registered email to user*/
|
| 411 |
+
function showEmail($id){
|
| 412 |
+
$email = $this->getConfig('email',$id);
|
| 413 |
+
$emailsize = strlen($email);
|
| 414 |
+
$partialemail = substr($email,0,1);
|
| 415 |
+
$temp = strrpos($email,"@");
|
| 416 |
+
$endemail = substr($email,$temp-1,$emailsize);
|
| 417 |
+
for($i=1;$i<$temp;$i++){
|
| 418 |
+
$partialemail = $partialemail . 'x';
|
| 419 |
+
}
|
| 420 |
+
$showemail = $partialemail . $endemail;
|
| 421 |
+
|
| 422 |
+
return $showemail;
|
| 423 |
+
}
|
| 424 |
+
|
| 425 |
+
/*Function to check if cURL is enabled*/
|
| 426 |
+
function is_curl_installed() {
|
| 427 |
+
if (in_array ('curl', get_loaded_extensions())) {
|
| 428 |
+
return 1;
|
| 429 |
+
} else
|
| 430 |
+
return 0;
|
| 431 |
+
}
|
| 432 |
+
|
| 433 |
+
}?>
|
app/code/community/MiniOrange/2factor/Model/Observer.php
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
class MiniOrange_2factor_Model_Observer
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
private $defaultCustomerKey = "16352";
|
| 6 |
+
private $defaultApiKey = "AJG97LGpOVVwFUuuPSij5IH6Kvlu6qEj";
|
| 7 |
+
|
| 8 |
+
public function controllerActionPredispatch(Varien_Event_Observer $observer){
|
| 9 |
+
|
| 10 |
+
$request = Mage::app()->getRequest();
|
| 11 |
+
$session = Mage::getSingleton('adminhtml/session');
|
| 12 |
+
$helper = Mage::helper('MiniOrange_2factor/mo2fUtility');
|
| 13 |
+
if ( $request->getRequestedControllerName() == 'index' && $request->getRequestedActionName() == 'login'){
|
| 14 |
+
$session->unsLoginStatus();
|
| 15 |
+
$session->unsWelcomeMessage();
|
| 16 |
+
$session->unsminiError();
|
| 17 |
+
$session->unsshowsofttoken();
|
| 18 |
+
$session->unsPhoneOpen();
|
| 19 |
+
$request->setControllerName('miniOrange')
|
| 20 |
+
->setActionName('login')
|
| 21 |
+
->setDispatched(false);
|
| 22 |
+
}
|
| 23 |
+
else{
|
| 24 |
+
if($request->getPost('miniorange_mobile_validation_Username')){
|
| 25 |
+
//$user = Mage::getModel('admin/user')->loadByUsername(<username>);
|
| 26 |
+
$this->login($request->getPost('miniorange_mobile_validation_Username'), $request->getPost('miniorange_mobile_validation_Password'));
|
| 27 |
+
}
|
| 28 |
+
else if($request->getPost('miniorange-username')){
|
| 29 |
+
$user = Mage::getModel('admin/user');
|
| 30 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
| 31 |
+
if($session->getLoginStatus()!='MO_2_FACTOR_CHALLENGE_AUTHENTICATION'){
|
| 32 |
+
if($helper->adminExists($request->getPost('miniorange-username'))){
|
| 33 |
+
if($user->authenticate($request->getPost('miniorange-username'),$request->getPost('miniorange-password'))){
|
| 34 |
+
$useragent = $_SERVER['HTTP_USER_AGENT'];
|
| 35 |
+
if(strpos($useragent,'Mobi') !== false){
|
| 36 |
+
$session->unsLoginQRCode();
|
| 37 |
+
$session->unsLogintxtId();
|
| 38 |
+
$session->setPhoneOpen(1);
|
| 39 |
+
$session->unsWelcomeMessage();
|
| 40 |
+
$session->setLoginStatus('MO_2_FACTOR_CHALLENGE_AUTHENTICATION');
|
| 41 |
+
}
|
| 42 |
+
else{
|
| 43 |
+
$admin = $user->login($request->getPost('miniorange-username'), $request->getPost('miniorange-password'));
|
| 44 |
+
$id = $admin->getUserId();
|
| 45 |
+
if($helper->getConfig('isEnabled',$id)==1){
|
| 46 |
+
$apiKey = $helper->getConfig('apiKey',$id);
|
| 47 |
+
$customerKey = $helper->getConfig('customerKey',$id);
|
| 48 |
+
$showemail = $helper->showEmail($id);
|
| 49 |
+
$content = $helper->send_otp_token($helper->getConfig('email',$id),'MOBILE AUTHENTICATION', $customerKey, $apiKey);
|
| 50 |
+
$response = json_decode($content, true);
|
| 51 |
+
if(json_last_error() == JSON_ERROR_NONE){
|
| 52 |
+
$session->setLoginUsername($request->getPost('miniorange-username'));
|
| 53 |
+
$session->setLoginPassword($request->getPost('miniorange-password'));
|
| 54 |
+
$session->setshowEmail($showemail);
|
| 55 |
+
$session->setLoginQRCode($response['qrCode']);
|
| 56 |
+
$session->setLogintxtId($response['txId']);
|
| 57 |
+
$session->setLoginStatus('MO_2_FACTOR_CHALLENGE_AUTHENTICATION');
|
| 58 |
+
$session->setWelcomeMessage(true);
|
| 59 |
+
$session->unsPhoneOpen();
|
| 60 |
+
}
|
| 61 |
+
else{ $session->addError("Invalid request"); }
|
| 62 |
+
}
|
| 63 |
+
else{ $this->login($request->getPost('miniorange-username'), $request->getPost('miniorange-password')); }
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
else{ $session->addError("Invalid Credentials. Please Enter Correct Username and Password."); }
|
| 67 |
+
}
|
| 68 |
+
else{ $session->addError("Invalid Username"); }
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
else if($request->getPost('softoken_entered')){
|
| 72 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
| 73 |
+
if( $request->getPost('softtoken')!=null){
|
| 74 |
+
$user = Mage::getModel('admin/user')->login($session->getLoginUsername(),$session->getLoginPassword());
|
| 75 |
+
$id = $user->getUserId();
|
| 76 |
+
$email = $helper->getConfig('email',$id);
|
| 77 |
+
$customerKey = $helper->getConfig('customerKey',$id);
|
| 78 |
+
$apiKey = $helper->getConfig('apiKey',$id);
|
| 79 |
+
$content = $helper->validate_otp_token('SOFT TOKEN',$email, null, $request->getPost('softtoken'), $customerKey, $apiKey);
|
| 80 |
+
$response = json_decode($content, true);
|
| 81 |
+
if(strcasecmp($response['status'], 'FAILED') != 0){
|
| 82 |
+
$this->login($session->getLoginUsername(),$session->getLoginPassword());
|
| 83 |
+
}
|
| 84 |
+
else{
|
| 85 |
+
$session->addError("Invalid Soft Token");
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
else{
|
| 89 |
+
$session->setshowsofttoken(1);
|
| 90 |
+
$session->setWelcomeMessage(true);
|
| 91 |
+
$session->unsminiError();
|
| 92 |
+
$session->setminiError("Enter a 6 digit Soft Token");
|
| 93 |
+
}
|
| 94 |
+
}
|
| 95 |
+
else if($request->getPost('disable_forgot_phone')){
|
| 96 |
+
if($session->getshowforgotphone()){
|
| 97 |
+
$session->unsshowforgotphone();
|
| 98 |
+
$session->unsLoginUsername();
|
| 99 |
+
$session->unsLoginPassword();
|
| 100 |
+
$session->unsshowEmail();
|
| 101 |
+
$session->unsWelcomeMessage();
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
+
else if($request->getPost('enable_forgot_phone')){
|
| 105 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
| 106 |
+
$session->unsWelcomeMessage();
|
| 107 |
+
if(!$session->getshowforgotphone()){
|
| 108 |
+
$user = Mage::getModel('admin/user')->login($session->getLoginUsername(),$session->getLoginPassword());
|
| 109 |
+
$id = $user->getUserId();
|
| 110 |
+
$email = $helper->getConfig('email',$id);
|
| 111 |
+
$customerKey = $helper->getConfig('customerKey',$id);
|
| 112 |
+
$apiKey = $helper->getConfig('apiKey',$id);
|
| 113 |
+
$response = json_decode($helper->send_otp_token($email,'EMAIL',$customerKey,$apiKey), true);
|
| 114 |
+
if(strcasecmp($response['status'], 'SUCCESS') == 0){
|
| 115 |
+
$session->setOTPtxtId($response['txId']);
|
| 116 |
+
$session->unsLoginQRCode();
|
| 117 |
+
$session->unsLoginStatus();
|
| 118 |
+
$session->unsLogintxtId();
|
| 119 |
+
$session->setshowforgotphone(1);
|
| 120 |
+
}
|
| 121 |
+
else{
|
| 122 |
+
$session->addError("An error occurred while sending the OTP.");
|
| 123 |
+
}
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
else if($request->getPost('forgotPhoneOtp_entered')){
|
| 127 |
+
Mage::getSingleton('adminhtml/session')->getMessages(true);
|
| 128 |
+
$user = Mage::getModel('admin/user')->login($session->getLoginUsername(),$session->getLoginPassword());
|
| 129 |
+
$id = $user->getUserId();
|
| 130 |
+
if( $request->getPost('forgotPhoneOtp')!=null){
|
| 131 |
+
$email = $helper->getConfig('email',$id);
|
| 132 |
+
$customerKey = $helper->getConfig('customerKey',$id);
|
| 133 |
+
$apiKey = $helper->getConfig('apiKey',$id);
|
| 134 |
+
$content = $helper->validate_otp_token('EMAIL',$email, $session->getOTPtxtId(), $request->getPost('forgotPhoneOtp'), $customerKey, $apiKey);
|
| 135 |
+
$response = json_decode($content, true);
|
| 136 |
+
if(strcasecmp($response['status'], 'FAILED') != 0){
|
| 137 |
+
$session->unsshowforgotphone();
|
| 138 |
+
$this->login($session->getLoginUsername(),$session->getLoginPassword());
|
| 139 |
+
}
|
| 140 |
+
else{
|
| 141 |
+
$session->unsshowforgotphone();
|
| 142 |
+
$session->addError("Invalid OTP Token.");
|
| 143 |
+
}
|
| 144 |
+
}
|
| 145 |
+
else{
|
| 146 |
+
$test = $helper->showEmail($id);
|
| 147 |
+
$session->unsminiError();
|
| 148 |
+
$session->setminiError('Cannot Submit. Please Enter the otp sent to '.$test.'.');
|
| 149 |
+
}
|
| 150 |
+
}
|
| 151 |
+
else{
|
| 152 |
+
$session->unsLoginQRCode();
|
| 153 |
+
$session->unsLoginStatus();
|
| 154 |
+
$session->unsLogintxtId();
|
| 155 |
+
$session->unsWelcomeMessage();
|
| 156 |
+
$session->unsshowsofttoken();
|
| 157 |
+
$session->unsminiError();
|
| 158 |
+
}
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
private function login($username,$password){
|
| 163 |
+
$user = Mage::getModel('admin/user');
|
| 164 |
+
$user->login($username, $password);
|
| 165 |
+
if ($user->getId()) {
|
| 166 |
+
if (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
|
| 167 |
+
Mage::getSingleton('adminhtml/url')->renewSecretUrls();
|
| 168 |
+
}
|
| 169 |
+
}
|
| 170 |
+
$session = Mage::getSingleton('admin/session');
|
| 171 |
+
$session->setIsFirstVisit(true);
|
| 172 |
+
$session->setUser($user);
|
| 173 |
+
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
|
| 174 |
+
$session->unsLoginUsername();
|
| 175 |
+
$session->unsLoginPassword();
|
| 176 |
+
$session->unsshowEmail();
|
| 177 |
+
$session->unsLoginQRCode();
|
| 178 |
+
$session->unsLoginStatus();
|
| 179 |
+
$session->unsLogintxtId();
|
| 180 |
+
$session->unsWelcomeMessage();
|
| 181 |
+
$session->unsminiError();
|
| 182 |
+
$session->unsshowsofttoken();
|
| 183 |
+
Mage::dispatchEvent('admin_session_user_login_success',array('user'=>$user));
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
}
|
app/code/community/MiniOrange/2factor/Model/Words.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
class MiniOrange_2factor_Model_Words
|
| 3 |
+
{
|
| 4 |
+
public function toOptionArray()
|
| 5 |
+
{
|
| 6 |
+
return array(
|
| 7 |
+
array('value'=>0, 'label'=>Mage::helper('MiniOrange_2factor')->__('No')),
|
| 8 |
+
array('value'=>1, 'label'=>Mage::helper('MiniOrange_2factor')->__('Yes'))
|
| 9 |
+
);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
/*public function getLabelText(){
|
| 15 |
+
return 'test';
|
| 16 |
+
}*/
|
| 17 |
+
|
| 18 |
+
}
|
app/code/community/MiniOrange/2factor/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<!--Declaring the admin ACL roles-->
|
| 2 |
+
<adminhtml>
|
| 3 |
+
<acl>
|
| 4 |
+
<resources>
|
| 5 |
+
<admin>
|
| 6 |
+
<children>
|
| 7 |
+
<system>
|
| 8 |
+
<children>
|
| 9 |
+
<config>
|
| 10 |
+
<children>
|
| 11 |
+
<miniorange_2factor_options>
|
| 12 |
+
<title>Second Factor Config Options</title>
|
| 13 |
+
</miniorange_2factor_options>
|
| 14 |
+
</children>
|
| 15 |
+
</config>
|
| 16 |
+
</children>
|
| 17 |
+
</system>
|
| 18 |
+
</children>
|
| 19 |
+
</admin>
|
| 20 |
+
</resources>
|
| 21 |
+
</acl>
|
| 22 |
+
</adminhtml>
|
app/code/community/MiniOrange/2factor/etc/config.xml
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
|
| 3 |
+
<!-- The root node for Magento module configuration -->
|
| 4 |
+
<config>
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
<!-- The module's node contains basic information about each Magento module -->
|
| 8 |
+
<modules>
|
| 9 |
+
<!-- This must exactly match the namespace and module's folder names, with directory separators replaced by underscores -->
|
| 10 |
+
<MiniOrange_2factor>
|
| 11 |
+
<!-- The version of our module, starting at 0.0.1 -->
|
| 12 |
+
<version>0.0.1</version>
|
| 13 |
+
</MiniOrange_2factor>
|
| 14 |
+
</modules>
|
| 15 |
+
|
| 16 |
+
<!-- we are making changes to the backend -->
|
| 17 |
+
<admin>
|
| 18 |
+
<routers>
|
| 19 |
+
<adminhtml>
|
| 20 |
+
<args>
|
| 21 |
+
<modules>
|
| 22 |
+
<MiniOrange_2factor_Adminhtml>MiniOrange_2factor_Adminhtml_Login</MiniOrange_2factor_Adminhtml>
|
| 23 |
+
</modules>
|
| 24 |
+
</args>
|
| 25 |
+
</adminhtml>
|
| 26 |
+
<miniorange_2factor>
|
| 27 |
+
<use>admin</use>
|
| 28 |
+
<args>
|
| 29 |
+
<module>MiniOrange_2factor</module>
|
| 30 |
+
<frontName>miniorange_2factor</frontName>
|
| 31 |
+
</args>
|
| 32 |
+
</miniorange_2factor>
|
| 33 |
+
</routers>
|
| 34 |
+
</admin>
|
| 35 |
+
<adminhtml>
|
| 36 |
+
<layout>
|
| 37 |
+
<updates>
|
| 38 |
+
<miniorange_2factor_admin_layout>
|
| 39 |
+
<file>miniorange_2factor_admin.xml</file>
|
| 40 |
+
</miniorange_2factor_admin_layout>
|
| 41 |
+
</updates>
|
| 42 |
+
</layout>
|
| 43 |
+
<menu>
|
| 44 |
+
<miniOrange translate="title">
|
| 45 |
+
<title>miniOrange</title>
|
| 46 |
+
<sort_order>81</sort_order>
|
| 47 |
+
<children>
|
| 48 |
+
<configure_extension>
|
| 49 |
+
<title>Two Factor Configuration</title>
|
| 50 |
+
<sort_order>1</sort_order>
|
| 51 |
+
<action>miniorange_2factor/adminhtml_index</action>
|
| 52 |
+
</configure_extension>
|
| 53 |
+
</children>
|
| 54 |
+
</miniOrange>
|
| 55 |
+
</menu>
|
| 56 |
+
</adminhtml>
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
<!-- Configure our module's behavior in the global scope -->
|
| 60 |
+
<global>
|
| 61 |
+
<models>
|
| 62 |
+
<MiniOrange_2factor>
|
| 63 |
+
<class>MiniOrange_2factor_Model</class>
|
| 64 |
+
</MiniOrange_2factor>
|
| 65 |
+
</models>
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
<!-- Definition of our blocks -->
|
| 69 |
+
<blocks>
|
| 70 |
+
<MiniOrange_2factor>
|
| 71 |
+
<class>MiniOrange_2factor_Block</class>
|
| 72 |
+
</MiniOrange_2factor>
|
| 73 |
+
</blocks>
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
<!-- Declaration for the helper class-->
|
| 77 |
+
<helpers>
|
| 78 |
+
<MiniOrange_2factor>
|
| 79 |
+
<class>MiniOrange_2factor_Helper</class>
|
| 80 |
+
</MiniOrange_2factor>
|
| 81 |
+
</helpers>
|
| 82 |
+
|
| 83 |
+
<!-- Defining our event observer -->
|
| 84 |
+
<events>
|
| 85 |
+
<admin_system_config_changed_section_miniorange_2factor_options>
|
| 86 |
+
<observers>
|
| 87 |
+
<adminhtml_config_save>
|
| 88 |
+
<class>MiniOrange_2factor/observer</class>
|
| 89 |
+
<method>changeSystemConfig</method>
|
| 90 |
+
</adminhtml_config_save>
|
| 91 |
+
</observers>
|
| 92 |
+
</admin_system_config_changed_section_miniorange_2factor_options>
|
| 93 |
+
|
| 94 |
+
<controller_action_predispatch>
|
| 95 |
+
<observers>
|
| 96 |
+
<miniorange_2factor_login>
|
| 97 |
+
<class>MiniOrange_2factor/observer</class>
|
| 98 |
+
<method>controllerActionPredispatch</method>
|
| 99 |
+
</miniorange_2factor_login>
|
| 100 |
+
</observers>
|
| 101 |
+
</controller_action_predispatch>
|
| 102 |
+
</events>
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
<!-- Defining our resources -->
|
| 106 |
+
<resources>
|
| 107 |
+
<MiniOrange_2factor_setup>
|
| 108 |
+
<setup>
|
| 109 |
+
<module>MiniOrange_2factor</module>
|
| 110 |
+
</setup>
|
| 111 |
+
</MiniOrange_2factor_setup>
|
| 112 |
+
</resources>
|
| 113 |
+
|
| 114 |
+
</global>
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
</config>
|
app/code/community/MiniOrange/2factor/sql/MiniOrange_2factor_setup/mysql4-install-0.0.1.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
/* @var $installer Mage_Core_Model_Resource_Setup */
|
| 5 |
+
|
| 6 |
+
$installer->startSetup();
|
| 7 |
+
|
| 8 |
+
/**
|
| 9 |
+
* Add yubikey field to table 'admin/user'
|
| 10 |
+
*/
|
| 11 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_email', 'varchar(128) null');
|
| 12 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_pass', 'varchar(100) null');
|
| 13 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_phone', 'varchar(60) null');
|
| 14 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_Admin_enable', 'int null');
|
| 15 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_customer_key', 'varchar(25) null');
|
| 16 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_api_key', 'varchar(50) null');
|
| 17 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_token', 'varchar(50) null');
|
| 18 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_show_otp', 'int null');
|
| 19 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_show_qr', 'int null');
|
| 20 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_show_configure', 'int null');
|
| 21 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_validated', 'int null');
|
| 22 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_login', 'int null');
|
| 23 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_admin_registered', 'int null');
|
| 24 |
+
$installer->getConnection()->addColumn($this->getTable('admin/user'), 'miniorange_2factor_downloaded_app', 'int null');
|
| 25 |
+
|
| 26 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/miniorange_2factor_admin.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?xml version="1.0" ?>
|
| 2 |
+
<layout>
|
| 3 |
+
<miniorange_2factor_adminhtml_index_index>
|
| 4 |
+
<reference name="content">
|
| 5 |
+
<block type="MiniOrange_2factor/mo2fConfig" name="miniorange_2factor_mo2fConfig"
|
| 6 |
+
template="miniorange_2factor/mo2fConfig.phtml" />
|
| 7 |
+
</reference>
|
| 8 |
+
</miniorange_2factor_adminhtml_index_index>
|
| 9 |
+
</layout>
|
app/design/adminhtml/default/default/template/miniorange_2factor/login.phtml
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magento.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magento.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package default_default
|
| 23 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
?>
|
| 27 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| 28 |
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
| 29 |
+
<head>
|
| 30 |
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
| 31 |
+
<title><?php echo Mage::helper('adminhtml')->__('Log into Magento Admin Page') ?></title>
|
| 32 |
+
<link type="text/css" rel="stylesheet" href="<?php echo $this->getSkinUrl('reset.css') ?>" media="all" />
|
| 33 |
+
<link type="text/css" rel="stylesheet" href="<?php echo $this->getSkinUrl('boxes.css') ?>" media="all" />
|
| 34 |
+
<link rel="icon" href="<?php echo $this->getSkinUrl('favicon.ico') ?>" type="image/x-icon" />
|
| 35 |
+
<link rel="shortcut icon" href="<?php echo $this->getSkinUrl('favicon.ico') ?>" type="image/x-icon" />
|
| 36 |
+
|
| 37 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('prototype/prototype.js') ?>"></script>
|
| 38 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('prototype/validation.js') ?>"></script>
|
| 39 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('scriptaculous/effects.js') ?>"></script>
|
| 40 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('mage/adminhtml/form.js') ?>"></script>
|
| 41 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('mage/captcha.js') ?>"></script>
|
| 42 |
+
|
| 43 |
+
<!--[if IE]> <link rel="stylesheet" href="<?php echo $this->getSkinUrl('iestyles.css') ?>" type="text/css" media="all" /> <![endif]-->
|
| 44 |
+
<!--[if lt IE 7]> <link rel="stylesheet" href="<?php echo $this->getSkinUrl('below_ie7.css') ?>" type="text/css" media="all" /> <![endif]-->
|
| 45 |
+
<!--[if IE 7]> <link rel="stylesheet" href="<?php echo $this->getSkinUrl('ie7.css') ?>" type="text/css" media="all" /> <![endif]-->
|
| 46 |
+
|
| 47 |
+
<style>
|
| 48 |
+
.label,.label-progressBar{font-weight:700;font-size:15px}#error-cancel,#slide1,#slide2,#slide3,.button,.login-header a,.login-header a:hover{text-decoration:none}.miniorange-password,.miniorange-username{display:inline;float:left;width:50%}#miniorange-button{margin-top:1%;float:right}#logo-miniorange{width:44%;margin-left:2%;margin-top:2%}#loginScreen,.center{text-align:center;width:100%}.center{display:table}#showQrCode{margin:5%}#loginScreen{position:fixed;top:0;left:0;height:100%;z-index:10;display:none;background-color:rgba(0,0,0,.5)}.label{float:left}.login-content{height:84%}.login-footer,.login-header{padding:1%;position:relative;height:6%;background:#D0D0D0}.login-header{border-radius:7px 7px 0 0;font-size:18px;font-weight:700}.login-footer{border-radius:0 0 7px 7px}.login-header a{float:right;cursor:pointer;font-size:20px;padding:1%}.login-header a:hover{color:#F0F}.form a{margin-bottom:4%;text-align:center;display:table-cell;vertical-align:middle}.button{padding:8px 40px;cursor:pointer;font-size:14px}.panel-content{width:450px;height:400px;margin:-250px auto 0 -220px;position:absolute;left:50%;top:50%;z-index:100;overflow:visible;background-color:#fff;border-radius:7px;box-shadow:4px 4px 3px #484848}.form #email{float:left;width:100%}.progressBar{display:none;margin:0 auto;position:absolute}#label-progressBar,#label-progressBar-forgotphone{margin:2% 0;font-size:15px}#forgotPhone,#softoken{display:none;padding:5%}.info{font-size:15px;margin-bottom:3%;color:#ea7601}#forgotPhoneOtp,#softokeninput{display:block;margin:0;width:100%;font-family:sans-serif;font-size:13px}#forgotPhone-button,#softtoken-button{margin-bottom:8%;font-size:15px;padding:8px 20px;text-decoration:none;text-shadow:0 1px 0 #b23e35;border-radius:3px;border:1px solid #000;display:inline-block;cursor:pointer;color:#fff;background-color:#f7934d}input[type=number],textarea{box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;border:1px solid #c2c2c2;box-shadow:1px 1px 4px #ebebeb;-moz-box-shadow:1px 1px 4px #ebebeb;-webkit-box-shadow:1px 1px 4px #ebebeb;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;padding:7px;outline:0;width:100%}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}td>input:focus,textarea:focus{border:1px solid #ff8500}#forgotphoneform,#softokenform{margin-top:1%;float:left;width:100%}#slider2>ul>li>img,#slider3>ul>li>img,#slider>ul>li>img{left:0}#slider,#slider2,#slider3{position:relative;overflow:hidden;padding-top:5%;display:none}#slider2>ul,#slider3>ul,#slider>ul{position:relative;margin:0;padding:0;height:200px;list-style:none}#slider2>ul>li,#slider3>ul>li,#slider>ul>li{position:relative;display:block;float:left;margin:0;padding:0;width:450px;height:260px;text-align:center}.control_info,.control_next,.control_prev{position:absolute;z-index:999;cursor:pointer}.control_prev{left:0;top:49%;transform:rotate(180deg)}.control_next{right:0;top:50%}#goBack1,#goBack2,#goBack3{display:none;font-size:14px;position:absolute;right:34%}#slide1,#slide2,#slide3{cursor:pointer;font-size:14px}.mini-messages li{display:none;margin:0 5%;min-height:23px!important;padding:4px 0 1px 8px!important;font-weight:700!important;text-align:left}#error-cancel{color:red;font-size:21px;float:right}
|
| 49 |
+
</style>
|
| 50 |
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
| 51 |
+
<script type="text/javascript">jQuery.noConflict()</script>
|
| 52 |
+
<script>
|
| 53 |
+
$j=jQuery.noConflict();$j(document).ready(function(){$forgotphone="<?php echo Mage::getSingleton('adminhtml/session')->getshowforgotphone(); ?>";$softtoken="<?php echo Mage::getSingleton('adminhtml/session')->getshowsofttoken(); ?>";$error='<?php echo Mage::getSingleton('adminhtml/session')->getminiError(); ?>';$openedinphone='<?php echo Mage::getSingleton('adminhtml/session')->getPhoneOpen(); ?>'
|
| 54 |
+
if($openedinphone=="1"){$softtoken='1';$j("#goBack").css("display","none");}
|
| 55 |
+
$j("#label-progressBar").css("display","block");$j("#label-progressBar-forgotphone").css("display","none");if($forgotphone=="1"){$j("#loginScreen").css("display","block");$j("#QrCode").css("display","none");$j("#softoken").css("display","none");$j("#forgotPhone").css("display","block");if($error!=""){$j(".error-msg span").empty();$j(".error-msg span").append($error);$j(".mini-messages li").css("display","block");}}
|
| 56 |
+
if($softtoken=="1"){$j("#loginScreen").css("display","block");$j("#QrCode").css("display","none");$j("#forgotPhone").css("display","none");$j("#softoken").css("display","block");if($error!=""){$j(".error-msg span").empty();$j(".error-msg span").append($error);$j(".mini-messages li").css("display","block");}}
|
| 57 |
+
$j('#error-cancel').click(function(){$error="";$j(".mini-messages li").css("display","none");});$j("#cancel").click(function(){$j("#softoken").css("display","none");$j("#QrCode").css("display","block");$j("#loginScreen").css("display","none");$j(".mini-messages li").css("display","none");});$j("#offlinebutton").click(function(){$j("#QrCode").css("display","none");$j("#forgotPhone").css("display","none");$j("#softoken").css("display","block");$j(".mini-messages li").css("display","none");});$j("#forgotphonebutton1").click(function(){$j("#QrCode").css("display","none");$j("#softoken").css("display","none");$j("#label-progressBar").css("display","none");$j("#label-progressBar-forgotphone").css("display","block");$j("#progressBar").css("display","block");$j("#enableforgotphone").submit();$j(".mini-messages li").css("display","none");});$j("#forgotphonebutton2").click(function(){$j("#QrCode").css("display","none");$j("#softoken").css("display","none");$j("#label-progressBar").css("display","none");$j("#label-progressBar-forgotphone").css("display","block");$j("#progressBar").css("display","block");$j("#enableforgotphone").submit();$j(".mini-messages li").css("display","none");});$j("#goBack").click(function(){$j("#softoken").css("display","none");$j("#forgotPhone").css("display","none");$j("#QrCode").css("display","block");$j(".mini-messages li").css("display","none");});$j("#softtoken-button").click(function(){$j("#softoken").css("display","none");$j("#progressBar").css("display","block");$j("#label-progressBar").css("display","block");$j("#label-progressBar-forgotphone").css("display","none");$j(".mini-messages li").css("display","none");});$j("#forgotPhone-button").click(function(){$j("#forgotPhone").css("display","none");$j("#label-progressBar-forgotphone").css("display","none");$j("#progressBar").css("display","block");$j(".mini-messages li").css("display","none");});$j("#gobacklogin").click(function(){$j("#label-progressBar-forgotphone").css("display","none");$j("#disableforgotphone").submit();$j(".mini-messages li").css("display","none");});$j("#slide1").click(function(){$j("#QrCode").css("display","none");$j("#softoken").css("display","none");$j("#slider").css("display","block");$j("#logo").hide();$j("#goBack1").css("display","block");$j(".mini-messages li").css("display","none");});$j("#goBack1").click(function(){$j("#slider").css("display","none");$j("#logo").show();$j("#QrCode").css("display","block");$j("#goBack1").css("display","none");});$j("#slide2").click(function(){$j("#softoken").css("display","none");$j("#slider2").css("display","block");$j("#logo").hide();$j(".mini-messages li").css("display","none");$j("#goBack2").css("display","block");});$j("#goBack2").click(function(){$j("#slider2").css("display","none");$j("#logo").show();$j("#softoken").css("display","block");$j("#goBack2").css("display","none");});$j("#slide3").click(function(){$j("#forgotPhone").css("display","none");$j("#slider3").css("display","block");$j("#logo").hide();$j(".mini-messages li").css("display","none");$j("#goBack3").css("display","block");});$j("#goBack3").click(function(){$j("#slider3").css("display","none");$j("#logo").show();$j("#forgotPhone").css("display","block");$j("#goBack3").css("display","none");});$showloginscreen="<?php echo Mage::getSingleton('adminhtml/session')->getWelcomeMessage() ?>";if($showloginscreen=="1"){$j("#loginScreen").css("display","block");}});
|
| 58 |
+
</script>
|
| 59 |
+
<script>
|
| 60 |
+
var poll="<?php echo Mage::getSingleton('adminhtml/session')->getWelcomeMessage() ?>";if(poll=="1"){var $t=jQuery.noConflict();var timeout;function pollMobileValidation()
|
| 61 |
+
{var transId="<?php echo Mage::getSingleton('adminhtml/session')->getLogintxtId() ?>";var jsonString="{\"txId\":\""+transId+"\"}";var postUrl="<?php echo Mage::helper('MiniOrange_2factor/mo2fUtility')->getHostURl()?>/moas/api/auth/auth-status";$t.ajax({url:postUrl,type:"POST",dataType:"json",data:jsonString,contentType:"application/json; charset=utf-8",success:function(result){var status=JSON.parse(JSON.stringify(result)).status;if(status=='SUCCESS'){var content="<div id='success'><center><img src='"+"<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/right.png'; ?>"+"'/></center></div>";$t("#showQrCode").empty();$t("#showQrCode").append(content);setTimeout(function(){$t("#QrCode").hide();$t("#features").hide();$t("#progressBar").show();$t("#mobile_validation_form").submit();},1000);}else if(status=='ERROR'||status=='FAILED'){var content="<div id='error'><center><img src='"+"<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/wrong.png'; ?>"+"' /></center></div>";$t("#showQrCode").empty();$t("#features").hide();$t("#showQrCode").append(content);setTimeout(function(){$t('#backto_mo_loginform').submit();},1000);}else{timeout=setTimeout(pollMobileValidation,3000);}}});}
|
| 62 |
+
pollMobileValidation();}
|
| 63 |
+
</script>
|
| 64 |
+
<script>
|
| 65 |
+
var $j=jQuery.noConflict();$j(document).ready(function($j){var slideCount=$j('#slider ul li').length;var slideWidth=$j('#slider ul li').width();var slideHeight=$j('#slider ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider').css({width:slideWidth,height:slideHeight});$j('#slider ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider ul li:last-child').prependTo('#slider ul');function moveLeft(){$j('#slider ul').fadeOut("slow",function(){$j('#slider ul li:last-child').prependTo('#slider ul');$j('#slider ul').css('left','');$j('#slider ul').fadeIn("slow");});};function moveRight(){$j('#slider ul').fadeOut("slow",function(){$j('#slider ul li:first-child').appendTo('#slider ul').fadeIn("slow");$j('#slider ul').css('left','');$j('#slider ul').fadeIn("slow");});};$j('#slider .control_prev').click(function(){moveLeft();});$j('#slider .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider2 ul li').length;var slideWidth=$j('#slider2 ul li').width();var slideHeight=$j('#slider2 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider2').css({width:slideWidth,height:slideHeight});$j('#slider2 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider2 ul li:last-child').prependTo('#slider2 ul');function moveLeft(){$j('#slider2 ul').fadeOut("slow",function(){$j('#slider2 ul li:last-child').prependTo('#slider2 ul').fadeIn("slow");$j('#slider2 ul').css('left','');$j('#slider2 ul').fadeIn("slow");});};function moveRight(){$j('#slider2 ul').fadeOut("slow",function(){$j('#slider2 ul li:first-child').appendTo('#slider2 ul').fadeIn("slow");$j('#slider2 ul').css('left','');$j('#slider2 ul').fadeIn("slow");});};$j('#slider2 .control_prev').click(function(){moveLeft();});$j('#slider2 .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider3 ul li').length;var slideWidth=$j('#slider3 ul li').width();var slideHeight=$j('#slider3 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider3').css({width:slideWidth,height:slideHeight});$j('#slider3 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider3 ul li:last-child').prependTo('#slider3 ul');function moveLeft(){$j('#slider3 ul').fadeOut("slow",function(){$j('#slider3 ul li:last-child').prependTo('#slider3 ul').fadeIn("slow");$j('#slider3 ul').css('left','');$j('#slider3 ul').fadeIn("slow");});};function moveRight(){$j('#slider3 ul').fadeOut("slow",function(){$j('#slider3 ul li:first-child').appendTo('#slider3 ul').fadeIn("slow");$j('#slider3 ul').css('left','');$j('#slider3 ul').fadeIn("slow");});};$j('#slider3 .control_prev').click(function(){moveLeft();});$j('#slider3 .control_next').click(function(){moveRight();});});
|
| 66 |
+
</script>
|
| 67 |
+
</head>
|
| 68 |
+
<body id="page-login" onload="document.forms.loginForm.username.focus();">
|
| 69 |
+
<div class="login-container">
|
| 70 |
+
<div class="login-box">
|
| 71 |
+
<form method="post" action="" id="loginForm" autocomplete="off">
|
| 72 |
+
<div class="login-form">
|
| 73 |
+
|
| 74 |
+
<input name="form_key" type="hidden" value="" />
|
| 75 |
+
<h2><?php echo Mage::helper('adminhtml')->__('Log in to Admin Panel') ?></h2>
|
| 76 |
+
<div id="messages">
|
| 77 |
+
<?php echo $this->getMessagesBlock()->toHtml() ?>
|
| 78 |
+
</div>
|
| 79 |
+
<div class="input-box input-left"><label for="username"><?php echo Mage::helper('adminhtml')->__('User Name:') ?></label><br/>
|
| 80 |
+
<input type="text" id="username" name="miniorange-username" value="" class="required-entry input-text" /></div>
|
| 81 |
+
<div class="input-box input-right"><label for="login"><?php echo Mage::helper('adminhtml')->__('Password:') ?></label><br />
|
| 82 |
+
<!-- This is a dummy hidden field to trick firefox from auto filling the password -->
|
| 83 |
+
<input type="text" class="input-text no-display" name="dummy" id="dummy" />
|
| 84 |
+
<input type="password" id="login" name="miniorange-password" class="required-entry input-text" value="" /></div>
|
| 85 |
+
<?php echo $this->getChildHtml('form.additional.info'); ?>
|
| 86 |
+
<div class="clear"></div>
|
| 87 |
+
<div class="form-buttons">
|
| 88 |
+
<a class="left" href="<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/index/forgotpassword', array('_nosecret' => true)) ?>"><?php echo Mage::helper('adminhtml')->__('Forgot your password?') ?></a>
|
| 89 |
+
<input type="submit" class="form-button" value="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('adminhtml')->__('Login')) ?>" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('adminhtml')->__('Login')) ?>" /></div>
|
| 90 |
+
</div>
|
| 91 |
+
<p class="legal"><?php echo Mage::helper('adminhtml')->__('Magento is a trademark of Magento Inc. Copyright © %s Magento Inc.', date('Y')) ?></p>
|
| 92 |
+
</form>
|
| 93 |
+
<div class="bottom"></div>
|
| 94 |
+
<script type="text/javascript">
|
| 95 |
+
var loginForm = new varienForm('loginForm');
|
| 96 |
+
</script>
|
| 97 |
+
</div>
|
| 98 |
+
</div>
|
| 99 |
+
|
| 100 |
+
<form name="f" id="backto_mo_loginform" method="post" action="" hidden>
|
| 101 |
+
<input type="hidden" name="miniorange_mobile_validation_failed" value="" />
|
| 102 |
+
</form>
|
| 103 |
+
<form name="f" id="mobile_validation_form" method="post" action="">
|
| 104 |
+
<input type="hidden" name="miniorange_mobile_validation_Username" value="<?php echo Mage::getSingleton('adminhtml/session')->getLoginUsername() ?>" />
|
| 105 |
+
<input type="hidden" name="miniorange_mobile_validation_Password" value="<?php echo Mage::getSingleton('adminhtml/session')->getLoginPassword() ?>" />
|
| 106 |
+
</form>
|
| 107 |
+
<!-- Our login popup-->
|
| 108 |
+
<div id="loginScreen">
|
| 109 |
+
<div class="panel-content">
|
| 110 |
+
<div class="login-header">
|
| 111 |
+
<a id="cancel" href="#">×</a>
|
| 112 |
+
</div>
|
| 113 |
+
<div class="login-content">
|
| 114 |
+
<center>
|
| 115 |
+
<a id="logo" href="#loginScreen"><img id="logo-miniorange" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/miniorange_logo.png'; ?>"/></a>
|
| 116 |
+
</center>
|
| 117 |
+
<div id="messages">
|
| 118 |
+
<ul class="mini-messages"><li class="error-msg"><ul><li><span></span><a id="error-cancel" href="#">×</a></li></ul></li></ul>
|
| 119 |
+
</div>
|
| 120 |
+
<div id="QrCode" class="form">
|
| 121 |
+
<center><a id="slide1" href="#slider">« See How it Works »</a></center>
|
| 122 |
+
<div id="showQrCode">
|
| 123 |
+
<center> <img src="data:image/jpg;base64,<?php echo Mage::getSingleton('adminhtml/session')->getLoginQRCode(); ?>"/></center>
|
| 124 |
+
</div>
|
| 125 |
+
<div id="features">
|
| 126 |
+
<center>
|
| 127 |
+
<a class="button" id="offlinebutton" href="#softoken">Phone is Offline?</a>
|
| 128 |
+
<a class="button" id="forgotphonebutton1" href="#">Forgot your Phone?</a>
|
| 129 |
+
</center>
|
| 130 |
+
</div>
|
| 131 |
+
</div>
|
| 132 |
+
<div id="softoken">
|
| 133 |
+
<center><a id="slide2" href="#slider2">« See How it Works »</a></center><br/>
|
| 134 |
+
<div class="label"><span><?php echo Mage::helper('adminhtml')->__('Soft Token:') ?></span></div><br/>
|
| 135 |
+
<center>
|
| 136 |
+
<form name="f" method="post" action="" id="softokenform" autocomplete="off">
|
| 137 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 138 |
+
<input type="number" name="softtoken" autofocus="true" id="softokeninput" title="6 Digit Soft Token" placeholder="Enter Soft Token using miniOrange Authenticator App" pattern="[0-9]{6}"/><br/>
|
| 139 |
+
<input type="hidden" name="softoken_entered" value="softoken_entered" />
|
| 140 |
+
<input type="submit" id="softtoken-button" value="<?php echo Mage::helper('adminhtml')->__('Submit') ?>" /><br/>
|
| 141 |
+
</form>
|
| 142 |
+
<a class="button" id="goBack" href="#QrCode">« Scan Qr Code</a>
|
| 143 |
+
<a class="button" id="forgotphonebutton2" href="#">Forgot Phone?</a>
|
| 144 |
+
</center>
|
| 145 |
+
</div>
|
| 146 |
+
<form name="f" method="post" id="enableforgotphone" action="">
|
| 147 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 148 |
+
<input type="hidden" name="enable_forgot_phone" value="enable_forgot_phone" />
|
| 149 |
+
</form>
|
| 150 |
+
<form name="f" method="post" id="disableforgotphone" action="">
|
| 151 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 152 |
+
<input type="hidden" name="disable_forgot_phone" value="disable_forgot_phone" />
|
| 153 |
+
</form>
|
| 154 |
+
<div id="forgotPhone">
|
| 155 |
+
<center><a id="slide3" href="#slider3">« See How it Works »</a></center><br/>
|
| 156 |
+
<div class="label"><span><?php echo Mage::helper('adminhtml')->__('OTP:') ?></span></div><br/>
|
| 157 |
+
<center>
|
| 158 |
+
<form method="post" action="" id="loginform" autocomplete="off">
|
| 159 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 160 |
+
<input type="number" name="forgotPhoneOtp" autofocus="true" id="forgotPhoneOtp" placeholder="Enter OTP sent to <?php echo Mage::getSingleton('adminhtml/session')->getshowEmail() ?>." class="required-entry input-text" pattern="[0-9]{4,6}"/><br/>
|
| 161 |
+
<input type="hidden" name="forgotPhoneOtp_entered" value="forgotPhoneOtp_entered" />
|
| 162 |
+
<input type="submit" id="forgotPhone-button" value="<?php echo Mage::helper('adminhtml')->__('Submit') ?>" /><br/>
|
| 163 |
+
<a class="button" id="gobacklogin" href="#">« Back to Login</a>
|
| 164 |
+
</form>
|
| 165 |
+
</center>
|
| 166 |
+
</div>
|
| 167 |
+
<div class="progressBar center" id="progressBar">
|
| 168 |
+
<div class="label-progressBar"><span id="label-progressBar"><?php echo Mage::helper('adminhtml')->__('Processing your request. Please Wait!') ?></span>
|
| 169 |
+
<span id="label-progressBar-forgotphone"><?php
|
| 170 |
+
$email = Mage::getSingleton('adminhtml/session')->getshowEmail();
|
| 171 |
+
echo Mage::helper('adminhtml')->__('Sending OTP to '.$email.'. Please Wait!')
|
| 172 |
+
?></span>
|
| 173 |
+
</div>
|
| 174 |
+
<br/>
|
| 175 |
+
<span
|
| 176 |
+
style=" background:url('http://auth.miniorange.com/moas/images/ajax-loader4.gif')no-repeat;
|
| 177 |
+
display:block;
|
| 178 |
+
margin: 0 auto;
|
| 179 |
+
height:140px;
|
| 180 |
+
width:140px">
|
| 181 |
+
</span>
|
| 182 |
+
</div>
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
<div class="collapse" id="">
|
| 186 |
+
<div id="slider">
|
| 187 |
+
<div class="control_next"><img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/arrow.png'; ?>' /></div>
|
| 188 |
+
<div class="control_prev"><img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/arrow.png'; ?>' /></div>
|
| 189 |
+
<ul>
|
| 190 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/login2.png'; ?>' /></li>
|
| 191 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/authenticate.png'; ?>' /></li>
|
| 192 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/mobilescan.png'; ?>' /></li>
|
| 193 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/authvalidate.png'; ?>' /></li>
|
| 194 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/login3.png'; ?>' /></li>
|
| 195 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/processing.png'; ?>' /></li>
|
| 196 |
+
<li><img style="height:26%; position: relative; top: 44%" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/loggedin.png'; ?>' /></li>
|
| 197 |
+
</ul>
|
| 198 |
+
</div>
|
| 199 |
+
<a class="button" id="goBack1" href="#">« Go Back</a>
|
| 200 |
+
<div id="slider2">
|
| 201 |
+
<div class="control_next"><img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/arrow.png'; ?>' /></div>
|
| 202 |
+
<div class="control_prev"><img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/arrow.png'; ?>' /></div>
|
| 203 |
+
<ul>
|
| 204 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/phone-offline.png'; ?>' /></li>
|
| 205 |
+
<li><img style="height: 85%;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/settings.png'; ?>' /></li>
|
| 206 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/sync.png'; ?>' /></li>
|
| 207 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/softokenmobile.png'; ?>' /></li>
|
| 208 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/softtoken.png'; ?>' /></li>
|
| 209 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/processing.png'; ?>' /></li>
|
| 210 |
+
<li><img style="height:26%; position: relative; top: 44%" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/loggedin.png'; ?>' /></li>
|
| 211 |
+
</ul>
|
| 212 |
+
</div>
|
| 213 |
+
<a class="button" id="goBack2" href="#">« Go Back</a>
|
| 214 |
+
<div id="slider3">
|
| 215 |
+
<div class="control_next"><img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/arrow.png'; ?>' /></div>
|
| 216 |
+
<div class="control_prev"><img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/arrow.png'; ?>' /></div>
|
| 217 |
+
<ul>
|
| 218 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/forgot-phone.png'; ?>' /></li>
|
| 219 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/sendingotp.png'; ?>' /></li>
|
| 220 |
+
<li><img style="width: 80%; position: relative; top: 35%" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/mail.png'; ?>' /></li>
|
| 221 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/forgotphone.png'; ?>' /></li>
|
| 222 |
+
<li><img style="height: inherit;" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/processing.png'; ?>' /></li>
|
| 223 |
+
<li><img style="height:26%; position: relative; top: 44%" src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN).'adminhtml/default/default/images/MiniOrange_2factor/loggedin.png'; ?>' /></li>
|
| 224 |
+
</ul>
|
| 225 |
+
</div>
|
| 226 |
+
<a class="button" id="goBack3" href="#">« Go Back</a>
|
| 227 |
+
</div>
|
| 228 |
+
</div>
|
| 229 |
+
<div class="login-footer"></div>
|
| 230 |
+
</div>
|
| 231 |
+
</div>
|
| 232 |
+
</div>
|
| 233 |
+
</body>
|
| 234 |
+
</html>
|
app/design/adminhtml/default/default/template/miniorange_2factor/mo2fConfig.phtml
ADDED
|
@@ -0,0 +1,508 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<html>
|
| 2 |
+
<head>
|
| 3 |
+
<link href="http://miniorange.com/css/telephone.css" rel="stylesheet">
|
| 4 |
+
<style>
|
| 5 |
+
.heading>h3,table{font-family:sans-serif}.container{width:63%;float:left}.container-page{border:1px solid #c1bdbd;border-top-color:transparent;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.heading>h3{margin-left:5px;font-size:18px;text-decoration:underline;line-height:1.1;color:inherit}.mo2f_table_layout h3{margin-left:5px;margin-bottom:1%}.navbar-tabs{border-bottom:1px solid #c1bdbd}.navbar-tabs>li.active>a,.navbar-tabs>li.active>a:focus,.navbar-tabs>li.active>a:hover,.navbar-tabs>li.always-active>a,.navbar-tabs>li.always-active>a:focus,.navbar-tabs>li.always-active>a:hover{color:#000;font-size:15px;cursor:default;background-color:#fff;border:1px solid #c1bdbd;border-bottom-color:transparent}.navbar-tabs>li>a{font-size:15px;margin-right:2px;line-height:1.42857143;border-radius:4px 4px 0 0;color:#555;text-decoration:none;background:#F7F7F7;border-right:1px solid #DAD7D7;border-left:1px solid #FFF}.navbar-tabs>li{float:left;margin-bottom:-1px}.navbar ul{margin-top:0;margin-bottom:10px}.navbar-tabs>li>a:hover{border-color:#eee #eee #c1bdbd}.navbar>li>a:hover{text-decoration:none;background-color:#eee;border:1px solid #B7B5B5}a:focus,a:hover{color:#23527c;outline:0}.navbar{padding-left:0;margin-bottom:0;list-style:none;width:100%;min-width:400px}.navbar>li>a{position:relative;display:block;padding:10px 15px;cursor:pointer}.navbar:after,.navbar:before{display:table;content:"";clear:both}#accountsetup,#configuremobile,#helptrouble,#howitworks,#loginsettings,#userprofile{display:none}.page,table{display:block}.mo2f_support_layout{padding-left:3%;padding-top:2%;padding-bottom:2%;border:1px solid #c1bdbd;border-top-color:transparent;border-bottom-left-radius:4px;border-bottom-right-radius:4px;min-width:410px;height:440px}.mo2f_table_layout{margin-top:1%;margin-bottom:3%}.page{padding:0 1%;min-height:425px}td,th{padding:10px 15px}table{overflow:auto}td{color:#6f6f6f}input[type=submit]{border:0;padding:8px 15px;background:#ff8500;color:#fff;box-shadow:1px 1px 4px #dadada;-moz-box-shadow:1px 1px 4px #dadada;-webkit-box-shadow:1px 1px 4px #dadada;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;-webkit-appearance:button;cursor:pointer}input[type=submit]:hover{background:#ea7b00;color:#fff}td>input,textarea{box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;border:1px solid #c2c2c2;box-shadow:1px 1px 4px #ebebeb;-moz-box-shadow:1px 1px 4px #ebebeb;-webkit-box-shadow:1px 1px 4px #ebebeb;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;padding:7px;outline:0;width:330px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.btn-link,hr{margin-bottom:1%}input[type=number]{-moz-appearance:textfield}td>input:focus,textarea:focus{border:1px solid #ff8500}input[type=checkbox]{cursor:pointer;width:17px;height:16px;margin-right:1%;margin-left:1%}.button-align{display:inline-block;text-align:left;padding-left:4%}.center{width:100%;display:table;text-align:center}#minisupport{float:left;margin-left:2%}hr{border:0;border-top:1px solid #c1bdbd;border-bottom:1px solid #fafafa}#displayQrCode,.collapse,.panel-body{background:#F7F7F7;border-radius:4px}.required{color:red;margin-left:1%}.panel-body>ol{list-style:disc;margin-left:5%}.collapse{display:none;padding:2%;margin:1%;text-align:justify;font-size:13px}.collapse>ol{list-style:disc;margin-left:2%}.btn-link{color:#ea7601;font-size:16px;cursor:pointer}.btn-link>li{margin-left:3%}.btn-link>li:before{content:"";display:block;left:-1em;top:.7em;position:relative;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:7px solid #ea7b00}#displayQrCode{height:200px;margin-top:1%;padding-top:3%}#displayQrCode>img{margin-left:-1%;height:180px}#additional_admin,#already_registered{display:none}#slider,#slider2,#slider3,#slider4,#slider5,#slider6{position:relative;overflow:hidden}#slider ul,#slider2 ul,#slider3 ul,#slider4 ul,#slider5 ul,#slider6 ul{position:relative;margin:0;padding:0;height:200px;list-style:none}#slider ul li,#slider2 ul li,#slider3 ul li,#slider4 ul li,#slider5 ul li,#slider6 ul li{position:relative;display:block;float:left;margin:0;padding:0;width:750px;height:400px;text-align:center}.control_info,.control_next,.control_prev{position:absolute;z-index:999;cursor:pointer}.control_prev{left:0;top:49%;transform:rotate(180deg)}.control_next{right:0;top:50%}.control_info{border-radius:0 2px 2px 0;height:26%;opacity:.5;left:17%;width:70%;bottom:0}#showDownload{margin:2% 0}@media screen and (max-width:1270px){#minisupport{float:inherit;margin-left:0;margin-top:1%}.container{width:100%}}#userprofile table{width:90%;margin-top:2%;border-radius:4px;border-collapse:collapse}#userprofile table td,#userprofile table th{width:100%;border:2px solid #ccc;text-align:left;font-size:15px}#error-cancel,#success-cancel{text-decoration:none;font-size:21px;float:right}#userprofile table th{background:#F7F7F7}#slider2>ul>li>img,#slider3>ul>li>img,#slider4>ul>li>img,#slider5>ul>li>img,#slider>ul>li>img{left:0}#configureMobileButton{display:none}#messages{margin:1%}.mini-messages li{display:none;min-height:23px!important;padding:4px 4px 1px 18px!important;font-weight:700!important;text-align:left}#error-cancel{color:red}#success-cancel{color:#72C868}
|
| 6 |
+
.intl-number-input input {height: 30px; padding-left: 40px; box-sizing: border-box;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;border: 1px solid #c2c2c2;box-shadow: 1px 1px 4px #ebebeb;-moz-box-shadow: 1px 1px 4px #ebebeb;-webkit-box-shadow: 1px 1px 4px #ebebeb;border-radius: 3px;-webkit-border-radius: 3px;-moz-border-radius: 3px; outline: 0; width:330px;}
|
| 7 |
+
.intl-number-input .flag-dropdown .selected-flag {margin: 7px 7px; padding:0;}
|
| 8 |
+
</style>
|
| 9 |
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
| 10 |
+
<script src="http://miniorange.com/js/intlTelInput.min.js"></script>
|
| 11 |
+
<script>
|
| 12 |
+
var $m=jQuery.noConflict();$m(document).ready(function(){$m("#phone").intlTelInput();$email="<?php echo $this->getConfig('email')?>";$showotp="<?php echo $this->getConfig('otp')?>";$showqr="<?php echo $this->getConfig('qrcode')?>";$configure="<?php echo $this->getConfig('configure')?>";$showlogin="<?php echo $this->getConfig('login')?>";$validated="<?php echo $this->getConfig('validated')?>";$downloaded="<?php echo $this->getConfig('downloaded')?>";$OTPsent="<?php echo Mage::getSingleton('admin/session')->getOTPsent();?>";$showloginsettings="<?php echo Mage::getSingleton('admin/session')->getshowLoginSettings(); ?>";$success='<?php echo Mage::getSingleton('core/session')->getSuccessMessage(); ?>';$error='<?php echo Mage::getSingleton('core/session')->getErrorMessage(); ?>';if($email==""){if($OTPsent!=""){$error="An error occured while saving your registration details. Please Flush you Magento Cache. [ <a id='preview9' href='#slider6'>Click Here</a> for a preview. ]"}}
|
| 13 |
+
if($error!=""){$m(".error-msg span").empty();$m(".error-msg span").append($error);$m(".mini-messages li").css("display","block");$m(".success-msg").css("display","none");}
|
| 14 |
+
if($success!=""){$m(".success-msg span").empty();$m(".success-msg span").append($success);$m(".mini-messages li").css("display","block");$m(".error-msg").css("display","none");}
|
| 15 |
+
if($showotp==0&&$email!=""){$m("#account_setup").css("display","none");if($configure==1){$m("#configuremobile").css("display","block");voiddisplay("#configuremobile");setactive('configure_mobile');}
|
| 16 |
+
else if($showloginsettings==1){$m("#login_settings").css("display","block");voiddisplay("#loginsettings");setactive('login_settings');$m("#displayQrCode").hide();$m("#configureMobileButton").css("display","block");}
|
| 17 |
+
else{$m("#user_profile").css("display","block");voiddisplay("#userprofile");setactive('user_profile');$m("#displayQrCode").hide();$m("#configureMobileButton").css("display","block");}}
|
| 18 |
+
else{if($showlogin==1){$m("#account_setup").css("display","block");$m("#already_registered").css("display","block");$m("#register_miniorange").css("display","none");voiddisplay("#accountsetup");$m("#user_profile").css("display","none");setactive('account_setup');}
|
| 19 |
+
else if($validated==0&&$validated!=""){$m("#account_setup").css("display","block");$m("#additional_admin").css("display","block");$m("#register_miniorange").css("display","none");voiddisplay("#accountsetup");$m("#user_profile").css("display","none");setactive('account_setup');}
|
| 20 |
+
else{$m("#account_setup").css("display","block");$m("#already_registered").css("display","none");$m("#register_miniorange").css("display","block");voiddisplay("#accountsetup");$m("#user_profile").css("display","none");setactive('account_setup');}}
|
| 21 |
+
if($downloaded==1){$m('#showDownload').attr('checked',true);$m("#showDownload").val(1);}
|
| 22 |
+
if($m("#showDownload").is(":checked")){$m("#configureqr").css("display","block");$m("#downloadscreen").css("display","none");}
|
| 23 |
+
else{$m("#configureqr").css("display","none");$m("#downloadscreen").css("display","block");}
|
| 24 |
+
if($showqr==1){$content="<?php echo "<img src='data:image/jpg;base64," . $this->getqrCode() . "'/>" ?>";$m("#displayQrCode").empty();$m("#displayQrCode").append($content);document.location.href="#displayQrCode";}
|
| 25 |
+
if($showotp==1){$m(".register_miniorange").hide();$m("#additional_admin").hide();$m(".validate_otp").show();$m("#validateotp").focus();}
|
| 26 |
+
else{$m(".validate_otp").hide();$m(".register_miniorange").show();}
|
| 27 |
+
$m(".navbar a").click(function(){$id=this.className;setactive($id);$href=$m(this).attr('id')
|
| 28 |
+
voiddisplay($href);});$m(".btn-link").click(function(){$m(".collapse").slideUp("slow");if(!$m(this).next("div").is(':visible')){$m(this).next("div").slideDown("slow");}});$m('#showDownload').change(function(){if($m(this).attr('checked')){$m(this).val(0);$m(this).attr('checked',false);}else{$m(this).val(1);$m(this).attr('checked',true);$m("#configureMobileButton").click();}
|
| 29 |
+
$m("#downloadscreen").slideToggle();$m("#configureqr").slideToggle();document.location.href="#displayQrCode";});$m("#configureMobileButton").click(function(){$append='<span style=" background:url("http://auth.miniorange.com/moas/images/ajax-loader4.gif")no-repeat; display:block; margin: 3% auto;height:140px; width:140px"></span>'
|
| 30 |
+
$m('#displayQrCode').append($append);$m('#displayQrCode').show();document.location.href="#displayQrCode";});$m('#preview1').click(function(){$m(".how_it_works").click();$m("#register-preview").click();document.location.href="#slider";});$m('#preview2').click(function(){$m(".how_it_works").click();$m("#recconfigure-preview").click();document.location.href="#slider5";});$m('#preview3').click(function(){$m(".how_it_works").click();});$m('#preview4').click(function(){$m(".how_it_works").click();$m("#loginQr-preview").click();document.location.href="#slider2";});$m('#preview5').click(function(){$m(".how_it_works").click();$m("#offline-preview").click();document.location.href="#slider3";});$m('#preview6').click(function(){$m(".how_it_works").click();$m("#phonelost-preview").click();document.location.href="#slider4";});$m('#preview7').click(function(){$m(".how_it_works").click();$m("#reconfigure-preview").click();document.location.href="#slider5";});$m('#preview8').click(function(){$m(".how_it_works").click();$m("#loginQr-preview").click();document.location.href="#slider2";});$m('#preview9').click(function(){$m(".how_it_works").click();$m("#cache-preview").click();document.location.href="#slider6";});$m('#error-cancel').click(function(){$error="";$m(".error-msg").css("display","none");});$m('#success-cancel').click(function(){$success="";$m(".success-msg").css("display","none");});$m('#cURL').click(function(){$m(".help_trouble").click();$m("#cURLfaq").click();});});function setactive($id){$m(".navbar-tabs>li").removeClass("active");$id='#'+$id;$m($id).addClass("active");}
|
| 31 |
+
function voiddisplay($href){$m(".page").css("display","none");$m($href).css("display","block");}
|
| 32 |
+
function mo2f_valid(f){!(/^[a-zA-Z?,.\(\)\/@ 0-9]*$/).test(f.value)?f.value=f.value.replace(/[^a-zA-Z?,.\(\)\/@ 0-9]/,''):null;}
|
| 33 |
+
</script>
|
| 34 |
+
<script>
|
| 35 |
+
var $j=jQuery.noConflict();$j('#refrsh_qrcode').hide();var timeout;pollMobileRegistration();function pollMobileRegistration()
|
| 36 |
+
{var transId="<?php echo $this->getTransactionId() ?>";var jsonString="{\"txId\":\""+transId+"\"}";var postUrl="<?php echo $this->getHostURl() ?>"+"/moas/api/auth/registration-status";var showqr="<?php echo $this->getConfig('qrcode')?>";if(showqr==1){$j.ajax({url:postUrl,type:"POST",dataType:"json",data:jsonString,contentType:"application/json; charset=utf-8",success:function(result){var status=JSON.parse(JSON.stringify(result)).status;if(status=='SUCCESS'){var content="<div id='success' style='margin-left: 1%; margin-top:2%;'><img src='"+"<?php echo $this->getImage('right') ?>"+"' /></div>";$j("#displayQrCode").empty();$j("#displayQrCode").append(content);setTimeout(function(){$j("#mobile_register_form").submit();},1000);}else if(status=='ERROR'||status=='FAILED'){var content="<div id='error' style='margin-left: 1%; margin-top:2%;'><img src='"+"<?php echo $this->getImage('wrong') ?>"+"' /></div>";$j("#displayQrCode").empty();$j("#displayQrCode").append(content);$j('#refrsh_qrcode').show();$j("#configureMobileButton").show();setTimeout(function(){$j("#mobile_register_failed").submit();},1000);}else{timeout=setTimeout(pollMobileRegistration,3000);}}});}}
|
| 37 |
+
</script>
|
| 38 |
+
<script>
|
| 39 |
+
var $j=jQuery.noConflict();$j(document).ready(function($j){var slideCount=$j('#slider ul li').length;var slideWidth=$j('#slider ul li').width();var slideHeight=$j('#slider ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider').css({width:slideWidth,height:slideHeight});$j('#slider ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider ul li:last-child').prependTo('#slider ul');function moveLeft(){$j('#slider ul').fadeOut("slow",function(){$j('#slider ul li:last-child').prependTo('#slider ul');$j('#slider ul').css('left','');$j('#slider ul').fadeIn("slow");});};function moveRight(){$j('#slider ul').fadeOut("slow",function(){$j('#slider ul li:first-child').appendTo('#slider ul').fadeIn("slow");$j('#slider ul').css('left','');$j('#slider ul').fadeIn("slow");});};$j('#slider .control_prev').click(function(){moveLeft();});$j('#slider .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider2 ul li').length;var slideWidth=$j('#slider2 ul li').width();var slideHeight=$j('#slider2 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider2').css({width:slideWidth,height:slideHeight});$j('#slider2 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider2 ul li:last-child').prependTo('#slider2 ul');function moveLeft(){$j('#slider2 ul').fadeOut("slow",function(){$j('#slider2 ul li:last-child').prependTo('#slider2 ul').fadeIn("slow");$j('#slider2 ul').css('left','');$j('#slider2 ul').fadeIn("slow");});};function moveRight(){$j('#slider2 ul').fadeOut("slow",function(){$j('#slider2 ul li:first-child').appendTo('#slider2 ul').fadeIn("slow");$j('#slider2 ul').css('left','');$j('#slider2 ul').fadeIn("slow");});};$j('#slider2 .control_prev').click(function(){moveLeft();});$j('#slider2 .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider3 ul li').length;var slideWidth=$j('#slider3 ul li').width();var slideHeight=$j('#slider3 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider3').css({width:slideWidth,height:slideHeight});$j('#slider3 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider3 ul li:last-child').prependTo('#slider3 ul');function moveLeft(){$j('#slider3 ul').fadeOut("slow",function(){$j('#slider3 ul li:last-child').prependTo('#slider3 ul').fadeIn("slow");$j('#slider3 ul').css('left','');$j('#slider3 ul').fadeIn("slow");});};function moveRight(){$j('#slider3 ul').fadeOut("slow",function(){$j('#slider3 ul li:first-child').appendTo('#slider3 ul').fadeIn("slow");$j('#slider3 ul').css('left','');$j('#slider3 ul').fadeIn("slow");});};$j('#slider3 .control_prev').click(function(){moveLeft();});$j('#slider3 .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider4 ul li').length;var slideWidth=$j('#slider4 ul li').width();var slideHeight=$j('#slider4 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider4').css({width:slideWidth,height:slideHeight});$j('#slider4 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider4 ul li:last-child').prependTo('#slider4 ul');function moveLeft(){$j('#slider4 ul').fadeOut("slow",function(){$j('#slider4 ul li:last-child').prependTo('#slider4 ul').fadeIn("slow");$j('#slider4 ul').css('left','');$j('#slider4 ul').fadeIn("slow");});};function moveRight(){$j('#slider4 ul').fadeOut("slow",function(){$j('#slider4 ul li:first-child').appendTo('#slider4 ul').fadeIn("slow");$j('#slider4 ul').css('left','');$j('#slider4 ul').fadeIn("slow");});};$j('#slider4 .control_prev').click(function(){moveLeft();});$j('#slider4 .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider5 ul li').length;var slideWidth=$j('#slider5 ul li').width();var slideHeight=$j('#slider5 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider5').css({width:slideWidth,height:slideHeight});$j('#slider5 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider5 ul li:last-child').prependTo('#slider5 ul');function moveLeft(){$j('#slider5 ul').fadeOut("slow",function(){$j('#slider5 ul li:last-child').prependTo('#slider5 ul').fadeIn("slow");$j('#slider5 ul').css('left','');$j('#slider5 ul').fadeIn("slow");});};function moveRight(){$j('#slider5 ul').fadeOut("slow",function(){$j('#slider5 ul li:first-child').appendTo('#slider5 ul').fadeIn("slow");$j('#slider5 ul').css('left','');$j('#slider5 ul').fadeIn("slow");});};$j('#slider5 .control_prev').click(function(){moveLeft();});$j('#slider5 .control_next').click(function(){moveRight();});});$j(document).ready(function($j){var slideCount=$j('#slider6 ul li').length;var slideWidth=$j('#slider6 ul li').width();var slideHeight=$j('#slider6 ul li').height();var sliderUlWidth=slideCount*slideWidth;$j('#slider6').css({width:slideWidth,height:slideHeight});$j('#slider6 ul').css({width:sliderUlWidth,marginLeft:-slideWidth});$j('#slider6 ul li:last-child').prependTo('#slider6 ul');function moveLeft(){$j('#slider6 ul').fadeOut("slow",function(){$j('#slider6 ul li:last-child').prependTo('#slider6 ul').fadeIn("slow");$j('#slider6 ul').css('left','');$j('#slider6 ul').fadeIn("slow");});};function moveRight(){$j('#slider6 ul').fadeOut("slow",function(){$j('#slider6 ul li:first-child').appendTo('#slider6 ul').fadeIn("slow");$j('#slider6 ul').css('left','');$j('#slider6 ul').fadeIn("slow");});};$j('#slider6 .control_prev').click(function(){moveLeft();});$j('#slider6 .control_next').click(function(){moveRight();});});
|
| 40 |
+
</script>
|
| 41 |
+
</head>
|
| 42 |
+
<body>
|
| 43 |
+
<div class="heading"> <h3>miniOrange Two Factor Extension Configuration</h3></div>
|
| 44 |
+
<div class="container">
|
| 45 |
+
<ul class="navbar navbar-tabs">
|
| 46 |
+
<li id="user_profile"><a id="#userprofile" class="user_profile">User Profile</a></li>
|
| 47 |
+
<li id="account_setup"><a id="#accountsetup" class="account_setup">Account Setup</a></li>
|
| 48 |
+
<li id="configure_mobile"><a id="#configuremobile" class="configure_mobile">Configure Mobile</a></li>
|
| 49 |
+
<li id="login_settings"><a id="#loginsettings" class="login_settings">Login Settings</a></li>
|
| 50 |
+
<li id="how_it_works"><a id="#howitworks" class="how_it_works">How it Works</a></li>
|
| 51 |
+
<li id="help_trouble"><a id="#helptrouble" class="help_trouble">FAQs</a></li>
|
| 52 |
+
</ul>
|
| 53 |
+
<div class="container-page">
|
| 54 |
+
<div id="messages">
|
| 55 |
+
<ul class="mini-messages">
|
| 56 |
+
<li class="error-msg"><ul><li><span></span><a id="error-cancel" href="#">×</a></li></ul></li>
|
| 57 |
+
<li class="success-msg"><ul><li><span></span><a id="success-cancel" href="#">×</a></li></ul></li>
|
| 58 |
+
</ul>
|
| 59 |
+
</div>
|
| 60 |
+
<!-- USER PROFILE TAB -->
|
| 61 |
+
<div class="page" id="userprofile">
|
| 62 |
+
<div class="mo2f_table_layout">
|
| 63 |
+
<div><h3>Your Profile Information</h3><hr><span style="float:right; margin-top:-4%;">[ <a id="preview8" href="#slider2">Click Here</a> for login preview. ]</span></div>
|
| 64 |
+
<table>
|
| 65 |
+
<tr>
|
| 66 |
+
<td><b>miniOrange Account Email</b></td>
|
| 67 |
+
<td><?php echo $this->getConfig('email')?></td>
|
| 68 |
+
</tr>
|
| 69 |
+
<tr>
|
| 70 |
+
<td><b>Customer Key</b></td>
|
| 71 |
+
<td><?php echo $this->getConfig('customerKey')?></td>
|
| 72 |
+
</tr>
|
| 73 |
+
<tr>
|
| 74 |
+
<td><b>Api Key</b></td>
|
| 75 |
+
<td><?php echo $this->getConfig('apiKey')?></td>
|
| 76 |
+
</tr>
|
| 77 |
+
<tr>
|
| 78 |
+
<td><b>Api Token</b></td>
|
| 79 |
+
<td><?php echo $this->getConfig('apiToken')?></td>
|
| 80 |
+
</tr>
|
| 81 |
+
</table>
|
| 82 |
+
</div>
|
| 83 |
+
</div>
|
| 84 |
+
|
| 85 |
+
<!-- ACCOUNT SETUP TAB -->
|
| 86 |
+
<div class="page" id="accountsetup">
|
| 87 |
+
<div class="mo2f_table_layout">
|
| 88 |
+
<form name="f" id="register_miniorange" method="post" action="<?php echo $this->getadminurl('*/*/newUser') ?>">
|
| 89 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 90 |
+
<div class="register_miniorange">
|
| 91 |
+
<div ><h3>Register with miniOrange</h3><span style="float:right; margin-top:-3%;">[ <a id="preview1" href="#slider">Click Here</a> for a preview. ]</span></div>
|
| 92 |
+
<hr>
|
| 93 |
+
<div id="panel1">
|
| 94 |
+
<div><b>Please enter a valid email id that you have access to. You will be able to move forward after verifying an OTP that we will be sending to this email.</b></div><br />
|
| 95 |
+
<table class="table">
|
| 96 |
+
<tr>
|
| 97 |
+
<td><b><font color="#FF0000">*</font>Email:</b></td>
|
| 98 |
+
<td><input class="" type="email" name="email" required autofocus="true" placeholder="person@example.com" value="<?php echo $current_user->user_email;?>"/></td>
|
| 99 |
+
</tr>
|
| 100 |
+
|
| 101 |
+
<tr>
|
| 102 |
+
<td><b><font color="#FF0000">*</font>Phone number:</b></td>
|
| 103 |
+
<td><input class="" type="text" name="phone" id="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>
|
| 104 |
+
</tr>
|
| 105 |
+
<tr>
|
| 106 |
+
<td><b><font color="#FF0000">*</font>Password:</b></td>
|
| 107 |
+
<td><input class="" type="password" required name="password" placeholder="Choose your password with minimun 6 characters" title="Minimun 6 characters" pattern="[a-zA-Z0-9!@#$%^&*]{6,24}"/></td>
|
| 108 |
+
</tr>
|
| 109 |
+
<tr>
|
| 110 |
+
<td><b><font color="#FF0000">*</font>Confirm Password:</b></td>
|
| 111 |
+
<td><input class="" type="password" required name="confirmPassword" placeholder="Confirm your password with minimum 6 characters" title="minimun 6 characters" pattern="[a-zA-Z0-9!@#$%^&*]{6,24}" /></td>
|
| 112 |
+
</tr>
|
| 113 |
+
</table>
|
| 114 |
+
<br>
|
| 115 |
+
<div class="button-align"><input type="submit" name="submit" value="Submit" class="" /></div>
|
| 116 |
+
</div>
|
| 117 |
+
|
| 118 |
+
</div>
|
| 119 |
+
</form>
|
| 120 |
+
<form id="already_registered" name="f" method="post" action="<?php echo $this->getadminurl('*/*/existingUser') ?>">
|
| 121 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 122 |
+
<div class="login_miniorange">
|
| 123 |
+
<h3>Login with miniOrange</h3><hr>
|
| 124 |
+
<div id="panel1">
|
| 125 |
+
<div><b>You are already registered with miniOrange. Please Login with your miniOrange credentials</b></div><br />
|
| 126 |
+
<table class="table">
|
| 127 |
+
<tr>
|
| 128 |
+
<td><b><font color="#FF0000">*</font>Email:</b></td>
|
| 129 |
+
<td><input class="" type="email" name="loginemail" autofocus="true" required placeholder="person@example.com" style="width:400px;" value="<?php echo $current_user->user_email;?>"/></td>
|
| 130 |
+
</tr>
|
| 131 |
+
<tr>
|
| 132 |
+
<td><b><font color="#FF0000">*</font>Password:</b></td>
|
| 133 |
+
<td><input class="" type="password" required name="loginpassword" style="width:400px;" placeholder="Choose your password with minimun 6 characters" pattern="[a-zA-Z0-9!@#$%^&*]{6,24}"/></td>
|
| 134 |
+
</tr>
|
| 135 |
+
</table>
|
| 136 |
+
<br>
|
| 137 |
+
<div class="button-align"><input type="submit" name="submit" value="Submit" class="" /></div>
|
| 138 |
+
<span style="margin-left:10%;"><a href="<?php echo $this->getForgotPassUrl() ?>">Forgot Password?</a></span>
|
| 139 |
+
</div>
|
| 140 |
+
</div>
|
| 141 |
+
</form>
|
| 142 |
+
<form id="additional_admin" name="f" method="post" action="<?php echo $this->getadminurl('*/*/additionalAdmin') ?>">
|
| 143 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 144 |
+
<div class="login_miniorange">
|
| 145 |
+
<h3>Login with miniOrange</h3><hr>
|
| 146 |
+
<div id="panel1">
|
| 147 |
+
<div><b>You are already registered with miniOrange. Please Login with your miniOrange credentials</b></div><br />
|
| 148 |
+
<table class="table">
|
| 149 |
+
<tr>
|
| 150 |
+
<td><b><font color="#FF0000">*</font>Email:</b></td>
|
| 151 |
+
<td><input class="" type="email" name="additional_email" autofocus="true" required placeholder="person@example.com" style="width:400px;" value="<?php echo $current_user->user_email;?>"/></td>
|
| 152 |
+
</tr>
|
| 153 |
+
<tr>
|
| 154 |
+
<td><b><font color="#FF0000">*</font>Phone number:</b></td>
|
| 155 |
+
<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>
|
| 156 |
+
</tr>
|
| 157 |
+
</table>
|
| 158 |
+
<br>
|
| 159 |
+
<div class="button-align"><input type="submit" name="submit" value="Submit" class="" /></div>
|
| 160 |
+
|
| 161 |
+
</div>
|
| 162 |
+
</div>
|
| 163 |
+
</form>
|
| 164 |
+
</div>
|
| 165 |
+
<div class="validate_otp">
|
| 166 |
+
<h3>Validate OTP</h3><hr>
|
| 167 |
+
<div id="panel1">
|
| 168 |
+
<table class="">
|
| 169 |
+
<form name="f" method="post" id="" action="<?php echo $this->getadminurl('*/*/validateNewUser') ?>">
|
| 170 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 171 |
+
<tr>
|
| 172 |
+
<td><b><font color="#FF0000">*</font>Enter OTP:</b></td>
|
| 173 |
+
<td colspan="2"><input class="" id="validateotp" autofocus="true" type="number" name="otp" required placeholder="Enter OTP" style="width:95%;" pattern="[0-9]{4,6}"/></td>
|
| 174 |
+
</tr>
|
| 175 |
+
</table>
|
| 176 |
+
<div class="button-align">
|
| 177 |
+
<input type="submit" name="submit" value="Submit" class="" />
|
| 178 |
+
</div>
|
| 179 |
+
</form>
|
| 180 |
+
<form name="f" method="post" id="" action="<?php echo $this->getadminurl('*/*/resendValidationOTP') ?>">
|
| 181 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 182 |
+
<div class="button-align">
|
| 183 |
+
<input type="submit" name="submit" value="Resend-OTP" class="" />
|
| 184 |
+
</div>
|
| 185 |
+
</form>
|
| 186 |
+
<form name="f" method="post" id="" action="<?php echo $this->getadminurl('*/*/cancelValidation') ?>">
|
| 187 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 188 |
+
<div class="button-align">
|
| 189 |
+
<input type="submit" name="submit" value="« Go Back" class="" />
|
| 190 |
+
</div>
|
| 191 |
+
</form>
|
| 192 |
+
</div>
|
| 193 |
+
</div>
|
| 194 |
+
</div>
|
| 195 |
+
|
| 196 |
+
|
| 197 |
+
|
| 198 |
+
<!-- CONFIGURE MOBILE TAB -->
|
| 199 |
+
<div class="page" id="configuremobile">
|
| 200 |
+
<div class="mo2f_table_layout">
|
| 201 |
+
<div><h3>Configure your mobile</h3><hr><span style="float:right; margin-top:-4%;">[ <a id="preview2" href="#slider5">Click Here</a> for a preview. ]</span></div>
|
| 202 |
+
<div id="downloadscreen">
|
| 203 |
+
<div><b>Step 1: Download the miniOrange <span style="color: #F78701;">miniOrange Authenticator</span> app</b></div>
|
| 204 |
+
<table>
|
| 205 |
+
<tr>
|
| 206 |
+
<td class="panel-body" style="width:50%;">
|
| 207 |
+
<p class="content_fonts" style="margin-bottom:2px!important;"><b>iPhone Users</b></p>
|
| 208 |
+
<ol>
|
| 209 |
+
<li>Go to App Store</li>
|
| 210 |
+
<li>Search for <b>miniOrange</b></li>
|
| 211 |
+
<li>Download and install <span style="color: #F78701;"><b>miniOrange Authenticator</b></span> app (<b>NOT MOAuth</b>)</li>
|
| 212 |
+
</ol>
|
| 213 |
+
<span><a target="_blank" href="https://itunes.apple.com/us/app/miniorange-authenticator/id796303566?ls=1"><img src="<?php echo $this->getImage('appstore') ?>" style="width:120px; height:45px; margin-left:6px;"></a></span><br><br>
|
| 214 |
+
</td>
|
| 215 |
+
<td class="panel-body">
|
| 216 |
+
<p class="content_fonts" style="margin-bottom:2px!important;"><b>Android Users</b></p>
|
| 217 |
+
<ol>
|
| 218 |
+
<li> Go to Google Play Store.</li>
|
| 219 |
+
<li> Search for <b>miniOrange.</b></li>
|
| 220 |
+
<li>Download and install miniOrange <span style="color: #F78701;"><b>miniOrange Authenticator</b></span> app (<b>NOT MOAuth</b>)</li>
|
| 221 |
+
</ol>
|
| 222 |
+
<a target="_blank" href="https://play.google.com/store/apps/details?id=com.miniorange.authbeta"><img src="<?php echo $this->getImage('playstore') ?>" style="width:120px; height:=45px; margin-left:6px;"></a>
|
| 223 |
+
</td>
|
| 224 |
+
</tr>
|
| 225 |
+
</table>
|
| 226 |
+
</div>
|
| 227 |
+
<form name="f" method="post" id="configMobileForm" action="<?php echo $this->getadminurl('*/*/showQRCode') ?>">
|
| 228 |
+
<input type="checkbox" id="showDownload" name="showDownload" value="0" /><b>Check here if you have downloaded the app.</b>
|
| 229 |
+
<div id="configureqr">
|
| 230 |
+
<div><b>Step 2: Scan QR code: </b><span style="margin-left:3%;"><b>Open your miniOrange app and click on Configure Button to scan the QR code.</b></span></div>
|
| 231 |
+
<div id="refrsh_qrcode" style="">
|
| 232 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 233 |
+
<input type="submit" name="submit" id="configureMobileButton" value="Re-Configure Mobile" class="" />
|
| 234 |
+
</div>
|
| 235 |
+
</form>
|
| 236 |
+
<table class="QrCode">
|
| 237 |
+
<div id="displayQrCode" class="center"><span style=" background:url('http://auth.miniorange.com/moas/images/ajax-loader4.gif')no-repeat;
|
| 238 |
+
display:block;
|
| 239 |
+
margin: 3% auto;
|
| 240 |
+
height:140px;
|
| 241 |
+
width:140px">
|
| 242 |
+
</span></div>
|
| 243 |
+
</table>
|
| 244 |
+
<div id="mobile_registered" >
|
| 245 |
+
<form name="f" method="post" id="mobile_register_form" action="<?php echo $this->getadminurl('*/*/registrationSuccess') ?>">
|
| 246 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 247 |
+
</form>
|
| 248 |
+
<form name="f" method="post" id="mobile_register_failed" action="<?php echo $this->getadminurl('*/*/registrationTimeOut') ?>">
|
| 249 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 250 |
+
</form>
|
| 251 |
+
</div>
|
| 252 |
+
<br />
|
| 253 |
+
</div>
|
| 254 |
+
</div>
|
| 255 |
+
</div>
|
| 256 |
+
|
| 257 |
+
<!--LOGIN SETTINGS TAB-->
|
| 258 |
+
<div class="page" id="loginsettings">
|
| 259 |
+
<div class="mo2f_table_layout">
|
| 260 |
+
<div><h3>Login Settings</h3><hr></div>
|
| 261 |
+
<form name="f" method="post" action="<?php echo $this->getadminurl('*/*/enableAdmin') ?>">
|
| 262 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 263 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 264 |
+
<input type="checkbox" id="mo2f_adminrole_activation" name="adminrole_activation" value="1" <?php echo $this->isEnabled(); ?> /><b>Enable 2-Factor for admins.</b>
|
| 265 |
+
<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>
|
| 266 |
+
<br>
|
| 267 |
+
<div class="button-align"><input type="submit" name="submit" value="Save Settings" class="button button-primary button-large" /></div>
|
| 268 |
+
</form>
|
| 269 |
+
</div>
|
| 270 |
+
</div>
|
| 271 |
+
|
| 272 |
+
<!--HOW IT WORKS TAB-->
|
| 273 |
+
<div class="page" id="howitworks">
|
| 274 |
+
<div class="mo2f_table_layout">
|
| 275 |
+
<h3>HOW IT ALL WORKS?</h3>
|
| 276 |
+
<hr>
|
| 277 |
+
<ul class="mo2f_works">
|
| 278 |
+
<span class="btn-link" href=""><li id="register-preview" >How to configure miniOrange Two Factor Extension?</li></span>
|
| 279 |
+
<div class="collapse" id="">
|
| 280 |
+
<div id="slider">
|
| 281 |
+
<div class="control_next"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 282 |
+
<div class="control_prev"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 283 |
+
<ul>
|
| 284 |
+
<li><img style="height: 90%;" src='<?php echo $this->getImage('register') ?>' /></li>
|
| 285 |
+
<li><img style="width: 90%; position: relative; top: 25%;" src='<?php echo $this->getImage('otp') ?>' /></li>
|
| 286 |
+
<li><img style="width: 90%; position: relative;top: 15%;" src='<?php echo $this->getImage('clickconfiguremobile') ?>' /></li>
|
| 287 |
+
<li><img style="height: 75%; position: relative; top: 12%;" src='<?php echo $this->getImage('scanqr') ?>' /></li>
|
| 288 |
+
<li><img style="width: 40%; position: relative;top: 25%;" src='<?php echo $this->getImage('settings') ?>' /></li>
|
| 289 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('sync') ?>' /></li>
|
| 290 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('configurefirsttime') ?>' /></li>
|
| 291 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('mobilescan') ?>' /></li>
|
| 292 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('mobilesuccess') ?>' /></li>
|
| 293 |
+
<li><img style="height: 80%; position: relative; top: 12%;" src='<?php echo $this->getImage('configuremobile') ?>' /></li>
|
| 294 |
+
<li><img style="height: 53%; position: relative; top: 25%;" src='<?php echo $this->getImage('loginsettings') ?>' /></li>
|
| 295 |
+
</ul>
|
| 296 |
+
</div>
|
| 297 |
+
</div>
|
| 298 |
+
<span class="btn-link" href=""><li id="loginQr-preview">How to Login using QrCode?</li></span>
|
| 299 |
+
<div class="collapse" id="">
|
| 300 |
+
<div id="slider2">
|
| 301 |
+
<div class="control_next"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 302 |
+
<div class="control_prev"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 303 |
+
<ul>
|
| 304 |
+
<li><img style="width: 90%; position: relative; top: 20%" src='<?php echo $this->getImage('login1') ?>' /></li>
|
| 305 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('login2') ?>' /></li>
|
| 306 |
+
<li><img style="height: 76%; position: relative; top: 12%" src='<?php echo $this->getImage('authenticate') ?>' /></li>
|
| 307 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('mobilescan') ?>' /></li>
|
| 308 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('authvalidate') ?>' /></li>
|
| 309 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('login3') ?>' /></li>
|
| 310 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('processing') ?>' /></li>
|
| 311 |
+
<li><img style="height:26%; position: relative; top: 44%" src='<?php echo $this->getImage('loggedin') ?>' /></li>
|
| 312 |
+
</ul>
|
| 313 |
+
</div>
|
| 314 |
+
</div>
|
| 315 |
+
<span class="btn-link" href=""><li id="offline-preview" >How to Login when your phone is offline?</li></span>
|
| 316 |
+
<div class="collapse" id="">
|
| 317 |
+
<div id="slider3">
|
| 318 |
+
<div class="control_next"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 319 |
+
<div class="control_prev"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 320 |
+
<ul>
|
| 321 |
+
<li><img style="width: 90%; position: relative; top: 20%" src='<?php echo $this->getImage('login1') ?>' /></li>
|
| 322 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('phone-offline') ?>' /></li>
|
| 323 |
+
<li><img style="height: 76%; position: relative; top: 12%" src='<?php echo $this->getImage('softokenmobile') ?>' /></li>
|
| 324 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('softtoken') ?>' /></li>
|
| 325 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('processing') ?>' /></li>
|
| 326 |
+
<li><img style="height:26%; position: relative; top: 44%" src='<?php echo $this->getImage('loggedin') ?>' /></li>
|
| 327 |
+
</ul>
|
| 328 |
+
</div>
|
| 329 |
+
</div>
|
| 330 |
+
<span class="btn-link" href=""><li id="phonelost-preview">How to Login when your phone is unavailable?</li></span>
|
| 331 |
+
<div class="collapse" id="">
|
| 332 |
+
<div id="slider4">
|
| 333 |
+
<div class="control_next"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 334 |
+
<div class="control_prev"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 335 |
+
<ul>
|
| 336 |
+
<li><img style="width: 90%; position: relative; top: 20%" src='<?php echo $this->getImage('login1') ?>' /></li>
|
| 337 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('forgot-phone') ?>' /></li>
|
| 338 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('sendingotp') ?>' /></li>
|
| 339 |
+
<li><img style="width: 80%; position: relative; top: 35%" src='<?php echo $this->getImage('mail') ?>' /></li>
|
| 340 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('forgotphone') ?>' /></li>
|
| 341 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('processing') ?>' /></li>
|
| 342 |
+
<li><img style="height:26%; position: relative; top: 44%" src='<?php echo $this->getImage('loggedin') ?>' /></li>
|
| 343 |
+
</ul>
|
| 344 |
+
</div>
|
| 345 |
+
</div>
|
| 346 |
+
<span class="btn-link" href=""><li id="reconfigure-preview">How to ReConfigure your Mobile?</li></span>
|
| 347 |
+
<div class="collapse" id="">
|
| 348 |
+
<div id="slider5">
|
| 349 |
+
<div class="control_next"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 350 |
+
<div class="control_prev"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 351 |
+
<ul>
|
| 352 |
+
<li><img style="width: 80%; position: relative; top: 20%;" src='<?php echo $this->getImage('clickconfiguremobile2') ?>' /></li>
|
| 353 |
+
<li><img style="height: 76%; position: relative; top: 12%";" src='<?php echo $this->getImage('mobileconfigurebutton') ?>' /></li>
|
| 354 |
+
<li><img style="height: inherit" src='<?php echo $this->getImage('mobilescan') ?>' /></li>
|
| 355 |
+
<li><img style="height: inherit;" src='<?php echo $this->getImage('mobilesuccess') ?>' /></li>
|
| 356 |
+
<li><img style="height: 80%; position: relative; top: 12%;" src='<?php echo $this->getImage('configuremobile') ?>' /></li>
|
| 357 |
+
<li><img style="height: 53%; position: relative; top: 25%;" src='<?php echo $this->getImage('loginsettings') ?>' /></li>
|
| 358 |
+
</ul>
|
| 359 |
+
</div>
|
| 360 |
+
</div>
|
| 361 |
+
<span class="btn-link" href=""><li id="cache-preview">How to flush Magento Cache?</li></span>
|
| 362 |
+
<div class="collapse" id="">
|
| 363 |
+
<div id="slider6">
|
| 364 |
+
<div class="control_next"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 365 |
+
<div class="control_prev"><img src='<?php echo $this->getImage('arrow') ?>' /></div>
|
| 366 |
+
<ul>
|
| 367 |
+
<li><img style="width: 30%; position: relative;" src='<?php echo $this->getImage('cachesetting') ?>' /></li>
|
| 368 |
+
<li><img style="height: 55%; position: relative; top: 23%";" src='<?php echo $this->getImage('savecache') ?>' /></li>
|
| 369 |
+
</ul>
|
| 370 |
+
</div>
|
| 371 |
+
</div>
|
| 372 |
+
|
| 373 |
+
</ul>
|
| 374 |
+
|
| 375 |
+
|
| 376 |
+
</div>
|
| 377 |
+
</div>
|
| 378 |
+
|
| 379 |
+
<!-- HELP AND TROUBLESHOOTING TAB-->
|
| 380 |
+
<div class="page" id="helptrouble">
|
| 381 |
+
<div class="mo2f_table_layout">
|
| 382 |
+
<ul class="mo2f_faqs">
|
| 383 |
+
<span class="btn-link" href=""><li id="cURLfaq">How to enable PHP cURL extension? (Pre-requisite)</li></span>
|
| 384 |
+
<div class="collapse" id="question14">
|
| 385 |
+
<ol>
|
| 386 |
+
<li>Open php.ini.</li>
|
| 387 |
+
<li>Search for extension=php_curl.dll. Uncomment it by removing the semi-colon( ; ) in front of it.</li>
|
| 388 |
+
<li>Restart the Apache Server.</li>
|
| 389 |
+
</ol>
|
| 390 |
+
For any further queries, please submit a query on right hand side in our <b>Support Section</b>.
|
| 391 |
+
</div>
|
| 392 |
+
<hr>
|
| 393 |
+
<span class="btn-link" href=""><li>I want to enable 2-factor only for administrators ?</li></span>
|
| 394 |
+
<div class="collapse" id="question2">
|
| 395 |
+
2-Factor is enabled by default for administrators on plugin activation. You just need to complete your account setup and configure your mobile from <b>Configure Mobile Tab</b>. Once this is done administrators can login using 2-Factor.
|
| 396 |
+
</div>
|
| 397 |
+
<hr>
|
| 398 |
+
<span class="btn-link" href=""><li>What happens if an admin tries to login but has not yet registered ?</li></span>
|
| 399 |
+
<div class="collapse" id="question4">
|
| 400 |
+
If an admin has not setup 2-Factor yet, he can still login using his credentials. After logging in, he can go to <b>miniOrage</b> Tab on the top navbar and configure his 2-Factor.
|
| 401 |
+
</div>
|
| 402 |
+
<hr>
|
| 403 |
+
<span class="btn-link" href=""><li>My users have different types of phones. What phones are supported?</li></span>
|
| 404 |
+
<div class="collapse" id="question5">
|
| 405 |
+
Currently we support smart phones only. If you need 2-Factor for basic phone submit a query in our <b>Support Section</b> on right hand side.
|
| 406 |
+
</div>
|
| 407 |
+
<hr>
|
| 408 |
+
<span class="btn-link" href=""><li>What if a user does not have a smart phone?</li></span>
|
| 409 |
+
<div class="collapse" id="question6">
|
| 410 |
+
Currently we support smart phone users only. If you need 2-Factor for basic phone users submit a query in our <b>Support Section</b> on right hand side.
|
| 411 |
+
</div>
|
| 412 |
+
<hr>
|
| 413 |
+
<span class="btn-link" href=""><li>What if I am trying to login from my phone ?</li></span>
|
| 414 |
+
<div class="collapse" id="question15">
|
| 415 |
+
If you are logging in from your phone, just enter the one time passcode from miniOrange Authenticator App.
|
| 416 |
+
Go to Soft Token Tab to see one time passcode.
|
| 417 |
+
</div>
|
| 418 |
+
<hr>
|
| 419 |
+
|
| 420 |
+
|
| 421 |
+
<span class="btn-link" href="" ><li>My phone has no internet connectivity, how can I login?</li></span>
|
| 422 |
+
<div class="collapse" id="question7">
|
| 423 |
+
You can login using our alternate login method. <a id="preview5" href="#slider3">Click Here</a> for a preview to see how it works.
|
| 424 |
+
</div>
|
| 425 |
+
<hr>
|
| 426 |
+
<span class="btn-link" href="" ><li>My phone is lost, stolen or discharged. How can I login?</li></span>
|
| 427 |
+
<div class="collapse" id="question8">
|
| 428 |
+
You can login using our alternate login method. <a id="preview6" href="#slider4">Click Here</a> for a preview to see how it works.
|
| 429 |
+
</div>
|
| 430 |
+
<hr>
|
| 431 |
+
<span class="btn-link" href="" ><li>My phone has no internet connectivity and i am entering the one time passcode from miniOrange Authenticator App, it says Invalid OTP.</li></span>
|
| 432 |
+
<div class="collapse" id="question9">
|
| 433 |
+
Click on the <b>Settings Icon</b> on top right corner in <b>miniOrange Authenticator App</b> and then press <b>Sync button</b> under 'Time correction for codes' to sync your time with miniOrange Servers. If you still can't get it right, submit a query here in our <b>support section</b>.<br><br>
|
| 434 |
+
</div>
|
| 435 |
+
<hr>
|
| 436 |
+
|
| 437 |
+
<span class="btn-link" href="" ><li>I want to go back to default login with password.</li></span>
|
| 438 |
+
<div class="collapse" id="question12">
|
| 439 |
+
You should go to <b>Login Settings Tab</b> and uncheck <b>Enable 2-Factor for admins</b>
|
| 440 |
+
and <b>Enable 2-Factor for all others users</b> checkbox. This will disable 2-Factor and you can login using default login form.
|
| 441 |
+
</div>
|
| 442 |
+
<hr>
|
| 443 |
+
|
| 444 |
+
<span class="btn-link" href=""><li>I am upgrading my phone.</li></span>
|
| 445 |
+
<div class="collapse" id="question11">
|
| 446 |
+
You should go to <b>Configure Mobile Tab</b> and reconfigure 2-Factor with your new phone. <a id="preview7" href="#slider5">Click Here</a> for a preview to see how it works.
|
| 447 |
+
</div>
|
| 448 |
+
|
| 449 |
+
<hr>
|
| 450 |
+
|
| 451 |
+
<span class="btn-link" href="" ><li>What If I want to use any other second factor like OTP Over SMS, Security Questions, Device Id, etc ?</li></span>
|
| 452 |
+
<div class="collapse" id="question13">
|
| 453 |
+
miniOrange authentication service has 15+ authentication methods.One time passcodes (OTP) over SMS, OTP over Email, OTP over SMS and Email, Out of Band SMS, Out of Band Email, Soft Token, Push Notification,
|
| 454 |
+
USB based Hardware token (yubico), Security Questions, Mobile Authentication, Voice Authentication (Biometrics), Phone Verification, Device Identification, Location, Time of Access User Behavior.
|
| 455 |
+
To know more about authentication methods, please visit <a href="http://miniorange.com/strong_auth" target="_blank">http://miniorange.com/strong_auth </a>. If you want to have any other 2-factor for your
|
| 456 |
+
Magento site, Submit your query here in <b>support section</b>.
|
| 457 |
+
</div>
|
| 458 |
+
|
| 459 |
+
<hr>
|
| 460 |
+
|
| 461 |
+
<span class="btn-link" href="">For any other query/problem/request, please feel free to submit a query in our support section on right hand side. We are happy to help you and will get back to you as soon as possible.</span>
|
| 462 |
+
|
| 463 |
+
</ul>
|
| 464 |
+
|
| 465 |
+
</div>
|
| 466 |
+
</div>
|
| 467 |
+
</div>
|
| 468 |
+
</div>
|
| 469 |
+
|
| 470 |
+
<!--SUPPORT TAB-->
|
| 471 |
+
<div id="minisupport">
|
| 472 |
+
<ul class="navbar navbar-tabs">
|
| 473 |
+
<li id="mini_support" class="always-active"><a href="#minisupport" class="mini_support">Support</a></li>
|
| 474 |
+
</ul>
|
| 475 |
+
<div class="mo2f_support_layout">
|
| 476 |
+
<h3>Support</h3>
|
| 477 |
+
<hr>
|
| 478 |
+
<form name="f" method="post" action="<?php echo $this->getadminurl('*/*/supportSubmit') ?>">
|
| 479 |
+
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
|
| 480 |
+
<div><b>Need any help? Just send us a query so we can help you.</b><br /><br/></div>
|
| 481 |
+
<div>
|
| 482 |
+
<table>
|
| 483 |
+
<tr><td>
|
| 484 |
+
<input type="email" class="mo2f_table_textbox" id="query_email" name="query_email" value="<?php echo Mage::getSingleton('admin/session')->getUser()->getEmail() ?>" placeholder="Enter your email" required="true" />
|
| 485 |
+
</td>
|
| 486 |
+
</tr>
|
| 487 |
+
<tr><td>
|
| 488 |
+
<input type="text" class="mo2f_table_textbox" name="query_phone" id="query_phone" title="Phone with country code eg. +1xxxxxxxxxx" placeholder="Phone with country code eg. +1xxxxxxxxxx" value="" pattern="[\+]?[0-9]{1,4}\s?[0-9]{10}"/>
|
| 489 |
+
</td>
|
| 490 |
+
</tr>
|
| 491 |
+
<tr>
|
| 492 |
+
<td>
|
| 493 |
+
<textarea id="query" name="query" style="resize: vertical;border-radius:4px;width:370px;height:143px;" onkeyup="mo2f_valid(this)" onblur="mo2f_valid(this)" onkeypress="mo2f_valid(this)" placeholder="Write your query here"></textarea>
|
| 494 |
+
</td>
|
| 495 |
+
</tr>
|
| 496 |
+
</table>
|
| 497 |
+
</div>
|
| 498 |
+
<div class="button-align">
|
| 499 |
+
<input type="submit" name="send_query" id="send_query" value="Submit Query" style="margin-bottom:3%;" class="button button-primary button-large" />
|
| 500 |
+
</div>
|
| 501 |
+
</form>
|
| 502 |
+
<br />
|
| 503 |
+
</div>
|
| 504 |
+
<br>
|
| 505 |
+
</div>
|
| 506 |
+
|
| 507 |
+
</body>
|
| 508 |
+
</html>
|
app/etc/modules/miniorange_2factor.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?xml version = "1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<MiniOrange_2factor>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</MiniOrange_2factor>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
package.xml
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>miniOrange_2factor</name>
|
| 4 |
+
<version>1.0.0</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>A highly secure & easy to setup Two-Factor Authentication for your Magento site. miniOrange Two Factor authentication combines something you know, or something you have (smartphone) to reliably confirm your identity. 
|
| 11 |
+

|
| 12 |
+
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 accounts.
|
| 13 |
+

|
| 14 |
+
Currently the extension supports:
|
| 15 |
+
* It works for administrators.
|
| 16 |
+
* You can set up your two factor in minutes.
|
| 17 |
+
* Both iPhone and Android phones are supported.
|
| 18 |
+
* If your phone is lost or stolen or discharged, it offers an alternate login method.
|
| 19 |
+
* If your phone is offline, you can use a one time passcode generated by app to login. 
|
| 20 |
+

|
| 21 |
+

|
| 22 |
+
Feature phone, landline and two factor for frontend are also supported. You need to contact info@miniorange.com to enable it. 
|
| 23 |
+
Trusted Device, Location, Time of access and user behavior is also supported. You need to enable this by contacting info@miniorange.com
|
| 24 |
+

|
| 25 |
+
miniOrange supports 15+ authentication methods. 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, <a href="http://miniorange.com/contact" target="_blank">Contact us</a>.
|
| 26 |
+

|
| 27 |
+
* One time passcodes (OTP) over SMS
|
| 28 |
+
* OTP over Email
|
| 29 |
+
* OTP over SMS and Email
|
| 30 |
+
* Out of Band SMS
|
| 31 |
+
* Out of Band Email
|
| 32 |
+
* Soft Token
|
| 33 |
+
* Push Notification
|
| 34 |
+
* USB based Hardware token (<b>yubico</b>)
|
| 35 |
+
* Security Questions
|
| 36 |
+
* Mobile Authentication
|
| 37 |
+
* Voice Authentication (Biometrics)
|
| 38 |
+
* Phone Verification
|
| 39 |
+
* Device Identification
|
| 40 |
+
* Location
|
| 41 |
+
* Time of Access
|
| 42 |
+
* User Behavior
|
| 43 |
+

|
| 44 |
+
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.
|
| 45 |
+

|
| 46 |
+
For support please email us at info@miniorange.com or call us at +1 978 658 9387</description>
|
| 47 |
+
<notes>= 1.0.0 =
|
| 48 |
+
First version of plugin.</notes>
|
| 49 |
+
<authors><author><name>miniOrange inc.</name><user>miniOrange</user><email>info@miniorange.com</email></author></authors>
|
| 50 |
+
<date>2015-08-20</date>
|
| 51 |
+
<time>05:45:35</time>
|
| 52 |
+
<contents><target name="magecommunity"><dir name="MiniOrange"><dir name="2factor"><dir name="Block"><file name="mo2fConfig.php" hash="6f5486001145809e212edb86dae5c069"/></dir><dir name="Controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="ad19420a46e349cb13066e0a9dbc804c"/><dir name="Login"><file name="miniOrangeController.php" hash="78d1f305733dc764a87229ea4646a479"/></dir></dir><file name="IndexController.php" hash="10c33497b9bd95b36736d17836ba4c32"/></dir><dir name="Helper"><file name="Data.php" hash="34cbc1036639606723524e411926e15c"/><file name="mo2fUtility.php" hash="d8c436efc2d4aa21774d3e2373339a4f"/></dir><dir name="Model"><file name="Observer.php" hash="bff2b49fa55e170da17d32909d9e0238"/><file name="Words.php" hash="ee26cc8582d5bbad5632a6e02129f815"/></dir><dir name="etc"><file name="adminhtml.xml" hash="955f9f87d1a5df39eea9fd69379af0ee"/><file name="config.xml" hash="c4d26f104393549c5da6b8de88a7b09d"/></dir><dir name="sql"><dir name="MiniOrange_2factor_setup"><file name="mysql4-install-0.0.1.php" hash="1a05fb90202ca98975ac396006178dec"/></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="06b1788d232f30e62aadb273bda634f5"/><file name="mo2fConfig.phtml" hash="f5b79cb27b2ce203aed095f96f3deac7"/></dir></dir></dir></dir></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><target name="mageetc"><dir name="modules"><file name="miniorange_2factor.xml" hash="609cb91239fb4a89f64ae28d4b5b5398"/></dir></target></contents>
|
| 53 |
+
<compatible/>
|
| 54 |
+
<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>
|
| 55 |
+
</package>
|
skin/adminhtml/default/default/images/MiniOrange_2factor/appstore.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/arrow.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/authenticate.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/authvalidate.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/cachesetting.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/clickconfiguremobile.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/clickconfiguremobile2.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/configurefirsttime.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/configuremobile.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/forgot-phone.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/forgotphone.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/loggedin.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/login1.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/login2.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/login3.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/loginsettings.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/mail.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/miniorange_logo.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/mobileconfigurebutton.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/mobilescan.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/mobilesuccess.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/otp.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/phone-offline.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/playStore.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/processing.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/register.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/right.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/savecache.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/scanqr.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/sendingotp.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/settings.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/softokenmobile.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/softtoken.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/sync.png
ADDED
|
Binary file
|
skin/adminhtml/default/default/images/MiniOrange_2factor/wrong.png
ADDED
|
Binary file
|
