Skip to content

Commit a53d2dc

Browse files
committed
Configurable base url
1 parent 239ce6f commit a53d2dc

21 files changed

+69
-29
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Key | Description
4242
--- | ---
4343
game | Which game server to launch, see above
4444
path | Folder path to game server
45+
baseUrl | URL path used to serve the application, default is '/'. Must end with `/`
4546
port | Web port to use
4647
host | IP or Hostname to listen on
4748
type | Which kind of server to use, can be 'linux', 'windows' or 'wine'

app.js

+16-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ var Settings = require('./lib/settings')
1717

1818
var app = express()
1919
var server = require('http').Server(app)
20-
var io = require('socket.io')(server)
2120

2221
setupBasicAuth(config, app)
2322

@@ -27,8 +26,6 @@ app.use(bodyParser.urlencoded({ extended: false }))
2726
morgan.token('user', function (req) { return req.auth ? req.auth.user : 'anon' })
2827
app.use(morgan(config.logFormat || 'dev'))
2928

30-
app.use(serveStatic(path.join(__dirname, 'public')))
31-
3229
var logs = new Logs(config)
3330

3431
var manager = new Manager(config, logs)
@@ -40,11 +37,22 @@ mods.updateMods()
4037

4138
var settings = new Settings(config)
4239

43-
app.use('/api/logs', require('./routes/logs')(logs))
44-
app.use('/api/missions', require('./routes/missions')(missions))
45-
app.use('/api/mods', require('./routes/mods')(mods))
46-
app.use('/api/servers', require('./routes/servers')(manager, mods))
47-
app.use('/api/settings', require('./routes/settings')(settings))
40+
var baseUrl = config.baseUrl || '/'
41+
var router = express.Router()
42+
43+
router.use('/api/logs', require('./routes/logs')(logs))
44+
router.use('/api/missions', require('./routes/missions')(missions))
45+
router.use('/api/mods', require('./routes/mods')(mods))
46+
router.use('/api/servers', require('./routes/servers')(manager, mods))
47+
router.use('/api/settings', require('./routes/settings')(settings))
48+
router.use('/', require('./routes/main')(baseUrl))
49+
router.use(serveStatic(path.join(__dirname, 'public')))
50+
51+
app.use(baseUrl, router)
52+
53+
var io = require('socket.io')(server, {
54+
path: baseUrl + 'socket.io'
55+
})
4856

4957
io.on('connection', function (socket) {
5058
socket.emit('missions', missions.missions)

config.js.example

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module.exports = {
22
game: 'arma3', // arma3, arma2oa, arma2, arma1, cwa, ofpresistance, ofp
33
path: 'path-to-arma3-directory',
4+
baseUrl: '/',
45
port: 3000,
56
host: '0.0.0.0', // Can be either an IP or a Hostname
67
type: 'linux', // Can be either linux, windows or wine

public/index.html

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4+
<base href="/" />
45
<meta charset="utf-8">
56
<title>Arma Server Admin</title>
67
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7-
<link rel="shortcut icon" href="/favicon.ico" />
8+
<link rel="shortcut icon" href="favicon.ico" />
89

910
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
1011
<!--[if lt IE 9]>
1112
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
1213
<![endif]-->
1314

14-
<script src="/socket.io/socket.io.js"></script>
15+
<script src="socket.io/socket.io.js"></script>
1516
<script src="bundle.js"></script>
1617
</head>
1718
<body></body>

public/js/app/collections/logs.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ var Log = require('app/models/log')
55
module.exports = Backbone.Collection.extend({
66
comparator: 'name',
77
model: Log,
8-
url: '/api/logs/'
8+
url: 'api/logs/'
99
})

public/js/app/collections/missions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ module.exports = Backbone.Collection.extend({
77
return a.get('name').toLowerCase().localeCompare(b.get('name').toLowerCase())
88
},
99
model: Mission,
10-
url: '/api/missions/'
10+
url: 'api/missions/'
1111
})

public/js/app/collections/mods.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ module.exports = Backbone.Collection.extend({
77
return a.get('name').toLowerCase().localeCompare(b.get('name').toLowerCase())
88
},
99
model: Mod,
10-
url: '/api/mods/'
10+
url: 'api/mods/'
1111
})

public/js/app/collections/servers.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ module.exports = Backbone.Collection.extend({
77
return a.get('title').toLowerCase().localeCompare(b.get('title').toLowerCase())
88
},
99
model: Server,
10-
url: '/api/servers/'
10+
url: 'api/servers/'
1111
})

public/js/app/models/mission.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ module.exports = Backbone.Model.extend({
55
name: ''
66
},
77
idAttribute: 'name',
8-
urlRoot: '/api/missions/'
8+
urlRoot: 'api/missions/'
99
})

public/js/app/models/mod.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ module.exports = Backbone.Model.extend({
55
name: ''
66
},
77
idAttribute: 'name',
8-
urlRoot: '/api/mods/'
8+
urlRoot: 'api/mods/'
99
})

