aboutsummaryrefslogtreecommitdiffhomepage
path: root/main
diff options
context:
space:
mode:
authorMarvin Borner2018-05-06 14:53:33 +0200
committerMarvin Borner2018-05-06 14:53:33 +0200
commit42f9f655b48c5b9b8be58a3f037e3edf8c339a4d (patch)
tree9303181d35be76c20fc7132ad98128bffa5a3b3c /main
parent9be672cd85682c865bdeb4463945d1362049d871 (diff)
Chat verification
Diffstat (limited to 'main')
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/js/chat.js11
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php138
2 files changed, 85 insertions, 64 deletions
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
index f131db1..2cc90cb 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
@@ -10,17 +10,16 @@ function InitializeChatServer() {
var ChatSocket = new WebSocket('wss://marvinborner.ddnss.de:1337');
ChatSocket.onerror = function () {
setTimeout(function () {
- console.log("[WEBSOCKET LOGGER] Connection failed. Trying again...");
+ console.log("[CHATSOCKET LOGGER] Connection failed. Trying again...");
InitializeChatServer();
}, 5000);
};
ChatSocket.onopen = function () {
ChatSocket.send(JSON.stringify({ClientMessageType: "Verify", Cookie: document.cookie, UserID: current_user_id}));
// CONNECTION SUCCESSFUL!
- console.log("[WEBSOCKET LOGGER] Chat connection established!");
+ console.log("[CHATSOCKET LOGGER] Chat connection established!");
// GOT MESSAGE
ChatSocket.onmessage = function (e) {
- console.log("[WEBSOCKET LOGGER] Received a message from server!");
// DECLARATIONS
var TypingIndicatorMessage = $(".TypingIndicatorMessage").parent();
var LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
@@ -34,6 +33,7 @@ function InitializeChatServer() {
var ServerMessageType = MessageObject.ServerMessageType;
if (ServerMessage === false) { // NO SERVER MESSAGE -> SENT BY USER
+ console.log("[CHATSOCKET LOGGER] Received a message from user!");
if (WasHimself === true) { // -> MESSAGE WAS FROM HIMSELF
if (!LastMessage.hasClass("MessageSent")) { // CHECK IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
ChatMessages.append("<div class='MessageWrapper Normal'><div class='ChatMessage MessageSent AloneMessage animated fadeInRight'>" + Message + "</div></div>");
@@ -66,6 +66,7 @@ function InitializeChatServer() {
target: "_blank"
});
} else if (ServerMessage === true) { // SERVER MESSAGE
+ console.log("[CHATSOCKET LOGGER] Received a message from server!");
if (ServerMessageType === "GroupJoin") { // TYPE: USER JOINED A GROUP
if (WasHimself === true) { // HIMSELF JOINED A GROUP -> NOTIFY
ChatMessages.empty(); // -> EMPTY MESSAGES ON NEW GROUP JOIN
@@ -78,7 +79,7 @@ function InitializeChatServer() {
} else if (ServerMessageType === "UserDisconnect") { // TYPE: USER DISCONNECTED -> NOTIFY
ChatMessages.append("<br><div class='MessageWrapper'><div class='ServerChatMessage'>" + Username + "</span></div></div><br>");
ReplaceServerMessage("UserDisconnect"); // FOR TRANSLATION
- } else if (ServerMessageType === "TypingState") { // SOMEBODY'S TYPING STATE CHANGED!
+ } else if (ServerMessageType === "TypingState") { // TYPE: SOMEBODY'S TYPING STATE CHANGED!
if (State === true) { // IF 'SOMEBODY' STARTED TYPING
if (WasHimself === true) { // IDENTIFY 'SOMEBODY' -> WAS HIMSELF -> NOT THAT IMPORTANT (USER KNOWS WHEN HE STARTS TYPING?)
// NOTHING
@@ -95,6 +96,8 @@ function InitializeChatServer() {
console.log("[SERVER REPORT] " + Username + " STOPPED TYPING");
}
}
+ } else if (ServerMessageType === "Verify") { // TYPE: SERVER CHECKED ACCESS
+
}
}
// SCROLL TO BOTTOM ON NEW MESSAGE OF ANY KIND
diff --git a/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php b/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
index 17e85b9..6436a50 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
+++ b/main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php
@@ -14,12 +14,14 @@ class ChatProcessor implements MessageComponentInterface
private $subscriptions;
private $users;
private $connectedUsersNames;
+ private $verifiedUsers;
public function __construct() {
$this->clients = new \SplObjectStorage;
$this->subscriptions = [];
$this->users = [];
$this->connectedUsersNames = [];
+ $this->verifiedUsers = [];
}
public function onOpen(ConnectionInterface $conn) {
@@ -32,35 +34,45 @@ class ChatProcessor implements MessageComponentInterface
public function onMessage(ConnectionInterface $conn, MessageInterface $msg) {
$data = json_decode($msg);
switch ($data->ClientMessageType) {
- case "Subscribe":
- $this->subscriptions[$conn->resourceId] = $data->Channel;
- foreach ($this->subscriptions as $id => $channel) {
- if ($this->subscriptions[$conn->resourceId] == $channel) {
- $MessageObject = new \stdClass();
- $MessageObject->ServerMessage = TRUE;
- $MessageObject->ServerMessageType = "GroupJoin";
- $MessageObject->GroupName = $channel;
- $MessageObject->Username = $this->connectedUsersNames[$conn->resourceId];
- if ($id === $conn->resourceId) {
- $MessageObject->WasHimself = TRUE;
- } else {
- $MessageObject->WasHimself = FALSE;
- }
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$id]->send($MessageJson);
- }
+ case "Verify": // USER WANTS TO GET VERIFIED
+ $headerCookies = explode('; ', $data->Cookie);
+ $cookies = array();
+ foreach ($headerCookies as $headerCookie) {
+ list($key, $val) = explode('=', $headerCookie, 2);
+ $cookies[$key] = $val;
+ }
+ $UserSessionKey = $cookies["uf4"];
+ $AccessToken = file("/AccessToken.txt", FILE_IGNORE_NEW_LINES)["0"]; // SECRET
+ $KeyVerifierCode = $this->getHttpCode("https://beam-messenger.de/wormhole/" . $AccessToken . "/verify/" . $data->UserID . "/" . $UserSessionKey);
+ if ($KeyVerifierCode === "200") {
+ $MessageObject = new \stdClass();
+ $MessageObject->ServerMessage = TRUE;
+ $MessageObject->ServerMessageType = "Verify";
+ $MessageObject->Granted = TRUE;
+ $this->verifiedUsers[$conn->resourceId] = TRUE;
+ $this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
+ } else {
+ $MessageObject = new \stdClass();
+ $MessageObject->ServerMessage = TRUE;
+ $MessageObject->ServerMessageType = "Verify";
+ $MessageObject->Granted = FALSE;
+ $this->verifiedUsers[$conn->resourceId] = FALSE;
+ $this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
+ $this->clients->detach($conn);
}
break;
- case "Message":
- if (isset($this->subscriptions[$conn->resourceId])) {
- $target = $this->subscriptions[$conn->resourceId];
+ }
+ if ($this->verifiedUsers[$conn->resourceId]) {
+ switch ($data->ClientMessageType) {
+ case "Subscribe": // USER SUBSCRIBED
+ $this->subscriptions[$conn->resourceId] = $data->Channel;
foreach ($this->subscriptions as $id => $channel) {
- if ($channel == $target) {
+ if ($this->subscriptions[$conn->resourceId] == $channel) {
$MessageObject = new \stdClass();
- $MessageObject->ServerMessage = FALSE;
+ $MessageObject->ServerMessage = TRUE;
+ $MessageObject->ServerMessageType = "GroupJoin";
$MessageObject->GroupName = $channel;
$MessageObject->Username = $this->connectedUsersNames[$conn->resourceId];
- $MessageObject->Message = htmlspecialchars($data->Message);
if ($id === $conn->resourceId) {
$MessageObject->WasHimself = TRUE;
} else {
@@ -70,46 +82,51 @@ class ChatProcessor implements MessageComponentInterface
$this->users[$id]->send($MessageJson);
}
}
- }
- break;
- case "TypingState":
- if (isset($this->subscriptions[$conn->resourceId])) {
- $target = $this->subscriptions[$conn->resourceId];
- foreach ($this->subscriptions as $id => $channel) {
- if ($channel == $target) {
- $MessageObject = new \stdClass();
- $MessageObject->ServerMessage = TRUE;
- $MessageObject->ServerMessageType = "TypingState";
- $MessageObject->GroupName = $channel;
- $MessageObject->Username = $this->connectedUsersNames[$conn->resourceId];
- $MessageObject->State = $data->State;
- if ($id === $conn->resourceId) {
- $MessageObject->WasHimself = TRUE;
- } else {
- $MessageObject->WasHimself = FALSE;
+ break;
+ case "Message": // MESSAGE RECEIVED
+ if (isset($this->subscriptions[$conn->resourceId])) {
+ $target = $this->subscriptions[$conn->resourceId];
+ foreach ($this->subscriptions as $id => $channel) {
+ if ($channel == $target) {
+ $MessageObject = new \stdClass();
+ $MessageObject->ServerMessage = FALSE;
+ $MessageObject->GroupName = $channel;
+ $MessageObject->Username = $this->connectedUsersNames[$conn->resourceId];
+ $MessageObject->Message = htmlspecialchars($data->Message);
+ if ($id === $conn->resourceId) {
+ $MessageObject->WasHimself = TRUE;
+ } else {
+ $MessageObject->WasHimself = FALSE;
+ }
+ $MessageJson = json_encode($MessageObject, TRUE);
+ $this->users[$id]->send($MessageJson);
}
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$id]->send($MessageJson);
}
}
- }
- break;
- case "Verify":
- $headerCookies = explode('; ', $data->Cookie);
- $cookies = array();
- foreach ($headerCookies as $headerCookie) {
- list($key, $val) = explode('=', $headerCookie, 2);
- $cookies[$key] = $val;
- }
- $UserSessionKey = $cookies["uf4"];
- $AccessToken = file_get_contents("/AccessToken.txt"); // SECRET
- $KeyVerifierCode = $this->getHttpCode("https://beam-messenger.de/wormhole/" . $AccessToken . "/verify/" . $data->UserID . "/" . $UserSessionKey);
- if ($KeyVerifierCode === 200) {
- echo "Access granted";
- } else {
- echo "Access denied";
- }
- break;
+ break;
+ case "TypingState": // USER STARTED TYPING
+ if (isset($this->subscriptions[$conn->resourceId])) {
+ $target = $this->subscriptions[$conn->resourceId];
+ foreach ($this->subscriptions as $id => $channel) {
+ if ($channel == $target) {
+ $MessageObject = new \stdClass();
+ $MessageObject->ServerMessage = TRUE;
+ $MessageObject->ServerMessageType = "TypingState";
+ $MessageObject->GroupName = $channel;
+ $MessageObject->Username = $this->connectedUsersNames[$conn->resourceId];
+ $MessageObject->State = $data->State;
+ if ($id === $conn->resourceId) {
+ $MessageObject->WasHimself = TRUE;
+ } else {
+ $MessageObject->WasHimself = FALSE;
+ }
+ $MessageJson = json_encode($MessageObject, TRUE);
+ $this->users[$id]->send($MessageJson);
+ }
+ }
+ }
+ break;
+ }
}
}
@@ -130,6 +147,7 @@ class ChatProcessor implements MessageComponentInterface
}
}
}
+ unset($this->verifiedUsers[$conn->resourceId]);
unset($this->users[$conn->resourceId]);
unset($this->subscriptions[$conn->resourceId]);
unset($this->connectedUsersNames[$conn->resourceId]);