File "FlowdockHandler.php"
Full Path: /home/jlklyejr/public_html/post-date/wp-content/plugins/flexible-shipping/vendor_prefixed/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php
File size: 3.61 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare (strict_types=1);
/*
* This file is part of the Monolog package.
*
* (c) Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace FSVendor\Monolog\Handler;
use FSVendor\Monolog\Logger;
use FSVendor\Monolog\Utils;
use FSVendor\Monolog\Formatter\FlowdockFormatter;
use FSVendor\Monolog\Formatter\FormatterInterface;
/**
* Sends notifications through the Flowdock push API
*
* This must be configured with a FlowdockFormatter instance via setFormatter()
*
* Notes:
* API token - Flowdock API token
*
* @author Dominik Liebler <liebler.dominik@gmail.com>
* @see https://www.flowdock.com/api/push
*
* @phpstan-import-type FormattedRecord from AbstractProcessingHandler
* @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4
*/
class FlowdockHandler extends \FSVendor\Monolog\Handler\SocketHandler
{
/**
* @var string
*/
protected $apiToken;
/**
* @throws MissingExtensionException if OpenSSL is missing
*/
public function __construct(string $apiToken, $level = \FSVendor\Monolog\Logger::DEBUG, bool $bubble = \true, bool $persistent = \false, float $timeout = 0.0, float $writingTimeout = 10.0, ?float $connectionTimeout = null, ?int $chunkSize = null)
{
if (!\extension_loaded('openssl')) {
throw new \FSVendor\Monolog\Handler\MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler');
}
parent::__construct('ssl://api.flowdock.com:443', $level, $bubble, $persistent, $timeout, $writingTimeout, $connectionTimeout, $chunkSize);
$this->apiToken = $apiToken;
}
/**
* {@inheritDoc}
*/
public function setFormatter(\FSVendor\Monolog\Formatter\FormatterInterface $formatter) : \FSVendor\Monolog\Handler\HandlerInterface
{
if (!$formatter instanceof \FSVendor\Monolog\Formatter\FlowdockFormatter) {
throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\\Formatter\\FlowdockFormatter to function correctly');
}
return parent::setFormatter($formatter);
}
/**
* Gets the default formatter.
*/
protected function getDefaultFormatter() : \FSVendor\Monolog\Formatter\FormatterInterface
{
throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\\Formatter\\FlowdockFormatter to function correctly');
}
/**
* {@inheritDoc}
*/
protected function write(array $record) : void
{
parent::write($record);
$this->closeSocket();
}
/**
* {@inheritDoc}
*/
protected function generateDataStream(array $record) : string
{
$content = $this->buildContent($record);
return $this->buildHeader($content) . $content;
}
/**
* Builds the body of API call
*
* @phpstan-param FormattedRecord $record
*/
private function buildContent(array $record) : string
{
return \FSVendor\Monolog\Utils::jsonEncode($record['formatted']['flowdock']);
}
/**
* Builds the header of the API Call
*/
private function buildHeader(string $content) : string
{
$header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n";
$header .= "Host: api.flowdock.com\r\n";
$header .= "Content-Type: application/json\r\n";
$header .= "Content-Length: " . \strlen($content) . "\r\n";
$header .= "\r\n";
return $header;
}
}