From 59293826f017156ed41696dd01b846fe37446821 Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Sun, 6 May 2018 18:24:34 +0200
Subject: Finished chat verification, added console colors
---
main/app/sprinkles/admin/routes/wormhole.php | 1 +
.../admin/src/Controller/WormholeController.php | 18 +++++++++
.../sprinkles/core/assets/SiteAssets/js/chat.js | 40 ++++++++++++--------
.../sprinkles/core/assets/SiteAssets/js/main.js | 18 ++++-----
.../php/Chatserver/src/ChatProcessor.php | 43 +++++++++++++---------
.../core/assets/userfrosting/js/uf-alerts.js | 6 +--
6 files changed, 80 insertions(+), 46 deletions(-)
(limited to 'main')
diff --git a/main/app/sprinkles/admin/routes/wormhole.php b/main/app/sprinkles/admin/routes/wormhole.php
index da193ef..3efdab3 100644
--- a/main/app/sprinkles/admin/routes/wormhole.php
+++ b/main/app/sprinkles/admin/routes/wormhole.php
@@ -4,4 +4,5 @@
*/
$app->group('/wormhole/{access_token}', function () {
$this->get('/verify/{user_id}/{session_id}', 'UserFrosting\Sprinkle\Admin\Controller\WormholeController:verify');
+ $this->get('/users/u/{user_id}/username', 'UserFrosting\Sprinkle\Admin\Controller\WormholeController:getUsername');
});
diff --git a/main/app/sprinkles/admin/src/Controller/WormholeController.php b/main/app/sprinkles/admin/src/Controller/WormholeController.php
index 958d907..31a44c1 100644
--- a/main/app/sprinkles/admin/src/Controller/WormholeController.php
+++ b/main/app/sprinkles/admin/src/Controller/WormholeController.php
@@ -51,4 +51,22 @@ class WormholeController extends SimpleController
throw new NotFoundException(); // IT'S A FORBIDDEN EXCEPTION BUT IT'S SECRET! PSSSHT
}
}
+
+ public function getUsername(Request $request, Response $response, $args) {
+ $currentUser = $this->ci->currentUser; // FOR DATABASE QUERY
+
+ $access_token = $args['access_token'];
+ if (DB::table('public_keys')
+ ->where('UserID', 1)
+ ->where('Key', '=', $access_token)
+ ->exists()) {
+ $user_id = $args['user_id'];
+ $username =(DB::table('users')
+ ->where('id', $user_id)
+ ->value('user_name'));
+ $response->write($username);
+ } else {
+ throw new NotFoundException(); // IT'S A FORBIDDEN EXCEPTION BUT IT'S SECRET! PSSSHT
+ }
+ }
}
\ No newline at end of file
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
index 2cc90cb..dbf609b 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
@@ -10,14 +10,16 @@ function InitializeChatServer() {
var ChatSocket = new WebSocket('wss://marvinborner.ddnss.de:1337');
ChatSocket.onerror = function () {
setTimeout(function () {
- console.log("[CHATSOCKET LOGGER] Connection failed. Trying again...");
+ console.log("%c[CHATSOCKET LOGGER] Connection failed. Trying again...", "color: red");
InitializeChatServer();
}, 5000);
};
ChatSocket.onopen = function () {
- ChatSocket.send(JSON.stringify({ClientMessageType: "Verify", Cookie: document.cookie, UserID: current_user_id}));
// CONNECTION SUCCESSFUL!
- console.log("[CHATSOCKET LOGGER] Chat connection established!");
+ console.log("%c[CHATSOCKET LOGGER] Chat connection established!", "color: darkorange");
+ // START VERIFICATION
+ ChatSocket.send(JSON.stringify({ClientMessageType: "Verify", Cookie: document.cookie, UserID: current_user_id}));
+ console.log("%c[CHATSOCKET LOGGER] Started chat verification process...", "color: grey");
// GOT MESSAGE
ChatSocket.onmessage = function (e) {
// DECLARATIONS
@@ -31,10 +33,11 @@ function InitializeChatServer() {
var ServerMessage = MessageObject.ServerMessage;
var WasHimself = MessageObject.WasHimself;
var ServerMessageType = MessageObject.ServerMessageType;
+ var Granted = MessageObject.Granted;
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
+ console.log("%c[CHATSOCKET LOGGER] You sent a message!", "color: darkorange");
if (!LastMessage.hasClass("MessageSent")) { // CHECK IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
ChatMessages.append("
");
} else if (LastMessage.hasClass("MessageSent")) { // IF PREVIOUS MESSAGE WAS FROM HIMSELF TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
@@ -48,6 +51,7 @@ function InitializeChatServer() {
}
}
} else if (WasHimself === false) { // -> MESSAGE WAS FROM OTHER USER
+ console.log("%c[CHATSOCKET LOGGER] You received a message!", "color: darkorange");
if (!LastMessage.hasClass("MessageReceived")) { // CHECK IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE
ChatMessages.append("");
} else if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
@@ -66,38 +70,44 @@ 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
ChatMessages.append("
");
ReplaceServerMessage("YouGroupJoin"); // FOR TRANSLATION
+ console.log("%c[CHATSOCKET LOGGER] You joined the group " + GroupName + "!", "color: darkorange");
} else if (WasHimself === false) { // OTHER USER JOINED A GROUP -> NOTIFY
ChatMessages.append("
");
ReplaceServerMessage("UserGroupJoin"); // FOR TRANSLATION
+ console.log("%c[CHATSOCKET LOGGER] " + Username + " joined the group!", "color: darkorange");
}
} else if (ServerMessageType === "UserDisconnect") { // TYPE: USER DISCONNECTED -> NOTIFY
ChatMessages.append("
");
ReplaceServerMessage("UserDisconnect"); // FOR TRANSLATION
+ console.log("%c[CHATSOCKET LOGGER] " + Username + " disconnected from server!", "color: darkorange");
} 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
+ console.log("%c[CHAT TYPING LOGGER] You started typing!", "color: grey");
} else if (WasHimself === false) { // IDENTIFY 'SOMEBODY' -> WAS OTHER USER -> SHOW TYPING ANIMATION ON RECEIVER'S SIDE
ChatMessages.append("" + TypingIndicatorAnimationElement + "
");
- console.log("[SERVER REPORT] " + Username + " STARTED TYPING");
+ console.log("%c[CHAT TYPING LOGGER] " + Username + " started typing!", "color: grey");
}
} else if (State === false) { // IF 'SOMEBODY' STOPPED TYPING
if (WasHimself === true) { // IDENTIFY 'SOMEBODY' -> WAS HIMSELF -> NOT THAT IMPORTANT (USER KNOWS WHEN HE STOPS TYPING?)
- // NOTHING
+ console.log("%c[CHAT TYPING LOGGER] You stopped typing!", "color: grey");
} else if (WasHimself === false) { // IDENTIFY 'SOMEBODY' -> WAS OTHER USER -> REMOVE TYPING ANIMATION
//TypingIndicatorMessage.fadeOut("fast");
TypingIndicatorMessage.remove();
- console.log("[SERVER REPORT] " + Username + " STOPPED TYPING");
+ console.log("%c[CHAT TYPING LOGGER] " + Username + " stopped typing!", "color: grey");
}
}
- } else if (ServerMessageType === "Verify") { // TYPE: SERVER CHECKED ACCESS
-
+ } else if (ServerMessageType === "Verify") { // TYPE: SERVER CHECKED ACCESS -- MOSTLY HANDLED IN BACKEND
+ if (Granted === true) {
+ console.log("%c[CHATSOCKET LOGGER] Chat access granted!", "color: green");
+ } else if (Granted === false) {
+ console.log("%c[CHATSOCKET LOGGER] Chat access denied!", "color: red");
+ }
}
}
// SCROLL TO BOTTOM ON NEW MESSAGE OF ANY KIND
@@ -159,14 +169,14 @@ function InitializeChatServer() {
// SEND MESSAGE FROM INPUT FIELD
ChatTextInput.keyup(function (e) {
if (e.keyCode === 13 && ChatTextInput.val().length > 0) {
- ChatSocket.send(JSON.stringify({ClientMessageType: "Message", Message: ChatTextInput.val()}));
- ChatTextInput.val("");
- ChatTextInput.val("");
-
// USER USUALLY STOPS TYPING ON SENDING -> CHANGE STATE TO FALSE
sendTypingState(false);
isTyping = false;
clearTimeout(typingTimer);
+
+ ChatSocket.send(JSON.stringify({ClientMessageType: "Message", Message: ChatTextInput.val()}));
+ ChatTextInput.val("");
+ ChatTextInput.val("");
}
});
};
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/main.js b/main/app/sprinkles/core/assets/SiteAssets/js/main.js
index 1a1bc8d..17d87c7 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/main.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/main.js
@@ -113,29 +113,27 @@ MainTabWindows.on('beforeChange', function (event, slick, currentSlide, nextSlid
SEARCH
****/
UserSearchBar.keyup(function () {
+ SearchResults.empty();
var RequestedUser = UserSearchBar.val();
+ if (RequestedUser !== " " && RequestedUser !== "")
$.ajax({
url: site.uri.public + "/api/users/u/" + RequestedUser,
success: function (answer) {
- console.log("[SEARCH LOGGER] User " + RequestedUser + " was (finally) found! :)");
- var GifUrls = ["https://media.giphy.com/media/xUPGcg01dIAot4zyZG/giphy.gif", "https://media.giphy.com/media/IS9LfP9oSLdcY/giphy.gif", "https://media.giphy.com/media/5wWf7H0WTquIU1DFY4g/giphy.gif"];
- var RandomGif = Math.floor((Math.random() * GifUrls.length));
- var RandomGifUrl = GifUrls[RandomGif];
- console.image(RandomGifUrl, 0.5);
+ console.log("%c[SEARCH LOGGER] User " + RequestedUser + " was found!", "color: green");
+ //var GifUrls = ["https://media.giphy.com/media/xUPGcg01dIAot4zyZG/giphy.gif", "https://media.giphy.com/media/IS9LfP9oSLdcY/giphy.gif", "https://media.giphy.com/media/5wWf7H0WTquIU1DFY4g/giphy.gif"];
+ //var RandomGif = Math.floor((Math.random() * GifUrls.length));
+ //var RandomGifUrl = GifUrls[RandomGif];
+ //console.image(RandomGifUrl, 0.5);
alerts.ufAlerts().ufAlerts('fetch');
- SearchResults.empty();
SearchResults.append("![]()
" + answer.full_name + "
");
$(".SearchResults .Avatar").imageCaching(); // refresh
},
error: function () {
- console.log("[SEARCH LOGGER] 404s are not a bug - they're a feature!");
- console.log("[SEARCH LOGGER] " + RequestedUser + " not found...");
+ console.log("%c[SEARCH LOGGER] User " + RequestedUser + " was not found!", "color: red");
alerts.ufAlerts().ufAlerts('fetch');
-
- SearchResults.empty();
}
});
});
\ No newline at end of file
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 6436a50..35a7c90 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
@@ -13,22 +13,24 @@ class ChatProcessor implements MessageComponentInterface
protected $clients;
private $subscriptions;
private $users;
+ private $userID;
private $connectedUsersNames;
private $verifiedUsers;
+ private $emptyArray;
public function __construct() {
$this->clients = new \SplObjectStorage;
$this->subscriptions = [];
- $this->users = [];
+ $this->users = []; // TEMPORARY WEBSOCKET USER
+ $this->userID = []; // USER ID WHICH IS DECLARED IN DB
$this->connectedUsersNames = [];
$this->verifiedUsers = [];
+ $this->emptyArray = array(0 => 'nothing');
}
public function onOpen(ConnectionInterface $conn) {
- $generator = new Alliteration();
$this->clients->attach($conn);
$this->users[$conn->resourceId] = $conn;
- $this->connectedUsersNames[$conn->resourceId] = $generator->getName();
}
public function onMessage(ConnectionInterface $conn, MessageInterface $msg) {
@@ -49,7 +51,10 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "Verify";
$MessageObject->Granted = TRUE;
+ $username = file_get_contents("https://beam-messenger.de/wormhole/" . $AccessToken . "/users/u/" . $data->UserID . "/username");
+ $this->userID[$conn->resourceId] = $data->UserID;
$this->verifiedUsers[$conn->resourceId] = TRUE;
+ $this->connectedUsersNames[$conn->resourceId] = $username;
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
} else {
$MessageObject = new \stdClass();
@@ -58,28 +63,30 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->Granted = FALSE;
$this->verifiedUsers[$conn->resourceId] = FALSE;
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
- $this->clients->detach($conn);
+ $this->onClose($conn);
}
break;
}
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 ($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;
+ //if (!in_array(array_flip($this->userID)[$this->userID[$conn->resourceId]], (isset(array_flip($this->subscriptions)[$data->Channel]) ? array_flip($this->subscriptions)[$data->Channel] : array()))) { // ONLY JOIN IF NOT ALREADY JOINED
+ $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);
}
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$id]->send($MessageJson);
}
}
break;
diff --git a/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js
index 98fbea0..a569522 100644
--- a/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js
+++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js
@@ -128,7 +128,7 @@
_fetchSuccess: function (alerts) {
if (alerts != null) this.alerts = $.merge(this.alerts, alerts);
this.$element.trigger('fetch.' + this._name);
- console.log("[ALERT LOGGER] FETCHED ALERTS");
+ console.log("%c[ALERT LOGGER] FETCHED ALERTS", "color: blue");
},
/**
* Failure callback for fetch
@@ -153,7 +153,7 @@
message: options[1]
});
- console.log("[ALERT LOGGER] PUSHED ALERT");
+ console.log("%c[ALERT LOGGER] PUSHED ALERT", "color: blue");
return this.$element;
},
/**
@@ -168,7 +168,7 @@
$.when(this._newAlertsPromise).then(this._render.bind(this));
}
- console.log("[ALERT LOGGER] RENDERED ALERT");
+ console.log("%c[ALERT LOGGER] RENDERED ALERT", "color: blue");
return this.$element;
},
/*
--
cgit v1.2.3