Commit 34ee1ffa authored by Rosanny Sihombing's avatar Rosanny Sihombing
Browse files

clean up codes

parent bd468001
import express from 'express' import express from 'express'
import path from 'path' import path from 'path'
import passport from 'passport'
import morgan from 'morgan' import morgan from 'morgan'
import cookieParser from 'cookie-parser' import cookieParser from 'cookie-parser'
import bodyParser from 'body-parser' import bodyParser from 'body-parser'
import session from 'express-session' import helmet from 'helmet'
import flash from 'express-flash'
import fileUpload from 'express-fileupload'
//import helmet from 'helmet'
import compression from 'compression' import compression from 'compression'
var env = process.env.NODE_ENV || 'testing' const env = process.env.NODE_ENV ?? 'development'
const config = require('./config/config')[env] const config = require('./config/config')[env]
const lang = 'DE'; const lang = 'DE'
var app = express() const app = express()
app.set('port', config.app.port) app.set('port', config.app.port)
app.set('views', __dirname + '/views') app.set('views', path.join(__dirname, '/views'))
app.set('view engine', 'pug') app.set('view engine', 'pug')
//app.use(helmet()) // app.use(helmet())
app.use(compression()) app.use(compression())
app.use(morgan('combined')) app.use(morgan('combined'))
app.use(cookieParser()) app.use(cookieParser())
app.use(bodyParser.json()) app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: false})) app.use(bodyParser.urlencoded({ extended: false }))
app.use(express.static(path.join(__dirname, 'public'))) app.use(express.static(path.join(__dirname, 'public')))
app.use(session(
{ app.use(
resave: true, helmet.contentSecurityPolicy({
saveUninitialized: true, useDefaults: true,
//secret: config.app.sessionSecret directives: {
secret: 'thisisasecret-thisisasecret-thisisasecret' 'font-src': ["'self'", 'https://use.fontawesome.com'],
} 'img-src': ["'self'", 'https://transfer.hft-stuttgart.de'],
)) 'script-src': ["'self'", 'https://code.jquery.com/jquery-3.3.1.min.js', 'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js', 'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js'],
app.use(passport.initialize()) 'style-src': ["'self'", 'https://use.fontawesome.com/releases/v5.8.2/css/all.css'],
app.use(passport.session()) 'frame-src': ["'self'"]
app.use(flash()) },
app.use((req, res, next) => { reportOnly: true
res.locals.errors = req.flash("error") })
res.locals.successes = req.flash("success") )
next() app.use(compression())
}) app.use(morgan('combined'))
// enable files upload app.use(cookieParser())
app.use(fileUpload({ app.use(bodyParser.json())
createParentPath: true, app.use(bodyParser.urlencoded({ extended: false }))
limits: { app.use(express.static(path.join(__dirname, 'public')))
fileSize: 1000000 // 1 MB max. file size
}
}))
// caching disabled for every route // caching disabled for every route
// NOTE: Works in Firefox and Opera. Does not work in Edge // NOTE: Works in Firefox and Opera. Does not work in Edge
app.use(function(req, res, next) { app.use(function (req, res, next) {
res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0') res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0')
next() next()
}) })
require('./routes/project')(app, lang) require('./routes/project')(app)
// Handle 404 // Handle 404
app.use(function (req:any, res:any) { app.use(function (req: any, res: any) {
res.status(404).render(lang+'/404') res.status(404).render(lang + '/404')
}) })
// Handle 500 - any server error // Handle 500 - any server error
app.use(function (err:any, req:any, res:any, next:any) { app.use(function (err: any, req: any, res: any, next: any) {
console.error(err.stack) console.error(err.stack)
res.status(500).render(lang+'/500', { res.status(500).render(lang + '/500', {
error: err error: err
}) })
}) })
app.listen(app.get('port'), function () { app.listen(app.get('port'), function () {
console.log('Project Page listening on port ' + app.get('port')) console.log('Project Page listening on port ' + String(app.get('port')))
console.log(__dirname) })
})
\ No newline at end of file
...@@ -2,34 +2,34 @@ module.exports = { ...@@ -2,34 +2,34 @@ module.exports = {
development: { development: {
app: { app: {
name: 'Project Page Manager', name: 'Project Page Manager',
port: process.env.PORT || 8888, port: process.env.PORT ?? 8888,
sessionSecret: 'thisisasecret-thisisasecret-thisisasecret' sessionSecret: 'thisisasecret-thisisasecret-thisisasecret'
}, },
passport: { passport: {
strategy: 'saml', strategy: 'saml',
saml: { saml: {
path: process.env.SAML_PATH || '/saml/SSO', path: process.env.SAML_PATH ?? '/saml/SSO',
entryPoint: process.env.SAML_ENTRY_POINT || 'saml entry URL', entryPoint: process.env.SAML_ENTRY_POINT ?? 'saml entry URL',
issuer: 'saml issuer URL', issuer: 'saml issuer URL',
logoutUrl: 'saml Logout URL' logoutUrl: 'saml Logout URL'
} }
}, },
database: { database: {
user: 'usernamedb', // DB username user: 'usernamedb', // DB username
password: 'passworddb', // DB password password: 'passworddb', // DB password
port: 3306, // MySQL port port: 3306, // MySQL port
dbUser: 'userdb', // User DB dbUser: 'userdb', // User DB
host_project: 'localhost', // local host_project: 'localhost', // local
dbProject: 'projectdb' // Project DB dbProject: 'projectdb' // Project DB
}, },
mailer: { mailer: {
host: 'mailhost', // hostname host: 'mailhost', // hostname
secureConnection: false, // TLS requires secureConnection to be false secureConnection: false, // TLS requires secureConnection to be false
port: 587, // port for secure SMTP port: 587, // port for secure SMTP
authUser: 'usernamemail', authUser: 'usernamemail',
authPass: 'passwordmail', authPass: 'passwordmail',
tlsCiphers: 'SSLv3', tlsCiphers: 'SSLv3',
from: 'email_from', from: 'email_from'
}, },
gitlab: { gitlab: {
token_readWriteProjects: 'putyourtokenhere' token_readWriteProjects: 'putyourtokenhere'
...@@ -38,34 +38,34 @@ module.exports = { ...@@ -38,34 +38,34 @@ module.exports = {
testing: { testing: {
app: { app: {
name: 'Project Page Manager', name: 'Project Page Manager',
port: process.env.PORT || 8888, port: process.env.PORT ?? 8888,
sessionSecret: 'thisisasecret-thisisasecret-thisisasecret' sessionSecret: 'thisisasecret-thisisasecret-thisisasecret'
}, },
passport: { passport: {
strategy: 'saml', strategy: 'saml',
saml: { saml: {
path: process.env.SAML_PATH || '/saml/SSO', path: process.env.SAML_PATH ?? '/saml/SSO',
entryPoint: process.env.SAML_ENTRY_POINT || 'saml entry URL', entryPoint: process.env.SAML_ENTRY_POINT ?? 'saml entry URL',
issuer: 'saml issuer URL', issuer: 'saml issuer URL',
logoutUrl: 'saml Logout URL' logoutUrl: 'saml Logout URL'
} }
}, },
database: { database: {
user: 'usernamedb', // DB username user: 'usernamedb', // DB username
password: 'passworddb', // DB password password: 'passworddb', // DB password
port: 3306, // MySQL port port: 3306, // MySQL port
dbUser: 'userdb', // User DB dbUser: 'userdb', // User DB
host_project: 'localhost', // local host_project: 'localhost', // local
dbProject: 'projectdb' // Project DB dbProject: 'projectdb' // Project DB
}, },
mailer: { mailer: {
host: 'mailhost', // hostname host: 'mailhost', // hostname
secureConnection: false, // TLS requires secureConnection to be false secureConnection: false, // TLS requires secureConnection to be false
port: 587, // port for secure SMTP port: 587, // port for secure SMTP
authUser: 'usernamemail', authUser: 'usernamemail',
authPass: 'passwordmail', authPass: 'passwordmail',
tlsCiphers: 'SSLv3', tlsCiphers: 'SSLv3',
from: 'email_from', from: 'email_from'
}, },
gitlab: { gitlab: {
token_readWriteProjects: 'putyourtokenhere' token_readWriteProjects: 'putyourtokenhere'
......
import mysql from 'mysql2' import mysql from 'mysql2'
var env = process.env.NODE_ENV || 'development'; const env = process.env.NODE_ENV ?? 'development'
const config = require('./config')[env] const config = require('./config')[env]
// ==== USER ACOOUNT DB CONNECTION ==== // ==== USER ACOOUNT DB CONNECTION ====
var userConnection = mysql.createConnection({ const userConnection = mysql.createConnection({
host: config.database.host, host: config.database.host,
user: config.database.user, user: config.database.user,
password: config.database.password, password: config.database.password,
port: config.database.port, port: config.database.port,
database: config.database.dbUser, database: config.database.dbUser,
multipleStatements: true multipleStatements: true
}) })
userConnection.connect(function(err) { userConnection.connect(function (err) {
if (err) throw err; if (err != null) throw err
}) })
userConnection.query('USE '+config.database.dbUser) userConnection.query('USE ' + String(config.database.dbUser))
// ==== PROJECT DB CONNECTION ==== // ==== PROJECT DB CONNECTION ====
var projectConnection = mysql.createConnection({ const projectConnection = mysql.createConnection({
host: config.database.host_project, host: config.database.host_project,
user: config.database.user, user: config.database.user,
password: config.database.password, password: config.database.password,
port: config.database.port, port: config.database.port,
database: config.database.dbProject database: config.database.dbProject
}) })
projectConnection.connect(function(err) { projectConnection.connect(function (err) {
if (err) throw err; if (err != null) throw err
}) })
projectConnection.query('USE '+config.database.dbProject) projectConnection.query('USE ' + String(config.database.dbProject))
var connection = { const connection = {
user: userConnection, user: userConnection,
project: projectConnection project: projectConnection
} }
export = connection export = connection
\ No newline at end of file
import helpers from '../functions/helpers'
import gitlab from '../functions/gitlab'
import https from 'https'
const dbconn = require('../config/dbconn')
const lang = 'DE'
const controller = {
getAllMailinglists: async function () {
try {
const rows: any = await dbconn.project.promise().query('CALL getAllLists')
console.log(rows)
if (rows[0][0]) {
return rows[0][0]
} else { return null }
} catch (err) {
console.error(err)
}
},
getProjectOverviewById: async function (projectId: number) {
try {
const rows: any = await dbconn.project.promise().query('CALL GetProjectInformationByProjectID(' + projectId + ')')
if (rows[0][0]) {
return rows[0][0]
} else { return null }
} catch (err) {
console.error(err)
}
},
getProjectImagesById: async function (projectId: number) {
try {
const rows: any = await dbconn.project.promise().query('CALL getImagesByProjectID(' + projectId + ')')
if (rows[0][0]) {
return rows[0][0]
} else { return null }
} catch (err) {
console.error(err)
}
return null
},
showHome: function (res: any) {
res.render(lang + '/project/project-simplified')
},
showMailingList: async function (res: any) {
const mailList = await controller.getAllMailinglists()
const allMailingLists: any = [] // JSON object
if (mailList) {
for (let i = 0; i < mailList.length; i++) {
// add data to JSON object
allMailingLists.push({
id: mailList[i].id,
name: mailList[i].name,
src: mailList[i].src,
projectstatus: mailList[i].projectstatus,
project_title: mailList[i].project_title,
keywords: mailList[i].keywords
})
}
}
res.render(lang + '/project/mailinglists', {
mailinglists: allMailingLists
})
},
showProjOverview: async function (req: any, res: any, next: any) {
const projectId = req.query.projectID
const projectOverview = await controller.getProjectOverviewById(projectId)
if (!projectId || projectOverview.length === 0) {
next()
} else {
const partnerWebsites = helpers.stringToArray(projectOverview[0].partner_website)
const partnerNames = helpers.stringToArray(projectOverview[0].partner_name)
const awardSites = helpers.stringToArray(projectOverview[0].award_website)
const awardNames = helpers.stringToArray(projectOverview[0].award_name)
const sponsorWebsites = helpers.stringToArray(projectOverview[0].sponsor_website)
const sponsorImgs = helpers.stringToArray(projectOverview[0].sponsor_img)
const sponsorNames = helpers.stringToArray(projectOverview[0].sponsor_name)
const projectImages = await controller.getProjectImagesById(projectId)
res.render(lang + '/project/projectOverview', {
projectOV: projectOverview,
projectImgs: projectImages,
partnerWS: partnerWebsites,
partnerN: partnerNames,
awardWS: awardSites,
awardN: awardNames,
sponsorWS: sponsorWebsites,
sponsorIMG: sponsorImgs,
sponsorN: sponsorNames
})
}
},
showProjData: async function (req: any, res: any) {
const projectArr: any = []
let isProject = true
let firstId = 0
const orderKeyword = req.query.sort
while (isProject) {
const projects: any = await gitlab.getProjects(100, firstId)
const projectData = projects.data[0]
if (projectData.length === 0) {
isProject = false
} else {
for (let i = 0; i < projectData.length; i++) {
// M4_LAB logo for all projects that do not have logo
if (projectData[i].avatar_url == null) {
projectData[i].avatar_url = 'https://m4lab.hft-stuttgart.de/img/body/M4_LAB_LOGO_NO_TEXT.png'
}
// for all projects that have no description
if (projectData[i].description === '') {
projectData[i].description = '- no description -'
}
const project = {
logo: projectData[i].avatar_url,
name: projectData[i].name,
weburl: projectData[i].web_url,
desc: projectData[i].description,
keywords: projectData[i].tag_list,
createdAt: projectData[i].created_at,
lastUpdatedAt: projectData[i].last_activity_at
}
projectArr.push(project)
}
firstId = projectData[projectData.length - 1].id
}
// MLAB-576
if (orderKeyword === 'created_at') {
projectArr.sort((a: any, b: any) => {
const aDate: any = new Date(a.createdAt)
const bDate: any = new Date(b.createdAt)
return bDate - aDate
})
} else if (orderKeyword === 'updated_at') {
projectArr.sort((a: any, b: any) => {
const aDate: any = new Date(a.lastUpdatedAt)
const bDate: any = new Date(b.lastUpdatedAt)
return bDate - aDate
})
} else { // default, sorted by name
projectArr.sort((a: any, b: any) => {
const fa = a.name.toLowerCase()
const fb = b.name.toLowerCase()
if (fa < fb) return -1
if (fa > fb) return 1
return 0
})
}
}
res.render(lang + '/project/projectList', {
project: projectArr
})
},
showProjInformations: async function (req: any, res: any) {
const pagesArr: any = []
let isProject = true
let firstId = 0
const orderKeyword = req.query.sort
while (isProject) {
const projects: any = await gitlab.getProjects(100, firstId)
const pagesData = projects.data[1]
if (pagesData.length === 0) {
isProject = false
} else {
for (let i = 0; i < pagesData.length; i++) {
const 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/body/M4_LAB_LOGO_NO_TEXT.png'
}
// for all projects that have no description
if (pagesData[i].description === '') {
pagesData[i].description = '- no description -'
}
// https://transfer.hft-stuttgart.de/pages/EIGENTUEMER/PROJEKTNAME/
pagesData[i].web_url = 'https://transfer.hft-stuttgart.de/pages/' + String(pagesData[i].namespace.path) + '/' + String(pagesData[i].name) + '/'
// remove 'website' from tag list
const index = pagesData[i].tag_list.indexOf('website')
if (index > -1) {
pagesData[i].tag_list.splice(index, 1)
}
// fill in pagesArr
const pages = {
logo: pagesData[i].avatar_url,
name: pagesData[i].name,
weburl: pagesData[i].web_url,
desc: pagesData[i].description,
keywords: pagesData[i].tag_list,
createdAt: pagesData[i].created_at,
lastUpdatedAt: pagesData[i].last_activity_at
}
https.get(pagesData[i].web_url, function (response: any) {
if (response.statusCode >= 200 && response.statusCode <= 299) {
pagesArr.push(pages)
}
})
}
}
firstId = pagesData[pagesData.length - 1].id
}
// MLAB-576
if (orderKeyword === 'created_at') {
pagesArr.sort((a: any, b: any) => {
const aDate: any = new Date(a.createdAt)
const bDate: any = new Date(b.createdAt)
return bDate - aDate
})
} else if (orderKeyword === 'updated_at') {
pagesArr.sort((a: any, b: any) => {
const aDate: any = new Date(a.lastUpdatedAt)
const bDate: any = new Date(b.lastUpdatedAt)
return bDate - aDate
})
} else { // default, sorted by name
pagesArr.sort((a: any, b: any) => {
const fa = a.name.toLowerCase()
const fb = b.name.toLowerCase()
if (fa < fb) return -1
if (fa > fb) return 1
return 0
})
}
}
res.render(lang + '/project/pagesList', {
pages: pagesArr
})
}
}
export = controller
import axios from 'axios' import axios from 'axios'
var gitlab = { const gitlab = {
getProjects: async function(perPage:number, idAfter:number) { getProjects: async function (perPage: number, idAfter: number) {
try { try {
let projects = await axios({ const projects = await axios({
method: 'get', 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 url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects?visibility=public&pagination=keyset&per_page=' + String(perPage) + '&order_by=id&sort=asc&id_after=' + String(idAfter)
}) })
let data = projects.data const data = projects.data
let reposArr = [] const reposArr = []
let pagesArr = [] const pagesArr = []
for(let i = 0; i < data.length; i++){ for (let i = 0; i < data.length; i++) {
// skip template project // skip template project
if (data[i].name == 'page_basic' || data[i].name == 'generic' || data[i].name == 'simple_raw' || data[i].name == 'simple_thesis') { if (data[i].name === 'page_basic' || data[i].name === 'generic' || data[i].name === 'simple_raw' || data[i].name === 'simple_thesis') {
continue continue
} else if(data[i].tag_list.includes('website')) { } else if (data[i].tag_list.includes('website')) {
pagesArr.push(data[i]) pagesArr.push(data[i])
} else { } else {
reposArr.push(data[i]) reposArr.push(data[i])
}
}
return {
error: false,
data: [reposArr, pagesArr]}
} }
catch (err) { }
return { return {
error: true, error: false,
data: err} data: [reposArr, pagesArr]
} }
}, } catch (err) {
getLatestPipelineStatus: async function(projectId:number) { return {
return axios({ error: true,
method: 'get', data: err
url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'/pipelines' }
})
.then(res => res.data[0].status)
.catch(err => console.error(err))
} }
},
getLatestPipelineStatus: async function (projectId: number) {
return await axios({
method: 'get',
url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/' + String(projectId) + '/pipelines'
})
.then(res => res.data[0].status)
.catch(err => console.error(err))
}
} }
export = gitlab export = gitlab
\ No newline at end of file
var helpers = { const helpers = {
stringToArray: function (input:string){ stringToArray: function (input: string) {
if(input != null){ if (input != null) {
return input.split(','); return input.split(',')
}else{ } else {
return null; return null
}
} }
}; }
}
export = helpers; export = helpers
\ No newline at end of file
const dbconn = require('../config/dbconn');
var methods = {
getAllMailinglists: async function() {
try {
let rows:any = await dbconn.project.promise().query('CALL getAllLists')
if (rows[0][0]) {
return rows[0][0]
} else { return null }
} catch (err) {
console.error(err)
}
return null
},
getProjectOverviewById: async function(projectId:number) {
try {
let rows:any = await dbconn.project.promise().query('CALL GetProjectInformationByProjectID(' + projectId+ ')')
if (rows[0][0]) {
return rows[0][0]
} else { return null }
} catch (err) {
console.error(err)
}
return null
},
getProjectImagesById: async function(projectId:number) {
try {
let rows:any = await dbconn.project.promise().query('CALL getImagesByProjectID(' + projectId+ ')')
if (rows[0][0]) {
return rows[0][0]
} else { return null }
} catch (err) {
console.error(err)
}
return null
}
};
export = methods;
\ No newline at end of file
module.exports = { module.exports = {
preset: 'ts-jest', preset: 'ts-jest',
testEnvironment: 'node', testEnvironment: 'node'
}; }
\ No newline at end of file
/* German initialisation for the jQuery UI date picker plugin. */ /* German initialisation for the jQuery UI date picker plugin. */
/* Written by Milian Wolff (mail@milianw.de). */ /* Written by Milian Wolff (mail@milianw.de). */
( function( factory ) { (function (factory) {
if ( typeof define === "function" && define.amd ) { if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['../widgets/datepicker'], factory)
} else {
// Browser globals
factory(jQuery.datepicker)
}
}(function (datepicker) {
datepicker.regional.de = {
closeText: 'Schließen',
prevText: '&#x3C;Zurück',
nextText: 'Vor&#x3E;',
currentText: 'Heute',
monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun',
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
dayNamesShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
weekHeader: 'KW',
dateFormat: 'dd.mm.yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
}
datepicker.setDefaults(datepicker.regional.de)
// AMD. Register as an anonymous module. return datepicker.regional.de
define( [ "../widgets/datepicker" ], factory ); }))
} else {
// Browser globals
factory( jQuery.datepicker );
}
}( function( datepicker ) {
datepicker.regional.de = {
closeText: "Schließen",
prevText: "&#x3C;Zurück",
nextText: "Vor&#x3E;",
currentText: "Heute",
monthNames: [ "Januar","Februar","März","April","Mai","Juni",
"Juli","August","September","Oktober","November","Dezember" ],
monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun",
"Jul","Aug","Sep","Okt","Nov","Dez" ],
dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ],
dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ],
dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ],
weekHeader: "KW",
dateFormat: "dd.mm.yy",
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.de );
return datepicker.regional.de;
} ) );
\ No newline at end of file
//const SamlStrategy = require('passport-saml').Strategy import controller from '../controller/controller'
import methods from '../functions/methods'
import gitlab from '../functions/gitlab'
import helpers from '../functions/helpers'
import https from 'https'
module.exports = function (app:any, lang:string) { module.exports = function (app: any) {
// ======== APP ROUTES - PROJECT ==================== // ======== APP ROUTES - PROJECT ====================
app.get('/', function (req:any, res:any) {
res.render(lang+'/project/project-simplified')
})
app.get('/mailinglists', async function (req:any, res:any) {
let mailList = await methods.getAllMailinglists()
if (mailList) {
let allMailingLists = [] // JSON object
for (let i = 0; i < mailList.length; i++) {
// add data to JSON object
allMailingLists.push({
id: mailList[i].id,
name: mailList[i].name,
src: mailList[i].src,
projectstatus: mailList[i].projectstatus,
project_title: mailList[i].project_title,
keywords: mailList[i].keywords
});
}
res.render(lang+'/project/mailinglists', { app.get('/', function (req: any, res: any) {
//isUserAuthenticated: req.isAuthenticated(), controller.showHome(res)
//user: req.user,
mailinglists: allMailingLists
});
} else {
res.render(lang+'/project/mailinglists', {
//isUserAuthenticated: req.isAuthenticated(),
//user: req.user,
mailinglists: null
})
}
}) })
app.get('/projectoverview', async function(req:any, res:any){ app.get('/mailinglists', function (req: any, res: any) {
let projectOverview = await methods.getProjectOverviewById(req.query.projectID) controller.showMailingList(res)
if (projectOverview.length > 0) { .catch(err => console.error(err))
let partnerWebsites = helpers.stringToArray(projectOverview[0].partner_website) })
let partnerNames = helpers.stringToArray(projectOverview[0].partner_name)
let awardSites = helpers.stringToArray(projectOverview[0].award_website)
let awardNames = helpers.stringToArray(projectOverview[0].award_name)
let sponsorWebsites = helpers.stringToArray(projectOverview[0].sponsor_website)
let sponsorImgs = helpers.stringToArray(projectOverview[0].sponsor_img)
let sponsorNames = helpers.stringToArray(projectOverview[0].sponsor_name)
let projectImages = await methods.getProjectImagesById(req.query.projectID) app.get('/projectoverview', function (req: any, res: any, next: any) {
res.render(lang+'/project/projectOverview', { controller.showProjOverview(req, res, next)
//isUserAuthenticated: req.isAuthenticated(), .catch(err => console.error(err))
//user: req.user,
projectOV: projectOverview,
projectImgs: projectImages,
partnerWS: partnerWebsites,
partnerN: partnerNames,
awardWS: awardSites,
awardN: awardNames,
sponsorWS: sponsorWebsites,
sponsorIMG: sponsorImgs,
sponsorN: sponsorNames
});
} else {
res.redirect('/')
}
}) })
// Projektdaten // Projektdaten
app.get('/projektdaten', async function(req:any, res:any){ app.get('/projektdaten', function (req: any, res: any) {
let projectArr = [] controller.showProjData(req, res)
let isProject = true .catch(err => console.error(err))
let firstId = 0
let orderKeyword = req.query.sort
while (isProject == true) {
let projects = await gitlab.getProjects(100, firstId)
let projectData = projects.data[0]
if (projectData.length == 0) {
isProject = false
}
else {
for(let i = 0; i < projectData.length; i++){
// M4_LAB logo for all projects that do not have logo
if (projectData[i].avatar_url == null) {
projectData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/body/M4_LAB_LOGO_NO_TEXT.png"
}
// for all projects that have no description
if (projectData[i].description == "") {
projectData[i].description = "- no description -"
}
let project = {
logo: projectData[i].avatar_url,
name: projectData[i].name,
weburl: projectData[i].web_url,
desc: projectData[i].description,
keywords: projectData[i].tag_list,
createdAt: projectData[i].created_at,
lastUpdatedAt: projectData[i].last_activity_at
}
projectArr.push(project)
}
firstId = projectData[projectData.length-1].id
}
// MLAB-576
if (orderKeyword == "created_at") {
projectArr.sort((a, b) => {
let aDate:any = new Date(a.createdAt)
let bDate:any = new Date(b.createdAt)
return bDate - aDate
});
} else if (orderKeyword == "updated_at") {
projectArr.sort((a, b) => {
let aDate:any = new Date(a.lastUpdatedAt)
let bDate:any = new Date(b.lastUpdatedAt)
return bDate - aDate
});
} else { // default, sorted by name
projectArr.sort((a, b) => {
let fa = a.name.toLowerCase(),
fb = b.name.toLowerCase();
if (fa < fb) return -1;
if (fa > fb) return 1;
return 0;
});
}
}
res.render(lang+'/project/projectList', {
project: projectArr
})
}) })
// Projektinformationen // Projektinformationen
app.get('/projektinformationen', async function(req:any, res:any){ app.get('/projektinformationen', function (req: any, res: any) {
let pagesArr: { logo: any; name: any; weburl: any; desc: any; keywords: any; createdAt: any; lastUpdatedAt: any; }[] = [] controller.showProjInformations(req, res)
let isProject = true .catch(err => console.error(err))
let firstId = 0
let orderKeyword = req.query.sort
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++){
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/body/M4_LAB_LOGO_NO_TEXT.png"
}
// for all projects that have no description
if (pagesData[i].description == "") {
pagesData[i].description = "- no description -"
}
// https://transfer.hft-stuttgart.de/pages/EIGENTUEMER/PROJEKTNAME/
pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/"+pagesData[i].namespace.path+"/"+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,
createdAt: pagesData[i].created_at,
lastUpdatedAt: pagesData[i].last_activity_at
}
https.get(pagesData[i].web_url, function (response:any) {
if (response.statusCode >= 200 && response.statusCode <= 299) {
pagesArr.push(pages)
}
})
}
}
firstId = pagesData[pagesData.length-1].id
}
// MLAB-576
if (orderKeyword == "created_at") {
pagesArr.sort((a, b) => {
let aDate:any = new Date(a.createdAt)
let bDate:any = new Date(b.createdAt)
return bDate - aDate
});
} else if (orderKeyword == "updated_at") {
pagesArr.sort((a, b) => {
let aDate:any = new Date(a.lastUpdatedAt)
let bDate:any = new Date(b.lastUpdatedAt)
return bDate - aDate
});
} else { // default, sorted by name
pagesArr.sort((a, b) => {
let fa = a.name.toLowerCase(),
fb = b.name.toLowerCase();
if (fa < fb) return -1;
if (fa > fb) return 1;
return 0;
});
}
}
res.render(lang+'/project/pagesList', {
pages: pagesArr
})
}) })
}
};
\ No newline at end of file
...@@ -21,7 +21,7 @@ html(lang="de") ...@@ -21,7 +21,7 @@ html(lang="de")
div(class="col-md-12 margin_bottom_30") div(class="col-md-12 margin_bottom_30")
h2(class="text-center color_708090") <strong>Aktive Mailinglisten</strong> h2(class="text-center color_708090") <strong>Aktive Mailinglisten</strong>
div(class="table-responsive table-borderless") div(class="table-responsive table-borderless")
if !mailinglists if !mailinglists || !mailinglists.length
p There is no active mailing list at the moment p There is no active mailing list at the moment
else else
table(class="table table-striped table-bordered table-hover") table(class="table table-striped table-bordered table-hover")
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment