121 lines
2.7 KiB
PHP
121 lines
2.7 KiB
PHP
<?php
|
|
|
|
class Controller_api_deploy extends Crunchbutton_Controller_RestAccount {
|
|
|
|
public function init() {
|
|
|
|
if (!c::admin()->permission()->check(['global', 'server-deploy-admin', 'server-deploy'])) {
|
|
header('HTTP/1.1 401 Unauthorized');
|
|
exit;
|
|
}
|
|
|
|
switch (c::getPagePiece(2)) {
|
|
|
|
case 'servers':
|
|
$r = Deploy_Server::q('select * from deploy_server where active="1" order by name');
|
|
break;
|
|
|
|
case 'server':
|
|
$server = Deploy_Server::o(c::getPagePiece(3));
|
|
if (!$server->id_deploy_server) {
|
|
$server = Deploy_Server::byName(c::getPagePiece(3));
|
|
}
|
|
if (!$server->id_deploy_server) {
|
|
header('HTTP/1.0 404 Not Found');
|
|
exit;
|
|
}
|
|
|
|
switch (c::getPagePiece(4)) {
|
|
case 'commits':
|
|
$r = $server->commits();
|
|
break;
|
|
|
|
case 'versions':
|
|
$r = $server->versions();
|
|
if (!$r || !$r->count()) {
|
|
$r = [];
|
|
}
|
|
break;
|
|
default:
|
|
$r = $server;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 'versions':
|
|
$r = Deploy_Version::q('select * from deploy_version order by date desc limit 10');
|
|
break;
|
|
|
|
case 'version':
|
|
if ($this->method() == 'post' || $this->method() == 'delete') {
|
|
if (!c::admin()->permission()->check(['server-deploy-admin'])) {
|
|
header('HTTP/1.1 401 Unauthorized');
|
|
exit;
|
|
}
|
|
|
|
if ($this->method() == 'post') {
|
|
|
|
$server = Deploy_Server::o($this->request()['id_deploy_server']);
|
|
if (!$server->id_deploy_server) {
|
|
$server = Deploy_Server::byName($this->request()['id_deploy_server']);
|
|
}
|
|
if (!$server->id_deploy_server) {
|
|
header('HTTP/1.0 404 Not Found');
|
|
exit;
|
|
}
|
|
|
|
$date = $this->request()['date'];
|
|
$version = $this->request()['version'];
|
|
|
|
$d = strtotime($date);
|
|
if ($d < time()) {
|
|
$date = date('Y-m-d H:i:s');
|
|
}
|
|
|
|
if ($version == 'master') {
|
|
$version = $server->commits()[0]['commit'];
|
|
}
|
|
|
|
if ($server->tag) {
|
|
$server->createTag($version);
|
|
}
|
|
|
|
$r = new Deploy_Version([
|
|
'date' => $date,
|
|
'version' => $version,
|
|
'id_deploy_server' => $server->id_deploy_server,
|
|
'status' => 'new',
|
|
'id_admin' => c::admin()->id_admin
|
|
]);
|
|
$r->save();
|
|
|
|
} else {
|
|
$d = Deploy_Version::o(c::getPagePiece(3));
|
|
if (!$d->id_deploy_version) {
|
|
header('HTTP/1.0 404 Not Found');
|
|
exit;
|
|
} elseif ($d->status != 'new') {
|
|
header('HTTP/1.0 406 Not Acceptable');
|
|
exit;
|
|
}
|
|
$d->status = 'canceled';
|
|
$d->save();
|
|
|
|
$r = $d;
|
|
}
|
|
|
|
} else {
|
|
$r = Deploy_Version::o(c::getPagePiece(3));
|
|
}
|
|
break;
|
|
}
|
|
|
|
if ($r && method_exists($r, 'json')) {
|
|
echo $r->json();
|
|
} else {
|
|
echo json_encode($r);
|
|
}
|
|
exit;
|
|
|
|
}
|
|
} |