|
|
@ -1,12 +1,11 @@ |
|
|
|
// Load required modules
|
|
|
|
const fs = require("fs"); |
|
|
|
// note that for WebXR, e.g SpaSca, https is required, even if using own certifcate
|
|
|
|
const http = require("http"); |
|
|
|
// see how it's done for offline NAF
|
|
|
|
const https = require("https"); |
|
|
|
const http = require("http"); // http server core module
|
|
|
|
|
|
|
|
const path = require("path"); |
|
|
|
const path = require("path"); |
|
|
|
const express = require("express"); // web framework external module
|
|
|
|
|
|
|
|
const {execSync} = require('child_process'); |
|
|
|
const {execSync} = require('child_process'); |
|
|
|
|
|
|
|
const express = require("express"); // could be good to replace with code, no dep
|
|
|
|
|
|
|
|
|
|
|
|
// Get port or default to 8080
|
|
|
|
// Get port or default to 8082
|
|
|
|
const port = process.env.PORT || 8082; |
|
|
|
const port = process.env.PORT || 8082; |
|
|
|
|
|
|
|
|
|
|
|
// Setup and configure Express http server.
|
|
|
|
// Setup and configure Express http server.
|
|
|
@ -91,21 +90,73 @@ app.get('/hmdlink/set', (req, res) => { // could be a PUT instead |
|
|
|
dynURL = req.query.url
|
|
|
|
dynURL = req.query.url
|
|
|
|
res.redirect( dynURL ) |
|
|
|
res.redirect( dynURL ) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
app.get('/webxr', (req, res) => { |
|
|
|
|
|
|
|
res.redirect( '/local-metaverse-tooling/local-aframe-test.html' ) |
|
|
|
|
|
|
|
}) |
|
|
|
app.get('/hmdlink', (req, res) => { |
|
|
|
app.get('/hmdlink', (req, res) => { |
|
|
|
res.redirect( dynURL ) |
|
|
|
res.redirect( dynURL ) |
|
|
|
}) |
|
|
|
}) |
|
|
|
app.get('/json', (req, res) => { |
|
|
|
app.get('/json', (req, res) => { |
|
|
|
res.json( instructions.split('\n') ) |
|
|
|
res.json( instructions.split('\n') ) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
app.get('/available', (req, res) => { |
|
|
|
|
|
|
|
res.json( true ) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
app.get('/foundpeers', (req, res) => { |
|
|
|
|
|
|
|
res.json( foundPeers ) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
let foundPeers = [] |
|
|
|
|
|
|
|
app.get('/scan', (req, res) => { |
|
|
|
|
|
|
|
for (let i=1;i<25;i++){ // async so blasting, gives very quick result for positives
|
|
|
|
|
|
|
|
let url='https://192.168.4.'+i+':8082/available' |
|
|
|
|
|
|
|
let opt={rejectUnauthorized: false} |
|
|
|
|
|
|
|
https.get(url, opt, res => { |
|
|
|
|
|
|
|
let data = ''; |
|
|
|
|
|
|
|
res.on('data', chunk => { |
|
|
|
|
|
|
|
data += chunk; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
res.on('end', () => { |
|
|
|
|
|
|
|
data = JSON.parse(data); |
|
|
|
|
|
|
|
foundPeers.push(i) |
|
|
|
|
|
|
|
// could also register there and then
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}).on('error', err => { |
|
|
|
|
|
|
|
//console.log(err.message); usually ECONNREFUSED or EHOSTUNREACH
|
|
|
|
|
|
|
|
}).end() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
res.json( {msg: 'started'} ) // could redirect('/foundpeers') too
|
|
|
|
|
|
|
|
}) |
|
|
|
app.get('/', (req, res) => { |
|
|
|
app.get('/', (req, res) => { |
|
|
|
res.send( instructions ) |
|
|
|
res.send( instructions ) |
|
|
|
}) |
|
|
|
}) |
|
|
|
app.get('/localprototypes', (req, res) => { |
|
|
|
app.get('/localprototypes', (req, res) => { |
|
|
|
res.json( spawn('find Prototypes/ -iwholename */.git/config | xargs grep git.benetou.fr') ) |
|
|
|
// res.json( spawn('find Prototypes/ -iwholename */.git/config | xargs grep git.benetou.fr') )
|
|
|
|
|
|
|
|
// should use execSync now
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
app.get('/editor/recover', (req, res) => { |
|
|
|
|
|
|
|
// could move the previous file with time stamp
|
|
|
|
|
|
|
|
fs.copyFileSync(minfileSaveFullPath, fileSaveFullPath ) |
|
|
|
|
|
|
|
res.json( {msg: 'copied'} )
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
let filename = 'editor.html' |
|
|
|
|
|
|
|
let fileSaveFullPath = path.join(__dirname,'examples', filename) |
|
|
|
|
|
|
|
let minfilename = 'editor.html.minimal' |
|
|
|
|
|
|
|
let minfileSaveFullPath = path.join(__dirname,'examples', minfilename) |
|
|
|
|
|
|
|
app.get('/editor/read', (req, res) => { |
|
|
|
|
|
|
|
content = fs.readFileSync(fileSaveFullPath ).toString() |
|
|
|
|
|
|
|
res.json( {msg: content} )
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
app.get('/editor/save', (req, res) => { |
|
|
|
|
|
|
|
let content = req.query.content // does not escape, loses newlines
|
|
|
|
|
|
|
|
if (!content){ |
|
|
|
|
|
|
|
res.json( {msg: 'missing content'} ) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
console.log('writting', content) |
|
|
|
|
|
|
|
fs.writeFileSync(fileSaveFullPath, content) |
|
|
|
|
|
|
|
res.json( {msg: 'written to '+fileSaveFullPath} ) |
|
|
|
|
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
const https = require("https"); |
|
|
|
|
|
|
|
const fs = require("fs"); |
|
|
|
|
|
|
|
const privateKey = fs.readFileSync("naf-key.pem", "utf8"); |
|
|
|
const privateKey = fs.readFileSync("naf-key.pem", "utf8"); |
|
|
|
const certificate = fs.readFileSync("naf.pem", "utf8"); |
|
|
|
const certificate = fs.readFileSync("naf.pem", "utf8"); |
|
|
|
const credentials = { key: privateKey, cert: certificate }; |
|
|
|
const credentials = { key: privateKey, cert: certificate }; |
|
|
@ -117,3 +168,15 @@ const webServer = https.createServer(credentials, app); |
|
|
|
webServer.listen(port, () => { |
|
|
|
webServer.listen(port, () => { |
|
|
|
console.log("listening on http://localhost:" + port); |
|
|
|
console.log("listening on http://localhost:" + port); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
/* |
|
|
|
|
|
|
|
e.g AFTER mounting |
|
|
|
|
|
|
|
f.readdirSync('./sshfsmounts/').map( d=>f.readdirSync('./sshfsmounts/'+d) ) |
|
|
|
|
|
|
|
location : /home/deck/Prototypes/offline-octopus/sshfsmounts |
|
|
|
|
|
|
|
sshfs remarkable2:/home/root/xochitl-data/ remarkable2/ |
|
|
|
|
|
|
|
works if available |
|
|
|
|
|
|
|
sshfs fabien@192.168.4.1:/home/fabien/ rpi0/ |
|
|
|
|
|
|
|
still prompts for password, need manual login |
|
|
|
|
|
|
|
ls rpi0/ |
|
|
|
|
|
|
|
ls remarkable2/ |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|