Move admin IP whitelist to Security config page

This commit is contained in:
Kijin Sung 2016-02-04 16:15:00 +09:00
parent a36bc03970
commit 6c671600c1
4 changed files with 30 additions and 28 deletions

View file

@ -554,6 +554,7 @@ class adminAdminController extends admin
{ {
$vars = Context::getRequestVars(); $vars = Context::getRequestVars();
// iframe filter
$embed_iframe = $vars->embedfilter_iframe; $embed_iframe = $vars->embedfilter_iframe;
$embed_iframe = array_filter(array_map('trim', preg_split('/[\r\n]/', $embed_iframe)), function($item) { $embed_iframe = array_filter(array_map('trim', preg_split('/[\r\n]/', $embed_iframe)), function($item) {
return $item !== ''; return $item !== '';
@ -562,7 +563,9 @@ class adminAdminController extends admin
return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item;
}, $embed_iframe)); }, $embed_iframe));
natcasesort($embed_iframe); natcasesort($embed_iframe);
Rhymix\Framework\Config::set('embedfilter.iframe', array_values($embed_iframe));
// object filter
$embed_object = $vars->embedfilter_object; $embed_object = $vars->embedfilter_object;
$embed_object = array_filter(array_map('trim', preg_split('/[\r\n]/', $embed_object)), function($item) { $embed_object = array_filter(array_map('trim', preg_split('/[\r\n]/', $embed_object)), function($item) {
return $item !== ''; return $item !== '';
@ -571,9 +574,19 @@ class adminAdminController extends admin
return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item;
}, $embed_object)); }, $embed_object));
natcasesort($embed_object); natcasesort($embed_object);
Rhymix\Framework\Config::set('embedfilter.iframe', array_values($embed_iframe));
Rhymix\Framework\Config::set('embedfilter.object', array_values($embed_object)); Rhymix\Framework\Config::set('embedfilter.object', array_values($embed_object));
// Admin IP access control
$allowed_ip = array_map('trim', preg_split('/[\r\n]/', $vars->admin_allowed_ip));
$allowed_ip = array_unique(array_filter($allowed_ip, function($item) {
return $item !== '';
}));
if (!IpFilter::validate($whitelist)) {
return new Object(-1, 'msg_invalid_ip');
}
Rhymix\Framework\Config::set('admin.allow', array_values($allowed_ip));
// Save
Rhymix\Framework\Config::save(); Rhymix\Framework\Config::save();
$this->setMessage('success_updated'); $this->setMessage('success_updated');
@ -615,15 +628,7 @@ class adminAdminController extends admin
Rhymix\Framework\Config::set('view.minify_scripts', $vars->minify_scripts ?: 'common'); Rhymix\Framework\Config::set('view.minify_scripts', $vars->minify_scripts ?: 'common');
Rhymix\Framework\Config::set('view.gzip', $vars->use_gzip === 'Y'); Rhymix\Framework\Config::set('view.gzip', $vars->use_gzip === 'Y');
// Admin IP access control // Save
$allowed_ip = array_map('trim', preg_split('/[\r\n]/', $vars->admin_allowed_ip));
$allowed_ip = array_unique(array_filter($allowed_ip, function($item) {
return $item !== '';
}));
if (!IpFilter::validate($whitelist)) {
return new Object(-1, 'msg_invalid_ip');
}
Rhymix\Framework\Config::set('admin.allow', array_values($allowed_ip));
Rhymix\Framework\Config::save(); Rhymix\Framework\Config::save();
$this->setMessage('success_updated'); $this->setMessage('success_updated');

View file

