lockfile again
This commit is contained in:
138
vendor/google/auth/src/Logging/LoggingTrait.php
vendored
Normal file
138
vendor/google/auth/src/Logging/LoggingTrait.php
vendored
Normal file
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright 2024 Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
namespace Google\Auth\Logging;
|
||||
|
||||
use Psr\Log\LogLevel;
|
||||
|
||||
/**
|
||||
* A trait used to call a PSR-3 logging interface.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
trait LoggingTrait
|
||||
{
|
||||
/**
|
||||
* @param RpcLogEvent $event
|
||||
*/
|
||||
private function logRequest(RpcLogEvent $event): void
|
||||
{
|
||||
$debugEvent = [
|
||||
'timestamp' => $event->timestamp,
|
||||
'severity' => strtoupper(LogLevel::DEBUG),
|
||||
'processId' => $event->processId ?? null,
|
||||
'requestId' => $event->requestId ?? null,
|
||||
'rpcName' => $event->rpcName ?? null,
|
||||
];
|
||||
|
||||
$debugEvent = array_filter($debugEvent, fn ($value) => !is_null($value));
|
||||
|
||||
$jsonPayload = [
|
||||
'request.method' => $event->method,
|
||||
'request.url' => $event->url,
|
||||
'request.headers' => $event->headers,
|
||||
'request.payload' => $this->truncatePayload($event->payload),
|
||||
'request.jwt' => $this->getJwtToken($event->headers ?? []),
|
||||
'retryAttempt' => $event->retryAttempt
|
||||
];
|
||||
|
||||
// Remove null values
|
||||
$debugEvent['jsonPayload'] = array_filter($jsonPayload, fn ($value) => !is_null($value));
|
||||
|
||||
$stringifiedEvent = json_encode($debugEvent, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
|
||||
// There was an error stringifying the event, return to not break execution
|
||||
if ($stringifiedEvent === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->logger->debug($stringifiedEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RpcLogEvent $event
|
||||
*/
|
||||
private function logResponse(RpcLogEvent $event): void
|
||||
{
|
||||
$debugEvent = [
|
||||
'timestamp' => $event->timestamp,
|
||||
'severity' => strtoupper(LogLevel::DEBUG),
|
||||
'processId' => $event->processId ?? null,
|
||||
'requestId' => $event->requestId ?? null,
|
||||
'jsonPayload' => [
|
||||
'response.status' => $event->status,
|
||||
'response.headers' => $event->headers,
|
||||
'response.payload' => $this->truncatePayload($event->payload),
|
||||
'latencyMillis' => $event->latency,
|
||||
]
|
||||
];
|
||||
|
||||
// Remove null values
|
||||
$debugEvent = array_filter($debugEvent, fn ($value) => !is_null($value));
|
||||
$debugEvent['jsonPayload'] = array_filter(
|
||||
$debugEvent['jsonPayload'],
|
||||
fn ($value) => !is_null($value)
|
||||
);
|
||||
|
||||
$stringifiedEvent = json_encode($debugEvent, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
|
||||
// There was an error stringifying the event, return to not break execution
|
||||
if ($stringifiedEvent !== false) {
|
||||
$this->logger->debug($stringifiedEvent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<mixed> $headers
|
||||
* @return null|array<string, string|false>
|
||||
*/
|
||||
private function getJwtToken(array $headers): null|array
|
||||
{
|
||||
if (empty($headers)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$tokenHeader = $headers['Authorization'] ?? '';
|
||||
$token = str_replace('Bearer ', '', $tokenHeader);
|
||||
|
||||
if (substr_count($token, '.') !== 2) {
|
||||
return null;
|
||||
}
|
||||
|
||||
[$header, $token, $_] = explode('.', $token);
|
||||
|
||||
return [
|
||||
'header' => base64_decode($header),
|
||||
'token' => base64_decode($token)
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|string $payload
|
||||
* @return string
|
||||
*/
|
||||
private function truncatePayload(null|string $payload): null|string
|
||||
{
|
||||
$maxLength = 500;
|
||||
|
||||
if (is_null($payload) || strlen($payload) <= $maxLength) {
|
||||
return $payload;
|
||||
}
|
||||
|
||||
return substr($payload, 0, $maxLength) . '...';
|
||||
}
|
||||
}
|
||||
136
vendor/google/auth/src/Logging/RpcLogEvent.php
vendored
Normal file
136
vendor/google/auth/src/Logging/RpcLogEvent.php
vendored
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright 2024 Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
namespace Google\Auth\Logging;
|
||||
|
||||
/**
|
||||
* A class that contains all the required information for logging.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class RpcLogEvent
|
||||
{
|
||||
/**
|
||||
* Timestamp in format RFC3339 representing when this event ocurred
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public string $timestamp;
|
||||
|
||||
/**
|
||||
* The time in milliseconds at time on creation for calculating latency
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
public float $milliseconds;
|
||||
|
||||
/**
|
||||
* Rest method type
|
||||
*
|
||||
* @var null|string
|
||||
*/
|
||||
public null|string $method = null;
|
||||
|
||||
/**
|
||||
* URL representing the rest URL endpoint
|
||||
*
|
||||
* @var null|string
|
||||
*/
|
||||
public null|string $url = null;
|
||||
|
||||
/**
|
||||
* An array that contains the headers for the response or request
|
||||
*
|
||||
* @var null|array<mixed>
|
||||
*/
|
||||
public null|array $headers = null;
|
||||
|
||||
/**
|
||||
* An array representation of JSON for the response or request
|
||||
*
|
||||
* @var null|string
|
||||
*/
|
||||
public null|string $payload = null;
|
||||
|
||||
/**
|
||||
* Status code for REST or gRPC methods
|
||||
*
|
||||
* @var null|int|string
|
||||
*/
|
||||
public null|int|string $status = null;
|
||||
|
||||
/**
|
||||
* The latency in milliseconds
|
||||
*
|
||||
* @var null|int
|
||||
*/
|
||||
public null|int $latency = null;
|
||||
|
||||
/**
|
||||
* The retry attempt number
|
||||
*
|
||||
* @var null|int
|
||||
*/
|
||||
public null|int $retryAttempt = null;
|
||||
|
||||
/**
|
||||
* The name of the gRPC method being called
|
||||
*
|
||||
* @var null|string
|
||||
*/
|
||||
public null|string $rpcName = null;
|
||||
|
||||
/**
|
||||
* The Service Name of the gRPC
|
||||
*
|
||||
* @var null|string $serviceName
|
||||
*/
|
||||
public null|string $serviceName = null;
|
||||
|
||||
/**
|
||||
* The Process ID for tracing logs
|
||||
*
|
||||
* @var null|int $processId
|
||||
*/
|
||||
public null|int $processId = null;
|
||||
|
||||
/**
|
||||
* The Request id for tracing logs
|
||||
*
|
||||
* @var null|int $requestId;
|
||||
*/
|
||||
public null|int $requestId = null;
|
||||
|
||||
/**
|
||||
* Creates an object with all the fields required for logging
|
||||
* Passing a string representation of a timestamp calculates the difference between
|
||||
* these two times and sets the latency field with the result.
|
||||
*
|
||||
* @param null|float $startTime (Optional) Parameter to calculate the latency
|
||||
*/
|
||||
public function __construct(null|float $startTime = null)
|
||||
{
|
||||
$this->timestamp = date(DATE_RFC3339);
|
||||
|
||||
// Takes the micro time and convets it to millis
|
||||
$this->milliseconds = round(microtime(true) * 1000);
|
||||
|
||||
if ($startTime) {
|
||||
$this->latency = (int) round($this->milliseconds - $startTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
85
vendor/google/auth/src/Logging/StdOutLogger.php
vendored
Normal file
85
vendor/google/auth/src/Logging/StdOutLogger.php
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright 2024 Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
namespace Google\Auth\Logging;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\LoggerTrait;
|
||||
use Psr\Log\LogLevel;
|
||||
use Stringable;
|
||||
|
||||
/**
|
||||
* A basic logger class to log into stdOut for GCP logging.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class StdOutLogger implements LoggerInterface
|
||||
{
|
||||
use LoggerTrait;
|
||||
|
||||
/**
|
||||
* @var array<string,int>
|
||||
*/
|
||||
private array $levelMapping = [
|
||||
LogLevel::EMERGENCY => 7,
|
||||
LogLevel::ALERT => 6,
|
||||
LogLevel::CRITICAL => 5,
|
||||
LogLevel::ERROR => 4,
|
||||
LogLevel::WARNING => 3,
|
||||
LogLevel::NOTICE => 2,
|
||||
LogLevel::INFO => 1,
|
||||
LogLevel::DEBUG => 0,
|
||||
];
|
||||
private int $level;
|
||||
|
||||
/**
|
||||
* Constructs a basic PSR-3 logger class that logs into StdOut for GCP Logging
|
||||
*
|
||||
* @param string $level The level of the logger instance.
|
||||
*/
|
||||
public function __construct(string $level = LogLevel::DEBUG)
|
||||
{
|
||||
$this->level = $this->getLevelFromName($level);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function log($level, string|Stringable $message, array $context = []): void
|
||||
{
|
||||
if ($this->getLevelFromName($level) < $this->level) {
|
||||
return;
|
||||
}
|
||||
|
||||
print($message . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $levelName
|
||||
* @return int
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
private function getLevelFromName(string $levelName): int
|
||||
{
|
||||
if (!array_key_exists($levelName, $this->levelMapping)) {
|
||||
throw new InvalidArgumentException('The level supplied to the Logger is not valid');
|
||||
}
|
||||
|
||||
return $this->levelMapping[$levelName];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user