siip-whatsapp-notifications.../vendor/aws/aws-sdk-php/src/Crypto/MetadataEnvelope.php
DANYDHSV 2926211060 feat(v4.2.0): Visualizador de Pagos + Fix Sincronización CallBell
Nuevas Características: • Visualizador de pagos mensuales con gráfica de dona (Chart.js) • Tarjetas estadísticas: clientes activos, pagados y pendientes • Tabla de clientes pendientes con saldos en tiempo real • Microservicio Node.js para metadata de Stripe (acceso directo a BD)

Mejoras: • Fix crítico: Sincronización automática de saldo en CallBell al agregar facturas • Categorización mejorada de pagos OXXO y Transferencias Stripe • Normalización de valores: "OXXO" → "OXXO Pay" para evitar errores 422 • Configuración .env para credenciales de base de datos

Correcciones: • Saldo y estado ahora se actualizan correctamente en CallBell • Fix networking Docker (ECONNREFUSED resuelto) • Fix validación de atributos en API de UCRM • Actualización automática de userId en pagos Stripe

Archivos principales:

public.php (visualizador de pagos)
AbstractMessageNotifierFacade.php (logging sync)
ClientCallBellAPI.php (comparación de campos)
AbstractStripeOperationsFacade.php (normalización)
manifest.json, README.md, CHANGELOG.md (docs)
2026-01-18 18:22:00 -06:00

208 lines
10 KiB
PHP
Executable File

<?php
namespace Aws\Crypto;
use Aws\HasDataTrait;
use \ArrayAccess;
use \IteratorAggregate;
use \InvalidArgumentException;
use \JsonSerializable;
/**
* Stores encryption metadata for reading and writing.
*
* @internal
*/
class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializable
{
use HasDataTrait;
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# The "x-amz-" prefix denotes that the metadata is owned by an Amazon product
//# and MUST be prepended to all S3EC metadata mapkeys.
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-key-v2" MUST be present for V2 format objects.
const CONTENT_KEY_V2_HEADER = 'x-amz-key-v2';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-3") SHOULD be represented by a constant named "ENCRYPTED_DATA_KEY_V3" or similar in the implementation code.
const ENCRYPTED_DATA_KEY_V3 = 'x-amz-3';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-iv" MUST be present for V1 format objects.
const IV_HEADER = 'x-amz-iv';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects.
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-matdesc" MUST be present for V2 format objects.
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-iv" MUST be present for V2 format objects.
const MATERIALS_DESCRIPTION_HEADER = 'x-amz-matdesc';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-m") SHOULD be represented by a constant named "MAT_DESC_V3" or similar in the implementation code.
const MAT_DESC_V3 = 'x-amz-m';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-wrap-alg" MUST be present for V2 format objects.
const KEY_WRAP_ALGORITHM_HEADER = 'x-amz-wrap-alg';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-w") SHOULD be represented by a constant named "ENCRYPTED_DATA_KEY_ALGORITHM_V3" or similar in the implementation code.
const ENCRYPTED_DATA_KEY_ALGORITHM_V3 = 'x-amz-w';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-cek-alg" MUST be present for V2 format objects.
const CONTENT_CRYPTO_SCHEME_HEADER = 'x-amz-cek-alg';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-c") SHOULD be represented by a constant named "CONTENT_CIPHER_V3" or similar in the implementation code.
const CONTENT_CIPHER_V3 = 'x-amz-c';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-tag-len" MUST be present for V2 format objects.
const CRYPTO_TAG_LENGTH_HEADER = 'x-amz-tag-len';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects.
const UNENCRYPTED_CONTENT_LENGTH_HEADER = 'x-amz-unencrypted-content-length';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-t") SHOULD be represented by a constant named "ENCRYPTION_CONTEXT_V3" or similar in the implementation code.
const ENCRYPTION_CONTEXT_V3 = 'x-amz-t';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-d") SHOULD be represented by a constant named "KEY_COMMITMENT_V3" or similar in the implementation code.
const KEY_COMMITMENT_V3 = 'x-amz-d';
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - This mapkey ("x-amz-i") SHOULD be represented by a constant named "MESSAGE_ID_V3" or similar in the implementation code.
const MESSAGE_ID_V3 = 'x-amz-i';
private static $constants = [];
public static function getConstantValues()
{
if (empty(self::$constants)) {
$reflection = new \ReflectionClass(static::class);
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# The "x-amz-meta-" prefix is automatically added by the S3 server and MUST NOT be included in implementation code.
foreach (array_values($reflection->getConstants()) as $constant) {
self::$constants[$constant] = true;
}
}
return array_keys(self::$constants);
}
/**
* @return void
*/
#[\ReturnTypeWillChange]
public function offsetSet($name, $value)
{
$constants = self::getConstantValues();
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
//# In general, if there is any deviation from the above format, with the exception of additional unrelated mapkeys, then the S3EC SHOULD throw an exception.
if (is_null($name) || !in_array($name, $constants)) {
throw new InvalidArgumentException('MetadataEnvelope fields must'
. ' must match a predefined offset; use the header constants.');
}
$this->data[$name] = $value;
}
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
return $this->data;
}
public static function isV2Envelope(MetadataEnvelope $envelope): bool
{
if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER])
|| !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])
|| !isset($envelope[MetadataEnvelope::IV_HEADER])
|| !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER])
|| !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER])
|| !isset($envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER])
) {
return false;
}
return true;
}
public static function isV1Envelope(MetadataEnvelope $envelope): bool
{
if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects.
|| !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-iv" MUST be present for V1 format objects.
|| !isset($envelope[MetadataEnvelope::IV_HEADER])
|| !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER])
|| !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects.
|| !isset($envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER])
) {
return false;
}
return true;
}
public static function isV3Envelope(MetadataEnvelope $envelope): bool
{
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-3" MUST be present for V3 format objects.
if (!isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-c" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::CONTENT_CIPHER_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-d" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::KEY_COMMITMENT_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-i" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::MESSAGE_ID_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-w" MUST be present for V3 format objects.
|| !isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3])
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
//= type=implication
//# - The mapkey "x-amz-t" SHOULD be present for V3 format objects that use KMS Encryption Context.
|| !isset($envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3])
) {
return false;
}
return true;
}
public static function getV2Fields(): array
{
return [
MetadataEnvelope::CONTENT_KEY_V2_HEADER,
MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER,
MetadataEnvelope::IV_HEADER,
MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER,
MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER,
MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER
];
}
public static function getV3Fields(): array
{
return [
MetadataEnvelope::ENCRYPTED_DATA_KEY_V3,
MetadataEnvelope::CONTENT_CIPHER_V3,
MetadataEnvelope::KEY_COMMITMENT_V3,
MetadataEnvelope::MESSAGE_ID_V3,
MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3,
MetadataEnvelope::ENCRYPTION_CONTEXT_V3
];
}
}