@ -433,6 +433,13 @@ class adminAdminView extends admin
context::set('embedfilter_iframe', implode(PHP_EOL, $oEmbedFilter->whiteIframeUrlList)); context::set('embedfilter_iframe', implode(PHP_EOL, $oEmbedFilter->whiteIframeUrlList));
context::set('embedfilter_object', implode(PHP_EOL, $oEmbedFilter->whiteUrlList)); context::set('embedfilter_object', implode(PHP_EOL, $oEmbedFilter->whiteUrlList));
// Admin IP access control
$allowed_ip = Rhymix\Framework\Config::get('admin.allow');
Context::set('admin_allowed_ip', implode(PHP_EOL, $allowed_ip));
$denied_ip = Rhymix\Framework\Config::get('admin.deny');
Context::set('admin_denied_ip', implode(PHP_EOL, $denied_ip));
Context::set('remote_addr', RX_CLIENT_IP);
$this->setTemplateFile('config_security'); $this->setTemplateFile('config_security');
} }
@ -464,13 +471,6 @@ class adminAdminView extends admin
Context::set('minify_scripts', Rhymix\Framework\Config::get('view.minify_scripts')); Context::set('minify_scripts', Rhymix\Framework\Config::get('view.minify_scripts'));
Context::set('use_gzip', Rhymix\Framework\Config::get('view.gzip')); Context::set('use_gzip', Rhymix\Framework\Config::get('view.gzip'));
// Admin IP access control
$allowed_ip = Rhymix\Framework\Config::get('admin.allow');
Context::set('admin_allowed_ip', implode(PHP_EOL, $allowed_ip));
$denied_ip = Rhymix\Framework\Config::get('admin.deny');
Context::set('admin_denied_ip', implode(PHP_EOL, $denied_ip));
Context::set('remote_addr', RX_CLIENT_IP);
$this->setTemplateFile('config_advanced'); $this->setTemplateFile('config_advanced');
} }

View file

@ -75,13 +75,6 @@
<label for="use_gzip_n" class="x_inline"><input type="radio" name="use_gzip" id="use_gzip_n" value="N" checked="checked"|cond="!$use_gzip" /> {$lang->cmd_no}</label> <label for="use_gzip_n" class="x_inline"><input type="radio" name="use_gzip" id="use_gzip_n" value="N" checked="checked"|cond="!$use_gzip" /> {$lang->cmd_no}</label>
</div> </div>
</div> </div>
<div class="x_control-group">
<label class="x_control-label" for="admin_allowed_ip">{$lang->admin_ip_limit} <a class="x_icon-question-sign" href="./common/manual/admin/#UMAN_config_general_admin_iplist" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<textarea name="admin_allowed_ip" id="admin_allowed_ip" rows="4" cols="42" placeholder="{$remote_addr} ({$lang->local_ip_address})" style="margin-right:10px">{$admin_allowed_ip}</textarea>
<p class="x_help-block">{$lang->about_ipaddress_input}</p>
</div>
</div>
<div class="x_clearfix btnArea"> <div class="x_clearfix btnArea">
<div class="x_pull-right"> <div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button> <button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>

View file

@ -7,21 +7,25 @@
<input type="hidden" name="module" value="admin" /> <input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminUpdateSecurity" /> <input type="hidden" name="act" value="procAdminUpdateSecurity" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_security/1" /> <input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_security/1" />
<div class="x_control-group"> <div class="x_control-group">
<label class="x_control-label" for="embedfilter_iframe">iframe</label> <label class="x_control-label" for="embedfilter_iframe">iframe</label>
<div class="x_controls" style="margin-right:14px"> <div class="x_controls" style="margin-right:14px">
<textarea name="embedfilter_iframe" id="embedfilter_iframe" rows="8" style="width:100%;">{$embedfilter_iframe}</textarea> <textarea name="embedfilter_iframe" id="embedfilter_iframe" rows="8" style="width:100%;">{$embedfilter_iframe}</textarea>
</div> </div>
</div> </div>
<div class="x_control-group"> <div class="x_control-group">
<label class="x_control-label" for="embedfilter_object">object/embed</label> <label class="x_control-label" for="embedfilter_object">object/embed</label>
<div class="x_controls" style="margin-right:14px"> <div class="x_controls" style="margin-right:14px">
<textarea name="embedfilter_object" id="embedfilter_object" rows="8" style="width:100%;">{$embedfilter_object}</textarea> <textarea name="embedfilter_object" id="embedfilter_object" rows="8" style="width:100%;">{$embedfilter_object}</textarea>
</div> </div>
</div> </div>
<div class="x_control-group">
<label class="x_control-label" for="admin_allowed_ip">{$lang->admin_ip_limit} <a class="x_icon-question-sign" href="./common/manual/admin/#UMAN_config_general_admin_iplist" target="_blank">{$lang->help}</a></label>
<div class="x_controls">
<textarea name="admin_allowed_ip" id="admin_allowed_ip" rows="4" cols="42" placeholder="{$remote_addr} ({$lang->local_ip_address})" style="margin-right:10px">{$admin_allowed_ip}</textarea>
<p class="x_help-block">{$lang->about_ipaddress_input}</p>
</div>
</div>
<div class="x_clearfix btnArea"> <div class="x_clearfix btnArea">
<div class="x_pull-right"> <div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button> <button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>