Skip to content

Commit

Permalink
PHPFusion Two Factor Authentication
Browse files Browse the repository at this point in the history
1. An upgrade is required. Please run /upgrade/custom_upgrade.php.
2. New admin configurations for the auth will be in settings_security file. Please do not mind layout, because it was coded in BS5. I'll fix them.
3. New locales in global.php is required.
4. Includes, will include, a custom segmented input javascript.
5. Email templates will be adjusted according to #2399 requirements.
6. Locale engine adjusted to improve UX, will soon demo.

Close #2397, Close #2319

Signed-off-by: deviance <meangczac.chan@gmail.com>
  • Loading branch information
FrederickChan committed Oct 5, 2022
1 parent 9d569a4 commit 1686907
Show file tree
Hide file tree
Showing 27 changed files with 4,415 additions and 1,106 deletions.
144 changes: 100 additions & 44 deletions administration/settings_main.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/

require_once __DIR__.'/../maincore.php';
require_once THEMES.'templates/admin_header.php';
pageaccess('S1');
Expand All @@ -41,7 +42,8 @@
'keywords' => sanitizer('keywords', '', 'keywords'),
'opening_page' => sanitizer('opening_page', '', 'opening_page'),
'default_search' => sanitizer('default_search', '', 'default_search'),
'domain_server' => sanitizer('domain_server', '', 'domain_server')
'domain_server' => sanitizer('domain_server', '', 'domain_server'),
'license' => sanitizer('license', '', 'license')
];

if (strpos($inputData['site_host'], "/") !== FALSE) {
Expand All @@ -58,6 +60,10 @@
$inputData['domain_server'] = str_replace(PHP_EOL, '|', $inputData['domain_server']);
}

if ($inputData['license'] == 'crl' || $inputData['license'] == 'ccl') {
$inputData['license_key'] = sanitizer('license_key', '', 'license_key');
}

