Skip to content

Commit 2941fcb

Browse files
committed
user can configure 'Access-Control-Allow-Origin' value with cors enabled
1 parent 85541e5 commit 2941fcb

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

bin/http-server

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ function listen(port) {
139139
if (typeof argv.cors === 'string') {
140140
options.corsHeaders = argv.cors;
141141
}
142+
143+
if (typeof argv.corsOrigin === 'string') {
144+
options.corsOrigin = argv.corsOrigin;
145+
}
142146
}
143147

144148
if (ssl) {

lib/http-server.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,25 @@ function HttpServer(options) {
122122
}
123123

124124
if (options.cors) {
125-
this.headers['Access-Control-Allow-Origin'] = '*';
125+
this.headers['Access-Control-Allow-Origin'] = options.corsOrigin ? options.corsOrigin : '*';
126126
this.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Range';
127127
if (options.corsHeaders) {
128128
options.corsHeaders.split(/\s*,\s*/)
129129
.forEach(function (h) { this.headers['Access-Control-Allow-Headers'] += ', ' + h; }, this);
130130
}
131-
before.push(corser.create(options.corsHeaders ? {
132-
requestHeaders: this.headers['Access-Control-Allow-Headers'].split(/\s*,\s*/)
133-
} : null));
131+
132+
var corserOptions = {};
133+
134+
if (options.corsOrigin) {
135+
corserOptions.origins = [options.corsOrigin];
136+
corserOptions.supportsCredentials = true;
137+
}
138+
139+
if (options.corsHeaders) {
140+
corserOptions.requestHeaders = this.headers['Access-Control-Allow-Headers'].split(/\s*,\s*/);
141+
}
142+
143+
before.push(corser.create(corserOptions));
134144
}
135145

136146
if (options.robots) {

test/http-server-test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ vows.describe('http-server').addBatch({
139139
var server = httpServer.createServer({
140140
root: root,
141141
cors: true,
142-
corsHeaders: 'X-Test'
142+
corsHeaders: 'X-Test',
143+
corsOrigin: 'http://example.com'
143144
});
144145
server.listen(8082);
145146
this.callback(null, server);
@@ -161,6 +162,9 @@ vows.describe('http-server').addBatch({
161162
},
162163
'response Access-Control-Allow-Headers should contain X-Test': function (err, res) {
163164
assert.ok(res.headers['access-control-allow-headers'].split(/\s*,\s*/g).indexOf('X-Test') >= 0, 204);
165+
},
166+
'response Access-Control-Allow-Origin should equal http://example.com': function (err, res) {
167+
assert.equal(res.headers['access-control-allow-origin'], 'http://example.com');
164168
}
165169
},
166170
teardown: function (server) {

0 commit comments

Comments
 (0)