This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * Created by PhpStorm. |
||
4 | * User: shanmaseen |
||
5 | * Date: 26/03/19 |
||
6 | * Time: 12:09 م |
||
7 | */ |
||
8 | |||
9 | namespace Shamaseen\Laravel\Ratchet\Traits; |
||
10 | |||
11 | use Shamaseen\Laravel\Ratchet\Objects\Clients\Client; |
||
12 | use Shamaseen\Laravel\Ratchet\Objects\Rooms\Room; |
||
13 | |||
14 | /** |
||
15 | * ###### Use this trait ONLY in classes extend WebSocketController ###### |
||
16 | * Trait RoomUtility |
||
17 | * @package Shamaseen\Laravel\Ratchet\Traits |
||
18 | * @property-read $receiver |
||
19 | * @property $clients |
||
20 | * @property $userAuthSocketMapper |
||
21 | * @property $request |
||
22 | * @property $conn |
||
23 | * @property $rooms |
||
24 | */ |
||
25 | trait RoomUtility |
||
26 | { |
||
27 | |||
28 | function createRoom($room_id) |
||
0 ignored issues
–
show
|
|||
29 | { |
||
30 | $this->receiver->rooms[$room_id] = new \Shamaseen\Laravel\Ratchet\Objects\Rooms\Room($room_id); |
||
0 ignored issues
–
show
The property
receiver does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() |
|||
31 | return $this; |
||
32 | } |
||
33 | |||
34 | function addMember($room_id) |
||
0 ignored issues
–
show
|
|||
35 | { |
||
36 | /** @var Room $room */ |
||
37 | $room = $this->receiver->rooms[$room_id]; |
||
38 | /** @var Client $client */ |
||
39 | $client = $this->receiver->clients[$this->userAuthSocketMapper[\Auth::id()]]; |
||
0 ignored issues
–
show
The property
userAuthSocketMapper does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() |
|||
40 | $room->addMember($client); |
||
41 | array_push($client->rooms, $room_id); |
||
42 | |||
43 | return $this; |
||
44 | } |
||
45 | |||
46 | /** |
||
47 | * This function will automatically remove the room if no member still on it. |
||
48 | * @param $room_id |
||
49 | * @return RoomUtility |
||
0 ignored issues
–
show
The return type
RoomUtility is a trait, and thus cannot be used for type-hinting in PHP. Maybe consider adding an interface and use that for type-hinting?
In PHP traits cannot be used for type-hinting as they do not define a well-defined structure. This is because any class that uses a trait can rename that trait’s methods. If you would like to return an object that has a guaranteed set of methods, you could create a companion interface that lists these methods explicitly. ![]() |
|||
50 | */ |
||
51 | function removeMember($room_id) |
||
0 ignored issues
–
show
|
|||
52 | { |
||
53 | /** @var Room $room */ |
||
54 | $room = $this->receiver->rooms[$room_id]; |
||
55 | /** @var Client $client */ |
||
56 | $client = $this->receiver->clients[$this->userAuthSocketMapper[\Auth::id()]]; |
||
57 | $room->removeMember($client); |
||
58 | |||
59 | unset($client->rooms[$room_id]); |
||
60 | if (count($room->members) == 0) { |
||
61 | unset($this->receiver->rooms[$room_id]); |
||
62 | } |
||
63 | |||
64 | return $this; |
||
65 | } |
||
66 | |||
67 | /** |
||
68 | * @param int $room_id |
||
69 | * @param int $user_id |
||
70 | * @return bool |
||
71 | */ |
||
72 | function hasMember($room_id, $user_id) |
||
0 ignored issues
–
show
|
|||
73 | { |
||
74 | /** @var Room $room */ |
||
75 | $room = $this->receiver->rooms[$room_id]; |
||
76 | $client = $this->clients[$this->userAuthSocketMapper[$user_id]]; |
||
0 ignored issues
–
show
The property
clients does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() |
|||
77 | return $room->hasMember($client); |
||
78 | } |
||
79 | |||
80 | /** |
||
81 | * @param $room_id |
||
82 | * @param bool $createIfNotExist |
||
83 | * @return bool|Room |
||
84 | */ |
||
85 | function validateRoom($room_id, $createIfNotExist = false) |
||
0 ignored issues
–
show
|
|||
86 | { |
||
87 | if (!array_key_exists($room_id, $this->receiver->rooms)) { |
||
88 | if ($createIfNotExist) { |
||
89 | $room = $this->receiver->rooms[$room_id] = new Room($room_id); |
||
90 | return $room; |
||
91 | } |
||
92 | $this->error($this->request, $this->conn, 'Room is not exist'); |
||
0 ignored issues
–
show
The property
request does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() The property
conn does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() It seems like
error() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the ![]() |
|||
93 | } |
||
94 | return true; |
||
95 | } |
||
96 | |||
97 | /** |
||
98 | * @param $room_id |
||
99 | * @param $message |
||
100 | */ |
||
101 | function sendToRoom($room_id, $message) |
||
0 ignored issues
–
show
|
|||
102 | { |
||
103 | $this->validateRoom($room_id); |
||
104 | /** @var Room $room */ |
||
105 | $room = $this->rooms[$room_id]; |
||
0 ignored issues
–
show
The property
rooms does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() |
|||
106 | |||
107 | if (!$this->hasMember($room_id, \Auth::id())) { |
||
108 | $this->error($this->request, $this->conn, 'You can\'t send a message to room which you are not in !'); |
||
0 ignored issues
–
show
It seems like
error() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the ![]() |
|||
109 | } |
||
110 | |||
111 | foreach ($room->members as $member) { |
||
112 | $this->sendToUser($member->id, $message); |
||
0 ignored issues
–
show
It seems like
sendToUser() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the ![]() |
|||
113 | } |
||
114 | } |
||
115 | } |
||
116 |
Adding explicit visibility (
private
,protected
, orpublic
) is generally recommend to communicate to other developers how, and from where this method is intended to be used.