Handle websocket authentication slightly differently to make errors easier to work with
This commit is contained in:
parent
02c0d934c3
commit
11c17245c2
2 changed files with 26 additions and 9 deletions
|
@ -11,7 +11,7 @@ export default () => {
|
||||||
|
|
||||||
const updateToken = (uuid: string, socket: Websocket) => {
|
const updateToken = (uuid: string, socket: Websocket) => {
|
||||||
getWebsocketToken(uuid)
|
getWebsocketToken(uuid)
|
||||||
.then(data => socket.setToken(data.token))
|
.then(data => socket.setToken(data.token, true))
|
||||||
.catch(error => console.error(error));
|
.catch(error => console.error(error));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ export default () => {
|
||||||
|
|
||||||
const socket = new Websocket();
|
const socket = new Websocket();
|
||||||
|
|
||||||
socket.on('SOCKET_OPEN', () => setConnectionState(true));
|
socket.on('auth success', () => setConnectionState(true));
|
||||||
socket.on('SOCKET_CLOSE', () => setConnectionState(false));
|
socket.on('SOCKET_CLOSE', () => setConnectionState(false));
|
||||||
socket.on('SOCKET_ERROR', () => setConnectionState(false));
|
socket.on('SOCKET_ERROR', () => setConnectionState(false));
|
||||||
socket.on('status', (status) => setServerStatus(status));
|
socket.on('status', (status) => setServerStatus(status));
|
||||||
|
@ -38,7 +38,10 @@ export default () => {
|
||||||
|
|
||||||
getWebsocketToken(server.uuid)
|
getWebsocketToken(server.uuid)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
// Connect and then set the authentication token.
|
||||||
socket.setToken(data.token).connect(data.socket);
|
socket.setToken(data.token).connect(data.socket);
|
||||||
|
|
||||||
|
// Once that is done, set the instance.
|
||||||
setInstance(socket);
|
setInstance(socket);
|
||||||
})
|
})
|
||||||
.catch(error => console.error(error));
|
.catch(error => console.error(error));
|
||||||
|
|
|
@ -23,9 +23,9 @@ export class Websocket extends EventEmitter {
|
||||||
private token: string = '';
|
private token: string = '';
|
||||||
|
|
||||||
// Connects to the websocket instance and sets the token for the initial request.
|
// Connects to the websocket instance and sets the token for the initial request.
|
||||||
connect (url: string) {
|
connect (url: string): this {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.socket = new Sockette(`${this.url}?token=${this.token}`, {
|
this.socket = new Sockette(`${this.url}`, {
|
||||||
onmessage: e => {
|
onmessage: e => {
|
||||||
try {
|
try {
|
||||||
let { event, args } = JSON.parse(e.data);
|
let { event, args } = JSON.parse(e.data);
|
||||||
|
@ -34,11 +34,19 @@ export class Websocket extends EventEmitter {
|
||||||
console.warn('Failed to parse incoming websocket message.', ex);
|
console.warn('Failed to parse incoming websocket message.', ex);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onopen: () => this.emit('SOCKET_OPEN'),
|
onopen: () => {
|
||||||
onreconnect: () => this.emit('SOCKET_RECONNECT'),
|
this.emit('SOCKET_OPEN');
|
||||||
|
this.authenticate();
|
||||||
|
},
|
||||||
|
onreconnect: () => {
|
||||||
|
this.emit('SOCKET_RECONNECT');
|
||||||
|
this.authenticate();
|
||||||
|
},
|
||||||
onclose: () => this.emit('SOCKET_CLOSE'),
|
onclose: () => this.emit('SOCKET_CLOSE'),
|
||||||
onerror: () => this.emit('SOCKET_ERROR'),
|
onerror: () => this.emit('SOCKET_ERROR'),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the URL connected to for the socket.
|
// Returns the URL connected to for the socket.
|
||||||
|
@ -48,11 +56,11 @@ export class Websocket extends EventEmitter {
|
||||||
|
|
||||||
// Sets the authentication token to use when sending commands back and forth
|
// Sets the authentication token to use when sending commands back and forth
|
||||||
// between the websocket instance.
|
// between the websocket instance.
|
||||||
setToken (token: string): this {
|
setToken (token: string, isUpdate = false): this {
|
||||||
this.token = token;
|
this.token = token;
|
||||||
|
|
||||||
if (this.url) {
|
if (isUpdate) {
|
||||||
this.send('auth', token);
|
this.authenticate();
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
@ -63,6 +71,12 @@ export class Websocket extends EventEmitter {
|
||||||
return this.token;
|
return this.token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
authenticate () {
|
||||||
|
if (this.url && this.token) {
|
||||||
|
this.send('auth', this.token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
close (code?: number, reason?: string) {
|
close (code?: number, reason?: string) {
|
||||||
this.url = null;
|
this.url = null;
|
||||||
this.token = '';
|
this.token = '';
|
||||||
|
|
Loading…
Reference in a new issue