if (fusion_safe()) {
foreach ($inputData as $settings_name => $settings_value) {
dbquery("UPDATE ".DB_SETTINGS." SET settings_value=:settings_value WHERE settings_name=:settings_name", [
Expand All @@ -72,75 +78,102 @@
}

opentable($locale['admins_main_settings']);
echo "<div class='well'>".$locale['admins_main_description']."</div>";
echo "<div class='mb-5'><h5>".$locale['admins_main_description']."</h5></div>";

$tabs['title'][] = $locale['admins_446'];
$tabs['id'][] = 'general';
$tabs['icon'][] = '';
$tabs['title'][] = $locale['admins_447'];
$tabs['id'][] = 'url';
$tabs['icon'][] = '';
$tabs['title'][] = 'SEF Settings';
$tabs['id'][] = 'sef';
$tabs['icon'][] = '';

$tab_active = tab_active($tabs, 0);
echo openform('settingsform', 'post', FUSION_REQUEST);
echo opentab($tabs, $tab_active, 'settingstabs');

echo openform('settingsFrm', 'POST');

echo opentab($tabs, $tab_active, 'settings', FALSE, 'nav-pills', '', [], TRUE);

echo opentabbody($tabs['title'][0], 'general', $tab_active);

echo form_text('sitename', $locale['admins_402'], $settings['sitename'], [
'inline' => TRUE,
'max_length' => 255,
'required' => TRUE,
'error_text' => $locale['error_value']
]);
echo form_text('sitebanner', $locale['admins_404'], $settings['sitebanner'], [
'required' => TRUE,
'error_text' => $locale['error_value'],
]);
echo form_textarea('description', $locale['admins_409'], $settings['description'], [
'autosize' => TRUE,
]);
tablebreak();

echo '<div class="row"><div class="col-6">';
echo form_text('siteemail', $locale['admins_405'], $settings['siteemail'], [
'inline' => TRUE,
'required' => TRUE,
'max_length' => 128,
'type' => 'email'
]);
echo '</div><div class="col-6">';
echo form_text('siteusername', $locale['admins_406'], $settings['siteusername'], [
'required' => TRUE,
'inline' => TRUE,
'max_length' => 32,
'error_text' => $locale['error_value']
]);
echo '</div></div>';

echo form_textarea('siteintro', $locale['admins_407'], stripslashes($settings['siteintro']), [
'type' => 'html',
'autosize' => TRUE,
'inline' => TRUE,
'form_name' => 'settingsform'
]);

echo form_textarea('footer', $locale['admins_412'], stripslashes($settings['footer']), [
'autosize' => TRUE,
'type' => 'html',
'inline' => TRUE,
'form_name' => 'settingsform'
]);
echo form_textarea('description', $locale['admins_409'], $settings['description'], [
'autosize' => TRUE,
'inline' => TRUE
tablebreak();
echo form_select('license', $locale['admins_613'], $settings['license'], [
'options' => [
'agpl' => 'AGPL',
'epal' => 'EPAL',
'crl' => 'CRL',
'ccl' => 'CCL'
],
'width' => '100%',
'inner_width' => '100%',
]);
echo form_textarea('keywords', $locale['admins_410'], $settings['keywords'], [
'autosize' => TRUE,
'ext_tip' => $locale['admins_411'],
'inline' => TRUE
]);
echo form_select('default_search', $locale['admins_419'], $settings['default_search'], [
'options' => get_default_search_opts(),
'callback_check' => 'validate_default_search',
'inline' => TRUE
]);
echo form_text('sitebanner', $locale['admins_404'], $settings['sitebanner'], [
'required' => TRUE,
'error_text' => $locale['error_value'],
'inline' => TRUE
echo '<div class="row" id="licenseCredential" style="display:'.(in_array($settings['license'], ['crl', 'ccl']) ? 'block' : 'none').';"><div class="col-xs-12">';
echo form_text('license_key', 'License Key', $settings['license_key'], [
'required' => TRUE,
'max_length' => 16,
'mask' => 'AAAA-AAAA-AAAA-AAAA',
'mask_options' => ['onKeyPress' => "function(cep, event, currentField, options) { currentField.val( currentField.val().toUpperCase())}"],
'placeholder' => '0000-0000-0000-0000',
'ext_tip' => 'License key is required for CRL and CCL licensing options'
]);
echo '</div></div>';
echo closetabbody();

add_to_jquery("
$('#license').on('change', function(e) {
let lec = $('#licenseCredential'), v = $(this).val();
if ( v == 'crl' || v == 'ccl') {
lec.slideDown();
} else {
lec.hide();
}
});
");
echo opentabbody($tabs['title'][1], 'url', $tab_active);
echo "<div class='row'>\n";
echo "<div class='col-xs-12 col-sm-4'>\n";
echo "<strong>".$locale['admins_401a']."</strong><br/><i>".$locale['admins_401b']."</i>";
echo "<strong>".$locale['admins_401a']."</strong><br/><small>".$locale['admins_401b']."</small>";
echo "<div class='spacer-xs'>\n";
echo "<i class='fa fa-external-link m-r-10'></i>";
echo "<span id='display_protocol'>".$settings['site_protocol']."</span>://";
Expand All @@ -149,59 +182,82 @@
echo "<span id='display_path'>".$settings['site_path']."</span>";
echo "</div>\n";
echo "</div>\n<div class='col-xs-12 col-sm-8'>\n";
echo "<div class='display-flex flex-row gap-sm'>";

echo form_select('site_protocol', $locale['admins_426'], $settings['site_protocol'], [
'inline' => TRUE,
'regex' => 'http(s)?',
'error_text' => $locale['error_value'],
'options' => [
'inline' => FALSE,
'width' => '100%',
'inner_width' => '100%',
'regex' => 'http(s)?',
'error_text' => $locale['error_value'],
'options' => [
'http' => 'http://',
'https' => 'https://',
'invalid_protocol' => $locale['admins_445']
]
]);
echo form_text('site_host', $locale['admins_427'], $settings['site_host'], [
'class' => 'w-100',
'required' => TRUE,
'inline' => TRUE,
'max_length' => 255,
'error_text' => $locale['error_value']
]);
echo form_text('site_path', $locale['admins_429'], $settings['site_path'], [
'required' => TRUE,
'inline' => TRUE,
'regex' => '\/([a-z0-9-_]+\/)*?',
'max_length' => 255
]);
echo "</div>";

echo form_text('site_port', $locale['admins_430'], $settings['site_port'], [
'inline' => TRUE,
'required' => FALSE,
'placeholder' => 80,
'max_length' => 5,
'type' => 'number',
'inner_width' => '150px',
'error_text' => $locale['admins_430_error'],
'callback_check' => 'validate_site_port',
'ext_tip' => $locale['admins_430_desc']
]);
echo form_text('opening_page', $locale['admins_413'], $settings['opening_page'], [
'required' => TRUE,
'max_length' => 100,
'error_text' => $locale['error_value'],
'inline' => TRUE,
]);

echo "</div>\n</div>\n";

// Domain names
echo "<div class='row'>\n";
echo "<div class='row'>";
echo "<div class='col-xs-12 col-sm-4'>\n";
echo "<strong>".$locale['admins_444']."</strong><br/><i>".nl2br($locale['admins_444a'])."</i>";
echo "<strong>".$locale['admins_444']."</strong><br/><small>".nl2br($locale['admins_444a'])."</small>";
echo "</div>\n<div class='col-xs-12 col-sm-8'>\n";
$domain_server = str_replace('|', PHP_EOL, $settings['domain_server']);
echo form_textarea('domain_server', $locale['admins_444b'], $domain_server, ['autosize' => TRUE, 'placeholder' => "example1.com\nexample2.com\n"]);
echo "</div>\n</div>\n";
echo form_text('opening_page', $locale['admins_413'], $settings['opening_page'], [
'required' => TRUE,
'max_length' => 100,
'error_text' => $locale['error_value'],
]);
echo '</div></div>';


echo closetabbody();

echo opentabbody($tabs['title'][2], 'sef', $tab_active);
echo form_textarea('keywords', $locale['admins_410'], $settings['keywords'], [
'autosize' => TRUE,
'ext_tip' => $locale['admins_411'],
'inline' => TRUE
]);
echo form_select('default_search', $locale['admins_419'], $settings['default_search'], [
'options' => get_default_search_opts(),
'callback_check' => 'validate_default_search',
'inline' => TRUE
]);

echo closetabbody();

echo closetab();

echo '<div class="mt-3 m-t-20">';
echo form_button('savesettings', $locale['admins_750'], $locale['admins_750'], ['class' => 'btn-primary']);
echo '</div>';

echo closeform();
closetable();

Expand Down
64 changes: 37 additions & 27 deletions administration/settings_messages.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,18 @@
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/

require_once __DIR__.'/../maincore.php';
require_once THEMES.'templates/admin_header.php';
pageaccess('S7');

$settings = fusion_get_settings();
$locale = fusion_get_locale('', LOCALE.LOCALESET.'admin/settings.php');
add_breadcrumb(['link' => ADMIN.'settings_messages.php'.fusion_get_aidlink(), 'title' => $locale['admins_message_settings']]);

$settings = fusion_get_settings();
add_breadcrumb(['link' => ADMIN.'settings_messages.php'.fusion_get_aidlink(), 'title' => $locale['admins_message_settings']]);

if (check_post('save_settings')) {

$inputData = [
'pm_inbox_limit' => sanitizer('pm_inbox_limit', '20', 'pm_inbox_limit'),
'pm_outbox_limit' => sanitizer('pm_outbox_limit', '20', 'pm_outbox_limit'),
Expand Down Expand Up @@ -53,53 +55,61 @@
}

opentable($locale['admins_message_settings']);
echo "<div class='well'>".$locale['admins_message_description']."</div>\n";
echo openform('settingsform', 'post', FUSION_REQUEST);
echo "<div class='row'>\n<div class='col-xs-12 col-sm-6'>\n";
echo "<div class='mb-5'><h5>".$locale['admins_message_description']."</h5></div>";

echo openform('settingsFrm', 'POST');
openside($locale['admins_707']);
echo '<div class="row"><div class="col-xs-12 col-sm-4">';
echo form_text('pm_inbox_limit', $locale['admins_701'], $settings['pm_inbox_limit'], [
'type' => 'number',
'max_length' => 2,
'ext_tip' => $locale['admins_704'],
'inner_width' => '100px',
'inline' => TRUE
]);
echo '</div><div class="col-xs-12 col-sm-4">';
echo form_text('pm_outbox_limit', $locale['admins_702'], $settings['pm_outbox_limit'], [
'type' => 'number',
'max_length' => 2,
'inner_width' => '100px',
'inline' => TRUE
]);
echo '</div><div class="col-xs-12 col-sm-4">';
echo form_text('pm_archive_limit', $locale['admins_703'], $settings['pm_archive_limit'], [
'type' => 'number',
'max_length' => 2,
'inner_width' => '100px',
'inline' => TRUE
]);
closeside();

// Danger zone
openside('');
fusion_confirm_exit();
add_to_jquery("$('#delete_messages').bind('click', function() { return confirm('".$locale['admins_713']."'); });");
echo form_button('delete_messages', $locale['admins_714'], $locale['admins_714'], ['class' => 'btn-danger', 'icon' => 'fa fa-trash-o']);
closeside();

echo "</div>\n<div class='col-xs-12 col-sm-6'>\n";
openside($locale['admins_708']);
echo '<div class="m-b-10">'.$locale['admins_711'].'</div>';
echo '</div></div>';
tablebreak();
echo "<div class='mb-4'><h5>".$locale['admins_708']."</h5>".$locale['admins_711']."</div>";
echo '<div class="row"><div class="col-xs-12 col-sm-6">';
echo form_select('pm_email_notify', $locale['admins_709'], $settings['pm_email_notify'], [
'options' => ['1' => $locale['no'], '2' => $locale['yes']],
'width' => '100%'
'options' => ['1' => $locale['no'], '2' => $locale['yes']],
'width' => '100%',
'inner_width' => '100%',
'inline' => FALSE,
]);
echo '</div><div class="col-xs-12 col-sm-6">';
echo form_select('pm_save_sent', $locale['admins_710'], $settings['pm_save_sent'], [
'options' => ['1' => $locale['no'], '2' => $locale['yes']],
'width' => '100%'
'options' => ['1' => $locale['no'], '2' => $locale['yes']],
'width' => '100%',
'inner_width' => '100%',
'inline' => FALSE,
]);
echo '</div></div>';
tablebreak();
echo '<div class="display-flex flex-row">';
echo '<div class="col-8">
<strong>Delete system messages</strong><br/>
Delete every user account messages entirely. Please be certain of this action.
</div>';
echo form_button('delete_messages', $locale['admins_714'], $locale['admins_714'], ['class' => 'btn-outline-danger m-l-5', 'icon' => 'delete']);
echo '</div>';
closeside();

echo "</div>\n</div>\n";
echo form_button('save_settings', $locale['admins_750'], $locale['admins_750'], ['class' => 'btn-success']);
echo form_button('save_settings', $locale['admins_750'], $locale['admins_750'], ['class' => 'btn-primary']);
echo closeform();
closetable();

fusion_confirm_exit();
add_to_jquery("$('#delete_messages').bind('click', function() { return confirm('".$locale['admins_713']."'); });");

require_once THEMES.'templates/footer.php';

0 comments on commit 1686907

Please sign in to comment.