Skip to content

Commit

Permalink
CSRF Tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
remdex committed Aug 25, 2021
1 parent ee36bf5 commit f7584a2
Show file tree
Hide file tree
Showing 20 changed files with 70 additions and 34 deletions.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

This file was deleted.

This file was deleted.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

Expand Up @@ -8,6 +8,8 @@ import useInterval from "./lib/useInterval";
import {groupChatSync} from "./lib/groupChatSync";
import {useTranslation} from 'react-i18next';

axios.defaults.headers.common['X-CSRFToken'] = confLH.csrf_token;

function reducer(state, action) {
switch (action.type) {
case 'increment':
Expand Down
6 changes: 5 additions & 1 deletion lhc_web/design/defaulttheme/js/angular.lhc.js
Expand Up @@ -12,13 +12,17 @@ lhcAppControllers.config(['$compileProvider', function ($compileProvider) {
$compileProvider.debugInfoEnabled(false);
}]);

lhcAppControllers.run(['$http', function ($http) {
$http.defaults.headers.common['X-CSRFToken'] = confLH.csrf_token;
}]);

angular.element(document).ready(function(){
var element = angular.element(document.querySelector("form"));
element.triggerHandler("$destroy");
});

services.factory('LiveHelperChatFactory', ['$http','$q',function ($http, $q) {

this.loadChatList = function(filter){
var deferred = $q.defer();
$http.get(WWW_DIR_JAVASCRIPT + 'chat/syncadmininterface' + filter).then(function(data) {
Expand Down
2 changes: 1 addition & 1 deletion lhc_web/design/defaulttheme/js/angular.lhc.min.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions lhc_web/modules/lhgroupchat/cancelinvite.php
Expand Up @@ -6,6 +6,11 @@
$db->beginTransaction();

try {

if (!isset($_SERVER['HTTP_X_CSRFTOKEN']) || !$currentUser->validateCSFRToken($_SERVER['HTTP_X_CSRFTOKEN'])) {
throw new Exception('Invalid CSRF token!');
}

$item = erLhcoreClassModelGroupChat::fetch($Params['user_parameters']['id']);

erLhcoreClassGroupChat::cancelInvite($item->id, $Params['user_parameters']['op_id']);
Expand Down
5 changes: 5 additions & 0 deletions lhc_web/modules/lhgroupchat/inviteoperator.php
Expand Up @@ -6,6 +6,11 @@
$db->beginTransaction();

try {

if (!isset($_SERVER['HTTP_X_CSRFTOKEN']) || !$currentUser->validateCSFRToken($_SERVER['HTTP_X_CSRFTOKEN'])) {
throw new Exception('Invalid CSRF token!');
}

$item = erLhcoreClassModelGroupChat::fetchAndLock($Params['user_parameters']['id']);

erLhcoreClassGroupChat::inviteOperator($item->id, $Params['user_parameters']['op_id'], ($item->type == erLhcoreClassModelGroupChat::SUPPORT_CHAT ? erLhcoreClassModelGroupChatMember::SUPPORT_CHAT : erLhcoreClassModelGroupChatMember::NORMAL_CHAT));
Expand Down
5 changes: 5 additions & 0 deletions lhc_web/modules/lhgroupchat/leave.php
Expand Up @@ -6,6 +6,11 @@
$db->beginTransaction();

try {

if (!isset($_SERVER['HTTP_X_CSRFTOKEN']) || !$currentUser->validateCSFRToken($_SERVER['HTTP_X_CSRFTOKEN'])) {
throw new Exception('Invalid CSRF token!');
}

$item = erLhcoreClassModelGroupChat::fetchAndLock($Params['user_parameters']['id']);

$groupChatMember = erLhcoreClassModelGroupChatMember::findOne(array('filter' => array('user_id' => $currentUser->getUserID(), 'group_id' => $Params['user_parameters']['id'])));
Expand Down
52 changes: 31 additions & 21 deletions lhc_web/modules/lhgroupchat/newgroupajax.php
Expand Up @@ -6,29 +6,39 @@

if (isset($payload['name']) && $payload['name'] != '') {

// Create a group chat
$item = new erLhcoreClassModelGroupChat();
$item->name = $payload['name'];

if ($currentUser->hasAccessTo('lhgroupchat','public_chat')) {
$item->type = isset($payload['public']) && $payload['public'] == 1 ? 1 : 0;
} else {
$item->type = 1;
try {
if (!isset($_SERVER['HTTP_X_CSRFTOKEN']) || !$currentUser->validateCSFRToken($_SERVER['HTTP_X_CSRFTOKEN'])) {
throw new Exception('Invalid CSRF token!');
}

// Create a group chat
$item = new erLhcoreClassModelGroupChat();
$item->name = $payload['name'];

if ($currentUser->hasAccessTo('lhgroupchat','public_chat')) {
$item->type = isset($payload['public']) && $payload['public'] == 1 ? 1 : 0;
} else {
$item->type = 1;
}

$item->user_id = $currentUser->getUserID();
$item->time = time();
$item->saveThis();

// Create a member
$newMember = new erLhcoreClassModelGroupChatMember();
$newMember->user_id = $item->user_id;
$newMember->group_id = $item->id;
$newMember->last_activity = time();
$newMember->jtime = time();
$newMember->saveThis();

echo json_encode($item);
} catch (Exception $e){
http_response_code(400);
echo json_encode(array('error' => true, "messages" => $e->getMessage()));
}

$item->user_id = $currentUser->getUserID();
$item->time = time();
$item->saveThis();

// Create a member
$newMember = new erLhcoreClassModelGroupChatMember();
$newMember->user_id = $item->user_id;
$newMember->group_id = $item->id;
$newMember->last_activity = time();
$newMember->jtime = time();
$newMember->saveThis();

echo json_encode($item);
} else {
http_response_code(400);
echo json_encode(array('error' => true));
Expand Down
5 changes: 5 additions & 0 deletions lhc_web/modules/lhgroupchat/startchatwithoperator.php
Expand Up @@ -11,6 +11,11 @@
$db->beginTransaction();

try {

if (!isset($_SERVER['HTTP_X_CSRFTOKEN']) || !$currentUser->validateCSFRToken($_SERVER['HTTP_X_CSRFTOKEN'])) {
throw new Exception('Invalid CSRF token!');
}

// We need to find a private chat where only we are the members with another operator
$sql = "SELECT DISTINCT `lh_group_chat`.`id`,count(`lh_group_chat_member`.`id`) as `tm_live` FROM `lh_group_chat`
INNER JOIN lh_group_chat_member ON `lh_group_chat_member`.`group_id` = `lh_group_chat`.`id`
Expand Down

0 comments on commit f7584a2

Please sign in to comment.