ninegitea/src/Service/giteaService.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;
}
}