Handle wrong password. Fixes #4.
This commit introduces a way to handle wrong password. The only way to know it is by sending an other message after the init one. If we receive an answer to this second message id then we know we are connected with the good password, otherwise we will received an onclose event from the websocket.
This commit is contained in:
parent
55b720466b
commit
d6de5805a2
2 changed files with 77 additions and 37 deletions
|
@ -56,6 +56,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label" for="password">WeeChat relay password</label>
|
<label class="control-label" for="password">WeeChat relay password</label>
|
||||||
|
<div class="alert alert-danger" ng-show="passwordError">
|
||||||
|
Error wrong password
|
||||||
|
</div>
|
||||||
<input type="password" class="form-control" id="password" ng-model="password" placeholder="Password">
|
<input type="password" class="form-control" id="password" ng-model="password" placeholder="Password">
|
||||||
<p class="help-block">Password will be stored in your browser session</p>
|
<p class="help-block">Password will be stored in your browser session</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
109
js/websockets.js
109
js/websockets.js
|
@ -77,7 +77,8 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi
|
||||||
old.fullName = obj['full_name'];
|
old.fullName = obj['full_name'];
|
||||||
old.title = obj['title'];
|
old.title = obj['title'];
|
||||||
old.number = obj['number'];
|
old.number = obj['number'];
|
||||||
}
|
}
|
||||||
|
|
||||||
var handleBufferRenamed = function(message) {
|
var handleBufferRenamed = function(message) {
|
||||||
var obj = message['objects'][0]['content'][0];
|
var obj = message['objects'][0]['content'][0];
|
||||||
var buffer = obj['pointers'][0];
|
var buffer = obj['pointers'][0];
|
||||||
|
@ -150,8 +151,6 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
|
||||||
var callbacks = {}
|
var callbacks = {}
|
||||||
var currentCallBackId = 0;
|
var currentCallBackId = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var doSendWithCallback = function(message) {
|
var doSendWithCallback = function(message) {
|
||||||
var defer = $q.defer();
|
var defer = $q.defer();
|
||||||
callbacks[++currentCallBackId] = {
|
callbacks[++currentCallBackId] = {
|
||||||
|
@ -180,52 +179,86 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
|
||||||
websocket.binaryType = "arraybuffer"
|
websocket.binaryType = "arraybuffer"
|
||||||
|
|
||||||
websocket.onopen = function (evt) {
|
websocket.onopen = function (evt) {
|
||||||
|
|
||||||
$log.info("Connected to relay");
|
$log.info("Connected to relay");
|
||||||
$rootScope.connected = true;
|
|
||||||
|
// First message must be an init request
|
||||||
|
// with the password
|
||||||
doSend(weeChat.Protocol.formatInit({
|
doSend(weeChat.Protocol.formatInit({
|
||||||
password: passwd,
|
password: passwd,
|
||||||
compression: 'off'
|
compression: 'off'
|
||||||
}));
|
}));
|
||||||
doSendWithCallback(weeChat.Protocol.formatHdata({
|
|
||||||
path: 'buffer:gui_buffers(*)',
|
// password is bad until the next message
|
||||||
keys: ['local_variables,notify,number,full_name,short_name,title']
|
// received proven the otherwise.
|
||||||
|
$rootScope.passwordError = true;
|
||||||
|
|
||||||
|
// We are asking for the weechat version here
|
||||||
|
// to avoid two problems :
|
||||||
|
// - If the version is below 0.4.2, we will have a bug
|
||||||
|
// with websocket.
|
||||||
|
// - If the user password is wrong, we will be disconneted
|
||||||
|
// at this step.
|
||||||
|
doSendWithCallback(weeChat.Protocol.formatInfo({
|
||||||
|
name: 'version',
|
||||||
})).then(function(message) {
|
})).then(function(message) {
|
||||||
$log.info("Parsing bufinfo");
|
// If we have received this message
|
||||||
var bufferInfos = message['objects'][0]['content'];
|
// that means the user password is good.
|
||||||
// buffers objects
|
$rootScope.passwordError = false;
|
||||||
for (var i = 0; i < bufferInfos.length ; i++) {
|
|
||||||
var buffer = new models.Buffer(bufferInfos[i]);
|
// Parse the version info message to retrieve
|
||||||
models.addBuffer(buffer);
|
// the current weechat version.
|
||||||
// Switch to first buffer on startup
|
var version = message['objects'][0]['content']['value'];
|
||||||
if (i == 0) {
|
$rootScope.version = version;
|
||||||
models.setActiveBuffer(buffer.id);
|
$log.info(version);
|
||||||
|
}).then(function() {
|
||||||
|
doSendWithCallback(weeChat.Protocol.formatHdata({
|
||||||
|
path: 'buffer:gui_buffers(*)',
|
||||||
|
keys: ['local_variables,notify,number,full_name,short_name,title']
|
||||||
|
})).then(function(message) {
|
||||||
|
$log.info("Parsing bufinfo");
|
||||||
|
var bufferInfos = message['objects'][0]['content'];
|
||||||
|
// buffers objects
|
||||||
|
for (var i = 0; i < bufferInfos.length ; i++) {
|
||||||
|
var buffer = new models.Buffer(bufferInfos[i]);
|
||||||
|
models.addBuffer(buffer);
|
||||||
|
// Switch to first buffer on startup
|
||||||
|
if (i == 0) {
|
||||||
|
models.setActiveBuffer(buffer.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}).then(function() {
|
||||||
}).then(function() {
|
$log.info("Parsing lineinfo");
|
||||||
$log.info("Parsing lineinfo");
|
doSendWithCallback(weeChat.Protocol.formatHdata({
|
||||||
doSendWithCallback(weeChat.Protocol.formatHdata({
|
path: "buffer:gui_buffers(*)/own_lines/last_line(-"+storage.get('lines')+")/data",
|
||||||
path: "buffer:gui_buffers(*)/own_lines/last_line(-"+storage.get('lines')+")/data",
|
keys: []
|
||||||
keys: []
|
})).then(function(hdata) {
|
||||||
})).then(function(hdata) {
|
handlers.handleLineInfo(hdata);
|
||||||
handlers.handleLineInfo(hdata);
|
});
|
||||||
|
}).then(function() {
|
||||||
|
$log.info("Requesting hotlist");
|
||||||
|
doSendWithCallback(weeChat.Protocol.formatHdata({
|
||||||
|
path: "hotlist:gui_hotlist(*)",
|
||||||
|
keys: []
|
||||||
|
})).then(function(hdata) {
|
||||||
|
handlers.handleHotlistInfo(hdata)
|
||||||
|
});
|
||||||
|
}).then(function() {
|
||||||
|
doSend(weeChat.Protocol.formatSync({}));
|
||||||
|
$log.info("Synced");
|
||||||
|
|
||||||
|
// here we are really connected !
|
||||||
|
$rootScope.connected = true;
|
||||||
});
|
});
|
||||||
}).then(function() {
|
|
||||||
$log.info("Requesting hotlist");
|
|
||||||
doSendWithCallback(weeChat.Protocol.formatHdata({
|
|
||||||
path: "hotlist:gui_hotlist(*)",
|
|
||||||
keys: []
|
|
||||||
})).then(function(hdata) {
|
|
||||||
handlers.handleHotlistInfo(hdata)
|
|
||||||
});
|
|
||||||
}).then(function() {
|
|
||||||
doSend(weeChat.Protocol.formatSync({}));
|
|
||||||
$log.info("Synced");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
websocket.onclose = function (evt) {
|
websocket.onclose = function (evt) {
|
||||||
$log.info("Disconnected from relay");
|
$log.info("Disconnected from relay");
|
||||||
$rootScope.connected = false;
|
$rootScope.connected = false;
|
||||||
|
if ($rootScope.passwordError == true) {
|
||||||
|
$log.info("wrong password");
|
||||||
|
}
|
||||||
$rootScope.$apply();
|
$rootScope.$apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,6 +276,10 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
|
||||||
}
|
}
|
||||||
|
|
||||||
websocket.onerror = function (evt) {
|
websocket.onerror = function (evt) {
|
||||||
|
// on error it means the connection problem
|
||||||
|
// come from the relay not from the password.
|
||||||
|
$rootScope.passwordError = false;
|
||||||
|
|
||||||
if (evt.type == "error" && websocket.readyState != 1) {
|
if (evt.type == "error" && websocket.readyState != 1) {
|
||||||
$rootScope.errorMessage = true;
|
$rootScope.errorMessage = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue