mirror of
https://github.com/nullthoughts/laravel-data-sync.git
synced 2026-02-14 02:52:59 +00:00
Initial commit
This commit is contained in:
237
vendor/nexmo/client/src/Message/InboundMessage.php
vendored
Normal file
237
vendor/nexmo/client/src/Message/InboundMessage.php
vendored
Normal file
@@ -0,0 +1,237 @@
|
||||
<?php
|
||||
/**
|
||||
* Nexmo Client Library for PHP
|
||||
*
|
||||
* @copyright Copyright (c) 2016 Nexmo, Inc. (http://nexmo.com)
|
||||
* @license https://github.com/Nexmo/nexmo-php/blob/master/LICENSE.txt MIT License
|
||||
*/
|
||||
|
||||
namespace Nexmo\Message;
|
||||
|
||||
use Nexmo\Entity\JsonResponseTrait;
|
||||
use Nexmo\Entity\Psr7Trait;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class InboundMessage implements MessageInterface, \ArrayAccess
|
||||
{
|
||||
use Psr7Trait;
|
||||
use JsonResponseTrait;
|
||||
use CollectionTrait;
|
||||
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* InboundMessage constructor.
|
||||
* @param string|ServerRequestInterface $idOrRequest Message ID, or inbound HTTP request.
|
||||
*/
|
||||
public function __construct($idOrRequest)
|
||||
{
|
||||
if($idOrRequest instanceof ServerRequestInterface){
|
||||
$this->setRequest($idOrRequest);
|
||||
return;
|
||||
}
|
||||
|
||||
if(is_string($idOrRequest)){
|
||||
$this->id = $idOrRequest;
|
||||
return;
|
||||
}
|
||||
|
||||
throw new \RuntimeException(sprintf(
|
||||
'`%s` must be constructed with a server request or a message id',
|
||||
self::class
|
||||
));
|
||||
}
|
||||
|
||||
public static function createFromGlobals()
|
||||
{
|
||||
$serverRequest = \Zend\Diactoros\ServerRequestFactory::fromGlobals();
|
||||
return new self($serverRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a matching reply to the inbound message. Currently only supports text replies.
|
||||
*
|
||||
* @param string $body
|
||||
* @return Text
|
||||
*/
|
||||
public function createReply($body)
|
||||
{
|
||||
return new Text($this->getFrom(), $this->getTo(), $body);
|
||||
}
|
||||
|
||||
public function getRequestData($sent = true)
|
||||
{
|
||||
$request = $this->getRequest();
|
||||
|
||||
if(is_null($request)){
|
||||
return [];
|
||||
}
|
||||
|
||||
if(!($request instanceof ServerRequestInterface)){
|
||||
throw new \RuntimeException('inbound message request should only ever be `' . ServerRequestInterface::class . '`');
|
||||
}
|
||||
|
||||
// Check our incoming content type
|
||||
$isApplicationJson = false;
|
||||
$contentTypes = $request->getHeader('Content-Type');
|
||||
// We only respect application/json if it's the first entry without any preference weighting
|
||||
// as that's what Nexmo send
|
||||
if (count($contentTypes) && $contentTypes[0] === 'application/json') {
|
||||
$isApplicationJson = true;
|
||||
}
|
||||
|
||||
switch($request->getMethod()){
|
||||
case 'POST':
|
||||
$params = $isApplicationJson ? json_decode((string)$request->getBody(), true) : $request->getParsedBody();
|
||||
break;
|
||||
case 'GET':
|
||||
$params = $request->getQueryParams();
|
||||
break;
|
||||
default:
|
||||
$params = [];
|
||||
break;
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
public function getFrom()
|
||||
{
|
||||
if($this->getRequest()){
|
||||
return $this['msisdn'];
|
||||
} else {
|
||||
return $this['from'];
|
||||
}
|
||||
}
|
||||
|
||||
public function getTo()
|
||||
{
|
||||
return $this['to'];
|
||||
}
|
||||
|
||||
public function getMessageId()
|
||||
{
|
||||
if(isset($this->id)){
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
return $this['messageId'];
|
||||
}
|
||||
|
||||
public function isValid()
|
||||
{
|
||||
return (bool) $this->getMessageId();
|
||||
}
|
||||
|
||||
public function getBody()
|
||||
{
|
||||
if($this->getRequest()){
|
||||
return $this['text'];
|
||||
} else {
|
||||
return $this['body'];
|
||||
}
|
||||
}
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return $this['type'];
|
||||
}
|
||||
|
||||
public function getAccountId()
|
||||
{
|
||||
return $this['account-id'];
|
||||
}
|
||||
|
||||
public function getNetwork()
|
||||
{
|
||||
return $this['network'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow the object to access the data from the API response, a sent API request, or the user set data that the
|
||||
* request will be created from - in that order.
|
||||
*
|
||||
* @param mixed $offset
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function offsetExists($offset)
|
||||
{
|
||||
$response = $this->getResponseData();
|
||||
|
||||
if(isset($this->index)){
|
||||
$response = $response['items'][$this->index];
|
||||
}
|
||||
|
||||
$request = $this->getRequestData();
|
||||
$dirty = $this->getRequestData(false);
|
||||
return isset($response[$offset]) || isset($request[$offset]) || isset($dirty[$offset]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow the object to access the data from the API response, a sent API request, or the user set data that the
|
||||
* request will be created from - in that order.
|
||||
*
|
||||
* @param mixed $offset
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function offsetGet($offset)
|
||||
{
|
||||
$response = $this->getResponseData();
|
||||
|
||||
if(isset($this->index)){
|
||||
$response = $response['items'][$this->index];
|
||||
}
|
||||
|
||||
$request = $this->getRequestData();
|
||||
$dirty = $this->getRequestData(false);
|
||||
|
||||
if(isset($response[$offset])){
|
||||
return $response[$offset];
|
||||
}
|
||||
|
||||
if(isset($request[$offset])){
|
||||
return $request[$offset];
|
||||
}
|
||||
|
||||
if(isset($dirty[$offset])){
|
||||
return $dirty[$offset];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* All properties are read only.
|
||||
*
|
||||
* @param mixed $offset
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function offsetSet($offset, $value)
|
||||
{
|
||||
throw $this->getReadOnlyException($offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* All properties are read only.
|
||||
*
|
||||
* @param mixed $offset
|
||||
*/
|
||||
public function offsetUnset($offset)
|
||||
{
|
||||
throw $this->getReadOnlyException($offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* All properties are read only.
|
||||
*
|
||||
* @param $offset
|
||||
* @return \RuntimeException
|
||||
*/
|
||||
protected function getReadOnlyException($offset)
|
||||
{
|
||||
return new \RuntimeException(sprintf(
|
||||
'can not modify `%s` using array access',
|
||||
$offset
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user