mirror of
https://github.com/YunoHost-Apps/jappix_ynh.git
synced 2024-09-03 19:26:19 +02:00
210 lines
No EOL
5.3 KiB
JavaScript
210 lines
No EOL
5.3 KiB
JavaScript
/*
|
|
|
|
Jappix - An open social platform
|
|
These are the error functions for Jappix
|
|
|
|
-------------------------------------------------
|
|
|
|
License: AGPL
|
|
Author: Valérian Saliou
|
|
|
|
*/
|
|
|
|
// Bundle
|
|
var Errors = (function () {
|
|
|
|
/**
|
|
* Alias of this
|
|
* @private
|
|
*/
|
|
var self = {};
|
|
|
|
|
|
/**
|
|
* Shows the given error output
|
|
* @public
|
|
* @param {string} condition
|
|
* @param {string} reason
|
|
* @param {string} type
|
|
* @return {undefined}
|
|
*/
|
|
self.show = function(condition, reason, type) {
|
|
|
|
try {
|
|
// Enough data to output the error
|
|
if(condition || reason) {
|
|
// Initialize the error text
|
|
var eText = '';
|
|
|
|
// Any error condition
|
|
if(condition) {
|
|
eText += condition;
|
|
}
|
|
|
|
// Any error type
|
|
if(type && eText) {
|
|
eText += ' (' + type + ')';
|
|
}
|
|
|
|
// Any error reason
|
|
if(reason) {
|
|
if(eText) {
|
|
eText += ' - ';
|
|
}
|
|
|
|
eText += reason;
|
|
}
|
|
|
|
// We reveal the error
|
|
Board.openThisError(1);
|
|
|
|
// Create the error text
|
|
$('#board .one-board.error[data-id="1"] span').text(eText);
|
|
}
|
|
|
|
// Not enough data to output the error: output a generic board
|
|
else {
|
|
Board.openThisError(2);
|
|
}
|
|
} catch(e) {
|
|
Console.error('Errors.show', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the error from a packet and return true if any error
|
|
* @public
|
|
* @param {object} packet
|
|
* @return {boolean}
|
|
*/
|
|
self.handle = function(packet) {
|
|
|
|
/* REF: http://xmpp.org/extensions/xep-0086.html */
|
|
|
|
try {
|
|
// Initialize
|
|
var type, code, reason, condition;
|
|
var node = $(packet);
|
|
|
|
// First level error (connection error)
|
|
if(node.is('error')) {
|
|
// Get the value
|
|
code = node.attr('code');
|
|
|
|
// Specific error reason
|
|
switch(code) {
|
|
case '401':
|
|
reason = Common._e("Authorization failed");
|
|
break;
|
|
|
|
case '409':
|
|
reason = Common._e("Registration failed, please choose a different username");
|
|
break;
|
|
|
|
case '503':
|
|
reason = Common._e("Service unavailable");
|
|
break;
|
|
|
|
case '500':
|
|
reason = Common._e("Internal server error, try later");
|
|
break;
|
|
|
|
default:
|
|
reason = node.find('text').text();
|
|
break;
|
|
}
|
|
|
|
// Remove the general wait item (security)
|
|
Interface.removeGeneralWait();
|
|
|
|
// Show reconnect pane
|
|
if(Connection.current_session && Connection.connected) {
|
|
// Anonymous?
|
|
if(Utils.isAnonymous()) {
|
|
Connection.createReconnect('anonymous');
|
|
} else {
|
|
Connection.createReconnect('normal');
|
|
}
|
|
}
|
|
|
|
// Show the homepage (security)
|
|
else if(!Connection.current_session || !Connection.connected) {
|
|
$('#home').show();
|
|
Interface.title('home');
|
|
}
|
|
|
|
// Still connected? (security)
|
|
if(Common.isConnected()) {
|
|
con.disconnect();
|
|
}
|
|
|
|
Console.error('First level error received.');
|
|
}
|
|
|
|
// Second level error (another error)
|
|
else if(node.find('error').size()) {
|
|
type = node.find('error').attr('type');
|
|
reason = node.find('error text').text();
|
|
condition = packet.getElementsByTagName('error').item(0).childNodes.item(0).nodeName.replace(/-/g, ' ');
|
|
|
|
Console.error('Second level error received.');
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
// Show the error board
|
|
self.show(condition, reason, type);
|
|
|
|
// Return there's an error
|
|
return true;
|
|
} catch(e) {
|
|
Console.error('Errors.handle', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the error reply of a packet
|
|
* @public
|
|
* @param {object} packet
|
|
* @return {boolean}
|
|
*/
|
|
self.handleReply = function(packet) {
|
|
|
|
try {
|
|
return self.handle(packet.getNode());
|
|
} catch(e) {
|
|
Console.error('Errors.handleReply', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the error reply for a message
|
|
* @public
|
|
* @param {object} packet
|
|
* @return {boolean}
|
|
*/
|
|
self.handleMessage = function(packet) {
|
|
|
|
try {
|
|
if(!self.handleReply(packet)) {
|
|
Message.handle(packet);
|
|
}
|
|
} catch(e) {
|
|
Console.error('Errors.handleMessage', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Return class scope
|
|
*/
|
|
return self;
|
|
|
|
})(); |