public/js/app/models/server.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ module.exports = Backbone.Model.extend({
2323
von: false,
2424
verify_signatures: false
2525
},
26-
urlRoot: '/api/servers/',
26+
urlRoot: 'api/servers/',
2727
start: function (cb) {
2828
var self = this
2929
$.ajax({
30-
url: '/api/servers/' + self.get('id') + '/start',
30+
url: 'api/servers/' + self.get('id') + '/start',
3131
type: 'POST',
3232
success: function (resp) {
3333
self.set('pid', resp.pid)
@@ -47,7 +47,7 @@ module.exports = Backbone.Model.extend({
4747
stop: function (cb) {
4848
var self = this
4949
$.ajax({
50-
url: '/api/servers/' + self.get('id') + '/stop',
50+
url: 'api/servers/' + self.get('id') + '/stop',
5151
type: 'POST',
5252
success: function (resp) {
5353
self.set('pid', resp.pid)

public/js/app/models/settings.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ module.exports = Backbone.Model.extend({
55
path: '',
66
type: ''
77
},
8-
urlRoot: '/api/settings'
8+
urlRoot: 'api/settings'
99
})

public/js/app/router.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ module.exports = Backbone.Router.extend({
3737
var initialized = false
3838

3939
/* global io */
40-
var socket = io.connect()
40+
var socket = io({
41+
path: window.location.pathname + 'socket.io'
42+
})
4143
socket.on('missions', function (_missions) {
4244
missions.set(_missions)
4345
})

public/js/app/views/missions/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module.exports = Marionette.LayoutView.extend({
4545
refresh: function (event) {
4646
event.preventDefault()
4747
$.ajax({
48-
url: '/api/missions/refresh',
48+
url: 'api/missions/refresh',
4949
type: 'POST',
5050
success: function (resp) {
5151

public/js/app/views/missions/upload.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports = Marionette.ItemView.extend({
2121
var laddaBtn = Ladda.create($uploadBtn.get(0))
2222
laddaBtn.start()
2323

24-
$.ajax('/api/missions', {
24+
$.ajax('api/missions', {
2525
success: function (data) {
2626
laddaBtn.stop()
2727
self.render()

public/js/app/views/missions/workshop.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module.exports = Marionette.ItemView.extend({
2525
laddaBtn.start()
2626

2727
$.ajax({
28-
url: '/api/missions/workshop',
28+
url: 'api/missions/workshop',
2929
type: 'POST',
3030
data: {
3131
id: $form.find('input.workshop').val()

public/js/app/views/mods/list.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module.exports = Marionette.CompositeView.extend({
1919
refresh: function (event) {
2020
event.preventDefault()
2121
$.ajax({
22-
url: '/api/mods/refresh',
22+
url: 'api/mods/refresh',
2323
type: 'POST',
2424
success: function (resp) {
2525

public/js/tpl/logs/list_item.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<td>
22
<% if (size < 100 * 1024 * 1024) { %>
33
<!-- Only show files under 100 MB -->
4-
<a href='/api/logs/<%-name%>/view' target=_blank><%-name%></a>
4+
<a href='api/logs/<%-name%>/view' target=_blank><%-name%></a>
55
<% } else { %>
66
<%-name%>
77
<% } %>
@@ -10,7 +10,7 @@
1010
<%-formattedSize%>
1111
</td>
1212
<td>
13-
<a class="btn btn-primary btn-xs" href="/api/logs/<%-name%>/download">
13+
<a class="btn btn-primary btn-xs" href="api/logs/<%-name%>/download">
1414
<span class="glyphicon glyphicon-download"></span>
1515
Download
1616
</a>

public/js/tpl/missions/list_item.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<td style="width: 100%;">
2-
<a href='/api/missions/<%-encodeURI(name)%>'><%-missionName%></a>
2+
<a href='api/missions/<%-encodeURI(name)%>'><%-missionName%></a>
33
</td>
44
<td><%-worldName%></td>
55
<td class="text-nowrap"><%-sizeFormatted%></td>

routes/main.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var express = require('express')
2+
var fs = require('fs')
3+
var path = require('path')
4+
5+
var indexPath = path.join(__dirname, '..', 'public', 'index.html')
6+
7+
module.exports = function (baseUrl) {
8+
var router = express.Router()
9+
10+
router.get('/', function (req, res) {
11+
fs.readFile(indexPath, 'utf-8', function (err, data) {
12+
if (err) {
13+
return res.status(404).send()
14+
}
15+
16+
data = data.replace('<base href="/" />', '<base href="' + baseUrl + '" />')
17+
18+
return res.send(data)
19+
})
20+
})
21+
22+
return router
23+
}

webpack.config.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
var path = require('path')
22
var webpack = require('webpack')
33

4+
var config = require('./config')
5+
6+
var baseUrl = config.baseUrl || '/'
7+
48
module.exports = {
59
// Entry point for static analyzer
610
entry: path.join(__dirname, 'public', 'js', 'app.js'),
@@ -13,7 +17,7 @@ module.exports = {
1317
filename: 'bundle.js',
1418

1519
// Path to use in HTML
16-
publicPath: '/'
20+
publicPath: baseUrl
1721
},
1822

1923
resolve: {

0 commit comments

Comments
 (0)