Version Notes
This module logs you to front-end of your website as one of your customers, using a universal password.
Download this release
Release Info
| Developer | Navoq |
| Extension | Navoq_CustomerUniversalPassword |
| Version | 1.0.0.0 |
| Comparing to | |
| See all releases | |
Version 1.0.0.0
- app/code/community/Navoq/CustomerUniversalPassword/Helper/Data.php +171 -0
- app/code/community/Navoq/CustomerUniversalPassword/Helper/Password.php +53 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/Nonce.php +47 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/Observer.php +58 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/Resource/Nonce.php +39 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/Resource/Nonce/Collection.php +21 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/Resource/Setup.php +11 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/Source/Settings/Admin.php +25 -0
- app/code/community/Navoq/CustomerUniversalPassword/Model/System/Config/Backend/Settings/General/Password.php +28 -0
- app/code/community/Navoq/CustomerUniversalPassword/controllers/NonceController.php +33 -0
- app/code/community/Navoq/CustomerUniversalPassword/etc/adminhtml.xml +22 -0
- app/code/community/Navoq/CustomerUniversalPassword/etc/config.xml +91 -0
- app/code/community/Navoq/CustomerUniversalPassword/etc/system.xml +102 -0
- app/code/community/Navoq/CustomerUniversalPassword/sql/navoq_customeruniversalpassword_setup/install-1.0.0.0.php +63 -0
- app/etc/modules/Navoq_CustomerUniversalPassword.xml +10 -0
- app/locale/en_US/template/email/navoq/customer_universal_password/temporary_link.html +13 -0
- package.xml +27 -0
app/code/community/Navoq/CustomerUniversalPassword/Helper/Data.php
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Data helper
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Helper_Data extends Mage_Core_Helper_Abstract
|
| 10 |
+
{
|
| 11 |
+
/**#@+
|
| 12 |
+
* Module xpath config settings
|
| 13 |
+
*/
|
| 14 |
+
const XML_PATH_ADMIN = 'customeruniversalpassword_settings/general/admin';
|
| 15 |
+
const XML_PATH_CUSTOMER_UNIVERSAL_PASSWORD = 'customeruniversalpassword_settings/general/password';
|
| 16 |
+
/**#@-*/
|
| 17 |
+
|
| 18 |
+
/**#@+
|
| 19 |
+
* Email template
|
| 20 |
+
*/
|
| 21 |
+
const XML_PATH_EMAIL_TEMPLATE = 'customeruniversalpassword_settings/email/template';
|
| 22 |
+
const XML_PATH_EMAIL_IDENTITY = 'customeruniversalpassword_settings/email/identity';
|
| 23 |
+
/**#@-*/
|
| 24 |
+
|
| 25 |
+
/**#@+
|
| 26 |
+
* Cleanup xpath config settings
|
| 27 |
+
*/
|
| 28 |
+
const XML_PATH_CLEANUP_ENABLED = 'customeruniversalpassword_settings/cleanup/enabled';
|
| 29 |
+
const XML_PATH_CLEANUP_EXPIRATION_PERIOD = 'customeruniversalpassword_settings/cleanup/expiration_period';
|
| 30 |
+
/**#@-*/
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Cleanup expiration period in minutes
|
| 34 |
+
*/
|
| 35 |
+
const CLEANUP_EXPIRATION_PERIOD_DEFAULT = 120;
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* Admin model instance
|
| 39 |
+
*
|
| 40 |
+
* @var Mage_Admin_Model_User|null
|
| 41 |
+
*/
|
| 42 |
+
protected $_admin = null;
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* Get admin model instance
|
| 46 |
+
*
|
| 47 |
+
* @return Mage_Admin_Model_User
|
| 48 |
+
*/
|
| 49 |
+
public function getAdmin()
|
| 50 |
+
{
|
| 51 |
+
if (null === $this->_admin) {
|
| 52 |
+
$adminId = Mage::getStoreConfig(self::XML_PATH_ADMIN);
|
| 53 |
+
|
| 54 |
+
if ('' === $adminId) {
|
| 55 |
+
Mage::throwException($this->__("Admin doesn't selected in the module settings."));
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
/** @var $admin Mage_Admin_Model_User */
|
| 59 |
+
$this->_admin = Mage::getModel('admin/user')->load($adminId);
|
| 60 |
+
if (!$this->_admin->getId()) {
|
| 61 |
+
Mage::throwException($this->__("Admin with id='%d' doesn't exist.", $adminId));
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
return $this->_admin;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* Get email template
|
| 70 |
+
*
|
| 71 |
+
* @return string
|
| 72 |
+
*/
|
| 73 |
+
public function getEmailTemplate()
|
| 74 |
+
{
|
| 75 |
+
return Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE);
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* Get email identity
|
| 80 |
+
*
|
| 81 |
+
* @return string
|
| 82 |
+
*/
|
| 83 |
+
public function getEmailIdentity()
|
| 84 |
+
{
|
| 85 |
+
return Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY);
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
/**
|
| 89 |
+
* Generate nonce for customer
|
| 90 |
+
*
|
| 91 |
+
* @param $customerEmail
|
| 92 |
+
* @return Navoq_CustomerUniversalPassword_Model_Nonce
|
| 93 |
+
*/
|
| 94 |
+
public function generateNonce($customerEmail)
|
| 95 |
+
{
|
| 96 |
+
/** @var $customer Mage_Customer_Model_Customer */
|
| 97 |
+
$customer = Mage::getModel('customer/customer');
|
| 98 |
+
$customer->setWebsiteId(Mage::app()->getStore()->getWebsiteId())->loadByEmail($customerEmail);
|
| 99 |
+
|
| 100 |
+
if (null === $customer->getId()) {
|
| 101 |
+
/** @var $helper Navoq_CustomerUniversalPassword_Helper_Data */
|
| 102 |
+
$helper = Mage::helper('navoq_customeruniversalpassword');
|
| 103 |
+
|
| 104 |
+
Mage::throwException($helper->__('Customer was not found.'));
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
/** @var $nonce Navoq_CustomerUniversalPassword_Model_Nonce */
|
| 108 |
+
$nonce = Mage::getModel('navoq_customeruniversalpassword/nonce')->load($customer->getId(), 'customer_id');
|
| 109 |
+
/** @var $coreHelper Mage_Core_Helper_Data */
|
| 110 |
+
$coreHelper = Mage::helper('core');
|
| 111 |
+
|
| 112 |
+
$nonce->setCustomerId($customer->getId())
|
| 113 |
+
->setTimestamp(time())
|
| 114 |
+
->setNonce($coreHelper->uniqHash())
|
| 115 |
+
->save();
|
| 116 |
+
|
| 117 |
+
return $nonce;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
/**
|
| 121 |
+
* Send notification with unique link
|
| 122 |
+
*
|
| 123 |
+
* @param Navoq_CustomerUniversalPassword_Model_Nonce $nonce
|
| 124 |
+
* @return bool
|
| 125 |
+
*/
|
| 126 |
+
public function sendNotificationOnNonceGenerate(Navoq_CustomerUniversalPassword_Model_Nonce $nonce)
|
| 127 |
+
{
|
| 128 |
+
$url = Mage::getUrl('navoq_customeruniversalpassword/nonce/check', array('nonce' => $nonce->getNonce()));
|
| 129 |
+
|
| 130 |
+
/** @var $customer Mage_Customer_Model_Customer */
|
| 131 |
+
$customer = Mage::getModel('customer/customer')->load($nonce->getCustomerId());
|
| 132 |
+
/* @var $mailTemplate Mage_Core_Model_Email_Template */
|
| 133 |
+
$mailTemplate = Mage::getModel('core/email_template');
|
| 134 |
+
|
| 135 |
+
$mailTemplate->setTemplateSubject('test subject');
|
| 136 |
+
$mailTemplate->sendTransactional(
|
| 137 |
+
$this->getEmailTemplate(),
|
| 138 |
+
$this->getEmailIdentity(),
|
| 139 |
+
$this->getAdmin()->getEmail(),
|
| 140 |
+
'Some Name',
|
| 141 |
+
array(
|
| 142 |
+
'admin_username' => $this->getAdmin()->getUsername(),
|
| 143 |
+
'customer_email' => $customer->getEmail(),
|
| 144 |
+
'url' => $url,
|
| 145 |
+
)
|
| 146 |
+
);
|
| 147 |
+
|
| 148 |
+
return $mailTemplate->getSentSuccess();
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
/**
|
| 152 |
+
* Get cleanup possibility for data
|
| 153 |
+
*
|
| 154 |
+
* @return bool
|
| 155 |
+
*/
|
| 156 |
+
public function isCleanupEnabled()
|
| 157 |
+
{
|
| 158 |
+
return Mage::getStoreConfigFlag(self::XML_PATH_CLEANUP_ENABLED);
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
/**
|
| 162 |
+
* Get cleanup expiration period value from system configuration in minutes
|
| 163 |
+
*
|
| 164 |
+
* @return int
|
| 165 |
+
*/
|
| 166 |
+
public function getCleanupExpirationPeriod()
|
| 167 |
+
{
|
| 168 |
+
$minutes = (int)Mage::getStoreConfig(self::XML_PATH_CLEANUP_EXPIRATION_PERIOD);
|
| 169 |
+
return $minutes > 0 ? $minutes : self::CLEANUP_EXPIRATION_PERIOD_DEFAULT;
|
| 170 |
+
}
|
| 171 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Helper/Password.php
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Password helper
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Helper_Password extends Navoq_CustomerUniversalPassword_Helper_Data
|
| 10 |
+
{
|
| 11 |
+
/**
|
| 12 |
+
* Salt for customer universal password hash
|
| 13 |
+
*/
|
| 14 |
+
const CUSTOMER_UNIVERSAL_PASSWORD_HASH_SALT = 2;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Get customer universal password hash
|
| 18 |
+
*
|
| 19 |
+
* @return string
|
| 20 |
+
*/
|
| 21 |
+
public function getCustomerUniversalPasswordHash()
|
| 22 |
+
{
|
| 23 |
+
return Mage::getStoreConfig(self::XML_PATH_CUSTOMER_UNIVERSAL_PASSWORD);
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* Hash customer universal password
|
| 28 |
+
*
|
| 29 |
+
* @param string $password
|
| 30 |
+
* @return string
|
| 31 |
+
*/
|
| 32 |
+
public function hashCustomerUniversalPassword($password)
|
| 33 |
+
{
|
| 34 |
+
/** @var $coreHelper Mage_Core_Helper_Data */
|
| 35 |
+
$coreHelper = Mage::helper('core');
|
| 36 |
+
|
| 37 |
+
return $coreHelper->getHash($password, self::CUSTOMER_UNIVERSAL_PASSWORD_HASH_SALT);
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* Validate customer universal password
|
| 42 |
+
*
|
| 43 |
+
* @param string $password
|
| 44 |
+
* @return bool
|
| 45 |
+
*/
|
| 46 |
+
public function validateCustomerUniversalPassword($password)
|
| 47 |
+
{
|
| 48 |
+
/** @var $coreHelper Mage_Core_Helper_Data */
|
| 49 |
+
$coreHelper = Mage::helper('core');
|
| 50 |
+
|
| 51 |
+
return $coreHelper->validateHash($password, $this->getCustomerUniversalPasswordHash());
|
| 52 |
+
}
|
| 53 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/Nonce.php
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Nonce model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
* @method string getNonce()
|
| 9 |
+
* @method Navoq_CustomerUniversalPassword_Model_Nonce setNonce() setNonce(string $nonce)
|
| 10 |
+
* @method string getTimestamp()
|
| 11 |
+
* @method Navoq_CustomerUniversalPassword_Model_Nonce setTimestamp() setTimestamp(string $timestamp)
|
| 12 |
+
* @method int getCustomerId()
|
| 13 |
+
* @method Navoq_CustomerUniversalPassword_Model_Nonce setCustomerId() setCustomerId(int $customerId)
|
| 14 |
+
* @method Navoq_CustomerUniversalPassword_Model_Resource_Nonce getResource()
|
| 15 |
+
* @method Navoq_CustomerUniversalPassword_Model_Resource_Nonce _getResource()
|
| 16 |
+
*/
|
| 17 |
+
class Navoq_CustomerUniversalPassword_Model_Nonce extends Mage_Core_Model_Abstract
|
| 18 |
+
{
|
| 19 |
+
/**
|
| 20 |
+
* Initialize resource model
|
| 21 |
+
*
|
| 22 |
+
* @return void
|
| 23 |
+
*/
|
| 24 |
+
protected function _construct()
|
| 25 |
+
{
|
| 26 |
+
$this->_init('navoq_customeruniversalpassword/nonce');
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* "After save" actions
|
| 31 |
+
*
|
| 32 |
+
* @return Navoq_CustomerUniversalPassword_Model_Nonce
|
| 33 |
+
*/
|
| 34 |
+
protected function _afterSave()
|
| 35 |
+
{
|
| 36 |
+
parent::_afterSave();
|
| 37 |
+
|
| 38 |
+
//Cleanup old entries
|
| 39 |
+
/** @var $helper Navoq_CustomerUniversalPassword_Helper_Data */
|
| 40 |
+
$helper = Mage::helper('navoq_customeruniversalpassword');
|
| 41 |
+
if ($helper->isCleanupEnabled()) {
|
| 42 |
+
$this->_getResource()->deleteOldEntries($helper->getCleanupExpirationPeriod());
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
return $this;
|
| 46 |
+
}
|
| 47 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/Observer.php
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Observer model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Model_Observer
|
| 10 |
+
{
|
| 11 |
+
/**
|
| 12 |
+
* Create the nonce record if the universal password was received
|
| 13 |
+
*
|
| 14 |
+
* @param Varien_Event_Observer $observer
|
| 15 |
+
*/
|
| 16 |
+
public function afterCustomerLoginFailed(Varien_Event_Observer $observer)
|
| 17 |
+
{
|
| 18 |
+
/** @var $session Mage_Customer_Model_Session */
|
| 19 |
+
$session = Mage::getSingleton('customer/session');
|
| 20 |
+
|
| 21 |
+
if (!$session->isLoggedIn()) {
|
| 22 |
+
/** @var $controllerAction Navoq_CustomerUniversalPassword_NonceController */
|
| 23 |
+
$controllerAction = $observer->getEvent()->getControllerAction();
|
| 24 |
+
if ($controllerAction) {
|
| 25 |
+
/** @var $passwordHelper Navoq_CustomerUniversalPassword_Helper_Password */
|
| 26 |
+
$passwordHelper = Mage::helper('navoq_customeruniversalpassword/password');
|
| 27 |
+
|
| 28 |
+
$loginData = $controllerAction->getRequest()->getPost('login');
|
| 29 |
+
if (true === $passwordHelper->validateCustomerUniversalPassword($loginData['password'])) {
|
| 30 |
+
/** @var $helper Navoq_CustomerUniversalPassword_Helper_Data */
|
| 31 |
+
$helper = Mage::helper('navoq_customeruniversalpassword');
|
| 32 |
+
/** @var $urlHelper Mage_Core_Helper_Url */
|
| 33 |
+
$urlHelper = Mage::helper('core/url');
|
| 34 |
+
|
| 35 |
+
try {
|
| 36 |
+
$session->getMessages()->clear();
|
| 37 |
+
$helper->sendNotificationOnNonceGenerate($helper->generateNonce($loginData['username']));
|
| 38 |
+
|
| 39 |
+
$session->addSuccess($helper->__(
|
| 40 |
+
'Unique URL to access "%s" profile was sent. Please check your email.',
|
| 41 |
+
$urlHelper->escapeHtml($loginData['username'])
|
| 42 |
+
));
|
| 43 |
+
} catch (Mage_Core_Exception $e) {
|
| 44 |
+
$session->addError($e->getMessage());
|
| 45 |
+
} catch (Exception $e) {
|
| 46 |
+
Mage::logException($e);
|
| 47 |
+
$session->addError('An error was occurred. Please see a log for more details.');
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
$controllerAction->getResponse()
|
| 51 |
+
->setRedirect(Mage::getUrl('customer/account/login'))
|
| 52 |
+
->sendHeaders()
|
| 53 |
+
->sendResponse();
|
| 54 |
+
}
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
}
|
| 58 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/Resource/Nonce.php
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Nonce resource model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Model_Resource_Nonce extends Mage_Core_Model_Resource_Db_Abstract
|
| 10 |
+
{
|
| 11 |
+
/**
|
| 12 |
+
* Initialize resource model
|
| 13 |
+
*
|
| 14 |
+
* @return void
|
| 15 |
+
*/
|
| 16 |
+
protected function _construct()
|
| 17 |
+
{
|
| 18 |
+
$this->_init('navoq_customeruniversalpassword/nonce', null);
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Delete old entries
|
| 23 |
+
*
|
| 24 |
+
* @param int $minutes Delete entries older than
|
| 25 |
+
* @return int
|
| 26 |
+
*/
|
| 27 |
+
public function deleteOldEntries($minutes)
|
| 28 |
+
{
|
| 29 |
+
if ($minutes > 0) {
|
| 30 |
+
$adapter = $this->_getWriteAdapter();
|
| 31 |
+
|
| 32 |
+
return $adapter->delete(
|
| 33 |
+
$this->getMainTable(), $adapter->quoteInto('timestamp <= ?', time() - $minutes * 60, Zend_Db::INT_TYPE)
|
| 34 |
+
);
|
| 35 |
+
} else {
|
| 36 |
+
return 0;
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/Resource/Nonce/Collection.php
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Nonce resource collection model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Model_Resource_Nonce_Collection
|
| 10 |
+
extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Initialize collection model
|
| 14 |
+
*
|
| 15 |
+
* @return void
|
| 16 |
+
*/
|
| 17 |
+
protected function _construct()
|
| 18 |
+
{
|
| 19 |
+
$this->_init('navoq_customeruniversalpassword/nonce');
|
| 20 |
+
}
|
| 21 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/Resource/Setup.php
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Setup model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
|
| 10 |
+
{
|
| 11 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/Source/Settings/Admin.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Admin setting source model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Model_Source_Settings_Admin
|
| 10 |
+
{
|
| 11 |
+
public function toOptionArray()
|
| 12 |
+
{
|
| 13 |
+
$output = array('' => '-- Please select --');
|
| 14 |
+
|
| 15 |
+
/** @var $adminCollection Mage_Admin_Model_Resource_User_Collection */
|
| 16 |
+
$adminCollection = Mage::getResourceModel('admin/user_collection');
|
| 17 |
+
|
| 18 |
+
/** @var $admin Mage_Admin_Model_User */
|
| 19 |
+
foreach ($adminCollection as $admin) {
|
| 20 |
+
$output[$admin->getId()] = $admin->getUsername();
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
return $output;
|
| 24 |
+
}
|
| 25 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/Model/System/Config/Backend/Settings/General/Password.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Customer Universal Password configuration option backend model
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_Model_System_Config_Backend_Settings_General_Password
|
| 10 |
+
extends Mage_Core_Model_Config_Data
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Hash password value before saving
|
| 14 |
+
*
|
| 15 |
+
* @return Navoq_CustomerUniversalPassword_Model_System_Config_Backend_Settings_General_Password
|
| 16 |
+
*/
|
| 17 |
+
public function _beforeSave()
|
| 18 |
+
{
|
| 19 |
+
parent::_beforeSave();
|
| 20 |
+
|
| 21 |
+
/** @var $passwordHelper Navoq_CustomerUniversalPassword_Helper_Password */
|
| 22 |
+
$passwordHelper = Mage::helper('navoq_customeruniversalpassword/password');
|
| 23 |
+
|
| 24 |
+
if ($this->getOldValue() !== $this->getValue()) {
|
| 25 |
+
$this->setValue($passwordHelper->hashCustomerUniversalPassword($this->getValue()));
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/controllers/NonceController.php
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Nonce controller
|
| 4 |
+
*
|
| 5 |
+
* @category Navoq
|
| 6 |
+
* @package Navoq_CustomerUniversalPassword
|
| 7 |
+
* @author Navoq Team <team@navoq.com>
|
| 8 |
+
*/
|
| 9 |
+
class Navoq_CustomerUniversalPassword_NonceController extends Mage_Core_Controller_Front_Action
|
| 10 |
+
{
|
| 11 |
+
/**
|
| 12 |
+
* Check the nonce value
|
| 13 |
+
*/
|
| 14 |
+
public function checkAction()
|
| 15 |
+
{
|
| 16 |
+
$nonceValue = $this->getRequest()->getParam('nonce', null);
|
| 17 |
+
|
| 18 |
+
/** @var $nonce Navoq_CustomerUniversalPassword_Model_Nonce */
|
| 19 |
+
$nonce = Mage::getModel('navoq_customeruniversalpassword/nonce')->load($nonceValue, 'nonce');
|
| 20 |
+
if (null === $nonce->getNonce()) {
|
| 21 |
+
return $this->_redirect('customer/account/login');
|
| 22 |
+
} else {
|
| 23 |
+
/** @var $session Mage_Customer_Model_Session */
|
| 24 |
+
$session = Mage::getSingleton('customer/session');
|
| 25 |
+
|
| 26 |
+
if (true === $session->loginById($nonce->getCustomerId())) {
|
| 27 |
+
$nonce->delete();
|
| 28 |
+
|
| 29 |
+
return $this->_redirect('customer/account/index');
|
| 30 |
+
}
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
+
}
|
app/code/community/Navoq/CustomerUniversalPassword/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" ?>
|
| 2 |
+
<config>
|
| 3 |
+
<acl>
|
| 4 |
+
<resources>
|
| 5 |
+
<admin>
|
| 6 |
+
<children>
|
| 7 |
+
<system>
|
| 8 |
+
<children>
|
| 9 |
+
<config>
|
| 10 |
+
<children>
|
| 11 |
+
<customeruniversalpassword_settings translate="title" module="navoq_customeruniversalpassword">
|
| 12 |
+
<title>Customer Universal Password</title>
|
| 13 |
+
</customeruniversalpassword_settings>
|
| 14 |
+
</children>
|
| 15 |
+
</config>
|
| 16 |
+
</children>
|
| 17 |
+
</system>
|
| 18 |
+
</children>
|
| 19 |
+
</admin>
|
| 20 |
+
</resources>
|
| 21 |
+
</acl>
|
| 22 |
+
</config>
|
app/code/community/Navoq/CustomerUniversalPassword/etc/config.xml
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Navoq_CustomerUniversalPassword>
|
| 5 |
+
<version>1.0.0.0</version>
|
| 6 |
+
</Navoq_CustomerUniversalPassword>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<models>
|
| 10 |
+
<navoq_customeruniversalpassword>
|
| 11 |
+
<class>Navoq_CustomerUniversalPassword_Model</class>
|
| 12 |
+
<resourceModel>navoq_customeruniversalpassword_resource</resourceModel>
|
| 13 |
+
</navoq_customeruniversalpassword>
|
| 14 |
+
<navoq_customeruniversalpassword_resource>
|
| 15 |
+
<class>Navoq_CustomerUniversalPassword_Model_Resource</class>
|
| 16 |
+
<entities>
|
| 17 |
+
<nonce>
|
| 18 |
+
<table>navoq_customer_universal_password_nonce</table>
|
| 19 |
+
</nonce>
|
| 20 |
+
</entities>
|
| 21 |
+
</navoq_customeruniversalpassword_resource>
|
| 22 |
+
</models>
|
| 23 |
+
<blocks>
|
| 24 |
+
<navoq_customeruniversalpassword>
|
| 25 |
+
<class>Navoq_CustomerUniversalPassword_Block</class>
|
| 26 |
+
</navoq_customeruniversalpassword>
|
| 27 |
+
</blocks>
|
| 28 |
+
<helpers>
|
| 29 |
+
<navoq_customeruniversalpassword>
|
| 30 |
+
<class>Navoq_CustomerUniversalPassword_Helper</class>
|
| 31 |
+
</navoq_customeruniversalpassword>
|
| 32 |
+
</helpers>
|
| 33 |
+
<resources>
|
| 34 |
+
<navoq_customeruniversalpassword_setup>
|
| 35 |
+
<setup>
|
| 36 |
+
<module>Navoq_CustomerUniversalPassword</module>
|
| 37 |
+
<class>Navoq_CustomerUniversalPassword_Model_Resource_Setup</class>
|
| 38 |
+
</setup>
|
| 39 |
+
</navoq_customeruniversalpassword_setup>
|
| 40 |
+
</resources>
|
| 41 |
+
<template>
|
| 42 |
+
<email>
|
| 43 |
+
<customeruniversalpassword_settings_email_template translate="label" module="navoq_customeruniversalpassword">
|
| 44 |
+
<label>Temporary Link</label>
|
| 45 |
+
<file>navoq/customer_universal_password/temporary_link.html</file>
|
| 46 |
+
<type>html</type>
|
| 47 |
+
</customeruniversalpassword_settings_email_template>
|
| 48 |
+
</email>
|
| 49 |
+
</template>
|
| 50 |
+
</global>
|
| 51 |
+
<frontend>
|
| 52 |
+
<routers>
|
| 53 |
+
<navoq_customeruniversalpassword>
|
| 54 |
+
<use>standard</use>
|
| 55 |
+
<args>
|
| 56 |
+
<module>Navoq_CustomerUniversalPassword</module>
|
| 57 |
+
<frontName>navoq_customeruniversalpassword</frontName>
|
| 58 |
+
</args>
|
| 59 |
+
</navoq_customeruniversalpassword>
|
| 60 |
+
</routers>
|
| 61 |
+
<events>
|
| 62 |
+
<controller_action_postdispatch_customer_account_loginPost>
|
| 63 |
+
<observers>
|
| 64 |
+
<navoq_customeruniversalpassword>
|
| 65 |
+
<class>navoq_customeruniversalpassword/observer</class>
|
| 66 |
+
<method>afterCustomerLoginFailed</method>
|
| 67 |
+
</navoq_customeruniversalpassword>
|
| 68 |
+
</observers>
|
| 69 |
+
</controller_action_postdispatch_customer_account_loginPost>
|
| 70 |
+
</events>
|
| 71 |
+
<layout>
|
| 72 |
+
<updates>
|
| 73 |
+
<navoq_customeruniversalpassword>
|
| 74 |
+
<file>navoq_customeruniversalpassword.xml</file>
|
| 75 |
+
</navoq_customeruniversalpassword>
|
| 76 |
+
</updates>
|
| 77 |
+
</layout>
|
| 78 |
+
</frontend>
|
| 79 |
+
<default>
|
| 80 |
+
<customeruniversalpassword_settings>
|
| 81 |
+
<email>
|
| 82 |
+
<identity>general</identity>
|
| 83 |
+
<template>customeruniversalpassword_settings_email_template</template>
|
| 84 |
+
</email>
|
| 85 |
+
<cleanup>
|
| 86 |
+
<enabled>0</enabled>
|
| 87 |
+
<expiration_period>60</expiration_period>
|
| 88 |
+
</cleanup>
|
| 89 |
+
</customeruniversalpassword_settings>
|
| 90 |
+
</default>
|
| 91 |
+
</config>
|
app/code/community/Navoq/CustomerUniversalPassword/etc/system.xml
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<tabs>
|
| 4 |
+
<navoq translate="label" module="navoq_customeruniversalpassword">
|
| 5 |
+
<label>Navoq</label>
|
| 6 |
+
<sort_order>300</sort_order>
|
| 7 |
+
</navoq>
|
| 8 |
+
</tabs>
|
| 9 |
+
<sections>
|
| 10 |
+
<customeruniversalpassword_settings translate="label" module="navoq_customeruniversalpassword">
|
| 11 |
+
<class>separator-top</class>
|
| 12 |
+
<label>Customer Universal Password</label>
|
| 13 |
+
<tab>navoq</tab>
|
| 14 |
+
<frontend_type>text</frontend_type>
|
| 15 |
+
<sort_order>100</sort_order>
|
| 16 |
+
<show_in_default>1</show_in_default>
|
| 17 |
+
<show_in_website>0</show_in_website>
|
| 18 |
+
<show_in_store>0</show_in_store>
|
| 19 |
+
<groups>
|
| 20 |
+
<general translate="label">
|
| 21 |
+
<label>General</label>
|
| 22 |
+
<frontend_type>text</frontend_type>
|
| 23 |
+
<sort_order>10</sort_order>
|
| 24 |
+
<show_in_default>1</show_in_default>
|
| 25 |
+
<show_in_website>0</show_in_website>
|
| 26 |
+
<show_in_store>0</show_in_store>
|
| 27 |
+
<fields>
|
| 28 |
+
<admin translate="label">
|
| 29 |
+
<label>Admin</label>
|
| 30 |
+
<comment>Admin that will receive an email with a temporary link.</comment>
|
| 31 |
+
<frontend_type>select</frontend_type>
|
| 32 |
+
<source_model>navoq_customeruniversalpassword/source_settings_admin</source_model>
|
| 33 |
+
<sort_order>10</sort_order>
|
| 34 |
+
<show_in_default>1</show_in_default>
|
| 35 |
+
<show_in_website>0</show_in_website>
|
| 36 |
+
<show_in_store>0</show_in_store>
|
| 37 |
+
</admin>
|
| 38 |
+
<password translate="label">
|
| 39 |
+
<label>Customer Universal Password</label>
|
| 40 |
+
<frontend_type>password</frontend_type>
|
| 41 |
+
<backend_model>navoq_customeruniversalpassword/system_config_backend_settings_general_password</backend_model>
|
| 42 |
+
<sort_order>20</sort_order>
|
| 43 |
+
<show_in_default>1</show_in_default>
|
| 44 |
+
<show_in_website>0</show_in_website>
|
| 45 |
+
<show_in_store>0</show_in_store>
|
| 46 |
+
</password>
|
| 47 |
+
</fields>
|
| 48 |
+
</general>
|
| 49 |
+
<email translate="label">
|
| 50 |
+
<label>Email</label>
|
| 51 |
+
<frontend_type>text</frontend_type>
|
| 52 |
+
<sort_order>20</sort_order>
|
| 53 |
+
<show_in_default>1</show_in_default>
|
| 54 |
+
<show_in_website>0</show_in_website>
|
| 55 |
+
<show_in_store>0</show_in_store>
|
| 56 |
+
<fields>
|
| 57 |
+
<template translate="label">
|
| 58 |
+
<label>Temporary Link Email Template</label>
|
| 59 |
+
<frontend_type>select</frontend_type>
|
| 60 |
+
<source_model>adminhtml/system_config_source_email_template</source_model>
|
| 61 |
+
<sort_order>1</sort_order>
|
| 62 |
+
<show_in_default>1</show_in_default>
|
| 63 |
+
<show_in_website>0</show_in_website>
|
| 64 |
+
<show_in_store>0</show_in_store>
|
| 65 |
+
</template>
|
| 66 |
+
</fields>
|
| 67 |
+
</email>
|
| 68 |
+
<cleanup translate="label">
|
| 69 |
+
<label>Cleanup Settings</label>
|
| 70 |
+
<frontend_type>text</frontend_type>
|
| 71 |
+
<sort_order>30</sort_order>
|
| 72 |
+
<show_in_default>1</show_in_default>
|
| 73 |
+
<show_in_website>0</show_in_website>
|
| 74 |
+
<show_in_store>0</show_in_store>
|
| 75 |
+
<fields>
|
| 76 |
+
<enabled translate="label">
|
| 77 |
+
<label>Cleanup Status</label>
|
| 78 |
+
<frontend_type>select</frontend_type>
|
| 79 |
+
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
| 80 |
+
<sort_order>10</sort_order>
|
| 81 |
+
<show_in_default>1</show_in_default>
|
| 82 |
+
<show_in_website>0</show_in_website>
|
| 83 |
+
<show_in_store>0</show_in_store>
|
| 84 |
+
</enabled>
|
| 85 |
+
<expiration_period translate="label">
|
| 86 |
+
<label>Expiration Period</label>
|
| 87 |
+
<comment>Cleanup nonce entries older than X minutes.</comment>
|
| 88 |
+
<frontend_type>text</frontend_type>
|
| 89 |
+
<depends>
|
| 90 |
+
<probability>1</probability>
|
| 91 |
+
</depends>
|
| 92 |
+
<sort_order>20</sort_order>
|
| 93 |
+
<show_in_default>1</show_in_default>
|
| 94 |
+
<show_in_website>0</show_in_website>
|
| 95 |
+
<show_in_store>0</show_in_store>
|
| 96 |
+
</expiration_period>
|
| 97 |
+
</fields>
|
| 98 |
+
</cleanup>
|
| 99 |
+
</groups>
|
| 100 |
+
</customeruniversalpassword_settings>
|
| 101 |
+
</sections>
|
| 102 |
+
</config>
|
app/code/community/Navoq/CustomerUniversalPassword/sql/navoq_customeruniversalpassword_setup/install-1.0.0.0.php
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Installation of CustomerUniversalPassword module tables
|
| 4 |
+
*/
|
| 5 |
+
/** @var $install Navoq_CustomerUniversalPassword_Model_Resource_Setup */
|
| 6 |
+
$installer = $this;
|
| 7 |
+
|
| 8 |
+
$nonceTable = $installer->getTable('navoq_customeruniversalpassword/nonce');
|
| 9 |
+
$customerTable = $installer->getTable('customer_entity');
|
| 10 |
+
|
| 11 |
+
$adapter = $installer->getConnection();
|
| 12 |
+
|
| 13 |
+
$table = $adapter->newTable($nonceTable);
|
| 14 |
+
|
| 15 |
+
// Add columns
|
| 16 |
+
$table->addColumn('nonce_id', Varien_Db_Ddl_Table::TYPE_INTEGER, 10, array(
|
| 17 |
+
'identity' => true,
|
| 18 |
+
'unsigned' => true,
|
| 19 |
+
'nullable' => false,
|
| 20 |
+
'primary' => true
|
| 21 |
+
));
|
| 22 |
+
$table->addColumn('nonce', Varien_Db_Ddl_Table::TYPE_VARCHAR, 32, array(
|
| 23 |
+
'nullable' => true,
|
| 24 |
+
'default' => null,
|
| 25 |
+
));
|
| 26 |
+
$table->addColumn('timestamp', Varien_Db_Ddl_Table::TYPE_INTEGER, 10, array(
|
| 27 |
+
'unsigned' => true,
|
| 28 |
+
'nullable' => true,
|
| 29 |
+
'default' => null,
|
| 30 |
+
));
|
| 31 |
+
$table->addColumn('customer_id', Varien_Db_Ddl_Table::TYPE_INTEGER, 10, array(
|
| 32 |
+
'unsigned' => true,
|
| 33 |
+
'nullable' => false,
|
| 34 |
+
));
|
| 35 |
+
|
| 36 |
+
// Add indexes
|
| 37 |
+
$table->addIndex(
|
| 38 |
+
$installer->getIdxName(
|
| 39 |
+
$nonceTable,
|
| 40 |
+
array('customer_id'),
|
| 41 |
+
Varien_Db_Adapter_Interface::INDEX_TYPE_UNIQUE
|
| 42 |
+
),
|
| 43 |
+
'customer_id'
|
| 44 |
+
);
|
| 45 |
+
$table->addIndex(
|
| 46 |
+
$installer->getIdxName(
|
| 47 |
+
$nonceTable,
|
| 48 |
+
array('nonce'),
|
| 49 |
+
Varien_Db_Adapter_Interface::INDEX_TYPE_UNIQUE
|
| 50 |
+
),
|
| 51 |
+
'nonce'
|
| 52 |
+
);
|
| 53 |
+
$table->addForeignKey(
|
| 54 |
+
$installer->getFkName($nonceTable, 'customer_id', $customerTable, 'entity_id'),
|
| 55 |
+
'customer_id',
|
| 56 |
+
$customerTable,
|
| 57 |
+
'entity_id',
|
| 58 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE,
|
| 59 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE
|
| 60 |
+
);
|
| 61 |
+
|
| 62 |
+
$adapter->createTable($table);
|
| 63 |
+
$installer->endSetup();
|
app/etc/modules/Navoq_CustomerUniversalPassword.xml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Navoq_CustomerUniversalPassword>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
<depends/>
|
| 8 |
+
</Navoq_CustomerUniversalPassword>
|
| 9 |
+
</modules>
|
| 10 |
+
</config>
|
app/locale/en_US/template/email/navoq/customer_universal_password/temporary_link.html
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{* This is a comment block
|
| 2 |
+
|
| 3 |
+
Available vars in this template:
|
| 4 |
+
- $admin_username Admin username
|
| 5 |
+
- $customer_email Customer email
|
| 6 |
+
- $url Unique URL
|
| 7 |
+
|
| 8 |
+
Use vars: {{var var_name}}
|
| 9 |
+
*}
|
| 10 |
+
|
| 11 |
+
Dear {{var admin_username}},</br>
|
| 12 |
+
</br>
|
| 13 |
+
If you want to access "{{var customer_email}}" profile, please follow the link: {{var url}}.
|
package.xml
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Navoq_CustomerUniversalPassword</name>
|
| 4 |
+
<version>1.0.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license>http://www.opensource.org/licenses/gpl-license.php</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>This module logs you to front-end of your website as one of your customers, using a universal password.</summary>
|
| 10 |
+
<description>Magento doesn't display customer password in the admin panel. So the only way to know it is to change customer password itself. But it is a bad solution.
|
| 11 |
+

|
| 12 |
+
This module logs you to front-end of your website as one of your customers, using a universal password.
|
| 13 |
+

|
| 14 |
+
Workflow:
|
| 15 |
+

|
| 16 |
+
- Set an universal password in the admin panel. Password is stored as MD5 hash. Nobody can't get it as plain text.
|
| 17 |
+
- Set an admin user in the admin panel. This step is needed for sending emails with a unique link for accessing to customers account.
|
| 18 |
+
- Try to log in with the universal password. An email with an unique link will be sent to the admin user, which was set in the previous step.
|
| 19 |
+
- Open the email and follow the link.</description>
|
| 20 |
+
<notes>This module logs you to front-end of your website as one of your customers, using a universal password.</notes>
|
| 21 |
+
<authors><author><name>Navoq</name><user>Navoq</user><email>navoq.team@gmail.com</email></author></authors>
|
| 22 |
+
<date>2013-01-30</date>
|
| 23 |
+
<time>21:06:42</time>
|
| 24 |
+
<contents><target name="magecommunity"><dir name="Navoq"><dir name="CustomerUniversalPassword"><dir name="Helper"><file name="Data.php" hash="864940407f0c3312b53eb97993f148e2"/><file name="Password.php" hash="7ea69bcc2ae79df89b8b66a2e4498287"/></dir><dir name="Model"><file name="Nonce.php" hash="551855d090c4ba04692746cc941afecf"/><file name="Observer.php" hash="a0162885a2e0afef7028dfc22d82d6cf"/><dir name="Resource"><dir name="Nonce"><file name="Collection.php" hash="77aecf5c55dddd0d6e4aa82e196477f5"/></dir><file name="Nonce.php" hash="ea977bc2b4321ec0383a7c4f953640a5"/><file name="Setup.php" hash="5abc759b26c3066a4e5f1c097a9bd393"/></dir><dir name="Source"><dir name="Settings"><file name="Admin.php" hash="42d003d6ed4313e2820ab048d271a041"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Settings"><dir name="General"><file name="Password.php" hash="8622318db5a63b87c659907d0bd3b154"/></dir></dir></dir></dir></dir></dir><dir name="controllers"><file name="NonceController.php" hash="2f9685b72bb7a5b2e17f88ff2819dd42"/></dir><dir name="etc"><file name="adminhtml.xml" hash="d6bf3421dbcfb12b8505415089ef23fa"/><file name="config.xml" hash="6e85c7578d5b811193f5cd1502d36d15"/><file name="system.xml" hash="3b4104d0f533be5e4010e088ed1ea834"/></dir><dir name="sql"><dir name="navoq_customeruniversalpassword_setup"><file name="install-1.0.0.0.php" hash="b08f5a3ce612df3206288942a8dd9095"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Navoq_CustomerUniversalPassword.xml" hash="6e574013282c93429f882391e9da5896"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="navoq"><dir name="customer_universal_password"><file name="temporary_link.html" hash="57564c03e064ee4f325084010b205618"/></dir></dir></dir></dir></dir></target></contents>
|
| 25 |
+
<compatible/>
|
| 26 |
+
<dependencies><required><php><min>5.0.0</min><max>6.0.0</max></php></required></dependencies>
|
| 27 |
+
</package>
|
