Newer
Older
<?php
class wireguard
{
public $db;
public $device;
public function __construct($device)
{
$this->device = $device;
$this->db = database::getconnection();
}
public function getCIDR()
{
$cmd = "sudo cat /etc/wireguard/$this->device.conf | head -n 2";
$output = shell_exec($cmd);
$lines = explode("\n", $output);
if (isset($lines[1])) {
$line = explode("=", $lines[1]);
return isset($line[1]) ? trim($line[1]) : null;
}
return null;
}
$ip_net = new ipNetwork($this->getCIDR(),$this->device);
$next_ip = $ip_net->getNextIp();
$result = null;
$cmd = "sudo wg set $this->device peer $public allowed-ips $next_ip/32";
system($cmd,$result);
if($result == 0){
$res = $ip_net->allocateIp($next_ip,$email,$public);
return $res;
}else{
return false;
}
}
public function removepeer($public)
{
$cmd = "sudo wg set $this->device peer $public remove";
$result = 0;
if($result == 0){
$remove = new ipNetwork($this->getCIDR(),$this->device);
$remove->deallocate($public);
return true;
}
else{
return false;
}
public function getPeers()
{
$cmd = "sudo wg show wg0";
$output = trim(shell_exec($cmd));
$result = explode(PHP_EOL, $output);
$interface_out = array_slice($result, 0, 4);
$peer_out = array_slice($result, 5);
$peer_count = -1;
$peer = [];
$interface = [];
foreach ($interface_out as $value) {
$value = trim($value);
$data = explode(": ", $value);
$interface[trim($data[0])] = trim($data[1]);
}
foreach ($peer_out as $value) {
$value = trim($value);
if (!empty($value)) {
if (startsWith($value, "peer:")) {
$peer_count++;
}
$data = explode(": ", $value);
$peer[$peer_count][$data[0]] = $data[1];
}
}
return [
"interface" => $interface,
"peers" => $peer
];
public function getPeer($public)
{
$cmd = "sudo wg show $this->device | grep -A4 $public";
$output = trim(shell_exec($cmd));
$result = explode(PHP_EOL, $output);
$peer = [];
$peer_count = 0;
foreach ($result as $value) {
if (!empty($value)) {
$value = trim($value);
if (startsWith($value, "peer:")) {
$peer_count++;
if ($peer_count > 1) {
break;
}
}