diff --git a/public_html/api/index.php b/public_html/api/index.php index 7f2b6599a7143bb4203b2747db1750ebe490be45..4ded2b2a627edcaa53e202ee41d17e94d9b2aebb 100644 --- a/public_html/api/index.php +++ b/public_html/api/index.php @@ -1,11 +1,16 @@ <?php -/* - * IDEA TO REALIZE: +/* ====================================================================== * - * /api/v1/projects/ - * /api/v1/project/[Name]/build/[name-of-branch]] - * /api/v1/project/[Name]/accept/[phase] + * A P I F O R C I S E R V E R * + * GET /api/v1/projects/ + * GET /api/v1/project/[ID]/build/[name-of-branch] + * POST /api/v1/project/[ID]/build/[name-of-branch] + * get /api/v1/project/[ID]/phases + * + * ---------------------------------------------------------------------- + * 2020-06-16 v0.9 <axel.hahn@iml.unibe.ch> + * ====================================================================== */ $bDebug=false; @@ -171,6 +176,7 @@ $sPrjId = isset($aUriSplit[2]) ? $aUriSplit[2] : false; $sPrjAction = isset($aUriSplit[3]) ? $aUriSplit[3] : false; $sParam4 = isset($aUriSplit[4]) ? $aUriSplit[4] : false; + $sParam5 = isset($aUriSplit[5]) ? $aUriSplit[5] : false; $sMethod = $_SERVER['REQUEST_METHOD']; _wd('$sPrjId = '.$sPrjId); _wd('$sPrjAction = '.$sPrjAction); @@ -205,14 +211,12 @@ switch($sPrjAction){ case "build": if ($sParam4){ - $aResult=$oProject->setBranchname("origin/".$sParam4); - // echo "branch was set.\n"; - + $aResult=$oProject->setBranchname($sParam4 . ($sParam5 ? '/'.$sParam5 : '')); } $sBranchname=$oProject->getBranchname(); $aRepodata = $oProject->getRemoteBranches(true); if(!isset($aRepodata[$sBranchname])){ - _quit('ERROR: branch not found '.$sBranchname); + _quit('ERROR: branch not found: '.$sBranchname, 404); } @@ -228,10 +232,11 @@ if ($sMethod==='POST'){ echo "starting build() ..."; flush(); - die("ABORT"); echo $oProject->build(); } - + break;; + case "phases": + _done($oProject->getAllPhaseInfos()); break;; default: _quit('ERROR: Wrong action ['.$sApiItem.'].'); diff --git a/shellscripts/api-client.sh b/shellscripts/api-client.sh index 0c1700c3f1d4cccc6bc35778d8adf2b35a391bf2..25a881567b012a52f398fffdd99adeb70463dd4e 100644 --- a/shellscripts/api-client.sh +++ b/shellscripts/api-client.sh @@ -6,6 +6,11 @@ # This is a demo api client # # ---------------------------------------------------------------------- +# +# my projects and secrets +# DATA:ci-webgui:cOiScVAElvcJKmJ1eGrKXZvv6ZROlSgZ9VpSVFK1uxZI8J5ITXuZZb8jIYobuoAB +# +# ---------------------------------------------------------------------- # 2020-06-12 first lines <axel.hahn@iml.unibe.ch> # ====================================================================== @@ -13,78 +18,50 @@ # CONFIG # ---------------------------------------------------------------------- - -myProject=ci-webgui -secret="cOiScVAElvcJKmJ1eGrKXZvv6ZROlSgZ9VpSVFK1uxZI8J5ITXuZZb8jIYobuoAB" - -myAction=build -myBranch= -# myBranch=helloworld -# myBranch="task3869-api" apiHost="http://dev.ci.iml.unibe.ch:8002" -apiBaseUrl="/api/v1" -apiMethod=GET - line="----------------------------------------------------------------------" + # ---------------------------------------------------------------------- # FUNCTIONS # ---------------------------------------------------------------------- function showhelp(){ echo " - SYNTAX - projects show projects - list list branches - info [branch] show infos about what happens on build - build [branch] build + projects show projects -PARAMETERS - branch name of branch (optional), i.e. feature-123 (without "origin/") -" -} + buildinfo [project] [branch] + show infos about what happens on build + build [project] [branch] + execute build -# ---------------------------------------------------------------------- -# MAIN -# ---------------------------------------------------------------------- + phases [project] + show status of phases -if [ $# -lt 1 ]; then - showhelp - exit 1 -fi +PARAMETERS: + project project id in ci; see output or projects + branch name of branch (optional), i.e. origin/feature-123 +" +} -# ---------------------------------------------------------------------- -# REQ #1 - list project ids -# ---------------------------------------------------------------------- +function makeRequest(){ -echo "[1] GET Request ${apiHost}${apiBaseUrl}/projects" -echo $line -curl -i \ - -H "Accept: application/json" -H "Content-Type: application/json" \ - -H "Date: ${apiTS}" \ - -H "Authorization: demo-bash-client:${myHash}" \ - -X $apiMethod \ - ${apiHost}${apiBaseUrl}/projects -echo -echo $line -echo -echo + local apiMethod=$1 + local apiRequest=$2 + local secret=$3 -# ---------------------------------------------------------------------- -# REQ #2 - build ci webgui -# ---------------------------------------------------------------------- + echo $apiMethod ${apiHost}${apiRequest} + echo $line -# --- build url -apiRequest="${apiBaseUrl}/project/${myProject}/${myAction}" -test -z $myBranch || apiRequest="${apiRequest}/${myBranch}" + if [ ! -z $secret ]; then -# --- date in http format -LANG=en_EN -# export TZ=GMT -apiTS=`date "+%a, %d %b %Y %H:%M:%S %Z"` + # --- date in http format + LANG=en_EN + # export TZ=GMT + apiTS=`date "+%a, %d %b %Y %H:%M:%S %Z"` # --- generate data to hash: method + uri + timestamp; delimited with line break @@ -93,25 +70,63 @@ ${apiRequest} ${apiTS} " -# generate hash - split in 2 commands (piping "cut" sends additional line break) -myHash=`echo -n "$data" | openssl sha1 -hmac "${secret}" | cut -f 2 -d" "` -myHash=`echo -n "$myHash" | base64` + # generate hash - split in 2 commands (piping "cut" sends additional line break) + myHash=`echo -n "$data" | openssl sha1 -hmac "${secret}" | cut -f 2 -d" "` + myHash=`echo -n "$myHash" | base64` + + curl -i \ + -H "Accept: application/json" -H "Content-Type: application/json" \ + -H "Date: ${apiTS}" \ + -H "Authorization: demo-bash-client:${myHash}" \ + -X $apiMethod \ + ${apiHost}${apiRequest} + else + curl -i \ + -H "Accept: application/json" -H "Content-Type: application/json" \ + -X $apiMethod \ + ${apiHost}${apiRequest} + fi +} -# --- send htp request -echo "[2] $apiMethod Request ${apiHost}${apiRequest}" -echo $line +# ---------------------------------------------------------------------- +# MAIN +# ---------------------------------------------------------------------- -curl -i \ - -H "Accept: application/json" -H "Content-Type: application/json" \ - -H "Date: ${apiTS}" \ - -H "Authorization: demo-bash-client:${myHash}" \ - -X $apiMethod \ - ${apiHost}${apiRequest} +if [ $# -lt 1 ]; then + showhelp + exit 1 +fi -rc=$? +myProject=$2 +secret=`grep "^#\ DATA:${myProject}:" $0 | cut -f 3- -d ":"` + +case $1 in + + # --- projects is an access without autorization + "projects") + makeRequest GET /api/v1/projects + ;; + + # --- access WITH autorization only + "build") + makeRequest POST /api/v1/project/$myProject/build/$3 "$secret" + ;; + "buildinfo") + makeRequest GET /api/v1/project/$myProject/build/$3 "$secret" + ;; + "phases") + makeRequest GET /api/v1/project/$myProject/phases "$secret" + ;; + *) + echo "ERROR: unknown parameter $1" + exit 2 +esac + +rc=$? echo echo $line -echo rc = $rc +echo rc=$rc +exit $rc \ No newline at end of file