nano-tetra-modules/autossh/api/module.php

190 lines
3.9 KiB
PHP
Raw Normal View History

2017-11-16 05:42:22 +00:00
<?php namespace pineapple;
class autossh extends Module
{
public function route()
{
switch ($this->request->action) {
case 'status':
$this->status();
break;
case 'getInfo':
$this->getInfo();
break;
case 'stopAutossh':
$this->stopAutossh();
break;
case 'startAutossh':
$this->startAutossh();
break;
case 'enableAutossh':
$this->enableAutossh();
break;
case 'disableAutossh':
$this->disableAutossh();
break;
case 'readConf':
$this->readConf();
break;
case 'writeConf':
$this->writeConf();
break;
case 'resetConf':
$this->resetConf();
break;
case 'createSshKey':
$this->createSshKey();
break;
case 'deleteKey':
$this->deleteKey();
break;
}
}
// Initial Setup
private function createSshKey()
{
$path = "/root/.ssh/id_rsa.autossh";
exec("ssh-keygen -f $path -t rsa -N ''");
if (file_exists($path)) {
$this->response = array("success" => true);
}
}
private function deleteKey()
{
exec('rm /root/.ssh/id_rsa.autossh*');
$this->response = array("success" => true);
}
private function ensureKnownHosts($args)
{
$cmd = "ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -p $args->port $args->user@$args->host exit";
$this->execBackground($cmd);
}
private function getInfo()
{
$this->response = array(
"success" => true,
"pubKey" => $this->safeRead('/root/.ssh/id_rsa.autossh.pub'),
"knownHosts" => shell_exec("awk '{print $1}' /root/.ssh/known_hosts")
);
}
private function safeRead($file)
{
return file_exists($file) ? file_get_contents($file) : "";
}
// Configuration
private function readConf()
{
$conf = $this->parsedConfig() + array("success" => true);
$this->response = $conf;
}
private function resetConf()
{
exec("cp /rom/etc/config/autossh /etc/config/autossh");
return $this->response = $this->parsedConfig() + array("success" => true);
}
private function parsedConfig()
{
$uciString = "autossh.@autossh[0].ssh";
$contents = $this->uciGet($uciString);
$args = preg_split("/\s|\t|:|@|'/", $contents);
return $this->parseArguments(array_filter($args));
}
private function writeConf()
{
$args = $this->request->data;
$uciString = "autossh.@autossh[0].ssh";
$option = $this->buildOptionString($args);
$this->ensureKnownHosts($args);
$this->uciSet($uciString, $option);
$this->response = array("success" => true);
}
private function buildOptionString($args)
{
return "-i /root/.ssh/id_rsa.autossh -N -T -R $args->rport:localhost:$args->lport $args->user@$args->host -p $args->port";
}
private function parseArguments($args)
{
return array(
"user" => $args[8],
"host" => $args[9],
"port" => (!$args[11]) ? "22" : $args[11],
"rport" => $args[5],
"lport" => $args[7],
);
}
// Management
private function status()
{
$this->response = array(
"success" => true,
"isRunning" => $this->isRunning(),
"isEnabled" => $this->isEnabled()
);
}
private function isRunning()
{
return $this->checkRunning("autossh");
}
private function isEnabled()
{
$rcFile = "/etc/rc.d/S80autossh";
return file_exists($rcFile);
}
private function startAutossh()
{
exec("/etc/init.d/autossh start");
$this->response = array("success" => true);
}
private function stopAutossh()
{
exec("/etc/init.d/autossh stop");
$this->response = array("success" => true);
}
private function enableAutossh()
{
exec("/etc/init.d/autossh enable");
$this->response = array("success" => true);
}
private function disableAutossh()
{
exec("/etc/init.d/autossh disable");
$this->response = array("success" => true);
}
}