diff --git a/config_override.php b/config_override.php index 458b5a665acf429939cdda39151f40f01aa5d613..d8588616789ed1d591f0789806f7f741689678b8 100644 --- a/config_override.php +++ b/config_override.php @@ -17,4 +17,7 @@ $max_mailboxes = 3; * This can be customized using runtime connector hook and avoid core file modifications. * array('session' => 'Vtiger_CustomSession_Handler') */ -$runtime_connectors = array(); \ No newline at end of file +$runtime_connectors = array(); + +//Password Regex for validation +$password_regex = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})'; \ No newline at end of file diff --git a/include/Webservices/Custom/ChangePassword.php b/include/Webservices/Custom/ChangePassword.php index eba0cb9c8e41cc5efcfff29abf2d600b2eece87e..2d37e9b01a349a90b1de011939798baac06115ff 100644 --- a/include/Webservices/Custom/ChangePassword.php +++ b/include/Webservices/Custom/ChangePassword.php @@ -75,7 +75,9 @@ function vtws_changePassword($id, $oldPassword, $newPassword, $confirmPassword, } function isPasswordStrong($new_password){ - if (preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})/i', $new_password) == 1) { + $runtime_configs = Vtiger_Runtime_Configs::getInstance(); + $password_regex = $runtime_configs->get('password_regex'); + if (preg_match('/'.$password_regex.'/i', $new_password) == 1) { return true; } return false; diff --git a/includes/runtime/Configs.php b/includes/runtime/Configs.php index 6c7e446131315260c457ab3ad5021a092a602365..4ab97f2090392ad3e76c20c2bf6f4e0346916d86 100644 --- a/includes/runtime/Configs.php +++ b/includes/runtime/Configs.php @@ -41,4 +41,19 @@ return $connector; } + + /** + * Function to fetch the value for given key + */ + public function get($key, $default = '') { + $value = ''; + if(isset($GLOBALS[$key])) { + $value = $GLOBALS[$key]; + } + + if(empty($value) && !empty($default)) { + $value = $default; + } + return $value; + } } \ No newline at end of file diff --git a/layouts/v7/modules/Install/Step4.tpl b/layouts/v7/modules/Install/Step4.tpl index f358877d786088e4ab182ef530e6bc1e71a7c5e0..63a659f15fad0bf95bf832efeddb4cf85f47f0f7 100644 --- a/layouts/v7/modules/Install/Step4.tpl +++ b/layouts/v7/modules/Install/Step4.tpl @@ -28,6 +28,7 @@ <div class="row hide" id="errorMessage"></div> <div class="row"> <div class="col-sm-6"> + <input type='hidden' name='pwd_regex' value= {ZEND_json::encode($PWD_REGEX)} /> <table class="config-table input-table"> <thead> <tr><th colspan="2">{vtranslate('LBL_DATABASE_INFORMATION', 'Install')}</th></tr> diff --git a/layouts/v7/modules/Users/DetailViewBlockView.tpl b/layouts/v7/modules/Users/DetailViewBlockView.tpl index 33ba6ff0023b9b68204654283e635585ab0e7bab..18f2528e965f31245df4260364218a0e7b773286 100644 --- a/layouts/v7/modules/Users/DetailViewBlockView.tpl +++ b/layouts/v7/modules/Users/DetailViewBlockView.tpl @@ -9,6 +9,7 @@ {strip} <input type=hidden name="timeFormatOptions" data-value='{$DAY_STARTS}' /> + <input type='hidden' name='pwd_regex' value= {ZEND_json::encode($PWD_REGEX)} /> {foreach key=BLOCK_LABEL_KEY item=FIELD_MODEL_LIST from=$RECORD_STRUCTURE} {if $BLOCK_LABEL_KEY neq 'LBL_CALENDAR_SETTINGS'} {assign var=BLOCK value=$BLOCK_LIST[$BLOCK_LABEL_KEY]} diff --git a/layouts/v7/modules/Users/EditView.tpl b/layouts/v7/modules/Users/EditView.tpl index 244ea2a65d2f6c76151c48200dead5d30f46fad9..a8126d8eaf03ad3b2c63efc9a2688ecffa518419 100644 --- a/layouts/v7/modules/Users/EditView.tpl +++ b/layouts/v7/modules/Users/EditView.tpl @@ -40,6 +40,7 @@ <input type="hidden" name="defaultCallDuration" value="{$USER_MODEL->get('callduration')}" /> <input type="hidden" name="defaultOtherEventDuration" value="{$USER_MODEL->get('othereventduration')}" /> <input type="hidden" name="isPreference" value="{$IS_PREFERENCE}" /> + <input type='hidden' name='pwd_regex' value= {ZEND_json::encode($PWD_REGEX)} /> {if $IS_RELATION_OPERATION } <input type="hidden" name="sourceModule" value="{$SOURCE_MODULE}" /> <input type="hidden" name="sourceRecord" value="{$SOURCE_RECORD}" /> diff --git a/layouts/v7/modules/Users/ListViewHeader.tpl b/layouts/v7/modules/Users/ListViewHeader.tpl index 0bf4e1c24174521b7deeb62ff31147bd99098b9f..719ec63c4e30667e77b01de068838abc75c7beb4 100644 --- a/layouts/v7/modules/Users/ListViewHeader.tpl +++ b/layouts/v7/modules/Users/ListViewHeader.tpl @@ -10,6 +10,7 @@ {strip} <div class="listViewPageDiv" id="listViewContent"> <div class="col-sm-12 col-xs-12 full-height"> + <input type='hidden' name='pwd_regex' value= {ZEND_json::encode($PWD_REGEX)} /> <div id="listview-actions" class="listview-actions-container"> <div class = "row"> <div class="btn-group col-md-2"></div> diff --git a/layouts/v7/modules/Vtiger/resources/Utils.js b/layouts/v7/modules/Vtiger/resources/Utils.js index 4dc32a3cf81f39eeeac612e2bd0e0a315897ed9b..26cae5e2d7a57232cbb14991d3e3cdb59c9af20f 100644 --- a/layouts/v7/modules/Vtiger/resources/Utils.js +++ b/layouts/v7/modules/Vtiger/resources/Utils.js @@ -401,8 +401,12 @@ var vtUtils = { * (?=.*[!@#\$%\^&\*]) The string must contain at least one special character, but we are escaping reserved RegEx characters to avoid conflict * (?=.{8,}) The string must be eight characters or longer */ - var strongPasswordRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})"); - var isStrong = strongPasswordRegex.test(password)? true : false; - return isStrong; + var password_regex = jQuery('[name="pwd_regex"]').val(); + if((typeof password_regex != 'undefined') && (password_regex != '')){ + var strongPasswordRegex = new RegExp(password_regex); + var isStrong = strongPasswordRegex.test(password)? true : false; + return isStrong; + } + return false; }, } diff --git a/modules/Install/views/Index.php b/modules/Install/views/Index.php index 54a29e5f49bfd76b83e7b3f86111cdbd0e6a9003..59276d24b4c3a7716d16535d5757fdfed3011658 100644 --- a/modules/Install/views/Index.php +++ b/modules/Install/views/Index.php @@ -111,6 +111,10 @@ class Install_Index_view extends Vtiger_View_Controller { $viewer->assign('ADMIN_LASTNAME', $defaultParameters['admin_lastname']); $viewer->assign('ADMIN_PASSWORD', $defaultParameters['admin_password']); $viewer->assign('ADMIN_EMAIL', $defaultParameters['admin_email']); + + $runtime_configs = Vtiger_Runtime_Configs::getInstance(); + $password_regex = $runtime_configs->get('password_regex'); + $viewer->assign('PWD_REGEX', $password_regex); $viewer->view('Step4.tpl', $moduleName); } diff --git a/modules/Users/views/List.php b/modules/Users/views/List.php index 40bff8e2273cee67f5e593119a6e496017bf78ff..122a8ea86c9f36a5750f1223fe1b3d8a9a0d74a9 100644 --- a/modules/Users/views/List.php +++ b/modules/Users/views/List.php @@ -167,6 +167,10 @@ class Users_List_View extends Settings_Vtiger_List_View { $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); $viewer->assign('SEARCH_VALUE', $searchValue); $viewer->assign('SEARCH_DETAILS', $searchParams); + + $runtime_configs = Vtiger_Runtime_Configs::getInstance(); + $password_regex = $runtime_configs->get('password_regex'); + $viewer->assign('PWD_REGEX', $password_regex); } /** diff --git a/modules/Users/views/PreferenceDetail.php b/modules/Users/views/PreferenceDetail.php index 154544d3f55115a62d547cbab687e136a8e53bb2..49e6be3cfd76e96231b028ef57d5c64e2b5028d7 100644 --- a/modules/Users/views/PreferenceDetail.php +++ b/modules/Users/views/PreferenceDetail.php @@ -172,6 +172,9 @@ class Users_PreferenceDetail_View extends Vtiger_Detail_View { $viewer->assign("DAY_STARTS", Zend_Json::encode($dayStartPicklistValues)); $viewer->assign('IMAGE_DETAILS', $recordModel->getImageDetails()); + $runtime_configs = Vtiger_Runtime_Configs::getInstance(); + $password_regex = $runtime_configs->get('password_regex'); + $viewer->assign('PWD_REGEX', $password_regex); return parent::process($request); } diff --git a/modules/Users/views/PreferenceEdit.php b/modules/Users/views/PreferenceEdit.php index cc1e4032604a127e3d2082fc649dbc9cd3460027..1ad9ebbba1eb4084f49e7782ec59330912666ec4 100644 --- a/modules/Users/views/PreferenceEdit.php +++ b/modules/Users/views/PreferenceEdit.php @@ -121,7 +121,7 @@ Class Users_PreferenceEdit_View extends Vtiger_Edit_View { $fieldsInfo[$fieldName] = $fieldModel->getFieldInfo(); } $viewer->assign('FIELDS_INFO', json_encode($fieldsInfo)); - + if($display) { $this->preProcessDisplay($request); } @@ -150,6 +150,10 @@ Class Users_PreferenceEdit_View extends Vtiger_Edit_View { $viewer->assign("DAY_STARTS", Zend_Json::encode($dayStartPicklistValues)); $viewer->assign('TAG_CLOUD', $recordModel->getTagCloudStatus()); $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); + + $runtime_configs = Vtiger_Runtime_Configs::getInstance(); + $password_regex = $runtime_configs->get('password_regex'); + $viewer->assign('PWD_REGEX', $password_regex); parent::process($request); }