You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
381 lines
11 KiB
381 lines
11 KiB
"use strict"
|
|
|
|
var pathmodule = require('path');
|
|
var app = require('express')();
|
|
var http = require('http').Server(app);
|
|
var https = require('https');
|
|
var CONFIG = require( pathmodule.resolve( __dirname, "runconfig.js" ) );
|
|
const io = require("socket.io")(http, {
|
|
// pingTimeout: 30000,
|
|
// allowUpgrades: false,
|
|
// serveClient: false,
|
|
// pingInterval: 10000,
|
|
// //transports: [ 'websocket', 'polling' ],
|
|
// transports: [ 'polling', 'websocket' ],
|
|
cors: {
|
|
origin: "http://localhost:8080",
|
|
methods: ["GET", "POST"],
|
|
allowedHeaders: ["my-custom-header"],
|
|
credentials: true
|
|
},
|
|
cookie: {
|
|
name: "test",
|
|
httpOnly: false,
|
|
path: "/custom"
|
|
}
|
|
});
|
|
|
|
const { DateTime } = require("luxon");
|
|
|
|
|
|
var async = require("async");
|
|
const { check, validationResult } = require('express-validator');
|
|
const urlExistSync = require("url-exist-sync");
|
|
|
|
var express = require('express');
|
|
app.use(express.json());
|
|
|
|
const axios = require('axios');
|
|
axios.defaults.timeout = 30000
|
|
|
|
const helmet = require('helmet');
|
|
app.use(helmet());
|
|
|
|
const cors = require('cors')
|
|
const whitelist = [
|
|
'http://localhost:8080',
|
|
'http://localhost:3080',
|
|
'http://localhost:3081',
|
|
'http://localhost:3082'
|
|
]
|
|
const corsOptions = {
|
|
credentials: true,
|
|
methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'],
|
|
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
|
|
allowedHeaders: [
|
|
'Content-Type',
|
|
'Authorization',
|
|
'X-Requested-With',
|
|
'device-remember-token',
|
|
'Access-Control-Allow-Origin',
|
|
'Access-Control-Allow-Headers',
|
|
'Origin',
|
|
'Accept'
|
|
],
|
|
origin: function(origin, callback) {
|
|
if (whitelist.indexOf(origin) !== -1) {
|
|
callback(null, true)
|
|
} else {
|
|
callback(null, true)
|
|
//callback(new Error('Not allowed by CORS'))
|
|
}
|
|
}
|
|
}
|
|
app.use(cors)
|
|
|
|
|
|
|
|
// ***************************************************
|
|
// checktoken
|
|
// ***************************************************
|
|
|
|
async function checkToken(token) {
|
|
const agent = new https.Agent({
|
|
rejectUnauthorized: false,
|
|
});
|
|
const instance = axios.create({
|
|
baseURL: 'https://api.swarmlab.io',
|
|
withCredentials: true,
|
|
rejectUnauthorized: false,
|
|
crossdomain: true,
|
|
httpsAgent: agent,
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'multipart/form-data',
|
|
'Authorization': 'Bearer '+token
|
|
}
|
|
})
|
|
try {
|
|
var pipelines = {
|
|
"source":'ssologin'
|
|
}
|
|
var params = {
|
|
pipeline: pipelines
|
|
}
|
|
|
|
var options = {
|
|
headers: { 'content-type': 'application/x-www-form-urlencoded',Authorization: `Bearer ${token}` },
|
|
};
|
|
|
|
instance.defaults.timeout = 30000;
|
|
const res = await instance.post('/istokenvalidsso',params,options);
|
|
if(res.status == 200){
|
|
//console.log("check " +JSON.stringify(res.data))
|
|
return res.data
|
|
}else{
|
|
console.log("noerror: " + res)
|
|
return res.status
|
|
|
|
}
|
|
}
|
|
catch (err) {
|
|
console.error("error: "+err);
|
|
var error = new Object();
|
|
error.action = '401'
|
|
return error
|
|
}
|
|
}
|
|
|
|
|
|
function convertDateToUTC(date) {
|
|
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(),date.getUTCMilliseconds());
|
|
}
|
|
|
|
// ***************************************************
|
|
// get pipelines
|
|
// ***************************************************
|
|
|
|
async function getpipelines(token,pipelinename) {
|
|
const agent = new https.Agent({
|
|
rejectUnauthorized: false,
|
|
});
|
|
const instance = axios.create({
|
|
baseURL: 'https://api.swarmlab.io',
|
|
withCredentials: true,
|
|
rejectUnauthorized: false,
|
|
crossdomain: true,
|
|
httpsAgent: agent,
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'multipart/form-data',
|
|
'Authorization': 'Bearer '+token
|
|
}
|
|
})
|
|
/*
|
|
var params = {
|
|
playbook: value
|
|
}
|
|
var options = {
|
|
params: params,
|
|
headers: { 'content-type': 'application/x-www-form-urlencoded',Authorization: `Bearer ${token}` },
|
|
};
|
|
|
|
const playbook = await api.GET('playbookCode',options);
|
|
return playbook
|
|
*/
|
|
try {
|
|
|
|
var pipelines = {
|
|
"querytokenFilter":CONFIG.api.token,
|
|
"filter":pipelinename
|
|
}
|
|
//var params = {
|
|
// pipeline: pipelines
|
|
// }
|
|
var params = {
|
|
querytokenFilter:CONFIG.api.token,
|
|
filter:pipelinename
|
|
}
|
|
|
|
var options = {
|
|
params: params,
|
|
headers: { 'content-type': 'application/x-www-form-urlencoded',Authorization: `Bearer ${token}` },
|
|
};
|
|
|
|
//https://api.swarmlab.io/gettutorlabrooms?sort=pipelinename%7Casc&page=1&per_page=5&filter=&type=scripts&tutor=yes
|
|
instance.defaults.timeout = 30000;
|
|
//const res = await instance.get('/getplaygrounds',params,options);
|
|
const res = await instance.get('/getplaygrounds',options);
|
|
if(res.status == 200){
|
|
return res.data
|
|
}else{
|
|
console.log("noerror: " + res)
|
|
return await res.status
|
|
|
|
}
|
|
}
|
|
catch (err) {
|
|
console.error("error: "+err);
|
|
var error = new Object();
|
|
error.action = '401'
|
|
return await error
|
|
}
|
|
}
|
|
|
|
// ***************************************************
|
|
// get user pipelines
|
|
// ***************************************************
|
|
|
|
async function getuserpipelines(token,user,swarmlabname) {
|
|
var pipelinename = user
|
|
const agent = new https.Agent({
|
|
rejectUnauthorized: false,
|
|
});
|
|
const instance = axios.create({
|
|
baseURL: 'https://api.swarmlab.io',
|
|
withCredentials: true,
|
|
rejectUnauthorized: false,
|
|
crossdomain: true,
|
|
httpsAgent: agent,
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'multipart/form-data',
|
|
'Authorization': 'Bearer '+token
|
|
}
|
|
})
|
|
try {
|
|
|
|
var pipelines = {
|
|
"querytokenFilter":CONFIG.api.token,
|
|
"filter":pipelinename,
|
|
swarmlabname:swarmlabname
|
|
}
|
|
//var params = {
|
|
// pipeline: pipelines
|
|
// }
|
|
var params = {
|
|
querytokenFilter:CONFIG.api.token,
|
|
filter:pipelinename,
|
|
swarmlabname:swarmlabname
|
|
}
|
|
|
|
var options = {
|
|
params: params,
|
|
headers: { 'content-type': 'application/x-www-form-urlencoded',Authorization: `Bearer ${token}` },
|
|
};
|
|
|
|
instance.defaults.timeout = 30000;
|
|
const res = await instance.get('/getuserplaygrounds',options);
|
|
if(res.status == 200){
|
|
return res.data
|
|
}else{
|
|
console.log("noerror: " + res)
|
|
return await res.status
|
|
|
|
}
|
|
}
|
|
catch (err) {
|
|
console.error("error: "+err);
|
|
var error = new Object();
|
|
error.action = '401'
|
|
error.error = err
|
|
return await error
|
|
}
|
|
}
|
|
|
|
|
|
global.online='ob';
|
|
global.pipelines=[];
|
|
|
|
|
|
// ***************************************************
|
|
// rest get
|
|
// ***************************************************
|
|
|
|
|
|
|
|
|
|
app.get('/run', (req, res, next) => {
|
|
|
|
(async() => {
|
|
|
|
var RES = new Object();
|
|
RES.code = req.query["action"]
|
|
RES.token = req.query["token"]
|
|
RES.error = false
|
|
RES.error_msg = "ok"
|
|
res.json(RES)
|
|
})()
|
|
|
|
});
|
|
|
|
|
|
// ***************************************************
|
|
// socket
|
|
// ***************************************************
|
|
|
|
//function getSHA256ofJSON(input){
|
|
// return require("crypto").createHash("sha256").update(JSON.stringify(input)).digest("hex");
|
|
//}
|
|
|
|
function sleep(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
|
|
function getSHA256ofJSON(data, inputEncoding, encoding){
|
|
if (!data) {
|
|
return '';
|
|
}
|
|
inputEncoding = inputEncoding || 'utf-8';
|
|
encoding = encoding || 'hex';
|
|
const hash = require("crypto").createHash('md5');
|
|
return hash.update(JSON.stringify(data), inputEncoding).digest(encoding);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
io.on('connection', s => {
|
|
console.error('socket connection');
|
|
|
|
// ------------------------------
|
|
// --- set
|
|
// ------------------------------
|
|
var usersession = new Object();
|
|
usersession.SOCKET = {};
|
|
usersession.SOCKET.error = {};
|
|
console.error('socket ...');
|
|
//s.auth = false;
|
|
s.auth = true;
|
|
|
|
// ------------------------------
|
|
// --- authenticate
|
|
// ------------------------------
|
|
s.on('authenticate', function(data){
|
|
const token = data
|
|
//console.log('invalid 1 ' + token);
|
|
console.log("check " +JSON.stringify(data))
|
|
(async() => {
|
|
//var isvalid = await checkToken(token);
|
|
//
|
|
/*
|
|
if(isvalid.action == 'ok'){
|
|
console.log("Authserver ok ", s.id + ' - ' + token);
|
|
usersession.SOCKET.user = isvalid.user
|
|
usersession.SOCKET.scope = isvalid.scope // space delimeter
|
|
usersession.SOCKET.token = isvalid.token
|
|
s.auth = true;
|
|
}else{
|
|
console.log("Authserver no ", s.id + ' - ' + token);
|
|
s.auth = false;
|
|
}
|
|
*/
|
|
s.auth = true;
|
|
})()
|
|
});
|
|
/*
|
|
setTimeout(function(){
|
|
if (!s.auth) {
|
|
console.log("Disconnecting timeout socket ", s.id);
|
|
//s.disconnect('unauthorized');
|
|
}else{
|
|
var room = usersession.SOCKET.user
|
|
//s.on("subscribe", function (room) {
|
|
s.join(room);
|
|
console.log("joining rooom", s.rooms);
|
|
console.log(room + ' created ')
|
|
// });
|
|
}
|
|
}, 30000);
|
|
*/
|
|
|
|
var id = s.id
|
|
s.on('action', obj => {
|
|
console.error('from client '+ s.id + ' obj ' + obj);
|
|
});
|
|
|
|
});
|
|
|
|
http.listen(3000, () => console.error('listening on http://localhost:3000/'));
|
|
console.error('socket.io example');
|
|
|