ninegitea/src/ninegitea-1.0/src/Service/giteaService.php

280 lines
10 KiB
PHP

<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class giteaService
{
private $params;
private $session;
private $url;
public function __construct(SessionInterface $session,ParameterBagInterface $params,$giteaUrl)
{
$this->params = $params;
$this->url = $giteaUrl."/api/v1";
$this->session = $session;
}
public function gettoken() {
$apiurl = $this->params->get("oauthTokenurl");
$query= [
"client_id" => $this->params->get("oauthClientid"),
"client_secret" => $this->params->get("oauthClientsecret"),
"code" => $this->session->get("giteacode"),
"grant_type" => "authorization_code",
"redirect_uri" => $this->session->get("giteacallback")
];
$body = \Unirest\Request\Body::json($query);
$response=$this->api("POST",$apiurl,$body);
if(!$response||$response->code!="200") return false;
else {
$this->session->set('giteatoken', $response->body->access_token);
return $response->body->access_token;
}
}
public function getuser() {
$apiurl = $this->url."/user";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getuserprofil($id) {
$apiurl = $this->url."/users/$id";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
dump($response);
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getorga($id) {
$apiurl = $this->url."/orgs/$id";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getorgateams($id) {
$apiurl = $this->url."/orgs/$id/teams";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getteammembers($id) {
$apiurl = $this->url."/teams/$id/members";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getrepos() {
$apiurl = $this->url."/user/repos";
$page=1;
$limit=10;
$repos=[];
do {
$query=["page"=>$page,"limit"=>$limit];
$response=$this->api("GET",$apiurl,$query,$this->session->get("giteatoken"));
$this->session->get("giteatoken");
if(!$response||$response->code!="200") return false;
else {
$page=$page+1;
$repos=array_merge($repos,$response->body);
}
} while(!empty($response->body));
return $repos;
}
public function getnotifications() {
$apiurl = $this->url."/notifications?all=true";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getrepo($id) {
$apiurl = $this->url."/repositories/$id";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getrepocontents($owner,$name) {
$apiurl = $this->url."/repos/$owner/$name/contents";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getreponotifications($owner,$name) {
$apiurl = $this->url."/repos/$owner/$name/notifications";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getlabels($owner,$name) {
$apiurl = $this->url."/repos/$owner/$name/labels";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getlabel($owner,$name,$id) {
$apiurl = $this->url."/repos/$owner/$name/labels/$id";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getcollaborators($owner,$name) {
$apiurl = $this->url."/repos/$owner/$name/collaborators";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getcollaborator($owner,$name,$id) {
$apiurl = $this->url."/repos/$owner/$name/collaborators/$id";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getmilestones($owner,$name) {
$apiurl = $this->url."/repos/$owner/$name/milestones";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getissues($owner,$name) {
$apiurl = $this->url."/repos/$owner/$name/issues?state=open";
$page=1;
$limit=20;
$issues=[];
do {
$query=["page"=>$page,"limit"=>$limit];
$response=$this->api("GET",$apiurl,$query,$this->session->get("giteatoken"));
$this->session->get("giteatoken");
if(!$response||$response->code!="200") return false;
else {
$page=$page+1;
$issues=array_merge($issues,$response->body);
}
} while(!empty($response->body));
return $issues;
}
public function getissue($owner,$name,$index) {
$apiurl = $this->url."/repos/$owner/$name/issues/$index";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function getissuelabels($owner,$name,$index) {
$apiurl = $this->url."/repos/$owner/$name/issues/$index/labels";
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function deleteissuelabel($owner,$name,$index,$label) {
$apiurl = $this->url."/repos/$owner/$name/issues/$index/labels/$label";
$response=$this->api("DELETE",$apiurl,null,$this->session->get("giteatoken"));
if(!$response||$response->code!="204") return false;
else return true;
}
public function putissuelabels($owner,$name,$index,$labels) {
$apiurl = $this->url."/repos/$owner/$name/issues/$index/labels";
$query= ["labels" => $labels];
$body = \Unirest\Request\Body::json($query);
$response=$this->api("POST",$apiurl,$body,$this->session->get("giteatoken"));
if(!$response||$response->code!="200") return false;
else return $response->body;
}
public function patchissue($owner,$name,$index,$patchs) {
$apiurl = $this->url."/repos/$owner/$name/issues/$index";
$body = \Unirest\Request\Body::json($patchs);
$response=$this->api("PATCH",$apiurl,$body,$this->session->get("giteatoken"));
dump($response);
if(!$response||$response->code!="201") return false;
else return $response->body;
}
private function api($method,$url,$query,$token=null) {
// Entete
$headers = [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
];
if($token) $headers["Authorization"]="token ".$token;
// Paramétrage unirest
\Unirest\Request::verifyPeer(false);
\Unirest\Request::verifyHost(false);
\Unirest\Request::timeout(5);
// Déclaration du proxy
$proxyUse = $this->params->get("proxyUse");
if($proxyUse) {
$proxyHost = $this->params->get("proxyHost");
$proxyPort = $this->params->get("proxyPort");
\Unirest\Request::proxy($proxyHost, $proxyPort, CURLPROXY_HTTP, true);
}
$response = false;
switch($method) {
case "POST":
try{
$response = \Unirest\Request::post($url,$headers,$query);
}
catch (\Exception $e) {
return false;
}
break;
case "GET":
try{
$response = \Unirest\Request::get($url,$headers,$query);
}
catch (\Exception $e) {
return false;
}
break;
case "DELETE":
try{
$response = \Unirest\Request::delete($url,$headers,$query);
}
catch (\Exception $e) {
return false;
}
break;
case "PATCH":
try{
$response = \Unirest\Request::patch($url,$headers,$query);
}
catch (\Exception $e) {
return false;
}
break;
}
return $response;
}
}