@@ -5,15 +5,21 @@ var fs = require('fs');
5
5
var fsw = require ( 'fs' ) . promises ;
6
6
var util = require ( 'util' ) ;
7
7
var path = require ( 'path' ) ;
8
+ var cloudcmd = require ( 'cloudcmd' ) ;
9
+ var express = require ( 'express' ) ;
10
+ var app = require ( 'express' ) ( ) ;
11
+ var http = require ( 'http' ) . Server ( app ) ;
12
+ var baserouter = express . Router ( ) ;
8
13
var { spawn } = require ( 'child_process' ) ;
9
14
var { create } = require ( 'ipfs-http-client' ) ;
10
15
var ipfs = create ( ) ;
11
16
12
17
// Default vars
18
+ var baseUrl = process . env . SUBFOLDER || '/' ;
13
19
if ( fs . existsSync ( '/data' ) ) {
14
20
var dataRoot = '/data/' ;
15
21
} else {
16
- var dataRoot = ' frontend/user/'
22
+ var dataRoot = __dirname + '/ frontend/user/'
17
23
} ;
18
24
var configPath = dataRoot + 'config/' ;
19
25
var hashPath = dataRoot + 'hashes/' ;
@@ -32,42 +38,17 @@ var emus = [
32
38
'segaGG' , 'segaMD' , 'segaMS' ,
33
39
'segaSaturn' , 'snes' , 'vb' , 'ws'
34
40
] ;
35
- mimeTypes = {
36
- "html" : "text/html" ,
37
- "jpeg" : "image/jpeg" ,
38
- "jpg" : "image/jpeg" ,
39
- "png" : "image/png" ,
40
- "svg" : "image/svg+xml" ,
41
- "json" : "application/json" ,
42
- "js" : "text/javascript" ,
43
- "css" : "text/css"
44
- } ;
45
41
46
42
//// Http server ////
47
- var main = async function ( req , res ) {
48
- if ( req . url == '/' ) {
49
- var url = '/public/index.html' ;
50
- } else {
51
- var url = req . url ;
52
- }
53
- try {
54
- var mimeType = mimeTypes [ url . split ( '?' ) [ 0 ] . split ( '.' ) . pop ( ) ] ;
55
- if ( ! mimeType ) {
56
- mimeType = 'text/plain' ;
57
- }
58
- var data = await fsw . readFile ( __dirname + decodeURI ( url . split ( '?' ) [ 0 ] ) ) ;
59
- res . writeHead ( 200 , { "Content-Type" : mimeType } ) ;
60
- res . end ( data ) ;
61
- } catch ( err ) {
62
- res . writeHead ( 404 ) ;
63
- res . end ( JSON . stringify ( err ) ) ;
64
- } ;
65
- } ;
66
- var server = http . createServer ( main ) ;
67
- server . listen ( 3000 ) ;
43
+ baserouter . use ( '/public' , express . static ( __dirname + '/public' ) ) ;
44
+ baserouter . get ( "/" , function ( req , res ) {
45
+ res . sendFile ( __dirname + '/public/index.html' ) ;
46
+ } ) ;
47
+ app . use ( baseUrl , baserouter ) ;
48
+ http . listen ( 3000 ) ;
68
49
69
50
//// socketIO comms ////
70
- io = socketIO ( server ) ;
51
+ io = socketIO ( http , { path : baseUrl + 'socket.io' } ) ;
71
52
io . on ( 'connection' , async function ( socket ) {
72
53
//// Functions ////
73
54
// Send config list to client
@@ -344,6 +325,18 @@ io.on('connection', async function (socket) {
344
325
getRoms ( dir ) ;
345
326
} ;
346
327
328
+ // Render files page
329
+ async function renderFiles ( ) {
330
+ var dirItems = await fsw . readdir ( dataRoot ) ;
331
+ var dirs = [ ] ;
332
+ for await ( var item of dirItems ) {
333
+ if ( ( fs . lstatSync ( dataRoot + item ) . isDirectory ( ) ) && ( ! / ^ \. .* / . test ( item ) ) ) {
334
+ dirs . push ( item ) ;
335
+ } ;
336
+ } ;
337
+ socket . emit ( 'renderfiledirs' , dirs ) ;
338
+ } ;
339
+
347
340
// Incoming socket requests
348
341
socket . on ( 'renderconfigs' , renderConfigs ) ;
349
342
socket . on ( 'renderroms' , renderRoms ) ;
@@ -356,10 +349,29 @@ io.on('connection', async function (socket) {
356
349
socket . on ( 'addtoconfig' , addToConfig ) ;
357
350
socket . on ( 'downloadart' , downloadArt ) ;
358
351
socket . on ( 'usermeta' , userMeta ) ;
352
+ socket . on ( 'renderfiles' , renderFiles ) ;
359
353
// Render landing page
360
354
if ( fs . existsSync ( dataRoot + 'config/main.json' ) ) {
361
355
renderRoms ( ) ;
362
356
} else {
363
357
renderLanding ( ) ;
364
358
} ;
365
359
} ) ;
360
+
361
+ // Cloudcmd File browser
362
+ baserouter . use ( '/files' , cloudcmd ( {
363
+ config : {
364
+ root : dataRoot ,
365
+ prefix : baseUrl + 'files' ,
366
+ terminal : false ,
367
+ console : false ,
368
+ configDialog : false ,
369
+ contact : false ,
370
+ auth : false ,
371
+ name : 'Files' ,
372
+ log : false ,
373
+ keysPanel : false ,
374
+ oneFilePanel : true ,
375
+ }
376
+ } ) ) ;
377
+
0 commit comments