From c0e9c9698c382925b2e1f1a9b3b2b615087598c5 Mon Sep 17 00:00:00 2001
From: Rosanny <rosanny.sihombing@hft-stuttgart.de>
Date: Fri, 19 Mar 2021 11:52:13 +0100
Subject: [PATCH] pulling gitlab pages without accessing runners

---
 routes/gitlab.js         |  62 +++++-----------------
 routes/routes-project.js | 110 ++++++++++++++++++---------------------
 2 files changed, 63 insertions(+), 109 deletions(-)

diff --git a/routes/gitlab.js b/routes/gitlab.js
index be92ac5..64b68af 100644
--- a/routes/gitlab.js
+++ b/routes/gitlab.js
@@ -1,9 +1,7 @@
-var env = process.env.NODE_ENV || 'testing'
-const config = require('../config/config')[env]
 const axios = require('axios')
 
 var gitlab = {
-    getRepos: async function(perPage, idAfter) {
+    getProjects: async function(perPage, idAfter) {
         try {
             let projects = await axios({
                 method: 'get',
@@ -11,43 +9,20 @@ var gitlab = {
             })
             let data = projects.data
             let reposArr = []
-            for(let i = 0; i < data.length; i++){
-                // skip template project
-                if (data[i].name == 'template_gitlab_page') {
-                    continue
-                } else if(!data[i].tag_list.includes('website')) {
-                    reposArr.push(data[i])
-                }
-            }
-            return {
-                error: false,
-                data: reposArr}
-        }
-        catch (err) {
-            return {
-                error: true,
-                data: err}
-        }
-    },
-    getPages: async function(perPage, idAfter) {
-        try {
-            let projects = await axios({
-                method: 'get',
-                url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects?visibility=public&pagination=keyset&per_page='+perPage+'&order_by=id&sort=asc&id_after='+idAfter
-            })
-            let data = projects.data
             let pagesArr = []
             for(let i = 0; i < data.length; i++){
                 // skip template project
-                if (data[i].name == 'template_gitlab_page') {
+                if (data[i].name == 'page_basic' || data[i].name == 'generic' || data[i].name == 'simple_raw' || data[i].name == 'simple_thesis') {
                     continue
                 } else if(data[i].tag_list.includes('website')) {
                     pagesArr.push(data[i])
+                } else {
+                    reposArr.push(data[i])
                 }
             }
             return {
                 error: false,
-                data: pagesArr}
+                data: [reposArr, pagesArr]}
         }
         catch (err) {
             return {
@@ -55,26 +30,13 @@ var gitlab = {
                 data: err}
         }
     },
-    getProjectsFromRunners: async function() {
-        try {
-            let runner = await axios({
-                method: 'get',
-                url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/runners/7',
-                headers: { 
-                    'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects
-                }
-            })
-            let runnerProjects = runner.data.projects
-            return {
-                error: false,
-                data: runnerProjects
-            }
-        }
-        catch (err) {
-            return {
-                error: true,
-                data: err}
-        }
+    getLatestPipelineStatus: async function(projectId) {
+        return axios({
+            method: 'get',
+            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'/pipelines'
+        })
+        .then(res => res.data[0].status)
+        .catch(err => console.error(err))
     }
 }
 
diff --git a/routes/routes-project.js b/routes/routes-project.js
index 3bf97e2..1dff948 100644
--- a/routes/routes-project.js
+++ b/routes/routes-project.js
@@ -257,8 +257,8 @@ module.exports = function (app) {
     let firstId = 0
 
     while (isProject == true) {
-      let projects = await gitlab.getRepos(100, firstId)
-      let projectData = projects.data
+      let projects = await gitlab.getProjects(100, firstId)
+      let projectData = projects.data[0]
 
       if (projectData.length == 0) {
         isProject = false
@@ -298,68 +298,60 @@ module.exports = function (app) {
     let isProject = true
     let firstId = 0
 
-    let runnerProjects = await gitlab.getProjectsFromRunners()
-    if(runnerProjects.error) {
-      // error response: to be updated
-      res.status(500).render(lang+'/500', { error: err })
-    } else {
-      let runnerProjectsData = runnerProjects.data
-      let runnerProjectsIds = [] 
-      for(let i = 0; i < runnerProjectsData.length; i++){
-        runnerProjectsIds.push(runnerProjectsData[i].id)
-      }
-
-      while (isProject == true) {
-        let pages = await gitlab.getPages(100, firstId)
-        let pagesData = pages.data
+    while (isProject == true) {
+      let projects = await gitlab.getProjects(100, firstId)
+      let pagesData = projects.data[1]
 
-        if (pagesData.length == 0) {
-          isProject = false
-        } else {
-          for(let i = 0; i < pagesData.length; i++){
-            //  ONLY IF THE PROJECT IS AVAILABLE IN THE RUNNER
-            if(runnerProjectsIds.indexOf(pagesData[i].id) > -1) {
-              // M4_LAB logo for all projects that do not have logo
-              if (pagesData[i].avatar_url == null) {
-                pagesData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/footer/M4_LAB_LOGO_Graustufen.png"
-              }
-              // for all projects that have no description
-              if (pagesData[i].description == "") {
-                pagesData[i].description = "- no description -"
-              }
-              // customize website name
-              if (pagesData[i].name == "Visualization") {
-                pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/visualization"
-              }
-              else if (pagesData[i].name == "IN-Source") {
-                pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/INsource"
-              }
-              else if (pagesData[i].name == "3DS_Visualization_Cesium") {
-                pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/3ds_visualization_cesium"
-              }
-              else {
-                pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/"+pagesData[i].name
-              }
-              // remove 'website' from tag list
-              let index = pagesData[i].tag_list.indexOf('website')
-              if (index > -1) {
-                pagesData[i].tag_list.splice(index, 1)
-              }
+      if (pagesData.length == 0) {
+        isProject = false
+      } else {
+        for(let i = 0; i < pagesData.length; i++){
+          let status = await gitlab.getLatestPipelineStatus(pagesData[i].id)
+          if (status) {
+            // M4_LAB logo for all projects that do not have logo
+            if (pagesData[i].avatar_url == null) {
+              pagesData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/footer/M4_LAB_LOGO_Graustufen.png"
+            }
+            // for all projects that have no description
+            if (pagesData[i].description == "") {
+              pagesData[i].description = "- no description -"
+            }
+            // customized website name
+            if (pagesData[i].name == "Visualization") {
+              //todo: update URL - user? group?
+              pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/visualization"
+            }
+            else if (pagesData[i].name == "IN-Source") {
+              //todo: update URL
+              pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/INsource"
+            }
+            else if (pagesData[i].name == "3DS_Visualization_Cesium") {
+              //todo: update URL
+              pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/3ds_visualization_cesium"
+            }
+            else {
+              //todo: update URL
+              pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/"+pagesData[i].name
+            }
+            // remove 'website' from tag list
+            let index = pagesData[i].tag_list.indexOf('website')
+            if (index > -1) {
+              pagesData[i].tag_list.splice(index, 1)
+            }
 
-              // fill in pagesArr
-              let pages = {
-                logo: pagesData[i].avatar_url,
-                name: pagesData[i].name,
-                weburl: pagesData[i].web_url,
-                desc: pagesData[i].description,
-                keywords: pagesData[i].tag_list
-              }
-              pagesArr.push(pages)
+            // fill in pagesArr
+            let pages = {
+              logo: pagesData[i].avatar_url,
+              name: pagesData[i].name,
+              weburl: pagesData[i].web_url,
+              desc: pagesData[i].description,
+              keywords: pagesData[i].tag_list
             }
+            pagesArr.push(pages)
           }
-          firstId = pagesData[pagesData.length-1].id
         }
-      }        
+        firstId = pagesData[pagesData.length-1].id
+      }
     }
 
     res.render(lang+'/project/pagesList', {
-- 
GitLab