Issues (11)

Security Analysis    no request data  

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

src/wormling/phparia/Resources/Bridge.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
/*
4
 * Copyright 2014 Brian Smith <[email protected]>.
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *      http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
namespace phparia\Resources;
20
21
use phparia\Client\AriClient;
22
use phparia\Events\Event;
23
use phparia\Exception\ConflictException;
24
use phparia\Exception\InvalidParameterException;
25
use phparia\Exception\NotFoundException;
26
use phparia\Exception\UnprocessableEntityException;
27
28
/**
29
 * The merging of media from one or more channels.
30
 * Everyone on the bridge receives the same audio.
31
 *
32
 * @author Brian Smith <[email protected]>
33
 */
34
class Bridge extends Resource
35
{
36
    const TYPE_MIXING = 'mixing';
37
    const TYPE_HOLDING = 'holding';
38
    const TYPE_DTMF_EVENTS = 'dtmf_events';
39
    const TYPE_PROXY_MEDIA = 'proxy_media';
40
    
41
    /**
42
     * @var string Bridging class
43
     */
44
    private $bridgeClass;
45
46
    /**
47
     * @var string Type of bridge technology (mixing, holding, dtmf_events, proxy_media)
48
     */
49
    private $bridgeType;
50
51
    /**
52
     * @var array Ids of channels participating in this bridge
53
     */
54
    private $channelIds;
55
56
    /**
57
     * @var string  Entity that created the bridge
58
     */
59
    private $creator;
60
61
    /**
62
     * @var string Unique identifier for this bridge
63
     */
64
    private $id;
65
66
    /**
67
     * @var string Unique identifier for this bridge
68
     */
69
    private $name;
70
71
    /**
72
     * @var string Name of the current bridging technology
73
     */
74
    private $technology;
75
76
    /**
77
     * @return string Bridging class
78
     */
79
    public function getBridgeClass()
80
    {
81
        return $this->bridgeClass;
82
    }
83
84
    /**
85
     * @return string Type of bridge technology (mixing, holding, dtmf_events, proxy_media)
86
     */
87
    public function getBridgeType()
88
    {
89
        return $this->bridgeType;
90
    }
91
92
    /**
93
     * @return array Ids of channels participating in this bridge
94
     */
95
    public function getChannelIds()
96
    {
97
        return $this->channelIds;
98
    }
99
100
    /**
101
     * @return string Entity that created the bridge
102
     */
103
    public function getCreator()
104
    {
105
        return $this->creator;
106
    }
107
108
    /**
109
     * @return string Unique identifier for this bridge
110
     */
111
    public function getId()
112
    {
113
        return $this->id;
114
    }
115
116
    /**
117
     * @return string Unique identifier for this bridge
118
     */
119
    public function getName()
120
    {
121
        return $this->name;
122
    }
123
124
    /**
125
     * @return string Name of the current bridging technology
126
     */
127
    public function getTechnology()
128
    {
129
        return $this->technology;
130
    }
131
132
    /**
133
     * @param callable $callback
134
     */
135
    public function onBridgeCreated(callable $callback)
136
    {
137
        $this->on(Event::BRIDGE_CREATED.'_'.$this->getId(), $callback);
138
    }
139
140
    /**
141
     * @param callable $callback
142
     */
143
    public function onceBridgeCreated(callable $callback)
144
    {
145
        $this->once(Event::BRIDGE_CREATED.'_'.$this->getId(), $callback);
146
    }
147
148
    /**
149
     * @param callable $callback
150
     */
151
    public function onBridgeDestroyed(callable $callback)
152
    {
153
        $this->on(Event::BRIDGE_DESTROYED.'_'.$this->getId(), $callback);
154
    }
155
156
    /**
157
     * @param callable $callback
158
     */
159
    public function onceBridgeDestroyed(callable $callback)
160
    {
161
        $this->once(Event::BRIDGE_DESTROYED.'_'.$this->getId(), $callback);
162
    }
163
164
    /**
165
     * @param callable $callback
166
     */
167
    public function onBridgeVideoSourceChanged(callable $callback)
168
    {
169
        $this->on(Event::BRIDGE_VIDEO_SOURCE_CHANGED.'_'.$this->getId(), $callback);
170
    }
171
172
    /**
173
     * @param callable $callback
174
     */
175
    public function onceBridgeVideoSourceChanged(callable $callback)
176
    {
177
        $this->once(Event::BRIDGE_VIDEO_SOURCE_CHANGED.'_'.$this->getId(), $callback);
178
    }
179
180
    /**
181
     * @param callable $callback
182
     */
183
    public function onPeerStatusChange(callable $callback)
184
    {
185
        $this->on(Event::PEER_STATUS_CHANGE.'_'/* @todo Something unique to the peer */, $callback);
186
    }
187
188
    /**
189
     * @param callable $callback
190
     */
191
    public function oncePeerStatusChange(callable $callback)
192
    {
193
        $this->once(Event::PEER_STATUS_CHANGE.'_'/* @todo Something unique to the peer */, $callback);
194
    }
195
196
    /**
197
     * @param callable $callback
198
     */
199
    public function onBridgeBlindTransfer(callable $callback)
200
    {
201
        $this->on(Event::BRIDGE_BLIND_TRANSFER.'_'.$this->getId(), $callback);
202
    }
203
204
    /**
205
     * @param callable $callback
206
     */
207
    public function onceBridgeBlindTransfer(callable $callback)
208
    {
209
        $this->once(Event::BRIDGE_BLIND_TRANSFER.'_'.$this->getId(), $callback);
210
    }
211
212
    /**
213
     * @param callable $callback
214
     */
215
    public function onBridgeAttendedTransfer(callable $callback)
216
    {
217
        $this->on(Event::BRIDGE_ATTENDED_TRANSFER.'_'.$this->getId(), $callback);
218
    }
219
220
    /**
221
     * @param callable $callback
222
     */
223
    public function onceBridgeAttendedTransfer(callable $callback)
224
    {
225
        $this->once(Event::BRIDGE_ATTENDED_TRANSFER.'_'.$this->getId(), $callback);
226
    }
227
228
    /**
229
     * Shut down a bridge. If any channels are in this bridge, they will be removed and resume whatever they were doing beforehand.
230
     *
231
     * @throws NotFoundException
232
     */
233
    public function deleteBridge()
234
    {
235
        $this->client->bridges()->deleteBridge($this->id);
236
    }
237
238
    /**
239
     * Add a channel to a bridge.
240
     *
241
     * @param string $channel (required) Ids of channels to add to bridge.  Allows comma separated values.
242
     * @param string $role Channel's role in the bridge
243
     * @throws NotFoundException
244
     * @throws ConflictException
245
     * @throws UnprocessableEntityException
246
     */
247
    public function addChannel($channel, $role = null)
248
    {
249
        $this->client->bridges()->addChannel($this->id, $channel, $role);
250
    }
251
252
    /**
253
     * Remove a channel from a bridge.
254
     *
255
     * @param string $channel (required) Ids of channels to remove from bridge.  Allows comma separated values.
256
     * @throws NotFoundException
257
     * @throws ConflictException
258
     * @throws UnprocessableEntityException
259
     */
260
    public function removeChannel($channel)
261
    {
262
        $this->client->bridges()->removeChannel($this->id, $channel);
263
    }
264
265
    /**
266
     * Play music on hold to a bridge or change the MOH class that is playing.
267
     *
268
     * @param string $mohClass Music on hold class to use
269
     * @throws NotFoundException
270
     * @throws ConflictException
271
     */
272
    public function startMusicOnHold($mohClass)
273
    {
274
        $this->client->bridges()->startMusicOnHold($this->id, $mohClass);
275
    }
276
277
    /**
278
     * Stop playing music on hold to a bridge. This will only stop music on hold being played via POST bridges/{bridgeId}/moh.
279
     *
280
     * @throws NotFoundException
281
     * @throws ConflictException
282
     */
283
    public function stopMusicOnHold()
284
    {
285
        $this->client->bridges()->stopMusicOnHold($this->id);
286
    }
287
288
    /**
289
     * Start playback of media on a bridge. The media URI may be any of a number of URI's. Currently
290
     * sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation
291
     * creates a playback resource that can be used to control the playback of media (pause, rewind,
292
     * fast forward, etc.)
293
     *
294
     * @link https://wiki.asterisk.org/wiki/display/AST/ARI+and+Channels%3A+Simple+Media+Manipulation Simple media playback
295
     *
296
     * @param string $media (required) Media's URI to play.
297
     * @param string $lang For sounds, selects language for sound.
298
     * @param int $offsetms Number of media to skip before playing.
299
     * @param int $skipms (3000 default) Number of milliseconds to skip for forward/reverse operations.
300
     * @param string $playbackId Playback Id.
301
     * @return Playback
302
     * @throws NotFoundException
303
     * @throws ConflictException
304
     */
305
    public function playMedia($media, $lang = null, $offsetms = null, $skipms = null, $playbackId = null)
306
    {
307
        return $this->client->bridges()->playMedia($this->id, $media, $lang, $offsetms, $skipms, $playbackId);
308
    }
309
310
    /**
311
     * Start playback of media on a bridge. The media URI may be any of a number of URI's. Currently
312
     * sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation
313
     * creates a playback resource that can be used to control the playback of media (pause, rewind,
314
     * fast forward, etc.)
315
     *
316
     * @link https://wiki.asterisk.org/wiki/display/AST/ARI+and+Channels%3A+Simple+Media+Manipulation Simple media playback
317
     *
318
     * @param string $media (required) Media's URI to play.
319
     * @param string $lang For sounds, selects language for sound.
320
     * @param int $offsetms Number of media to skip before playing.
321
     * @param int $skipms (3000 default) Number of milliseconds to skip for forward/reverse operations.
322
     * @param string $playbackId Playback Id.
323
     * @return Playback
324
     * @throws NotFoundException
325
     * @throws ConflictException
326
     */
327
    public function playMediaWithId($media, $lang = null, $offsetms = null, $skipms = null, $playbackId = null)
328
    {
329
        return $this->client->bridges()->playMediaWithId($this->id, $media, $lang, $offsetms, $skipms, $playbackId);
330
    }
331
332
    /**
333
     * Start a recording. Record audio from a channel. Note that this will not capture audio sent to the
334
     * channel. The bridge itself has a record feature if that's what you want.
335
     *
336
     * @param string $name (required) Recording's filename
337
     * @param string $format (required) Format to encode audio in
338
     * @param int $maxDurationSeconds Maximum duration of the recording, in seconds. 0 for no limit.  Allowed range: Min: 0; Max: None
339
     * @param int $maxSilenceSeconds Maximum duration of silence, in seconds. 0 for no limit.  Allowed range: Min: 0; Max: None
340
     * @param string $ifExists = Action to take if a recording with the same name already exists. default: fail, Allowed values: fail, overwrite, append
341
     * @param boolean $beep Play beep when recording begins
342
     * @param string $terminateOn DTMF input to terminate recording.  Default: none, Allowed values: none, any, *, #
343
     * @return LiveRecording
344
     * @throws InvalidParameterException
345
     * @throws NotFoundException
346
     * @throws ConflictException
347
     * @throws UnprocessableEntityException
348
     */
349 View Code Duplication
    public function record(
350
        $name,
351
        $format,
352
        $maxDurationSeconds = null,
353
        $maxSilenceSeconds = null,
354
        $ifExists = null,
355
        $beep = null,
356
        $terminateOn = null
357
    ) {
358
        return $this->client->bridges()->record($this->id, $name, $format, $maxDurationSeconds, $maxSilenceSeconds,
359
            $ifExists, $beep, $terminateOn);
360
    }
361
362
    /**
363
     * @param AriClient $client
364
     * @param string $response
365
     */
366
    public function __construct(AriClient $client, $response)
367
    {
368
        parent::__construct($client, $response);
369
370
        $this->bridgeClass = $this->getResponseValue('bridge_class');
371
        $this->bridgeType = $this->getResponseValue('bridge_type');
372
        $this->channels = $this->getResponseValue('channels');
0 ignored issues
show
The property channels 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;
Loading history...
373
        $this->creator = $this->getResponseValue('creator');
374
        $this->id = $this->getResponseValue('id');
375
        $this->name = $this->getResponseValue('name');
376
        $this->technology = $this->getResponseValue('technology');
377
    }
378
379
}
380