420 lines
16 KiB
PHP
420 lines
16 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;
|
|
private $giteaUrl;
|
|
|
|
public function __construct(SessionInterface $session,ParameterBagInterface $params,$giteaUrl)
|
|
{
|
|
$this->params = $params;
|
|
$this->giteaUrl = $giteaUrl;
|
|
$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);
|
|
$this->session->set('gitearefreshtoken', $response->body->refresh_token);
|
|
|
|
$date = new \DateTime();
|
|
$date->modify('+'.$response->body->expires_in.' seconds');
|
|
$this->session->set('gitearefreshdate',$date);
|
|
|
|
return $response->body->access_token;
|
|
}
|
|
}
|
|
|
|
public function refreshtoken() {
|
|
$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" => "refresh_token",
|
|
"refresh_token" => $this->session->get('gitearefreshtoken'),
|
|
];
|
|
$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);
|
|
$this->session->set('gitearefreshtoken', $response->body->refresh_token);
|
|
|
|
$date = new \DateTime();
|
|
$date->modify('+'.$response->body->expires_in.' seconds');
|
|
$this->session->set('gitearefreshdate',$date);
|
|
|
|
return $response->body->access_token;
|
|
}
|
|
}
|
|
|
|
public function needrefresh() {
|
|
$date = new \DateTime();
|
|
|
|
// On refresh 15 minutes avant le terme
|
|
$refreshdate=clone $this->session->get('gitearefreshdate');
|
|
$refreshdate->modify('-900 seconds');
|
|
|
|
if($date>$refreshdate) return $this->refreshtoken();
|
|
else return $this->session->get('giteatoken');
|
|
}
|
|
|
|
public function deletetoken($username) {
|
|
$apiurl=$this->url."/users/".$username."/tokens/".$this->session->get("giteatoken");
|
|
$response=$this->api("DELETE",$apiurl,null,$this->session->get("giteatoken"));
|
|
}
|
|
|
|
public function markdown($context,$mode,$body) {
|
|
$apiurl = $this->url."/markdown";
|
|
$query= [
|
|
"Context" => $context,
|
|
"Mode" => $mode,
|
|
"Text" => $body,
|
|
"Wiki" => false,
|
|
];
|
|
|
|
$body = \Unirest\Request\Body::json($query);
|
|
|
|
|
|
$response=$this->api("POST",$apiurl,$body,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return false;
|
|
else {
|
|
//$response->body= str_replace($this->giteaUrl,$this->giteaUrl.$context,$response->body);
|
|
return $response->body;
|
|
}
|
|
}
|
|
|
|
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"));
|
|
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;
|
|
$label01=$response->body;
|
|
|
|
$apiurl = $this->url."/orgs/$owner/labels";
|
|
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return $label01;
|
|
$label02=$response->body;
|
|
|
|
return array_merge($label01, $label02);
|
|
}
|
|
|
|
public function getorglabels($owner) {
|
|
$apiurl = $this->url."/orgs/$owner/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") {
|
|
$apiurl = $this->url."/orgs/$owner/labels/$id";
|
|
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return false;
|
|
else return $response->body;
|
|
}
|
|
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,$state="?state=open") {
|
|
$apiurl = $this->url."/repos/$owner/$name/milestones".$state;
|
|
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return false;
|
|
else return $response->body;
|
|
}
|
|
|
|
public function getmilestone($owner,$name,$id) {
|
|
$apiurl = $this->url."/repos/$owner/$name/milestones/".$id;
|
|
$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,$state="?state=open") {
|
|
$apiurl = $this->url."/repos/$owner/$name/issues".$state."&type=issues";
|
|
|
|
$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"));
|
|
if(!$response||$response->code!="201") return false;
|
|
else return $response->body;
|
|
}
|
|
|
|
public function getissuecomments($owner,$name,$index) {
|
|
$apiurl = $this->url."/repos/$owner/$name/issues/$index/comments";
|
|
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return false;
|
|
else return $response->body;
|
|
}
|
|
|
|
public function getissuetimelines($owner,$name,$index) {
|
|
$apiurl = $this->url."/repos/$owner/$name/issues/$index/timeline";
|
|
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return false;
|
|
else return $response->body;
|
|
}
|
|
|
|
public function getissueblocks($owner,$name,$index) {
|
|
$apiurl = $this->url."/repos/$owner/$name/issues/$index/blocks";
|
|
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
|
if(!$response||$response->code!="200") return false;
|
|
else return $response->body;
|
|
}
|
|
|
|
public function postissueblocks($owner,$name,$index,$toblock) {
|
|
$apiurl = $this->url."/repos/$owner/$name/issues/$index/blocks";
|
|
$query= ["index" => $toblock,"owner" => $owner, "repo" => $name];
|
|
$body = \Unirest\Request\Body::json($query);
|
|
$body=str_replace('"'.$toblock.'"',$toblock,$body);
|
|
$response=$this->api("POST",$apiurl,$body,$this->session->get("giteatoken"));
|
|
if(!$response||($response->code!="200"&&$response->code!="201")) return false;
|
|
else return $response->body;
|
|
}
|
|
|
|
public function deleteissueblocks($owner,$name,$index,$toblock) {
|
|
$apiurl = $this->url."/repos/$owner/$name/issues/$index/blocks";
|
|
$query= ["index" => $toblock,"owner" => $owner, "repo" => $name];
|
|
$body = \Unirest\Request\Body::json($query);
|
|
$body=str_replace('"'.$toblock.'"',$toblock,$body);
|
|
$response=$this->api("DELETE",$apiurl,$body,$this->session->get("giteatoken"));
|
|
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) {
|
|
$token=$this->needrefresh();
|
|
$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;
|
|
}
|
|
}
|