More git services
This commit is contained in:
parent
b7b2ab744a
commit
96fd5c6a7b
|
@ -1,11 +1,31 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use OTPHP\TOTP;
|
||||||
|
|
||||||
$DOMAIN = 'machines.frogeye.fr';
|
$DOMAIN = 'machines.frogeye.fr';
|
||||||
$TOTP = new TOTP(
|
$TOTP = new TOTP(
|
||||||
'newcommer@machines.frogeye.fr', // The label (string)
|
'newcommer@machines.frogeye.fr', // The label (string)
|
||||||
'EUPJMTU6M7XPHG5P', // The secret encoded in base 32 (string)
|
'CHANGEMECHANGEME', // The secret encoded in base 32 (string)
|
||||||
10, // The period (int)
|
10, // The period (int)
|
||||||
'sha512', // The digest algorithm (string)
|
'sha512', // The digest algorithm (string)
|
||||||
8 // The number of digits (int)
|
8 // The number of digits (int)
|
||||||
);
|
);
|
||||||
$TOTP->setIssuer('Machines Frogeye');
|
$TOTP->setIssuer('Machines Frogeye');
|
||||||
|
|
||||||
|
$GIT_APIS = array(
|
||||||
|
'github' => array(
|
||||||
|
'api' => 'https://api.github.com',
|
||||||
|
'token' => 'CHANGEME'
|
||||||
|
),
|
||||||
|
'gogs' => array(
|
||||||
|
'api' => 'https://try.gogs.io/api/v1',
|
||||||
|
'token' => 'CHANGEME'
|
||||||
|
),
|
||||||
|
'gitlab' => array(
|
||||||
|
'api' => 'https://gitlab.com/api/v3',
|
||||||
|
'token' => 'CHANGEME',
|
||||||
|
'authHeader' => 'PRIVATE-TOKEN: ',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
96
index.php
96
index.php
|
@ -313,58 +313,62 @@ function argAssert($arg, $data, $args) {
|
||||||
|
|
||||||
// Hooks
|
// Hooks
|
||||||
//
|
//
|
||||||
function gogsRequest($route, $meth = 'GET', $data = null) {
|
|
||||||
global $GOGS_API;
|
function updateGitKeys($api, $keys) {
|
||||||
global $GOGS_TOKEN;
|
function apiRequest($api, $route, $meth = 'GET', $data = null) {
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
curl_setopt($ch, CURLOPT_URL, $GOGS_API.'/'.$route);
|
curl_setopt($ch, CURLOPT_URL, $api['api'].'/'.$route);
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: token '.$GOGS_TOKEN));
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $meth);
|
||||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $meth);
|
curl_setopt($ch, CURLOPT_USERAGENT, 'Machines Frogeye');
|
||||||
if ($data) {
|
if ($data) {
|
||||||
$textdata = '';
|
$dataStr = json_encode($data);
|
||||||
foreach ($data as $key => $value) {
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataStr);
|
||||||
$textdata .= '&'.$key.'='.urlencode($value);
|
} else {
|
||||||
|
$dataStr = '';
|
||||||
}
|
}
|
||||||
curl_setopt($ch, CURLOPT_POST, count($data));
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, ltrim($textdata, '&'));
|
(isset($api['authHeader']) ? $api['authHeader'] : 'Authorization: token').' '.$api['token'],
|
||||||
|
'Content-Type: application/json',
|
||||||
|
));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$raw = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
return json_decode($raw);
|
||||||
}
|
}
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
$raw = curl_exec($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
return json_decode($raw);
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateGogsKeys($keys) {
|
|
||||||
global $GOGS_API;
|
|
||||||
global $GOGS_TOKEN;
|
|
||||||
global $SSH_KEY_REGEX;
|
global $SSH_KEY_REGEX;
|
||||||
if (isset($GOGS_API) && isset($GOGS_TOKEN)) {
|
$existing = apiRequest($api, 'user/keys');
|
||||||
$existing = gogsRequest('user/keys');
|
if ($existing === null) {
|
||||||
$toDelete = [];
|
return 1;
|
||||||
foreach ($existing as $ekey) {
|
}
|
||||||
$toDelete[$ekey->id] = $ekey->key;
|
$toDelete = [];
|
||||||
}
|
foreach ($existing as $ekey) {
|
||||||
|
$toDelete[$ekey->id] = $ekey->key;
|
||||||
foreach (explode("\n", $keys) as $key) {
|
}
|
||||||
$found = false;
|
|
||||||
foreach ($toDelete as $id => $ekey) {
|
foreach (explode("\n", $keys) as $key) {
|
||||||
if ($key == $ekey) {
|
if ($key == '') {
|
||||||
unset($toDelete[$id]);
|
continue;
|
||||||
$found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$found) {
|
|
||||||
gogsRequest('user/keys', 'POST', array(
|
|
||||||
"title" => ltrim(preg_replace($SSH_KEY_REGEX, '', $key)),
|
|
||||||
"key" => $key
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$found = false;
|
||||||
foreach ($toDelete as $id => $ekey) {
|
foreach ($toDelete as $id => $ekey) {
|
||||||
gogsRequest('user/keys/'.$id, 'DELETE');
|
if (strpos($key, $ekey) !== false) {
|
||||||
|
unset($toDelete[$id]);
|
||||||
|
$found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (!$found) {
|
||||||
|
apiRequest($api, 'user/keys', 'POST', array(
|
||||||
|
"title" => ltrim(preg_replace($SSH_KEY_REGEX, '', $key)),
|
||||||
|
"key" => $key
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($toDelete as $id => $ekey) {
|
||||||
|
apiRequest($api, 'user/keys/'.$id, 'DELETE');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,8 +574,8 @@ case 'akey':
|
||||||
file_put_contents('akey/'.$networkName.'.authorized_keys', getKeys($networkName ? $network : null));
|
file_put_contents('akey/'.$networkName.'.authorized_keys', getKeys($networkName ? $network : null));
|
||||||
file_put_contents('akey/'.$networkName.'.authorized_keys.sha256', $sign);
|
file_put_contents('akey/'.$networkName.'.authorized_keys.sha256', $sign);
|
||||||
|
|
||||||
if ($networkName == 'gogs') {
|
if (array_key_exists($networkName, $GIT_APIS)) {
|
||||||
updateGogsKeys(getKeys($network));
|
updateGitKeys($GIT_APIS[$networkName], getKeys($network));
|
||||||
}
|
}
|
||||||
|
|
||||||
http_response_code(201);
|
http_response_code(201);
|
||||||
|
|
Reference in a new issue