1 | 'use strict';
|
2 |
|
3 |
|
4 | var url = require('url');
|
5 |
|
6 | var getCurrentScriptSource = require('./getCurrentScriptSource');
|
7 |
|
8 | function createSocketUrl(resourceQuery, currentLocation) {
|
9 | var urlParts;
|
10 |
|
11 | if (typeof resourceQuery === 'string' && resourceQuery !== '') {
|
12 |
|
13 |
|
14 | urlParts = url.parse(resourceQuery
|
15 | .substr(1)
|
16 | .replace('&', '?'), true);
|
17 | } else {
|
18 |
|
19 | var scriptHost = getCurrentScriptSource();
|
20 | urlParts = url.parse(scriptHost || '/', true, true);
|
21 | }
|
22 |
|
23 |
|
24 | if (typeof currentLocation === 'string' && currentLocation !== '') {
|
25 | currentLocation = url.parse(currentLocation);
|
26 | } else {
|
27 | currentLocation = self.location;
|
28 | }
|
29 |
|
30 | return getSocketUrl(urlParts, currentLocation);
|
31 | }
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 | function getSocketUrl(urlParts, loc) {
|
39 | var auth = urlParts.auth,
|
40 | query = urlParts.query;
|
41 | var hostname = urlParts.hostname,
|
42 | protocol = urlParts.protocol,
|
43 | port = urlParts.port;
|
44 |
|
45 | if (!port || port === '0') {
|
46 | port = loc.port;
|
47 | }
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 | if ((hostname === '0.0.0.0' || hostname === '::') && loc.hostname && loc.protocol.indexOf('http') === 0) {
|
54 | hostname = loc.hostname;
|
55 | }
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | if (hostname && hostname !== '127.0.0.1' && (loc.protocol === 'https:' || urlParts.hostname === '0.0.0.0')) {
|
62 | protocol = loc.protocol;
|
63 | }
|
64 |
|
65 |
|
66 |
|
67 |
|
68 | var sockHost = query.sockHost || hostname;
|
69 | var sockPath = query.sockPath || '/sockjs-node';
|
70 | var sockPort = query.sockPort || port;
|
71 |
|
72 | if (sockPort === 'location') {
|
73 | sockPort = loc.port;
|
74 | }
|
75 |
|
76 | return url.format({
|
77 | protocol: protocol,
|
78 | auth: auth,
|
79 | hostname: sockHost,
|
80 | port: sockPort,
|
81 |
|
82 |
|
83 |
|
84 | pathname: sockPath
|
85 | });
|
86 | }
|
87 |
|
88 | module.exports = createSocketUrl; |
\ | No newline at end of file |