aboutsummaryrefslogtreecommitdiffhomepage
path: root/main/app/sprinkles
diff options
context:
space:
mode:
Diffstat (limited to 'main/app/sprinkles')
-rw-r--r--main/app/sprinkles/admin/routes/wormhole.php2
-rw-r--r--main/app/sprinkles/admin/src/Controller/WormholeController.php6
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/js/chat.js6
-rw-r--r--main/app/sprinkles/core/assets/SiteAssets/php/Chatserver/src/ChatProcessor.php111
-rw-r--r--main/app/sprinkles/core/src/ServicesProvider/ServicesProvider.php3
5 files changed, 80 insertions, 48 deletions
diff --git a/main/app/sprinkles/admin/routes/wormhole.php b/main/app/sprinkles/admin/routes/wormhole.php
index 882a177..0883dba 100644
--- a/main/app/sprinkles/admin/routes/wormhole.php
+++ b/main/app/sprinkles/admin/routes/wormhole.php
@@ -4,6 +4,6 @@
*/
$app->group('/wormhole/{access_token}', function () {
$this->get('/verify/{user_id}/{session_id}', 'UserFrosting\Sprinkle\Admin\Controller\WormholeController:verify');
- $this->get('/new/message/{sender_id}/{receiver_id}/{message}', 'UserFrosting\Sprinkle\Admin\Controller\WormholeController:newMessage');
+ $this->post('/new/message/{sender_id}/{receiver_id}/', 'UserFrosting\Sprinkle\Admin\Controller\WormholeController:newMessage');
$this->get('/user/{user_id}', 'UserFrosting\Sprinkle\Admin\Controller\WormholeController:getInfo');
});
diff --git a/main/app/sprinkles/admin/src/Controller/WormholeController.php b/main/app/sprinkles/admin/src/Controller/WormholeController.php
index a2775f1..e7cd9aa 100644
--- a/main/app/sprinkles/admin/src/Controller/WormholeController.php
+++ b/main/app/sprinkles/admin/src/Controller/WormholeController.php
@@ -44,11 +44,11 @@ class WormholeController extends SimpleController
}
}
- public function newMessage(Request $request, Response $response, $args) {
+ public function newMessage($request, Response $response, $args) {
if ($this->verifyAccessToken($args)) {
$sender_id = $args['sender_id'];
$receiver_id = $args['receiver_id'];
- $message = $args['message'];
+ $message = $request->getParsedBody()["message"];
if (($sender_id != $receiver_id) && $message) {
DB::table('chat_messages')
->insert(['sender_id' => $sender_id, 'receiver_id' => $receiver_id, 'message' => $message]);
@@ -82,7 +82,7 @@ class WormholeController extends SimpleController
->select("user_follow.user_id as id", "users.user_name as username")
->get();
- $UsersFriends = Capsule::select("SELECT id FROM (SELECT user_id AS id FROM user_follow WHERE followed_by_id = $user->id UNION ALL SELECT followed_by_id FROM user_follow WHERE user_id = $user->id) t GROUP BY id HAVING COUNT(id) > 1");
+ $UsersFriends = DB::select("SELECT id FROM (SELECT user_id AS id FROM user_follow WHERE followed_by_id = $user->id UNION ALL SELECT followed_by_id FROM user_follow WHERE user_id = $user->id) t GROUP BY id HAVING COUNT(id) > 1");
/** @var UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */
$classMapper = $this->ci->classMapper;
foreach ($UsersFriends as $Key => $UsersFriendId) { // NOT THAT EFFICIENT...
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
index 6dc67f0..ee30c04 100644
--- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
+++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js
@@ -45,10 +45,8 @@ function InitializeChatServer() {
ChatSocket.onmessage = function (e) {
// DECLARATIONS
var TypingIndicatorMessage = $(".TypingIndicatorMessage").parent();
- LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
var MessageObject = JSON.parse(e.data);
var Message = MessageObject.Message; // ENCRYPTED MESSAGE (NOT ENCRYPTED ON SERVER MESSAGES)
- Username = MessageObject.Username;
var Fullname = MessageObject.Fullname;
var Avatar = MessageObject.Avatar;
var GroupName = MessageObject.GroupName;
@@ -59,6 +57,10 @@ function InitializeChatServer() {
var Granted = MessageObject.Granted;
var Success = MessageObject.Success;
+ // GLOBAL OVERWRITES
+ LastMessage = $(".MessageWrapper.Normal:last .ChatMessage");
+ Username = MessageObject.Username;
+
// GET OWN PUBLIC KEY FIRST
if (!(current_username in PublicKey)) {
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 62ec9a2..5463aec 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
@@ -53,7 +53,6 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject = new \stdClass();
$MessageObject->ServerMessage = TRUE;
- if (isset($this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name)) $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$MessageObject->ServerMessageType = "Verify";
if (isset($this->userInfo[$conn->resourceId]->id)) { // USER FOUND
$MessageObject->Granted = TRUE;
@@ -69,7 +68,6 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "Verify";
$MessageObject->Granted = FALSE;
- if (isset($this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name)) $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$this->verifiedUsers[$conn->resourceId] = FALSE;
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
$this->onClose($conn);
@@ -101,35 +99,68 @@ class ChatProcessor implements MessageComponentInterface
}
break;*/
case "SetReceiver": // USER CLICKED ON NEW CHAT
- foreach ($this->userInfo[$conn->resourceId]->friends as $friend) {
- if ($data->ReceiversId === $friend->id) {
- $this->ReceiversId[$conn->resourceId] = $data->ReceiversId;
- }
- }
$MessageObject = new \stdClass();
$MessageObject->ServerMessage = TRUE;
$MessageObject->ServerMessageType = "SetReceiver";
- $this->ReceiversId[$conn->resourceId] !== $data->ReceiversId ? $MessageObject->Success = FALSE : $MessageObject->Success = TRUE;
+ $MessageObject->Success = FALSE; // WILL BE PROBABLY OVERRIDDEN
+ foreach ($this->userInfo[$conn->resourceId]->friends as $friend) { // CHECK IF USERS ARE FRIENDS
+ if ($data->ReceiversId == $friend->id) {
+ $this->ReceiversId[$conn->resourceId] = $data->ReceiversId;
+ $MessageObject->Success = TRUE; // ARE FRIENDS
+ }
+ }
$this->users[$conn->resourceId]->send(json_encode($MessageObject, TRUE));
break;
case "ChatMessage": // MESSAGE RECEIVED
$ReceiversId = $this->ReceiversId[$conn->resourceId];
- $ReceiversResourceId = $this->ResourceId[$ReceiversId];
- $MessageObject = new \stdClass();
- $MessageObject->ServerMessage = FALSE;
- $MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
- $MessageObject->Fullname = $this->userInfo[$conn->resourceId]->full_name;
- $MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
- $MessageObject->Message = htmlspecialchars($data->Message);
+ if (isset($this->ResourceId[$ReceiversId])) {
+ $ReceiversResourceId = $this->ResourceId[$ReceiversId];
+ $MessageObject = new \stdClass();
+ $MessageObject->ServerMessage = FALSE;
+ $MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
+ $MessageObject->Fullname = $this->userInfo[$conn->resourceId]->full_name;
+ $MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
+ $MessageObject->Message = htmlspecialchars($data->Message);
- if ($data->EncryptedWithKeyOfUsername === $this->userInfo[$ReceiversResourceId]->user_name) {
- $MessageObject->WasHimself = FALSE;
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$ReceiversResourceId]->send($MessageJson); // SEND TO RECEIVER
- } else if ($data->EncryptedWithKeyOfUsername === $MessageObject->Username) {
- $MessageObject->WasHimself = TRUE;
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$conn->resourceId]->send($MessageJson); // SEND TO SENDER (FOR VERIFICATION)
+ if ($data->EncryptedWithKeyOfUsername === $this->userInfo[$ReceiversResourceId]->user_name) {
+ $MessageObject->WasHimself = FALSE;
+ $MessageJson = json_encode($MessageObject, TRUE);
+ $this->users[$ReceiversResourceId]->send($MessageJson); // SEND TO RECEIVER
+
+ // SAVE IN DATABASE
+ $url = "https://beam-messenger.de/wormhole/" . file("/AccessToken.txt", FILE_IGNORE_NEW_LINES)["0"] . "/new/message/" . $this->userInfo[$conn->resourceId]->id . "/" . $this->userInfo[$ReceiversResourceId]->id . "/";
+ $data = array('message' => $data->Message);
+ $options = array(
+ 'http' => array(
+ 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
+ 'method' => 'POST',
+ 'content' => http_build_query($data)
+ )
+ );
+ $context = stream_context_create($options);
+ $result = file_get_contents($url, FALSE, $context);
+ if ($result === FALSE) { /* Handle error */
+ }
+
+ } else if ($data->EncryptedWithKeyOfUsername === $MessageObject->Username) {
+ $MessageObject->WasHimself = TRUE;
+ $MessageJson = json_encode($MessageObject, TRUE);
+ $this->users[$conn->resourceId]->send($MessageJson); // SEND TO SENDER (FOR VERIFICATION)
+ }
+ } else { // USER ISN'T ONLINE -> ONLY STORE IN DATABASE
+ $url = "https://beam-messenger.de/wormhole/" . file("/AccessToken.txt", FILE_IGNORE_NEW_LINES)["0"] . "/new/message/" . $this->userInfo[$conn->resourceId]->id . "/" . $this->ReceiversId[$conn->resourceId] . "/";
+ $data = array('message' => $data->Message);
+ $options = array(
+ 'http' => array(
+ 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
+ 'method' => 'POST',
+ 'content' => http_build_query($data)
+ )
+ );
+ $context = stream_context_create($options);
+ $result = file_get_contents($url, FALSE, $context);
+ if ($result === FALSE) { /* Handle error */
+ }
}
break;
case "GroupMessage": // GROUP MESSAGE RECEIVED -- RESERVED FOR LATER USE (CHANNEL BASED RIGHT NOW)
@@ -140,7 +171,6 @@ class ChatProcessor implements MessageComponentInterface
$MessageObject = new \stdClass();
$MessageObject->ServerMessage = FALSE;
$MessageObject->GroupName = $channel;
- if (isset($this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name)) $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
$MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
$MessageObject->Fullname = $this->userInfo[$conn->resourceId]->full_name;
$MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
@@ -154,24 +184,21 @@ class ChatProcessor implements MessageComponentInterface
}
break;
case "TypingState": // USER STARTED TYPING
- if (isset($this->channels[$conn->resourceId])) {
- $target = $this->channels[$conn->resourceId];
- foreach ($this->channels as $id => $channel) {
- if ($channel == $target) {
- $MessageObject = new \stdClass();
- $MessageObject->ServerMessage = TRUE;
- $MessageObject->ServerMessageType = "TypingState";
- $MessageObject->GroupName = $channel;
- if (isset($this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name)) $MessageObject->Receiver = $this->userInfo[array_flip($this->channels)[$this->channels[$conn->resourceId]]]->user_name;
- $MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
- $MessageObject->Fullname = $this->userInfo[$conn->resourceId]->full_name;
- $MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
- $MessageObject->State = $data->State;
- $id === $conn->resourceId ? $MessageObject->WasHimself = TRUE : $MessageObject->WasHimself = FALSE;
- $MessageJson = json_encode($MessageObject, TRUE);
- $this->users[$id]->send($MessageJson);
- }
- }
+ // GET RECEIVERS DATA
+ $ReceiversId = $this->ReceiversId[$conn->resourceId];
+ if (isset($this->ResourceId[$ReceiversId])) { // ONLY SEND IF OTHER USER EXISTS
+ $ReceiversResourceId = $this->ResourceId[$ReceiversId];
+ $MessageObject = new \stdClass();
+ $MessageObject->ServerMessage = TRUE;
+ $MessageObject->ServerMessageType = "TypingState";
+ $MessageObject->Receiver = $this->userInfo[$ReceiversResourceId]->user_name;
+ $MessageObject->Username = $this->userInfo[$conn->resourceId]->user_name;
+ $MessageObject->Fullname = $this->userInfo[$conn->resourceId]->full_name;
+ $MessageObject->Avatar = $this->userInfo[$conn->resourceId]->avatar;
+ $MessageObject->State = $data->State;
+ $ReceiversResourceId === $conn->resourceId ? $MessageObject->WasHimself = TRUE : $MessageObject->WasHimself = FALSE;
+ $MessageJson = json_encode($MessageObject, TRUE);
+ $this->users[$ReceiversResourceId]->send($MessageJson);
}
break;
}
diff --git a/main/app/sprinkles/core/src/ServicesProvider/ServicesProvider.php b/main/app/sprinkles/core/src/ServicesProvider/ServicesProvider.php
index 62d8382..27544c7 100644
--- a/main/app/sprinkles/core/src/ServicesProvider/ServicesProvider.php
+++ b/main/app/sprinkles/core/src/ServicesProvider/ServicesProvider.php
@@ -238,6 +238,9 @@ class ServicesProvider
$csrfBlacklist['^/' . $config['assets.raw.path']] = [
'GET'
];
+ $csrfBlacklist['^/wormhole'] = [
+ 'POST'
+ ];
$config->set('csrf.blacklist', $csrfBlacklist);