131 lines
4.0 KiB
PHP
131 lines
4.0 KiB
PHP
<?php
|
|
|
|
use libphonenumber\NumberParseException;
|
|
use libphonenumber\PhoneNumberFormat;
|
|
use libphonenumber\PhoneNumberUtil;
|
|
|
|
class ModemHandler extends RequestHandler
|
|
{
|
|
|
|
public function GET_routing_smallhome_page() {
|
|
global $config;
|
|
|
|
list($error) = $this->input('error');
|
|
$upstream = self::getCurrentUpstream();
|
|
|
|
$current_upstream = [
|
|
'key' => $upstream,
|
|
'label' => $config['modems'][$upstream]['label']
|
|
];
|
|
|
|
$this->tpl->set([
|
|
'error' => $error,
|
|
'current' => $current_upstream,
|
|
'modems' => $config['modems'],
|
|
]);
|
|
$this->tpl->set_title('Маршрутизация');
|
|
$this->tpl->render_page('routing_page.twig');
|
|
}
|
|
|
|
public function GET_routing_smallhome_switch() {
|
|
global $config;
|
|
list($new_upstream) = $this->input('upstream');
|
|
if (!isset($config['modems'][$new_upstream]))
|
|
redirect('/routing/?error='.urlencode('invalid upstream'));
|
|
|
|
$current_upstream = self::getCurrentUpstream();
|
|
if ($current_upstream != $new_upstream) {
|
|
if ($new_upstream == 'mts-il')
|
|
$new_upstream_ip = '192.168.88.1';
|
|
else
|
|
$new_upstream_ip = $config['modems'][$new_upstream]['ip'];
|
|
MyOpenWrtUtils::setUpstream($new_upstream_ip);
|
|
}
|
|
|
|
redirect('/routing/');
|
|
}
|
|
|
|
public function GET_routing_ipsets_page() {
|
|
list($error) = $this->input('error');
|
|
|
|
$ip_sets = MyOpenWrtUtils::ipsetListAll();
|
|
$this->tpl->set([
|
|
'sets' => $ip_sets,
|
|
'error' => $error
|
|
]);
|
|
$this->tpl->set_title('Маршрутизация: IP sets');
|
|
$this->tpl->render_page('routing_ipsets_page.twig');
|
|
}
|
|
|
|
public function GET_routing_ipsets_del() {
|
|
list($set, $ip) = $this->input('set, ip');
|
|
self::validateIpsetsInput($set, $ip);
|
|
|
|
$output = MyOpenWrtUtils::ipsetDel($set, $ip);
|
|
|
|
$url = '/routing/ipsets/';
|
|
if ($output != '')
|
|
$url .= '?error='.urlencode($output);
|
|
redirect($url);
|
|
}
|
|
|
|
public function POST_routing_ipsets_add() {
|
|
list($set, $ip) = $this->input('set, ip');
|
|
self::validateIpsetsInput($set, $ip);
|
|
|
|
$output = MyOpenWrtUtils::ipsetAdd($set, $ip);
|
|
|
|
$url = '/routing/ipsets/';
|
|
if ($output != '')
|
|
$url .= '?error='.urlencode($output);
|
|
redirect($url);
|
|
}
|
|
|
|
public function GET_routing_dhcp_page() {
|
|
$overrides = config::get('dhcp_hostname_overrides');
|
|
$leases = MyOpenWrtUtils::getDHCPLeases();
|
|
foreach ($leases as &$lease) {
|
|
if ($lease['hostname'] == '?' && array_key_exists($lease['mac'], $overrides))
|
|
$lease['hostname'] = $overrides[$lease['mac']];
|
|
}
|
|
$this->tpl->set([
|
|
'leases' => $leases
|
|
]);
|
|
$this->tpl->set_title('Маршрутизация: DHCP');
|
|
$this->tpl->render_page('routing_dhcp_page.twig');
|
|
}
|
|
|
|
protected static function getCurrentUpstream() {
|
|
global $config;
|
|
|
|
$default_route = MyOpenWrtUtils::getDefaultRoute();
|
|
if ($default_route == '192.168.88.1')
|
|
$default_route = $config['modems']['mts-il']['ip'];
|
|
$upstream = null;
|
|
foreach ($config['modems'] as $modem_name => $modem_data) {
|
|
if ($default_route == $modem_data['ip']) {
|
|
$upstream = $modem_name;
|
|
break;
|
|
}
|
|
}
|
|
if (is_null($upstream))
|
|
$upstream = $config['routing_default'];
|
|
|
|
return $upstream;
|
|
}
|
|
|
|
protected static function validateIpsetsInput($set, $ip) {
|
|
global $config;
|
|
|
|
if (!isset($config['modems'][$set]))
|
|
redirect('/routing/ipsets/?error='.urlencode('invalid set: '.$set));
|
|
|
|
if (($slashpos = strpos($ip, '/')) !== false)
|
|
$ip = substr($ip, 0, $slashpos);
|
|
|
|
if (!filter_var($ip, FILTER_VALIDATE_IP))
|
|
redirect('/routing/ipsets/?error='.urlencode('invalid ip/network: '.$ip));
|
|
}
|
|
|
|
}
|