diff --git a/background.js b/background.js
index 811910f..d44220d 100644
--- a/background.js
+++ b/background.js
@@ -15,8 +15,8 @@
//
chrome.app.runtime.onLaunched.addListener(function() {
- chrome.app.window.create('chromesoul.html', {
- 'width': 800,
- 'height': 500
- });
+ chrome.app.window.create('chromesoul.html', {
+ 'width': 800,
+ 'height': 500
+ });
});
diff --git a/chromesoul.html b/chromesoul.html
index 56ec90b..2b74add 100644
--- a/chromesoul.html
+++ b/chromesoul.html
@@ -19,16 +19,16 @@
diff --git a/chromesoul.js b/chromesoul.js
index a60e1f0..c5cf7bb 100644
--- a/chromesoul.js
+++ b/chromesoul.js
@@ -1,10 +1,10 @@
var chromesoul = (function() {
var chromesoul = {
- "opts": new OptionsManager(),
- "ui": new Nsui(),
- "contacts": new ContactList(),
- "client": new Client(),
- "avatars": new AvatarManager()
+ "opts": new OptionsManager(),
+ "ui": new Nsui(),
+ "contacts": new ContactList(),
+ "client": new Client(),
+ "avatars": new AvatarManager()
};
return (window.chromesoul = window.$cs = chromesoul);
diff --git a/lib/avatars.js b/lib/avatars.js
index ff77ab7..0a0169e 100644
--- a/lib/avatars.js
+++ b/lib/avatars.js
@@ -24,25 +24,25 @@ AvatarManager.prototype.getContactPic = function(name, callback) {
xhr.open("GET", "http://cdn.local.epitech.net/userprofil/profilview/" + name + ".jpg", true);
xhr.responseType = "blob";
xhr.onload = (function(elem) {
- return function(e) {
- if (e.target.status === 200) {
- elem.avatars[name] = window.webkitURL.createObjectURL(this.response);
- } else {
- elem.avatars[name] = "img/default-avatar.jpg";
- }
+ return function(e) {
+ if (e.target.status === 200) {
+ elem.avatars[name] = window.webkitURL.createObjectURL(this.response);
+ } else {
+ elem.avatars[name] = "img/default-avatar.jpg";
+ }
- if (typeof callback !== "undefined") {
- callback(elem.avatars[name]);
- }
- };
+ if (typeof callback !== "undefined") {
+ callback(elem.avatars[name]);
+ }
+ };
})(this);
xhr.send();
}
AvatarManager.prototype.get = function(name, callback) {
if (typeof this.avatars[name] === "undefined") {
- this.getContactPic(name, callback);
+ this.getContactPic(name, callback);
} else {
- callback(this.avatars[name]);
+ callback(this.avatars[name]);
}
};
diff --git a/lib/client.js b/lib/client.js
index 2eed5e6..fccc27e 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -26,41 +26,41 @@ var Client = function() {
Client.prototype.createSocket = function() {
if (this.socket === null) {
- this.socket = new TxtSocket();
- this.socket.onError = (function(elem) {
- return function() {
- elem.is_connected = false;
- elem.connect();
- };
- })(this);
+ this.socket = new TxtSocket();
+ this.socket.onError = (function(elem) {
+ return function() {
+ elem.is_connected = false;
+ elem.connect();
+ };
+ })(this);
}
};
Client.prototype.connect = function() {
if (!this.is_connected) {
- this.createSocket();
- this.socket.connect(this.client.host, this.client.port, (function(elem) {
- return function() {
- elem.client.connect(elem, function() {
- if (elem.is_connected) {
- elem.daemonize();
- elem.changeStatus();
- elem.addContact();
- } else {
- elem.disconnect();
- }
- });
- };
- })(this));
+ this.createSocket();
+ this.socket.connect(this.client.host, this.client.port, (function(elem) {
+ return function() {
+ elem.client.connect(elem, function() {
+ if (elem.is_connected) {
+ elem.daemonize();
+ elem.changeStatus();
+ elem.addContact();
+ } else {
+ elem.disconnect();
+ }
+ });
+ };
+ })(this));
}
}
Client.prototype.disconnect = function() {
if (this.is_connected) {
- this.is_connected = false;
- this.client.disconnect(this);
- this.socket.disconnect();
- this.socket = null;
+ this.is_connected = false;
+ this.client.disconnect(this);
+ this.socket.disconnect();
+ this.socket = null;
}
this.changeStatus(this.client.status_disconnected);
};
@@ -72,49 +72,49 @@ Client.prototype.reconnect = function() {
Client.prototype.daemonize = function() {
this.socket.read((function(elem) {
- return function(data) {
- elem.client.recv(elem, data);
- elem.daemonize();
- };
+ return function(data) {
+ elem.client.recv(elem, data);
+ elem.daemonize();
+ };
})(this));
};
Client.prototype.changeStatus = function(status) {
if (typeof status === 'undefined') {
- status = this.client.default_status;
+ status = this.client.default_status;
}
if (status !== this.status) {
- this.status = status;
- this.updateStatus();
+ this.status = status;
+ this.updateStatus();
}
};
Client.prototype.updateStatus = function() {
if (this.status !== null) {
- this.client.changeStatus(this);
+ this.client.changeStatus(this);
}
};
Client.prototype.addContact = function(name) {
if (typeof name !== 'undefined') {
- this.waiting_contacts.push(name);
+ this.waiting_contacts.push(name);
}
if (this.is_connected) {
- var tmp = this.waiting_contacts;
- this.waiting_contacts = [];
- this.client.addContact(this, tmp);
+ var tmp = this.waiting_contacts;
+ this.waiting_contacts = [];
+ this.client.addContact(this, tmp);
}
};
Client.prototype.rmContact = function(name) {
if (this.is_connected) {
- this.client.rmContact(this, name);
+ this.client.rmContact(this, name);
}
};
Client.prototype.speak = function(to, msg) {
if (this.is_connected) {
- this.client.speak(this, to, msg);
+ this.client.speak(this, to, msg);
}
};
@@ -124,14 +124,14 @@ Client.prototype.init = function(client, ui) {
this.connect();
setInterval((function(elem) {
- return function() {
- elem.connect();
- };
+ return function() {
+ elem.connect();
+ };
})(this), 10000);
setInterval((function(elem) {
- return function() {
- elem.updateStatus();
- };
+ return function() {
+ elem.updateStatus();
+ };
})(this), 180000);
};
diff --git a/lib/contacts.nsui.js b/lib/contacts.nsui.js
index ab1df9a..c3d45bd 100644
--- a/lib/contacts.nsui.js
+++ b/lib/contacts.nsui.js
@@ -24,17 +24,17 @@ ContactList.prototype.insertContact = function(elem) {
var i, next = null;
for (i in this.contacts) {
- if (this.contacts.hasOwnProperty(i)) {
- if (elem.name < this.contacts[i].name && (next === null || this.contacts[i].name < next.name)) {
- next = this.contacts[i];
- }
- }
+ if (this.contacts.hasOwnProperty(i)) {
+ if (elem.name < this.contacts[i].name && (next === null || this.contacts[i].name < next.name)) {
+ next = this.contacts[i];
+ }
+ }
}
if (next !== null) {
- this.lst.insertBefore(elem.li, next.li);
+ this.lst.insertBefore(elem.li, next.li);
} else {
- this.lst.appendChild(elem.li);
+ this.lst.appendChild(elem.li);
}
};
@@ -42,83 +42,84 @@ ContactList.prototype.addContact = function(name) {
var infos = {}, li = null, login = null, close = null;
if (typeof this.contacts[name] === "undefined") {
- infos = {
- "name": name,
- "li": null,
- "avatar": null
- };
+ infos = {
+ "name": name,
+ "li": null,
+ "avatar": null
+ };
- li = document.createElement("li");
- $cs.avatars.get(infos.name, function(url) {
- li.style.backgroundImage = "url('" + url + "')";
- });
- img = document.createElement("img");
- this.setImageStatus(img, "offline");
- login = document.createElement("span");
- close = document.createElement("span");
- close.classList.add("remove");
- login.innerHTML = name;
- close.innerHTML = '';
if (typeof msg.login !== "undefined" && msg.login !== null) {
- fmt += '
' + msg.login + ': ';
+ fmt += '
' + msg.login + ': ';
} else {
- fmt += '
' + document.getElementById('login').value + ': ';
+ fmt += '
' + document.getElementById('login').value + ': ';
}
fmt += this.sanitizeText(msg.message).replace(lnk_exp, '
$1');
@@ -205,59 +205,59 @@ Nsui.prototype.sanitizeText = function(str) {
};
Nsui.prototype.currentTabStyle = function() {
- $cs.opts.restore();
- if (this.tab_lst.length > 1) {
- for (var tab in this.tab_lst) {
- if (tab.el_lst.classList.contains("tab-current")) {
- tab.chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
- break;
- }
- }
- }
- else if (this.tab_lst.length > 0) {
- this.tab_lst[0].chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
- }
+ $cs.opts.restore();
+ if (this.tab_lst.length > 1) {
+ for (var tab in this.tab_lst) {
+ if (tab.el_lst.classList.contains("tab-current")) {
+ tab.chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
+ break;
+ }
+ }
+ }
+ else if (this.tab_lst.length > 0) {
+ this.tab_lst[0].chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
+ }
};
Nsui.prototype.showContent = function(part_id) {
var i, ctn_lst = ["config-pannel", "chat-pannel"];
- if (part_id === "chat-pannel") {
- this.currentTabStyle();
- }
+ if (part_id === "chat-pannel") {
+ this.currentTabStyle();
+ }
for (i = ctn_lst.length - 1; i>= 0; --i) {
- if (ctn_lst[i] === part_id) {
- document.getElementById(ctn_lst[i]).style.display = "block";
- } else {
- document.getElementById(ctn_lst[i]).style.display = "none";
- }
+ if (ctn_lst[i] === part_id) {
+ document.getElementById(ctn_lst[i]).style.display = "block";
+ } else {
+ document.getElementById(ctn_lst[i]).style.display = "none";
+ }
}
};
Nsui.prototype.switchContent = function(part_id, part_id_to) {
if (document.getElementById(part_id).style.display !== "block") {
- this.showContent(part_id);
+ this.showContent(part_id);
} else {
- this.showContent(part_id_to);
+ this.showContent(part_id_to);
}
};
Nsui.prototype.init = function() {
window.onfocus = (function(elem) {
- return function() {
- elem.focus = true;
- };
+ return function() {
+ elem.focus = true;
+ };
})(this);
window.onblur = (function(elem) {
- return function() {
- elem.focus = false;
- };
+ return function() {
+ elem.focus = false;
+ };
})(this);
document.getElementById("settings-btn").addEventListener("click", (function(elem) {
- return function() {
- elem.switchContent("config-pannel", "chat-pannel");
- };
+ return function() {
+ elem.switchContent("config-pannel", "chat-pannel");
+ };
})(this), false);
Tab.prototype.closeHandler = (function(elem) {
@@ -268,7 +268,7 @@ Nsui.prototype.init = function() {
Tab.prototype.showHandler = (function(elem) {
return function() {
- elem.hideAllTabs();
+ elem.hideAllTabs();
};
})(this);
diff --git a/lib/options.js b/lib/options.js
index 500f195..1c0d2c1 100644
--- a/lib/options.js
+++ b/lib/options.js
@@ -25,36 +25,36 @@ var OptionsManager = function() {
OptionsManager.prototype.types = {
"get": {
- "text": function(elem) {
- return elem.value;
- },
- "password": function(elem) {
- return elem.value;
- },
- "checkbox": function(elem) {
- return elem.checked;
- },
- "number": function(elem) {
- return elem.value;
- }
+ "text": function(elem) {
+ return elem.value;
+ },
+ "password": function(elem) {
+ return elem.value;
+ },
+ "checkbox": function(elem) {
+ return elem.checked;
+ },
+ "number": function(elem) {
+ return elem.value;
+ }
},
"set": {
- "text": function(elem, val) {
- elem.value = val;
- },
- "password": function(elem, val) {
- elem.value = val;
- },
- "checkbox": function(elem, val) {
- if (!val) {
- elem.removeAttribute('checked');
- } else {
- elem.setAttribute('checked');
- }
- },
- "number": function(elem, val) {
- elem.value = val;
- }
+ "text": function(elem, val) {
+ elem.value = val;
+ },
+ "password": function(elem, val) {
+ elem.value = val;
+ },
+ "checkbox": function(elem, val) {
+ if (!val) {
+ elem.removeAttribute('checked');
+ } else {
+ elem.setAttribute('checked');
+ }
+ },
+ "number": function(elem, val) {
+ elem.value = val;
+ }
}
};
@@ -62,7 +62,7 @@ OptionsManager.prototype.get = function(name) {
var ret = null;
if (typeof this.values[name] !== "undefined") {
- ret = this.values[name];
+ ret = this.values[name];
}
return ret;
@@ -76,47 +76,47 @@ OptionsManager.prototype.init = function() {
this.restore();
if (this.save !== null) {
- this.save_btn.addEventListener("click", (function(elem) {
- return function() {
- elem.save();
- };
- })(this));
+ this.save_btn.addEventListener("click", (function(elem) {
+ return function() {
+ elem.save();
+ };
+ })(this));
}
};
OptionsManager.prototype.savePart = function(pass) {
var i = 0, data = {}, storage;
- if (pass) {
- storage = this.pass_storage;
+ if (pass) {
+ storage = this.pass_storage;
} else {
- storage = this.storage;
+ storage = this.storage;
}
if (this.opts !== null) {
- for (i = this.opts.length - 1; i >= 0; --i) {
- if ((pass && (this.getElemType(this.opts[i]) === "password" || this.getElemType(this.opts[i]) === "text"))
- || (!pass && this.getElemType(this.opts[i]) !== "password" && this.getElemType(this.opts[i]) !== "text")) {
- data[this.opts[i].id] = this.getElemValue(this.opts[i]);
- this.values[this.opts[i].id] = data[this.opts[i].id];
- }
- }
- storage.set(data, (function(elem) {
+ for (i = this.opts.length - 1; i >= 0; --i) {
+ if ((pass && (this.getElemType(this.opts[i]) === "password" || this.getElemType(this.opts[i]) === "text"))
+ || (!pass && this.getElemType(this.opts[i]) !== "password" && this.getElemType(this.opts[i]) !== "text")) {
+ data[this.opts[i].id] = this.getElemValue(this.opts[i]);
+ this.values[this.opts[i].id] = data[this.opts[i].id];
+ }
+ }
+ storage.set(data, (function(elem) {
return function () {
- if (elem !== null) {
+ if (elem !== null) {
elem.innerHTML = "Options saved.";
setTimeout(function() {
- elem.innerHTML = "";
+ elem.innerHTML = "";
}, 3000);
- }
+ }
};
- })(this.status));
+ })(this.status));
}
};
OptionsManager.prototype.save = function() {
this.savePart(true);
- this.savePart(false);
+ this.savePart(false);
};
OptionsManager.prototype.restore = function() {
@@ -125,7 +125,7 @@ OptionsManager.prototype.restore = function() {
for (i in items) {
el = document.getElementById(i);
if (el !== null) {
- elem.values[i] = items[i];
+ elem.values[i] = items[i];
elem.setElemValue(el, items[i]);
}
}
@@ -144,7 +144,7 @@ OptionsManager.prototype.getElemValue = function(elem) {
var val = null, type = this.getElemType(elem);
if (typeof this.types.get[type] !== "undefined") {
- val = this.types.get[type](elem);
+ val = this.types.get[type](elem);
}
return val;
@@ -154,7 +154,7 @@ OptionsManager.prototype.setElemValue = function(elem, val) {
var type = elem.getAttribute('type');
if (typeof this.types.set[type] !== "undefined") {
- this.types.set[type](elem, val);
+ this.types.set[type](elem, val);
}
};
diff --git a/lib/tab.nsui.js b/lib/tab.nsui.js
old mode 100755
new mode 100644
index 9765ad7..cdcb0f6
--- a/lib/tab.nsui.js
+++ b/lib/tab.nsui.js
@@ -22,7 +22,7 @@ var Tab = function(name) {
this.buff_len = 1000;
this.history_index = 0;
this.history = [];
- $cs.opts.restore();
+ $cs.opts.restore();
this.initListElement();
this.initBodyElement();
};
@@ -63,53 +63,53 @@ Tab.prototype.initListElement = function() {
Tab.prototype.initBodyElement = function() {
var chat_input_w = document.createElement("div");
-
+
this.chat_input = document.createElement("input");
this.chat_input.placeholder = "Some text here...";
-
+
this.chat_log = document.createElement("p");
this.chat_log.classList.add("chat-log");
- this.chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
-
+ this.chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
+
this.el_body = document.createElement("div");
this.el_body.classList.add("tab-body");
this.el_body.id = this.name;
this.el_body.style.display = "none";
-
+
chat_input_w.classList.add("chat-input-wrapper");
-
+
this.chat_input.classList.add("chat-input");
this.chat_input.setAttribute("type", "text");
this.chat_input.addEventListener("keyup", (function(elem) {
- return function(event) {
- var key_submit = 13, key_up = 38, key_down = 40;
+ return function(event) {
+ var key_submit = 13, key_up = 38, key_down = 40;
- if (event.keyCode === key_submit && this.value != "") {
- var msg = this.value;
- this.value = "";
+ if (event.keyCode === key_submit && this.value != "") {
+ var msg = this.value;
+ this.value = "";
- if (typeof $cs.client !== "undefined" && $cs.opts.get("enable_msg")) {
- $cs.client.speak(elem.name, msg);
- $cs.ui.addContentToTab(elem.name, {"message": msg});
- } else {
- console.error("chromesoul client not found");
- }
- } else if (event.keyCode === key_up) {
- if (elem.history_index < elem.history.length) {
- elem.history_index++;
- this.value = elem.history[elem.history.length - elem.history_index];
- }
- } else if (event.keyCode === key_down) {
- if (elem.history_index > 0) {
- elem.history_index--;
- if (elem.history_index > 0) {
- this.value = elem.history[elem.history.length - elem.history_index];
- } else {
- this.value = "";
- }
- }
- }
- };
+ if (typeof $cs.client !== "undefined" && $cs.opts.get("enable_msg")) {
+ $cs.client.speak(elem.name, msg);
+ $cs.ui.addContentToTab(elem.name, {"message": msg});
+ } else {
+ console.error("chromesoul client not found");
+ }
+ } else if (event.keyCode === key_up) {
+ if (elem.history_index < elem.history.length) {
+ elem.history_index++;
+ this.value = elem.history[elem.history.length - elem.history_index];
+ }
+ } else if (event.keyCode === key_down) {
+ if (elem.history_index > 0) {
+ elem.history_index--;
+ if (elem.history_index > 0) {
+ this.value = elem.history[elem.history.length - elem.history_index];
+ } else {
+ this.value = "";
+ }
+ }
+ }
+ };
})(this), false);
chat_input_w.appendChild(this.chat_input);
@@ -120,7 +120,7 @@ Tab.prototype.initBodyElement = function() {
Tab.prototype.close = function() {
if (typeof this.closeHandler !== "undefined") {
- this.closeHandler();
+ this.closeHandler();
}
this.wr_body.removeChild(this.el_body);
this.wr_lst.removeChild(this.el_lst);
@@ -132,16 +132,16 @@ Tab.prototype.hide = function() {
};
Tab.prototype.show = function() {
- this.options.restore();
+ this.options.restore();
if (typeof this.showHandler !== "undefined") {
- this.showHandler();
+ this.showHandler();
}
this.el_lst.classList.remove("tab-active");
this.el_lst.classList.add("tab-current");
this.el_body.style.display = "block";
- $cs.opts.restore()
+ $cs.opts.restore()
this.chat_log.scrollTop = 42000;
- this.chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
+ this.chat_log.style.fontSize = $cs.opts.values["chat-size"] + "px";
this.chat_input.focus();
};
@@ -155,19 +155,19 @@ Tab.prototype.setActive = function() {
Tab.prototype.flushText = function() {
while (this.chat_log.children.length > this.buff_len) {
- this.chat_log.removeChild(this.chat_log.children[0]);
+ this.chat_log.removeChild(this.chat_log.children[0]);
}
while (this.history.length > this.buff_len) {
- this.history.shift();
+ this.history.shift();
}
};
Tab.prototype.appendMessage = function(msg) {
this.history_index = 0;
this.chat_log.innerHTML += '
' + $cs.ui.formatMessage(msg) + '
';
-
+
if (!(typeof msg.login !== "undefined" && msg.login !== null)) {
- this.history.push(msg.message);
+ this.history.push(msg.message);
}
this.flushText();
this.chat_log.scrollTop = 42 * this.buff_len;
diff --git a/lib/txt_socket.js b/lib/txt_socket.js
index 0bea6b4..1d9fcf6 100644
--- a/lib/txt_socket.js
+++ b/lib/txt_socket.js
@@ -22,17 +22,17 @@ var TxtSocket = function() {
TxtSocket.prototype.connect = function(host, port, callback) {
chrome.socket.create('tcp', {}, (function(elem) {
- return function(inf) {
- elem.socket_id = inf.socketId;
- chrome.socket.connect(elem.socket_id, host, port, callback);
- };
+ return function(inf) {
+ elem.socket_id = inf.socketId;
+ chrome.socket.connect(elem.socket_id, host, port, callback);
+ };
})(this));
};
TxtSocket.prototype.disconnect = function() {
if (this.socket_id !== null) {
- chrome.socket.disconnect(this.socket_id);
- chrome.socket.destroy(this.socket_id);
+ chrome.socket.disconnect(this.socket_id);
+ chrome.socket.destroy(this.socket_id);
}
};
@@ -40,32 +40,32 @@ TxtSocket.prototype.read = function(callback) {
var tmp = '', offset = this.buffer.indexOf("\n");
if (offset === -1) {
- chrome.socket.read(this.socket_id, (function(elem) {
- return function(rd_inf) {
- if (rd_inf.resultCode > 0) {
- elem.buffer += elem.ab2str(rd_inf.data);
- elem.read(callback);
- } else {
- elem.throwError({code: rd_inf.resultCode});
- }
- };
- })(this));
+ chrome.socket.read(this.socket_id, (function(elem) {
+ return function(rd_inf) {
+ if (rd_inf.resultCode > 0) {
+ elem.buffer += elem.ab2str(rd_inf.data);
+ elem.read(callback);
+ } else {
+ elem.throwError({code: rd_inf.resultCode});
+ }
+ };
+ })(this));
} else {
- tmp = this.buffer.substr(0, offset);
- this.buffer = this.buffer.substr(offset + 1);
- callback(tmp);
+ tmp = this.buffer.substr(0, offset);
+ this.buffer = this.buffer.substr(offset + 1);
+ callback(tmp);
}
};
TxtSocket.prototype.write = function(str, callback) {
chrome.socket.write(this.socket_id, this.str2ab(str), (function(elem) {
- return function(w_inf) {
- if (w_inf.bytesWritten >= 0) {
- callback(w_inf);
- } else {
- elem.throwError({code: w_inf.bytesWritten});
- }
- };
+ return function(w_inf) {
+ if (w_inf.bytesWritten >= 0) {
+ callback(w_inf);
+ } else {
+ elem.throwError({code: w_inf.bytesWritten});
+ }
+ };
})(this));
};
@@ -83,7 +83,7 @@ TxtSocket.prototype.str2ab = function(str) {
var i = 0, buff = new ArrayBuffer(str.length), buff_v = new Uint8Array(buff);
for (i = str.length - 1; i >= 0; --i) {
- buff_v[i] = str.charCodeAt(i);
+ buff_v[i] = str.charCodeAt(i);
}
return buff;
diff --git a/manifest.json b/manifest.json
index e427cd9..4c48539 100644
--- a/manifest.json
+++ b/manifest.json
@@ -6,18 +6,18 @@
"offline_enabled": false,
"description": "Netsoul client for Google Chrome.",
"icons": {
- "16": "icon_16.png",
- "128": "icon_128.png"
+ "16": "icon_16.png",
+ "128": "icon_128.png"
},
"app": {
- "background": {
- "scripts": ["background.js"]
- }
+ "background": {
+ "scripts": ["background.js"]
+ }
},
"permissions": [
- "http://cdn.local.epitech.net/userprofil/profilview/",
- "storage",
- "notifications",
- {"socket": ["tcp-connect:ns-server.epita.fr:4242"]}
+ "http://cdn.local.epitech.net/userprofil/profilview/",
+ "storage",
+ "notifications",
+ {"socket": ["tcp-connect:ns-server.epita.fr:4242"]}
]
}