v2.0.0
This commit is contained in:
parent
27aae99d99
commit
7bcda55ebb
3158 changed files with 140643 additions and 130380 deletions
674
LICENSE
Normal file
674
LICENSE
Normal file
|
|
@ -0,0 +1,674 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
|
@ -1,4 +1,12 @@
|
|||
== Changelog ==
|
||||
= 2.0.0 =
|
||||
|
||||
* Added Reply-To header support for emails sent via Amazon SES.
|
||||
* Improved error handling and validation.
|
||||
* Enhanced compatibility with core SMTP plugin 2.0.0.
|
||||
* Improved credential handling and encryption.
|
||||
* Code quality improvements and documentation.
|
||||
* **BREAKING CHANGE**: Minimum PHP version increased to 8.2 (required by AWS SDK for PHP).
|
||||
* Updated AWS SDK for PHP to latest version with security updates.
|
||||
|
||||
= 1.0.0 =
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"require": {
|
||||
"aws/aws-sdk-php": "^3.356"
|
||||
}
|
||||
}
|
||||
917
composer.lock
generated
917
composer.lock
generated
|
|
@ -1,917 +0,0 @@
|
|||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "1cb93c989568529d7573d019c613b48f",
|
||||
"packages": [
|
||||
{
|
||||
"name": "aws/aws-crt-php",
|
||||
"version": "v1.2.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/awslabs/aws-crt-php.git",
|
||||
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
|
||||
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
|
||||
"yoast/phpunit-polyfills": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "AWS SDK Common Runtime Team",
|
||||
"email": "aws-sdk-common-runtime@amazon.com"
|
||||
}
|
||||
],
|
||||
"description": "AWS Common Runtime for PHP",
|
||||
"homepage": "https://github.com/awslabs/aws-crt-php",
|
||||
"keywords": [
|
||||
"amazon",
|
||||
"aws",
|
||||
"crt",
|
||||
"sdk"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/awslabs/aws-crt-php/issues",
|
||||
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
|
||||
},
|
||||
"time": "2024-10-18T22:15:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.356.23",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "e9253cf6073f06080a7458af54e18fc474f0c864"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e9253cf6073f06080a7458af54e18fc474f0c864",
|
||||
"reference": "e9253cf6073f06080a7458af54e18fc474f0c864",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"aws/aws-crt-php": "^1.2.3",
|
||||
"ext-json": "*",
|
||||
"ext-pcre": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^7.4.5",
|
||||
"guzzlehttp/promises": "^2.0",
|
||||
"guzzlehttp/psr7": "^2.4.5",
|
||||
"mtdowling/jmespath.php": "^2.8.0",
|
||||
"php": ">=8.1",
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"andrewsville/php-token-reflection": "^1.4",
|
||||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"behat/behat": "~3.0",
|
||||
"composer/composer": "^2.7.8",
|
||||
"dms/phpunit-arraysubset-asserts": "^0.4.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"ext-dom": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-pcntl": "*",
|
||||
"ext-sockets": "*",
|
||||
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
|
||||
"psr/cache": "^2.0 || ^3.0",
|
||||
"psr/simple-cache": "^2.0 || ^3.0",
|
||||
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
|
||||
"symfony/filesystem": "^v6.4.0 || ^v7.1.0",
|
||||
"yoast/phpunit-polyfills": "^2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
|
||||
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||
"ext-curl": "To send requests using cURL",
|
||||
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||
"ext-sockets": "To use client-side monitoring"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Aws\\": "src/"
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"src/data/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Amazon Web Services",
|
||||
"homepage": "http://aws.amazon.com"
|
||||
}
|
||||
],
|
||||
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||
"keywords": [
|
||||
"amazon",
|
||||
"aws",
|
||||
"cloud",
|
||||
"dynamodb",
|
||||
"ec2",
|
||||
"glacier",
|
||||
"s3",
|
||||
"sdk"
|
||||
],
|
||||
"support": {
|
||||
"forum": "https://github.com/aws/aws-sdk-php/discussions",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.356.23"
|
||||
},
|
||||
"time": "2025-09-22T18:10:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "7.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
|
||||
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/promises": "^2.3",
|
||||
"guzzlehttp/psr7": "^2.8",
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-client": "^1.0",
|
||||
"symfony/deprecation-contracts": "^2.2 || ^3.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-client-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"ext-curl": "*",
|
||||
"guzzle/client-integration-tests": "3.0.2",
|
||||
"php-http/message-factory": "^1.1",
|
||||
"phpunit/phpunit": "^8.5.39 || ^9.6.20",
|
||||
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-curl": "Required for CURL handler support",
|
||||
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
|
||||
"psr/log": "Required for using the Log middleware"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions_include.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
},
|
||||
{
|
||||
"name": "Jeremy Lindblom",
|
||||
"email": "jeremeamia@gmail.com",
|
||||
"homepage": "https://github.com/jeremeamia"
|
||||
},
|
||||
{
|
||||
"name": "George Mponos",
|
||||
"email": "gmponos@gmail.com",
|
||||
"homepage": "https://github.com/gmponos"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Nyholm",
|
||||
"email": "tobias.nyholm@gmail.com",
|
||||
"homepage": "https://github.com/Nyholm"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com",
|
||||
"homepage": "https://github.com/sagikazarmark"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
}
|
||||
],
|
||||
"description": "Guzzle is a PHP HTTP client library",
|
||||
"keywords": [
|
||||
"client",
|
||||
"curl",
|
||||
"framework",
|
||||
"http",
|
||||
"http client",
|
||||
"psr-18",
|
||||
"psr-7",
|
||||
"rest",
|
||||
"web service"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/guzzle/issues",
|
||||
"source": "https://github.com/guzzle/guzzle/tree/7.10.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/Nyholm",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-23T22:36:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
"version": "2.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "481557b130ef3790cf82b713667b43030dc9c957"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
|
||||
"reference": "481557b130ef3790cf82b713667b43030dc9c957",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\Promise\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Nyholm",
|
||||
"email": "tobias.nyholm@gmail.com",
|
||||
"homepage": "https://github.com/Nyholm"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
}
|
||||
],
|
||||
"description": "Guzzle promises library",
|
||||
"keywords": [
|
||||
"promise"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/promises/issues",
|
||||
"source": "https://github.com/guzzle/promises/tree/2.3.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/Nyholm",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-22T14:34:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "21dc724a0583619cd1652f673303492272778051"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
|
||||
"reference": "21dc724a0583619cd1652f673303492272778051",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/http-message": "^1.1 || ^2.0",
|
||||
"ralouphie/getallheaders": "^3.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-factory-implementation": "1.0",
|
||||
"psr/http-message-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"http-interop/http-factory-tests": "0.9.0",
|
||||
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
|
||||
},
|
||||
"suggest": {
|
||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\Psr7\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
},
|
||||
{
|
||||
"name": "George Mponos",
|
||||
"email": "gmponos@gmail.com",
|
||||
"homepage": "https://github.com/gmponos"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Nyholm",
|
||||
"email": "tobias.nyholm@gmail.com",
|
||||
"homepage": "https://github.com/Nyholm"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com",
|
||||
"homepage": "https://github.com/sagikazarmark"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com",
|
||||
"homepage": "https://sagikazarmark.hu"
|
||||
}
|
||||
],
|
||||
"description": "PSR-7 message implementation that also provides common utility methods",
|
||||
"keywords": [
|
||||
"http",
|
||||
"message",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response",
|
||||
"stream",
|
||||
"uri",
|
||||
"url"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.8.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/Nyholm",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-23T21:21:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mtdowling/jmespath.php",
|
||||
"version": "2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jmespath/jmespath.php.git",
|
||||
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
|
||||
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"symfony/polyfill-mbstring": "^1.17"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/xdebug-handler": "^3.0.3",
|
||||
"phpunit/phpunit": "^8.5.33"
|
||||
},
|
||||
"bin": [
|
||||
"bin/jp.php"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/JmesPath.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"JmesPath\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
}
|
||||
],
|
||||
"description": "Declaratively specify how to extract elements from a JSON document",
|
||||
"keywords": [
|
||||
"json",
|
||||
"jsonpath"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jmespath/jmespath.php/issues",
|
||||
"source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
|
||||
},
|
||||
"time": "2024-09-04T18:46:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-client",
|
||||
"version": "1.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-client.git",
|
||||
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
|
||||
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.0 || ^8.0",
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Client\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP clients",
|
||||
"homepage": "https://github.com/php-fig/http-client",
|
||||
"keywords": [
|
||||
"http",
|
||||
"http-client",
|
||||
"psr",
|
||||
"psr-18"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-client"
|
||||
},
|
||||
"time": "2023-09-23T14:17:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-factory",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-factory.git",
|
||||
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
|
||||
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1",
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Message\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
|
||||
"keywords": [
|
||||
"factory",
|
||||
"http",
|
||||
"message",
|
||||
"psr",
|
||||
"psr-17",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-factory"
|
||||
},
|
||||
"time": "2024-04-15T12:06:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-message",
|
||||
"version": "2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-message.git",
|
||||
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
|
||||
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Message\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP messages",
|
||||
"homepage": "https://github.com/php-fig/http-message",
|
||||
"keywords": [
|
||||
"http",
|
||||
"http-message",
|
||||
"psr",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-message/tree/2.0"
|
||||
},
|
||||
"time": "2023-04-04T09:54:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
"version": "3.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ralouphie/getallheaders.git",
|
||||
"reference": "120b605dfeb996808c31b6477290a714d356e822"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
|
||||
"reference": "120b605dfeb996808c31b6477290a714d356e822",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"php-coveralls/php-coveralls": "^2.1",
|
||||
"phpunit/phpunit": "^5 || ^6.5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/getallheaders.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ralph Khattar",
|
||||
"email": "ralph.khattar@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A polyfill for getallheaders.",
|
||||
"support": {
|
||||
"issues": "https://github.com/ralouphie/getallheaders/issues",
|
||||
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
|
||||
},
|
||||
"time": "2019-03-08T08:55:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
|
||||
"reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/contracts",
|
||||
"name": "symfony/contracts"
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-main": "3.6-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"function.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-25T14:21:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.33.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
|
||||
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-iconv": "*",
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"provide": {
|
||||
"ext-mbstring": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/polyfill",
|
||||
"name": "symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for the Mbstring extension",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"mbstring",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-12-23T08:48:59+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.6.0"
|
||||
}
|
||||
|
|
@ -7,6 +7,8 @@
|
|||
|
||||
namespace Robotstxt_SMTP_AmazonSES;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
use Aws\Credentials\Credentials;
|
||||
use Aws\Endpoint\PartitionEndpointProvider;
|
||||
use Aws\Exception\AwsException;
|
||||
|
|
@ -42,11 +44,18 @@ class Plugin {
|
|||
*/
|
||||
private const SETTINGS_ERROR_CREDENTIALS = 'robotstxt_smtp_amazon_ses_credentials';
|
||||
|
||||
/**
|
||||
* Holds the singleton instance.
|
||||
*
|
||||
* @var Plugin|null
|
||||
*/
|
||||
/**
|
||||
* Cron hook name for updating SES quotas.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private const CRON_HOOK_UPDATE_QUOTA = 'robotstxt_smtp_amazonses_update_quota';
|
||||
|
||||
/**
|
||||
* Holds the singleton instance.
|
||||
*
|
||||
* @var Plugin|null
|
||||
*/
|
||||
private static ?Plugin $instance = null;
|
||||
|
||||
/**
|
||||
|
|
@ -86,6 +95,11 @@ class Plugin {
|
|||
\add_filter( 'robotstxt_smtp_connection_field_definitions', array( $this, 'provide_field_definitions' ), 10, 2 );
|
||||
\add_filter( 'robotstxt_smtp_sanitized_options', array( $this, 'sanitize_settings' ), 10, 3 );
|
||||
\add_filter( 'pre_wp_mail', array( $this, 'maybe_route_mail_via_amazon_ses' ), 10, 2 );
|
||||
\add_action( 'init', array( $this, 'maybe_schedule_quota_update' ) );
|
||||
\add_action( self::CRON_HOOK_UPDATE_QUOTA, array( $this, 'update_quota_from_ses' ) );
|
||||
\add_action( 'admin_init', array( $this, 'handle_refresh_quota_request' ) );
|
||||
\add_action( 'admin_notices', array( $this, 'display_admin_notices' ) );
|
||||
\add_action( 'network_admin_notices', array( $this, 'display_admin_notices' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -101,7 +115,9 @@ class Plugin {
|
|||
return $pre_wp_mail;
|
||||
}
|
||||
|
||||
if ( ! SMTP_Plugin::is_amazon_ses_integration_active() ) {
|
||||
$is_active = SMTP_Plugin::is_amazon_ses_integration_active();
|
||||
|
||||
if ( ! $is_active ) {
|
||||
return $pre_wp_mail;
|
||||
}
|
||||
|
||||
|
|
@ -110,10 +126,12 @@ class Plugin {
|
|||
$secret_key = (string) ( $settings[ self::OPTION_SECRET_KEY ] ?? '' );
|
||||
$region = (string) ( $settings[ self::OPTION_REGION ] ?? '' );
|
||||
|
||||
|
||||
if ( '' === $access_key || '' === $secret_key || '' === $region ) {
|
||||
return $pre_wp_mail;
|
||||
}
|
||||
|
||||
|
||||
$mail_data = \wp_parse_args(
|
||||
$mail_data,
|
||||
array(
|
||||
|
|
@ -204,7 +222,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Error details describing the email preparation failure. */
|
||||
\esc_html__( 'Amazon SES could not prepare the email: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $exception->getMessage() )
|
||||
\esc_html( $exception->getMessage() )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -245,7 +263,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Error message returned by Amazon SES. */
|
||||
\esc_html__( 'Amazon SES could not send the email: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( (string) $message )
|
||||
\esc_html( (string) $message )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -262,7 +280,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Error message describing the unexpected failure. */
|
||||
\esc_html__( 'An unexpected error occurred while sending through Amazon SES: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $exception->getMessage() )
|
||||
\esc_html( $exception->getMessage() )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -310,7 +328,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Error details describing why the From header is invalid. */
|
||||
\esc_html__( 'Amazon SES rejected the "From" address: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $exception->getMessage() )
|
||||
\esc_html( $exception->getMessage() )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -331,7 +349,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Invalid recipient email address. */
|
||||
\esc_html__( 'Amazon SES rejected the recipient address: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $recipient )
|
||||
\esc_html( $recipient )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -353,7 +371,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Invalid CC email address. */
|
||||
\esc_html__( 'Amazon SES rejected the CC address: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $cc )
|
||||
\esc_html( $cc )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -375,7 +393,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Invalid BCC email address. */
|
||||
\esc_html__( 'Amazon SES rejected the BCC address: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $bcc )
|
||||
\esc_html( $bcc )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -397,7 +415,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Invalid reply-to email address. */
|
||||
\esc_html__( 'Amazon SES rejected the reply-to address: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $reply_to )
|
||||
\esc_html( $reply_to )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -410,6 +428,36 @@ class Plugin {
|
|||
}
|
||||
}
|
||||
|
||||
// Add Reply-To from settings if not already set by headers.
|
||||
// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
|
||||
if ( empty( $phpmailer->getReplyToAddresses() ) ) {
|
||||
$reply_to_email = isset( $settings['reply_to_email'] ) ? \sanitize_email( $settings['reply_to_email'] ) : '';
|
||||
|
||||
if ( ! empty( $reply_to_email ) && \is_email( $reply_to_email ) ) {
|
||||
$reply_to_name = isset( $settings['reply_to_name'] ) ? \sanitize_text_field( $settings['reply_to_name'] ) : '';
|
||||
|
||||
try {
|
||||
$phpmailer->addReplyTo( $reply_to_email, $reply_to_name );
|
||||
} catch ( PHPMailerException $exception ) {
|
||||
return new WP_Error(
|
||||
'robotstxt_smtp_amazon_ses_invalid_reply_to_settings',
|
||||
\sprintf(
|
||||
/* translators: %s: Invalid reply-to email address from settings. */
|
||||
\esc_html__( 'Amazon SES rejected the configured reply-to address: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\esc_html( $reply_to_email )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
'subject' => $mail_context['subject'],
|
||||
'message' => $mail_context['message'],
|
||||
'headers' => $mail_context['headers'],
|
||||
'attachments' => $mail_context['attachments'],
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$phpmailer->ContentType = $content_type;
|
||||
|
||||
if ( 'text/html' === strtolower( $content_type ) ) {
|
||||
|
|
@ -447,7 +495,7 @@ class Plugin {
|
|||
\sprintf(
|
||||
/* translators: %s: Attachment path that could not be added. */
|
||||
\esc_html__( 'Amazon SES could not include the attachment: %s', 'robotstxt-smtp-amazonses' ),
|
||||
\wp_strip_all_tags( $attachment )
|
||||
\esc_html( $attachment )
|
||||
),
|
||||
array(
|
||||
'to' => $mail_context['to'],
|
||||
|
|
@ -719,9 +767,120 @@ class Plugin {
|
|||
public function declare_active( bool $is_active ): bool {
|
||||
unset( $is_active );
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues admin scripts and styles for the settings page.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @param string $hook The current admin page hook.
|
||||
* @return void
|
||||
*/
|
||||
/**
|
||||
* Displays admin notices from transient after redirect.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display_admin_notices(): void {
|
||||
$notices = \get_transient( 'robotstxt_smtp_admin_notices' );
|
||||
|
||||
if ( $notices && \is_array( $notices ) ) {
|
||||
\delete_transient( 'robotstxt_smtp_admin_notices' );
|
||||
|
||||
foreach ( $notices as $notice ) {
|
||||
$type = $notice['type'] ?? 'info';
|
||||
$message = $notice['message'] ?? '';
|
||||
|
||||
if ( $message ) {
|
||||
printf(
|
||||
'<div class="notice notice-%s is-dismissible"><p>%s</p></div>',
|
||||
\esc_attr( $type ),
|
||||
\esc_html( $message )
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the refresh quota form submission.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function handle_refresh_quota_request(): void {
|
||||
// Check if this is a refresh quota request first (can come via GET or POST).
|
||||
$action_post = \filter_input( INPUT_POST, 'robotstxt_smtp_action', FILTER_UNSAFE_RAW );
|
||||
$action_get = \filter_input( INPUT_GET, 'robotstxt_smtp_action', FILTER_UNSAFE_RAW );
|
||||
$action = $action_post ?? $action_get ?? '';
|
||||
|
||||
if ( 'refresh_quota' !== $action ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// This is a refresh quota request - now verify nonce.
|
||||
$nonce_post = \filter_input( INPUT_POST, 'robotstxt_smtp_refresh_quota_nonce', FILTER_UNSAFE_RAW );
|
||||
$nonce_get = \filter_input( INPUT_GET, 'robotstxt_smtp_refresh_quota_nonce', FILTER_UNSAFE_RAW );
|
||||
$nonce = $nonce_post ?? $nonce_get ?? '';
|
||||
|
||||
if ( ! \wp_verify_nonce( $nonce, 'robotstxt_smtp_refresh_quota' ) ) {
|
||||
\wp_die( \esc_html__( 'Security check failed.', 'robotstxt-smtp-amazonses' ) );
|
||||
}
|
||||
|
||||
// Check permissions based on configuration scope.
|
||||
$is_network_mode = Settings_Page::is_network_mode_enabled();
|
||||
$required_cap = $is_network_mode ? 'manage_network_options' : 'manage_options';
|
||||
|
||||
if ( ! \current_user_can( $required_cap ) ) {
|
||||
\wp_die( \esc_html__( 'You do not have sufficient permissions to access this page.', 'robotstxt-smtp-amazonses' ) );
|
||||
}
|
||||
|
||||
// Fetch fresh quotas.
|
||||
$this->update_quota_from_ses();
|
||||
|
||||
// Check if successful and add admin notice.
|
||||
$quota = \get_site_transient( self::get_quota_cache_key() );
|
||||
|
||||
if ( $quota && \is_array( $quota ) ) {
|
||||
\add_settings_error(
|
||||
'robotstxt_smtp_messages',
|
||||
'quota_refreshed',
|
||||
\__( 'Amazon SES quotas refreshed successfully.', 'robotstxt-smtp-amazonses' ),
|
||||
'updated'
|
||||
);
|
||||
} else {
|
||||
\add_settings_error(
|
||||
'robotstxt_smtp_messages',
|
||||
'quota_refresh_failed',
|
||||
\__( 'Unable to fetch quotas from Amazon SES. Check debug log for details.', 'robotstxt-smtp-amazonses' ),
|
||||
'error'
|
||||
);
|
||||
}
|
||||
|
||||
// Save notices for after redirect.
|
||||
\set_transient( 'robotstxt_smtp_admin_notices', \get_settings_errors( 'robotstxt_smtp_messages' ), 30 );
|
||||
|
||||
// Redirect back to the settings page (remove the action parameters from URL).
|
||||
// Since the request comes with ?page= parameter, we know which page to redirect to.
|
||||
$page_param = \filter_input( INPUT_GET, 'page', FILTER_UNSAFE_RAW );
|
||||
$page = $page_param ? \sanitize_key( $page_param ) : 'robotstxt-smtp';
|
||||
|
||||
if ( 'robotstxt-smtp-network' === $page ) {
|
||||
$redirect_url = \network_admin_url( 'admin.php?page=robotstxt-smtp-network' );
|
||||
} else {
|
||||
$redirect_url = \admin_url( 'admin.php?page=robotstxt-smtp' );
|
||||
}
|
||||
|
||||
\wp_safe_redirect( $redirect_url );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces the SMTP connection fields with Amazon SES specific fields.
|
||||
*
|
||||
|
|
@ -766,6 +925,18 @@ class Plugin {
|
|||
'callback' => array( $settings_page, 'render_from_name_field' ),
|
||||
'label_for' => 'robotstxt_smtp_from_name',
|
||||
),
|
||||
array(
|
||||
'id' => 'robotstxt_smtp_reply_to_email',
|
||||
'label' => \esc_html__( 'Reply-To Email', 'robotstxt-smtp' ),
|
||||
'callback' => array( $settings_page, 'render_reply_to_email_field' ),
|
||||
'label_for' => 'robotstxt_smtp_reply_to_email',
|
||||
),
|
||||
array(
|
||||
'id' => 'robotstxt_smtp_reply_to_name',
|
||||
'label' => \esc_html__( 'Reply-To Name', 'robotstxt-smtp' ),
|
||||
'callback' => array( $settings_page, 'render_reply_to_name_field' ),
|
||||
'label_for' => 'robotstxt_smtp_reply_to_name',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -776,16 +947,19 @@ class Plugin {
|
|||
*/
|
||||
public function render_access_key_field(): void {
|
||||
$settings = $this->get_stored_settings();
|
||||
$has_access_key = '' !== $settings[ self::OPTION_ACCESS_KEY ];
|
||||
$placeholder_label = $has_access_key ? \__( 'Leave empty to keep the stored access key.', 'robotstxt-smtp-amazonses' ) : '';
|
||||
?>
|
||||
<input
|
||||
name="<?php echo \esc_attr( $this->get_field_name( self::OPTION_ACCESS_KEY ) ); ?>"
|
||||
type="text"
|
||||
id="robotstxt_smtp_amazon_ses_access_key"
|
||||
class="regular-text"
|
||||
value="<?php echo \esc_attr( $settings[ self::OPTION_ACCESS_KEY ] ); ?>"
|
||||
value=""
|
||||
autocomplete="off"
|
||||
placeholder="<?php echo \esc_attr( $placeholder_label ); ?>"
|
||||
/>
|
||||
<p class="description"><?php \esc_html_e( 'Provide the IAM access key ID with permissions to send email through Amazon SES.', 'robotstxt-smtp-amazonses' ); ?></p>
|
||||
<p class="description"><?php \esc_html_e( 'Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value.', 'robotstxt-smtp-amazonses' ); ?></p>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
|
@ -844,6 +1018,8 @@ class Plugin {
|
|||
public function sanitize_settings( array $clean, array $options, Settings_Page $settings ): array {
|
||||
unset( $settings );
|
||||
|
||||
// Debug: Log incoming $clean array.
|
||||
|
||||
if ( ! SMTP_Plugin::is_amazon_ses_integration_active() ) {
|
||||
return $clean;
|
||||
}
|
||||
|
|
@ -915,6 +1091,10 @@ class Plugin {
|
|||
$clean[ self::OPTION_SECRET_KEY ] = $secret_key;
|
||||
$clean[ self::OPTION_REGION ] = $region;
|
||||
|
||||
// Temporary debug logging
|
||||
|
||||
// Debug: Check credentials_changed and values
|
||||
|
||||
if ( $credentials_changed && ( '' === $access_key || '' === $secret_key || '' === $region ) ) {
|
||||
\add_settings_error(
|
||||
$settings_error_slug,
|
||||
|
|
@ -946,8 +1126,18 @@ class Plugin {
|
|||
\esc_html__( 'Amazon SES credentials verified successfully.', 'robotstxt-smtp-amazonses' ),
|
||||
'updated'
|
||||
);
|
||||
|
||||
// Fetch SES quotas immediately after successful validation and cache them.
|
||||
// Note: We do NOT overwrite rate_limit settings in the database.
|
||||
// The UI will read directly from the transient when Amazon SES is active.
|
||||
$quota = $this->fetch_ses_quota_with_credentials( $access_key, $secret_key, $region );
|
||||
if ( ! \is_wp_error( $quota ) ) {
|
||||
\set_site_transient( self::get_quota_cache_key(), $quota, DAY_IN_SECONDS );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Debug: Log final $clean array before return.
|
||||
return $clean;
|
||||
}
|
||||
|
||||
|
|
@ -985,7 +1175,18 @@ class Plugin {
|
|||
$settings = array();
|
||||
}
|
||||
|
||||
return \wp_parse_args( $settings, Settings_Page::get_default_settings() );
|
||||
$settings = \wp_parse_args( $settings, Settings_Page::get_default_settings() );
|
||||
|
||||
// Decrypt Amazon SES credentials after loading from database.
|
||||
if ( isset( $settings[ self::OPTION_ACCESS_KEY ] ) && '' !== $settings[ self::OPTION_ACCESS_KEY ] ) {
|
||||
$settings[ self::OPTION_ACCESS_KEY ] = \Robotstxt_SMTP_Encryption::decrypt( $settings[ self::OPTION_ACCESS_KEY ] );
|
||||
}
|
||||
|
||||
if ( isset( $settings[ self::OPTION_SECRET_KEY ] ) && '' !== $settings[ self::OPTION_SECRET_KEY ] ) {
|
||||
$settings[ self::OPTION_SECRET_KEY ] = \Robotstxt_SMTP_Encryption::decrypt( $settings[ self::OPTION_SECRET_KEY ] );
|
||||
}
|
||||
|
||||
return $settings;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1005,7 +1206,9 @@ class Plugin {
|
|||
* @return string
|
||||
*/
|
||||
private function get_settings_option_name(): string {
|
||||
if ( \is_network_admin() && Settings_Page::is_network_mode_enabled() ) {
|
||||
// Check if network mode is enabled, regardless of whether we're in network admin context.
|
||||
// This is important when sending emails from frontend or non-admin contexts.
|
||||
if ( ROBOTSTXT_SMTP_IS_MULTISITE && Settings_Page::is_network_mode_enabled() ) {
|
||||
return Settings_Page::NETWORK_OPTION_NAME;
|
||||
}
|
||||
|
||||
|
|
@ -1158,14 +1361,38 @@ class Plugin {
|
|||
|
||||
$client->getAccount();
|
||||
} catch ( AwsException $exception ) {
|
||||
$message = $exception->getAwsErrorMessage();
|
||||
$aws_error_code = $exception->getAwsErrorCode();
|
||||
$message = $exception->getAwsErrorMessage();
|
||||
|
||||
if ( ! is_string( $message ) || '' === $message ) {
|
||||
$message = $exception->getMessage();
|
||||
}
|
||||
|
||||
$message = \wp_strip_all_tags( (string) $message );
|
||||
$message = \esc_html( (string) $message );
|
||||
|
||||
// Allow saving if the error is due to missing IAM permissions (not authorization to use SES itself).
|
||||
// The credentials may still work for sending emails which requires different permissions.
|
||||
if ( 'AccessDeniedException' === $aws_error_code || 'UnauthorizedException' === $aws_error_code ) {
|
||||
if ( \strpos( $message, 'not authorized to perform: ses:GetAccount' ) !== false ) {
|
||||
// Permission error for GetAccount API - credentials might still work for sending.
|
||||
// Return null (success) but we could add a notice here if needed.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// For authentication errors (invalid credentials), prevent saving.
|
||||
if ( in_array( $aws_error_code, array( 'InvalidClientTokenId', 'SignatureDoesNotMatch', 'InvalidAccessKeyId' ), true ) ) {
|
||||
return new WP_Error(
|
||||
'robotstxt_smtp_amazon_ses_invalid_credentials',
|
||||
\sprintf(
|
||||
/* translators: %s: Error message from Amazon SES. */
|
||||
\esc_html__( 'Invalid Amazon SES credentials: %s', 'robotstxt-smtp-amazonses' ),
|
||||
$message
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// For other AWS errors, show warning but allow saving.
|
||||
return new WP_Error(
|
||||
'robotstxt_smtp_amazon_ses_invalid_credentials',
|
||||
\sprintf(
|
||||
|
|
@ -1175,7 +1402,7 @@ class Plugin {
|
|||
)
|
||||
);
|
||||
} catch ( Throwable $exception ) {
|
||||
$message = \wp_strip_all_tags( $exception->getMessage() );
|
||||
$message = \esc_html( $exception->getMessage() );
|
||||
|
||||
return new WP_Error(
|
||||
'robotstxt_smtp_amazon_ses_unexpected_error',
|
||||
|
|
@ -1189,4 +1416,214 @@ class Plugin {
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedules the SES quota update event if not already scheduled.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function maybe_schedule_quota_update(): void {
|
||||
if ( ! wp_next_scheduled( self::CRON_HOOK_UPDATE_QUOTA ) ) {
|
||||
wp_schedule_event( time(), 'daily', self::CRON_HOOK_UPDATE_QUOTA );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches current sending quotas from Amazon SES and updates rate limits.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function update_quota_from_ses(): void {
|
||||
$quota = $this->fetch_ses_send_quota();
|
||||
|
||||
if ( is_wp_error( $quota ) ) {
|
||||
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
|
||||
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
|
||||
error_log( sprintf( 'ROBOTSTXT SMTP Amazon SES: Failed to fetch send quota: %s', $quota->get_error_message() ) );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
set_site_transient( self::get_quota_cache_key(), $quota, DAY_IN_SECONDS );
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the current send quota from Amazon SES API.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return array<string, mixed>|WP_Error Quota data or error.
|
||||
*/
|
||||
private function fetch_ses_send_quota() {
|
||||
$settings = $this->get_stored_settings();
|
||||
$access_key = (string) ( $settings[ self::OPTION_ACCESS_KEY ] ?? '' );
|
||||
$secret_key = (string) ( $settings[ self::OPTION_SECRET_KEY ] ?? '' );
|
||||
$region = (string) ( $settings[ self::OPTION_REGION ] ?? '' );
|
||||
|
||||
if ( '' === $access_key || '' === $secret_key || '' === $region ) {
|
||||
return new WP_Error(
|
||||
'missing_credentials',
|
||||
__( 'Amazon SES credentials are not configured.', 'robotstxt-smtp-amazonses' )
|
||||
);
|
||||
}
|
||||
|
||||
return $this->fetch_ses_quota_with_credentials( $access_key, $secret_key, $region );
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the current send quota from Amazon SES API using provided credentials.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @param string $access_key AWS access key ID.
|
||||
* @param string $secret_key AWS secret access key.
|
||||
* @param string $region AWS region.
|
||||
*
|
||||
* @return array<string, mixed>|WP_Error Quota data or error.
|
||||
*/
|
||||
private function fetch_ses_quota_with_credentials( string $access_key, string $secret_key, string $region ) {
|
||||
if ( '' === $access_key || '' === $secret_key || '' === $region ) {
|
||||
return new WP_Error(
|
||||
'missing_credentials',
|
||||
__( 'Amazon SES credentials are not configured.', 'robotstxt-smtp-amazonses' )
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
$client = $this->get_ses_client( $access_key, $secret_key, $region );
|
||||
|
||||
$result = $client->getAccount();
|
||||
|
||||
$send_quota = $result->get( 'SendQuota' );
|
||||
|
||||
if ( ! $send_quota ) {
|
||||
return new WP_Error(
|
||||
'no_quota_data',
|
||||
__( 'Amazon SES did not return quota data.', 'robotstxt-smtp-amazonses' )
|
||||
);
|
||||
}
|
||||
|
||||
return array(
|
||||
'max_24_hour_send' => (int) ( $send_quota['Max24HourSend'] ?? 0 ),
|
||||
'max_send_rate' => (float) ( $send_quota['MaxSendRate'] ?? 0 ),
|
||||
'sent_last_24_hours' => (int) ( $send_quota['SentLast24Hours'] ?? 0 ),
|
||||
'fetched_at' => time(),
|
||||
);
|
||||
|
||||
} catch ( AwsException $e ) {
|
||||
// Si el error es por falta de permisos para GetAccount, intentamos de todas formas pero no bloqueamos.
|
||||
$aws_error_code = $e->getAwsErrorCode();
|
||||
if ( 'AccessDeniedException' === $aws_error_code || 'UnauthorizedException' === $aws_error_code ) {
|
||||
// No podemos obtener cuotas, pero no es un error crítico.
|
||||
return new WP_Error(
|
||||
'quota_permission_denied',
|
||||
__( 'Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission.', 'robotstxt-smtp-amazonses' )
|
||||
);
|
||||
}
|
||||
|
||||
return new WP_Error(
|
||||
'aws_api_error',
|
||||
sprintf(
|
||||
/* translators: %s: AWS error message */
|
||||
__( 'Amazon SES API error: %s', 'robotstxt-smtp-amazonses' ),
|
||||
$e->getMessage()
|
||||
)
|
||||
);
|
||||
} catch ( Throwable $e ) {
|
||||
return new WP_Error(
|
||||
'unknown_error',
|
||||
sprintf(
|
||||
/* translators: %s: Error message */
|
||||
__( 'Failed to fetch SES quota: %s', 'robotstxt-smtp-amazonses' ),
|
||||
$e->getMessage()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies SES quota limits to the SMTP plugin rate limiting settings.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @param array<string, mixed> $quota Quota data from SES.
|
||||
* @return void
|
||||
*/
|
||||
private function apply_ses_quota_to_rate_limits( array $quota ): void {
|
||||
$max_send_rate = (float) ( $quota['max_send_rate'] ?? 0 );
|
||||
$max_24_hour_send = (int) ( $quota['max_24_hour_send'] ?? 0 );
|
||||
|
||||
$settings_page = \Robotstxt_SMTP\Admin\Settings_Page::class;
|
||||
|
||||
if ( ! class_exists( $settings_page ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$is_network = ROBOTSTXT_SMTP_IS_MULTISITE && $settings_page::is_network_mode_enabled();
|
||||
$option_name = $is_network ? $settings_page::NETWORK_OPTION_NAME : $settings_page::OPTION_NAME;
|
||||
|
||||
$settings = $is_network ? get_site_option( $option_name, array() ) : get_option( $option_name, array() );
|
||||
|
||||
if ( ! is_array( $settings ) ) {
|
||||
$settings = array();
|
||||
}
|
||||
|
||||
$settings['rate_limit_per_second'] = (int) floor( $max_send_rate );
|
||||
$settings['rate_limit_per_hour'] = (int) floor( $max_send_rate * 3600 * 0.9 );
|
||||
$settings['rate_limit_per_day'] = $max_24_hour_send;
|
||||
|
||||
if ( $is_network ) {
|
||||
update_site_option( $option_name, $settings );
|
||||
} else {
|
||||
update_option( $option_name, $settings );
|
||||
}
|
||||
|
||||
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
|
||||
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
|
||||
error_log(
|
||||
sprintf(
|
||||
'ROBOTSTXT SMTP: Updated rate limits from Amazon SES quota - Per second: %d, Per hour: %d, Per day: %d',
|
||||
$settings['rate_limit_per_second'],
|
||||
$settings['rate_limit_per_hour'],
|
||||
$settings['rate_limit_per_day']
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the transient cache key for Amazon SES quota data.
|
||||
*
|
||||
* Includes blog_id when not in network mode to prevent cache collisions
|
||||
* in MultiSite installations where different sites use different SES accounts.
|
||||
*
|
||||
* This is a public static method so the core SMTP plugin can also access
|
||||
* the correct transient key.
|
||||
*
|
||||
* @return string Transient key.
|
||||
*/
|
||||
public static function get_quota_cache_key(): string {
|
||||
// In network mode, all sites share the same quota cache.
|
||||
if ( Settings_Page::is_network_mode_enabled() ) {
|
||||
return 'robotstxt_smtp_amazonses_quota_network';
|
||||
}
|
||||
|
||||
// In site mode, each site has its own quota cache to prevent collisions.
|
||||
return 'robotstxt_smtp_amazonses_quota_' . \get_current_blog_id();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets cached SES quota data if available.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return array<string, mixed>|false Quota data or false if not cached.
|
||||
*/
|
||||
public function get_cached_ses_quota() {
|
||||
return get_site_transient( self::get_quota_cache_key() );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
BIN
languages/robotstxt-smtp-amazonses-ca.mo
Normal file
BIN
languages/robotstxt-smtp-amazonses-ca.mo
Normal file
Binary file not shown.
315
languages/robotstxt-smtp-amazonses-ca.po
Normal file
315
languages/robotstxt-smtp-amazonses-ca.po
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
|
||||
"POT-Creation-Date: 2026-01-29 10:03+0100\n"
|
||||
"PO-Revision-Date: 2026-01-29 09:30+0100\n"
|
||||
"Last-Translator: ROBOTSTXT <robotstxt@robotstxt.es>\n"
|
||||
"Language-Team: Catalan\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Manual\n"
|
||||
|
||||
#: includes/class-plugin.php:151
|
||||
msgid "Amazon SES could not send the email because no recipient was provided."
|
||||
msgstr "Amazon SES no ha pogut enviar l'email perquè no s'ha proporcionat cap destinatari."
|
||||
|
||||
#: includes/class-plugin.php:224
|
||||
#, php-format
|
||||
msgid "Amazon SES could not prepare the email: %s"
|
||||
msgstr "Amazon SES no ha pogut preparar l'email: %s"
|
||||
|
||||
#: includes/class-plugin.php:265
|
||||
#, php-format
|
||||
msgid "Amazon SES could not send the email: %s"
|
||||
msgstr "Amazon SES no ha pogut enviar l'email: %s"
|
||||
|
||||
#: includes/class-plugin.php:282
|
||||
#, php-format
|
||||
msgid "An unexpected error occurred while sending through Amazon SES: %s"
|
||||
msgstr "S'ha produït un error inesperat en enviar a través d'Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:330
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the \"From\" address: %s"
|
||||
msgstr "Amazon SES ha rebutjat l'adreça \"De\": %s"
|
||||
|
||||
#: includes/class-plugin.php:351
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the recipient address: %s"
|
||||
msgstr "Amazon SES ha rebutjat l'adreça del destinatari: %s"
|
||||
|
||||
#: includes/class-plugin.php:373
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the CC address: %s"
|
||||
msgstr "Amazon SES ha rebutjat l'adreça CC: %s"
|
||||
|
||||
#: includes/class-plugin.php:395
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the BCC address: %s"
|
||||
msgstr "Amazon SES ha rebutjat l'adreça CCO: %s"
|
||||
|
||||
#: includes/class-plugin.php:417
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the reply-to address: %s"
|
||||
msgstr "Amazon SES ha rebutjat l'adreça de resposta: %s"
|
||||
|
||||
#: includes/class-plugin.php:446
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the configured reply-to address: %s"
|
||||
msgstr "Amazon SES ha rebutjat l'adreça de resposta configurada: %s"
|
||||
|
||||
#: includes/class-plugin.php:497
|
||||
#, php-format
|
||||
msgid "Amazon SES could not include the attachment: %s"
|
||||
msgstr "Amazon SES no ha pogut incloure l'adjunt: %s"
|
||||
|
||||
#: includes/class-plugin.php:833
|
||||
msgid "Security check failed."
|
||||
msgstr "Ha fallat la comprovació de seguretat."
|
||||
|
||||
#: includes/class-plugin.php:841 robotstxt-updater.php:367
|
||||
msgid "You do not have sufficient permissions to access this page."
|
||||
msgstr "No tens permisos suficients per accedir a aquesta pàgina."
|
||||
|
||||
#: includes/class-plugin.php:854
|
||||
msgid "Amazon SES quotas refreshed successfully."
|
||||
msgstr "Quotes d'Amazon SES actualitzades correctament."
|
||||
|
||||
#: includes/class-plugin.php:861
|
||||
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
|
||||
msgstr "No s'han pogut obtenir les quotes d'Amazon SES. Verifica el registre de depuració per a més detalls."
|
||||
|
||||
#: includes/class-plugin.php:900
|
||||
msgid "Access Key ID"
|
||||
msgstr "ID de clau d'accés"
|
||||
|
||||
#: includes/class-plugin.php:906
|
||||
msgid "Secret Access Key"
|
||||
msgstr "Clau d'accés secreta"
|
||||
|
||||
#: includes/class-plugin.php:912
|
||||
msgid "Region"
|
||||
msgstr "Regió"
|
||||
|
||||
#: includes/class-plugin.php:918
|
||||
msgid "From Email"
|
||||
msgstr "Email remitent"
|
||||
|
||||
#: includes/class-plugin.php:924
|
||||
msgid "From Name"
|
||||
msgstr "Nom remitent"
|
||||
|
||||
#: includes/class-plugin.php:930
|
||||
msgid "Reply-To Email"
|
||||
msgstr "Email de resposta"
|
||||
|
||||
#: includes/class-plugin.php:936
|
||||
msgid "Reply-To Name"
|
||||
msgstr "Nom de resposta"
|
||||
|
||||
#: includes/class-plugin.php:951
|
||||
msgid "Leave empty to keep the stored access key."
|
||||
msgstr "Deixar buit per mantenir la clau d'accés emmagatzemada."
|
||||
|
||||
#: includes/class-plugin.php:962
|
||||
msgid "Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value."
|
||||
msgstr "Proporciona l'ID de clau d'accés IAM amb permisos per enviar email a través d'Amazon SES. Deixa el camp buit per mantenir el valor existent."
|
||||
|
||||
#: includes/class-plugin.php:974
|
||||
msgid "Leave empty to keep the stored secret access key."
|
||||
msgstr "Deixar buit per mantenir la clau d'accés secreta emmagatzemada."
|
||||
|
||||
#: includes/class-plugin.php:985
|
||||
msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value."
|
||||
msgstr "Introdueix la clau d'accés secreta associada amb l'usuari IAM. Deixa el camp buit per mantenir el valor existent."
|
||||
|
||||
#: includes/class-plugin.php:1000
|
||||
msgid "Select a region"
|
||||
msgstr "Selecciona una regió"
|
||||
|
||||
#: includes/class-plugin.php:1005
|
||||
msgid "Choose the AWS region where your Amazon SES account is hosted."
|
||||
msgstr "Tria la regió d'AWS on està allotjat el teu compte d'Amazon SES."
|
||||
|
||||
#: includes/class-plugin.php:1082
|
||||
msgid "The selected Amazon SES region is not available."
|
||||
msgstr "La regió d'Amazon SES seleccionada no està disponible."
|
||||
|
||||
#: includes/class-plugin.php:1102
|
||||
msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region."
|
||||
msgstr "Les credencials d'Amazon SES no s'han desat. Proporciona una clau d'accés, clau secreta i regió."
|
||||
|
||||
#: includes/class-plugin.php:1126
|
||||
msgid "Amazon SES credentials verified successfully."
|
||||
msgstr "Credencials d'Amazon SES verificades correctament."
|
||||
|
||||
#: includes/class-plugin.php:1281
|
||||
msgid "US East (Ohio)"
|
||||
msgstr "EUA Est (Ohio)"
|
||||
|
||||
#: includes/class-plugin.php:1282
|
||||
msgid "US East (N. Virginia)"
|
||||
msgstr "EUA Est (N. Virgínia)"
|
||||
|
||||
#: includes/class-plugin.php:1283
|
||||
msgid "US West (N. California)"
|
||||
msgstr "EUA Oest (N. Califòrnia)"
|
||||
|
||||
#: includes/class-plugin.php:1284
|
||||
msgid "US West (Oregon)"
|
||||
msgstr "EUA Oest (Oregon)"
|
||||
|
||||
#: includes/class-plugin.php:1285
|
||||
msgid "Africa (Cape Town)"
|
||||
msgstr "Àfrica (Ciutat del Cap)"
|
||||
|
||||
#: includes/class-plugin.php:1286
|
||||
msgid "Asia Pacific (Hyderabad)"
|
||||
msgstr "Àsia Pacífic (Hyderabad)"
|
||||
|
||||
#: includes/class-plugin.php:1287
|
||||
msgid "Asia Pacific (Jakarta)"
|
||||
msgstr "Àsia Pacífic (Jakarta)"
|
||||
|
||||
#: includes/class-plugin.php:1288
|
||||
msgid "Asia Pacific (Mumbai)"
|
||||
msgstr "Àsia Pacífic (Mumbai)"
|
||||
|
||||
#: includes/class-plugin.php:1289
|
||||
msgid "Asia Pacific (Osaka)"
|
||||
msgstr "Àsia Pacífic (Osaka)"
|
||||
|
||||
#: includes/class-plugin.php:1290
|
||||
msgid "Asia Pacific (Seoul)"
|
||||
msgstr "Àsia Pacífic (Seül)"
|
||||
|
||||
#: includes/class-plugin.php:1291
|
||||
msgid "Asia Pacific (Singapore)"
|
||||
msgstr "Àsia Pacífic (Singapur)"
|
||||
|
||||
#: includes/class-plugin.php:1292
|
||||
msgid "Asia Pacific (Sydney)"
|
||||
msgstr "Àsia Pacífic (Sydney)"
|
||||
|
||||
#: includes/class-plugin.php:1293
|
||||
msgid "Asia Pacific (Tokyo)"
|
||||
msgstr "Àsia Pacífic (Tòquio)"
|
||||
|
||||
#: includes/class-plugin.php:1294
|
||||
msgid "Canada (Central)"
|
||||
msgstr "Canadà (Central)"
|
||||
|
||||
#: includes/class-plugin.php:1295
|
||||
msgid "Europe (Frankfurt)"
|
||||
msgstr "Europa (Frankfurt)"
|
||||
|
||||
#: includes/class-plugin.php:1296
|
||||
msgid "Europe (Ireland)"
|
||||
msgstr "Europa (Irlanda)"
|
||||
|
||||
#: includes/class-plugin.php:1297
|
||||
msgid "Europe (London)"
|
||||
msgstr "Europa (Londres)"
|
||||
|
||||
#: includes/class-plugin.php:1298
|
||||
msgid "Europe (Milan)"
|
||||
msgstr "Europa (Milà)"
|
||||
|
||||
#: includes/class-plugin.php:1299
|
||||
msgid "Europe (Paris)"
|
||||
msgstr "Europa (París)"
|
||||
|
||||
#: includes/class-plugin.php:1300
|
||||
msgid "Europe (Stockholm)"
|
||||
msgstr "Europa (Estocolm)"
|
||||
|
||||
#: includes/class-plugin.php:1301
|
||||
msgid "Europe (Zurich)"
|
||||
msgstr "Europa (Zuric)"
|
||||
|
||||
#: includes/class-plugin.php:1302
|
||||
msgid "Israel (Tel Aviv)"
|
||||
msgstr "Israel (Tel Aviv)"
|
||||
|
||||
#: includes/class-plugin.php:1303
|
||||
msgid "Middle East (Bahrain)"
|
||||
msgstr "Orient Mitjà (Bahrain)"
|
||||
|
||||
#: includes/class-plugin.php:1304
|
||||
msgid "Middle East (UAE)"
|
||||
msgstr "Orient Mitjà (EAU)"
|
||||
|
||||
#: includes/class-plugin.php:1305
|
||||
msgid "South America (São Paulo)"
|
||||
msgstr "Sud-amèrica (São Paulo)"
|
||||
|
||||
#: includes/class-plugin.php:1306
|
||||
msgid "AWS GovCloud (US-East)"
|
||||
msgstr "AWS GovCloud (EUA-Est)"
|
||||
|
||||
#: includes/class-plugin.php:1307
|
||||
msgid "AWS GovCloud (US-West)"
|
||||
msgstr "AWS GovCloud (EUA-Oest)"
|
||||
|
||||
#: includes/class-plugin.php:1322
|
||||
#, php-format
|
||||
msgid "%1$s (%2$s)"
|
||||
msgstr "%1$s (%2$s)"
|
||||
|
||||
#: includes/class-plugin.php:1338
|
||||
#, php-format
|
||||
msgid "Region %s"
|
||||
msgstr "Regió %s"
|
||||
|
||||
#: includes/class-plugin.php:1389
|
||||
#, php-format
|
||||
msgid "Invalid Amazon SES credentials: %s"
|
||||
msgstr "Credencials d'Amazon SES invàlides: %s"
|
||||
|
||||
#: includes/class-plugin.php:1400
|
||||
#, php-format
|
||||
msgid "Could not verify Amazon SES credentials: %s"
|
||||
msgstr "No s'han pogut verificar les credencials d'Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:1411
|
||||
#, php-format
|
||||
msgid "An unexpected error occurred while validating Amazon SES credentials: %s"
|
||||
msgstr "S'ha produït un error inesperat en validar les credencials d'Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:1470 includes/class-plugin.php:1492
|
||||
msgid "Amazon SES credentials are not configured."
|
||||
msgstr "Les credencials d'Amazon SES no estan configurades."
|
||||
|
||||
#: includes/class-plugin.php:1506
|
||||
msgid "Amazon SES did not return quota data."
|
||||
msgstr "Amazon SES no ha retornat dades de quota."
|
||||
|
||||
#: includes/class-plugin.php:1524
|
||||
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
|
||||
msgstr "No es poden obtenir les quotes de SES: l'usuari IAM no té el permís ses:GetAccount."
|
||||
|
||||
#: includes/class-plugin.php:1532
|
||||
#, php-format
|
||||
msgid "Amazon SES API error: %s"
|
||||
msgstr "Error d'API d'Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:1541
|
||||
#, php-format
|
||||
msgid "Failed to fetch SES quota: %s"
|
||||
msgstr "Ha fallat en obtenir la quota de SES: %s"
|
||||
|
||||
#: robotstxt-updater.php:362
|
||||
msgid "Security check failed"
|
||||
msgstr "Ha fallat la comprovació de seguretat"
|
||||
|
||||
msgid "SMTP (by ROBOTSTXT) Amazon SES"
|
||||
msgstr "SMTP (by ROBOTSTXT) Amazon SES"
|
||||
|
||||
msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin."
|
||||
msgstr "Afegeix suport de configuració d'Amazon SES al plugin ROBOTSTXT SMTP."
|
||||
|
||||
msgid "ROBOTSTXT"
|
||||
msgstr "ROBOTSTXT"
|
||||
BIN
languages/robotstxt-smtp-amazonses-es_ES.mo
Normal file
BIN
languages/robotstxt-smtp-amazonses-es_ES.mo
Normal file
Binary file not shown.
315
languages/robotstxt-smtp-amazonses-es_ES.po
Normal file
315
languages/robotstxt-smtp-amazonses-es_ES.po
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
|
||||
"POT-Creation-Date: 2026-01-29 10:03+0100\n"
|
||||
"PO-Revision-Date: 2026-01-29 09:30+0100\n"
|
||||
"Last-Translator: ROBOTSTXT <robotstxt@robotstxt.es>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Language: es_ES\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Manual\n"
|
||||
|
||||
#: includes/class-plugin.php:151
|
||||
msgid "Amazon SES could not send the email because no recipient was provided."
|
||||
msgstr "Amazon SES no pudo enviar el email porque no se proporcionó ningún destinatario."
|
||||
|
||||
#: includes/class-plugin.php:224
|
||||
#, php-format
|
||||
msgid "Amazon SES could not prepare the email: %s"
|
||||
msgstr "Amazon SES no pudo preparar el email: %s"
|
||||
|
||||
#: includes/class-plugin.php:265
|
||||
#, php-format
|
||||
msgid "Amazon SES could not send the email: %s"
|
||||
msgstr "Amazon SES no pudo enviar el email: %s"
|
||||
|
||||
#: includes/class-plugin.php:282
|
||||
#, php-format
|
||||
msgid "An unexpected error occurred while sending through Amazon SES: %s"
|
||||
msgstr "Ocurrió un error inesperado al enviar a través de Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:330
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the \"From\" address: %s"
|
||||
msgstr "Amazon SES rechazó la dirección \"De\": %s"
|
||||
|
||||
#: includes/class-plugin.php:351
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the recipient address: %s"
|
||||
msgstr "Amazon SES rechazó la dirección del destinatario: %s"
|
||||
|
||||
#: includes/class-plugin.php:373
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the CC address: %s"
|
||||
msgstr "Amazon SES rechazó la dirección CC: %s"
|
||||
|
||||
#: includes/class-plugin.php:395
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the BCC address: %s"
|
||||
msgstr "Amazon SES rechazó la dirección CCO: %s"
|
||||
|
||||
#: includes/class-plugin.php:417
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the reply-to address: %s"
|
||||
msgstr "Amazon SES rechazó la dirección de respuesta: %s"
|
||||
|
||||
#: includes/class-plugin.php:446
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the configured reply-to address: %s"
|
||||
msgstr "Amazon SES rechazó la dirección de respuesta configurada: %s"
|
||||
|
||||
#: includes/class-plugin.php:497
|
||||
#, php-format
|
||||
msgid "Amazon SES could not include the attachment: %s"
|
||||
msgstr "Amazon SES no pudo incluir el adjunto: %s"
|
||||
|
||||
#: includes/class-plugin.php:833
|
||||
msgid "Security check failed."
|
||||
msgstr "Falló la comprobación de seguridad."
|
||||
|
||||
#: includes/class-plugin.php:841 robotstxt-updater.php:367
|
||||
msgid "You do not have sufficient permissions to access this page."
|
||||
msgstr "No tienes permisos suficientes para acceder a esta página."
|
||||
|
||||
#: includes/class-plugin.php:854
|
||||
msgid "Amazon SES quotas refreshed successfully."
|
||||
msgstr "Cuotas de Amazon SES actualizadas correctamente."
|
||||
|
||||
#: includes/class-plugin.php:861
|
||||
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
|
||||
msgstr "No se pudieron obtener las cuotas de Amazon SES. Verifica el registro de depuración para más detalles."
|
||||
|
||||
#: includes/class-plugin.php:900
|
||||
msgid "Access Key ID"
|
||||
msgstr "ID de clave de acceso"
|
||||
|
||||
#: includes/class-plugin.php:906
|
||||
msgid "Secret Access Key"
|
||||
msgstr "Clave de acceso secreta"
|
||||
|
||||
#: includes/class-plugin.php:912
|
||||
msgid "Region"
|
||||
msgstr "Región"
|
||||
|
||||
#: includes/class-plugin.php:918
|
||||
msgid "From Email"
|
||||
msgstr "Email remitente"
|
||||
|
||||
#: includes/class-plugin.php:924
|
||||
msgid "From Name"
|
||||
msgstr "Nombre remitente"
|
||||
|
||||
#: includes/class-plugin.php:930
|
||||
msgid "Reply-To Email"
|
||||
msgstr "Email de respuesta"
|
||||
|
||||
#: includes/class-plugin.php:936
|
||||
msgid "Reply-To Name"
|
||||
msgstr "Nombre de respuesta"
|
||||
|
||||
#: includes/class-plugin.php:951
|
||||
msgid "Leave empty to keep the stored access key."
|
||||
msgstr "Dejar vacío para mantener la clave de acceso almacenada."
|
||||
|
||||
#: includes/class-plugin.php:962
|
||||
msgid "Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value."
|
||||
msgstr "Proporciona el ID de clave de acceso IAM con permisos para enviar email a través de Amazon SES. Deja el campo vacío para mantener el valor existente."
|
||||
|
||||
#: includes/class-plugin.php:974
|
||||
msgid "Leave empty to keep the stored secret access key."
|
||||
msgstr "Dejar vacío para mantener la clave de acceso secreta almacenada."
|
||||
|
||||
#: includes/class-plugin.php:985
|
||||
msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value."
|
||||
msgstr "Introduce la clave de acceso secreta asociada con el usuario IAM. Deja el campo vacío para mantener el valor existente."
|
||||
|
||||
#: includes/class-plugin.php:1000
|
||||
msgid "Select a region"
|
||||
msgstr "Selecciona una región"
|
||||
|
||||
#: includes/class-plugin.php:1005
|
||||
msgid "Choose the AWS region where your Amazon SES account is hosted."
|
||||
msgstr "Elige la región de AWS donde está alojada tu cuenta de Amazon SES."
|
||||
|
||||
#: includes/class-plugin.php:1082
|
||||
msgid "The selected Amazon SES region is not available."
|
||||
msgstr "La región de Amazon SES seleccionada no está disponible."
|
||||
|
||||
#: includes/class-plugin.php:1102
|
||||
msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region."
|
||||
msgstr "Las credenciales de Amazon SES no se guardaron. Proporciona una clave de acceso, clave secreta y región."
|
||||
|
||||
#: includes/class-plugin.php:1126
|
||||
msgid "Amazon SES credentials verified successfully."
|
||||
msgstr "Credenciales de Amazon SES verificadas correctamente."
|
||||
|
||||
#: includes/class-plugin.php:1281
|
||||
msgid "US East (Ohio)"
|
||||
msgstr "EE.UU. Este (Ohio)"
|
||||
|
||||
#: includes/class-plugin.php:1282
|
||||
msgid "US East (N. Virginia)"
|
||||
msgstr "EE.UU. Este (N. Virginia)"
|
||||
|
||||
#: includes/class-plugin.php:1283
|
||||
msgid "US West (N. California)"
|
||||
msgstr "EE.UU. Oeste (N. California)"
|
||||
|
||||
#: includes/class-plugin.php:1284
|
||||
msgid "US West (Oregon)"
|
||||
msgstr "EE.UU. Oeste (Oregón)"
|
||||
|
||||
#: includes/class-plugin.php:1285
|
||||
msgid "Africa (Cape Town)"
|
||||
msgstr "África (Ciudad del Cabo)"
|
||||
|
||||
#: includes/class-plugin.php:1286
|
||||
msgid "Asia Pacific (Hyderabad)"
|
||||
msgstr "Asia Pacífico (Hyderabad)"
|
||||
|
||||
#: includes/class-plugin.php:1287
|
||||
msgid "Asia Pacific (Jakarta)"
|
||||
msgstr "Asia Pacífico (Yakarta)"
|
||||
|
||||
#: includes/class-plugin.php:1288
|
||||
msgid "Asia Pacific (Mumbai)"
|
||||
msgstr "Asia Pacífico (Mumbai)"
|
||||
|
||||
#: includes/class-plugin.php:1289
|
||||
msgid "Asia Pacific (Osaka)"
|
||||
msgstr "Asia Pacífico (Osaka)"
|
||||
|
||||
#: includes/class-plugin.php:1290
|
||||
msgid "Asia Pacific (Seoul)"
|
||||
msgstr "Asia Pacífico (Seúl)"
|
||||
|
||||
#: includes/class-plugin.php:1291
|
||||
msgid "Asia Pacific (Singapore)"
|
||||
msgstr "Asia Pacífico (Singapur)"
|
||||
|
||||
#: includes/class-plugin.php:1292
|
||||
msgid "Asia Pacific (Sydney)"
|
||||
msgstr "Asia Pacífico (Sídney)"
|
||||
|
||||
#: includes/class-plugin.php:1293
|
||||
msgid "Asia Pacific (Tokyo)"
|
||||
msgstr "Asia Pacífico (Tokio)"
|
||||
|
||||
#: includes/class-plugin.php:1294
|
||||
msgid "Canada (Central)"
|
||||
msgstr "Canadá (Central)"
|
||||
|
||||
#: includes/class-plugin.php:1295
|
||||
msgid "Europe (Frankfurt)"
|
||||
msgstr "Europa (Fráncfort)"
|
||||
|
||||
#: includes/class-plugin.php:1296
|
||||
msgid "Europe (Ireland)"
|
||||
msgstr "Europa (Irlanda)"
|
||||
|
||||
#: includes/class-plugin.php:1297
|
||||
msgid "Europe (London)"
|
||||
msgstr "Europa (Londres)"
|
||||
|
||||
#: includes/class-plugin.php:1298
|
||||
msgid "Europe (Milan)"
|
||||
msgstr "Europa (Milán)"
|
||||
|
||||
#: includes/class-plugin.php:1299
|
||||
msgid "Europe (Paris)"
|
||||
msgstr "Europa (París)"
|
||||
|
||||
#: includes/class-plugin.php:1300
|
||||
msgid "Europe (Stockholm)"
|
||||
msgstr "Europa (Estocolmo)"
|
||||
|
||||
#: includes/class-plugin.php:1301
|
||||
msgid "Europe (Zurich)"
|
||||
msgstr "Europa (Zúrich)"
|
||||
|
||||
#: includes/class-plugin.php:1302
|
||||
msgid "Israel (Tel Aviv)"
|
||||
msgstr "Israel (Tel Aviv)"
|
||||
|
||||
#: includes/class-plugin.php:1303
|
||||
msgid "Middle East (Bahrain)"
|
||||
msgstr "Oriente Medio (Baréin)"
|
||||
|
||||
#: includes/class-plugin.php:1304
|
||||
msgid "Middle East (UAE)"
|
||||
msgstr "Oriente Medio (EAU)"
|
||||
|
||||
#: includes/class-plugin.php:1305
|
||||
msgid "South America (São Paulo)"
|
||||
msgstr "Sudamérica (São Paulo)"
|
||||
|
||||
#: includes/class-plugin.php:1306
|
||||
msgid "AWS GovCloud (US-East)"
|
||||
msgstr "AWS GovCloud (EE.UU.-Este)"
|
||||
|
||||
#: includes/class-plugin.php:1307
|
||||
msgid "AWS GovCloud (US-West)"
|
||||
msgstr "AWS GovCloud (EE.UU.-Oeste)"
|
||||
|
||||
#: includes/class-plugin.php:1322
|
||||
#, php-format
|
||||
msgid "%1$s (%2$s)"
|
||||
msgstr "%1$s (%2$s)"
|
||||
|
||||
#: includes/class-plugin.php:1338
|
||||
#, php-format
|
||||
msgid "Region %s"
|
||||
msgstr "Región %s"
|
||||
|
||||
#: includes/class-plugin.php:1389
|
||||
#, php-format
|
||||
msgid "Invalid Amazon SES credentials: %s"
|
||||
msgstr "Credenciales de Amazon SES inválidas: %s"
|
||||
|
||||
#: includes/class-plugin.php:1400
|
||||
#, php-format
|
||||
msgid "Could not verify Amazon SES credentials: %s"
|
||||
msgstr "No se pudieron verificar las credenciales de Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:1411
|
||||
#, php-format
|
||||
msgid "An unexpected error occurred while validating Amazon SES credentials: %s"
|
||||
msgstr "Ocurrió un error inesperado al validar las credenciales de Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:1470 includes/class-plugin.php:1492
|
||||
msgid "Amazon SES credentials are not configured."
|
||||
msgstr "Las credenciales de Amazon SES no están configuradas."
|
||||
|
||||
#: includes/class-plugin.php:1506
|
||||
msgid "Amazon SES did not return quota data."
|
||||
msgstr "Amazon SES no devolvió datos de cuota."
|
||||
|
||||
#: includes/class-plugin.php:1524
|
||||
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
|
||||
msgstr "No se pueden obtener las cuotas de SES: el usuario IAM no tiene el permiso ses:GetAccount."
|
||||
|
||||
#: includes/class-plugin.php:1532
|
||||
#, php-format
|
||||
msgid "Amazon SES API error: %s"
|
||||
msgstr "Error de API de Amazon SES: %s"
|
||||
|
||||
#: includes/class-plugin.php:1541
|
||||
#, php-format
|
||||
msgid "Failed to fetch SES quota: %s"
|
||||
msgstr "Falló al obtener la cuota de SES: %s"
|
||||
|
||||
#: robotstxt-updater.php:362
|
||||
msgid "Security check failed"
|
||||
msgstr "Falló la comprobación de seguridad"
|
||||
|
||||
msgid "SMTP (by ROBOTSTXT) Amazon SES"
|
||||
msgstr "SMTP (by ROBOTSTXT) Amazon SES"
|
||||
|
||||
msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin."
|
||||
msgstr "Añade soporte de configuración de Amazon SES al plugin ROBOTSTXT SMTP."
|
||||
|
||||
msgid "ROBOTSTXT"
|
||||
msgstr "ROBOTSTXT"
|
||||
359
languages/robotstxt-smtp-amazonses.pot
Normal file
359
languages/robotstxt-smtp-amazonses.pot
Normal file
|
|
@ -0,0 +1,359 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
|
||||
"POT-Creation-Date: 2026-01-29 10:03+0100\n"
|
||||
"PO-Revision-Date: 2026-01-29 10:03+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
"X-Generator: Poedit 3.8\n"
|
||||
"X-Poedit-Basepath: ..\n"
|
||||
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
||||
"X-Poedit-WPHeader: robotstxt-smtp-amazonses.php\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-KeywordsList: "
|
||||
"__;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
"X-Poedit-SearchPathExcluded-0: *.min.js\n"
|
||||
"X-Poedit-SearchPathExcluded-1: vendor\n"
|
||||
|
||||
#: includes/class-plugin.php:151
|
||||
msgid "Amazon SES could not send the email because no recipient was provided."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error details describing the email preparation failure.
|
||||
#: includes/class-plugin.php:224
|
||||
#, php-format
|
||||
msgid "Amazon SES could not prepare the email: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error message returned by Amazon SES.
|
||||
#: includes/class-plugin.php:265
|
||||
#, php-format
|
||||
msgid "Amazon SES could not send the email: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error message describing the unexpected failure.
|
||||
#: includes/class-plugin.php:282
|
||||
#, php-format
|
||||
msgid "An unexpected error occurred while sending through Amazon SES: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error details describing why the From header is invalid.
|
||||
#: includes/class-plugin.php:330
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the \"From\" address: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Invalid recipient email address.
|
||||
#: includes/class-plugin.php:351
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the recipient address: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Invalid CC email address.
|
||||
#: includes/class-plugin.php:373
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the CC address: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Invalid BCC email address.
|
||||
#: includes/class-plugin.php:395
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the BCC address: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Invalid reply-to email address.
|
||||
#: includes/class-plugin.php:417
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the reply-to address: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Invalid reply-to email address from settings.
|
||||
#: includes/class-plugin.php:446
|
||||
#, php-format
|
||||
msgid "Amazon SES rejected the configured reply-to address: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Attachment path that could not be added.
|
||||
#: includes/class-plugin.php:497
|
||||
#, php-format
|
||||
msgid "Amazon SES could not include the attachment: %s"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:833
|
||||
msgid "Security check failed."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:841 robotstxt-updater.php:367
|
||||
msgid "You do not have sufficient permissions to access this page."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:854
|
||||
msgid "Amazon SES quotas refreshed successfully."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:861
|
||||
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:900
|
||||
msgid "Access Key ID"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:906
|
||||
msgid "Secret Access Key"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:912
|
||||
msgid "Region"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:918
|
||||
msgid "From Email"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:924
|
||||
msgid "From Name"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:930
|
||||
msgid "Reply-To Email"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:936
|
||||
msgid "Reply-To Name"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:951
|
||||
msgid "Leave empty to keep the stored access key."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:962
|
||||
msgid ""
|
||||
"Provide the IAM access key ID with permissions to send email through Amazon "
|
||||
"SES. Leave the field empty to retain the existing value."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:974
|
||||
msgid "Leave empty to keep the stored secret access key."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:985
|
||||
msgid ""
|
||||
"Enter the secret access key associated with the IAM user. Leave the field "
|
||||
"empty to retain the existing value."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1000
|
||||
msgid "Select a region"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1005
|
||||
msgid "Choose the AWS region where your Amazon SES account is hosted."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1082
|
||||
msgid "The selected Amazon SES region is not available."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1102
|
||||
msgid ""
|
||||
"Amazon SES credentials were not saved. Provide an access key, secret key, "
|
||||
"and region."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1126
|
||||
msgid "Amazon SES credentials verified successfully."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1281
|
||||
msgid "US East (Ohio)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1282
|
||||
msgid "US East (N. Virginia)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1283
|
||||
msgid "US West (N. California)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1284
|
||||
msgid "US West (Oregon)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1285
|
||||
msgid "Africa (Cape Town)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1286
|
||||
msgid "Asia Pacific (Hyderabad)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1287
|
||||
msgid "Asia Pacific (Jakarta)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1288
|
||||
msgid "Asia Pacific (Mumbai)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1289
|
||||
msgid "Asia Pacific (Osaka)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1290
|
||||
msgid "Asia Pacific (Seoul)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1291
|
||||
msgid "Asia Pacific (Singapore)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1292
|
||||
msgid "Asia Pacific (Sydney)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1293
|
||||
msgid "Asia Pacific (Tokyo)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1294
|
||||
msgid "Canada (Central)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1295
|
||||
msgid "Europe (Frankfurt)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1296
|
||||
msgid "Europe (Ireland)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1297
|
||||
msgid "Europe (London)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1298
|
||||
msgid "Europe (Milan)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1299
|
||||
msgid "Europe (Paris)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1300
|
||||
msgid "Europe (Stockholm)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1301
|
||||
msgid "Europe (Zurich)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1302
|
||||
msgid "Israel (Tel Aviv)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1303
|
||||
msgid "Middle East (Bahrain)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1304
|
||||
msgid "Middle East (UAE)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1305
|
||||
msgid "South America (São Paulo)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1306
|
||||
msgid "AWS GovCloud (US-East)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1307
|
||||
msgid "AWS GovCloud (US-West)"
|
||||
msgstr ""
|
||||
|
||||
#. translators: 1: AWS region display name. 2: AWS region code.
|
||||
#: includes/class-plugin.php:1322
|
||||
#, php-format
|
||||
msgid "%1$s (%2$s)"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: AWS region code.
|
||||
#: includes/class-plugin.php:1338
|
||||
#, php-format
|
||||
msgid "Region %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error message from Amazon SES.
|
||||
#: includes/class-plugin.php:1389
|
||||
#, php-format
|
||||
msgid "Invalid Amazon SES credentials: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error message from Amazon SES.
|
||||
#: includes/class-plugin.php:1400
|
||||
#, php-format
|
||||
msgid "Could not verify Amazon SES credentials: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error message describing the unexpected failure.
|
||||
#: includes/class-plugin.php:1411
|
||||
#, php-format
|
||||
msgid ""
|
||||
"An unexpected error occurred while validating Amazon SES credentials: %s"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1470 includes/class-plugin.php:1492
|
||||
msgid "Amazon SES credentials are not configured."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1506
|
||||
msgid "Amazon SES did not return quota data."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:1524
|
||||
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: AWS error message
|
||||
#: includes/class-plugin.php:1532
|
||||
#, php-format
|
||||
msgid "Amazon SES API error: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: Error message
|
||||
#: includes/class-plugin.php:1541
|
||||
#, php-format
|
||||
msgid "Failed to fetch SES quota: %s"
|
||||
msgstr ""
|
||||
|
||||
#: robotstxt-updater.php:362
|
||||
msgid "Security check failed"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "SMTP (by ROBOTSTXT) Amazon SES"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin/theme
|
||||
msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "ROBOTSTXT"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "https://www.robotstxt.es/"
|
||||
msgstr ""
|
||||
11
readme.txt
11
readme.txt
|
|
@ -1,11 +1,12 @@
|
|||
=== SMTP (by ROBOTSTXT) Amazon SES ===
|
||||
Contributors: robotstxt
|
||||
Tags: amazon ses, smtp, email, transactional, deliverability
|
||||
Requires at least: 6.0
|
||||
Contributors: javiercasares
|
||||
Tags: amazon-ses, smtp, email, mail
|
||||
Requires at least: 6.5
|
||||
Tested up to: 6.9
|
||||
Requires PHP: 8.2
|
||||
Stable tag: 1.0.0
|
||||
License: GPLv3 or later
|
||||
Requires PHP: 8.2
|
||||
Version: 1.0.0
|
||||
License: GPL-3.0-or-later
|
||||
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
This private add-on connects the ROBOTSTXT SMTP plugin with Amazon Simple Email Service (SES).
|
||||
|
|
|
|||
|
|
@ -1,21 +1,22 @@
|
|||
<?php
|
||||
/**
|
||||
* Plugin Name: SMTP Amazon SES (by ROBOTSTXT)
|
||||
* Plugin URI: https://www.robotstxt.es/
|
||||
* Plugin Name: SMTP (by ROBOTSTXT) Amazon SES
|
||||
* Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses
|
||||
* Description: Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin.
|
||||
* Version: 1.0.0
|
||||
* Requires at least: 6.0
|
||||
* Version: 2.0.0
|
||||
* Requires at least: 6.5
|
||||
* Requires PHP: 8.2
|
||||
* Network: true
|
||||
* Security: robotstxt@robotstxt.es
|
||||
* Author: ROBOTSTXT
|
||||
* Author URI: https://www.robotstxt.es/
|
||||
* Text Domain: robotstxt-smtp-amazonses
|
||||
* Domain Path: /languages
|
||||
* Requires Plugins: robotstxt-smtp
|
||||
* Domain Path: /languages
|
||||
* License: GPL-3.0-or-later
|
||||
* License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
||||
* Gitea Plugin URI: ROBOTSTXT/robotstxt-smtp-amazonses
|
||||
* Gitea Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses
|
||||
* Plugin ID: did:plc:z74fjcsglfynz7grselq5xos
|
||||
* Primary Branch: main
|
||||
*
|
||||
* @package Robotstxt_SMTP_AmazonSES
|
||||
*/
|
||||
|
|
@ -25,7 +26,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||
}
|
||||
|
||||
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION' ) ) {
|
||||
define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '1.0.0' );
|
||||
define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.0.0' );
|
||||
}
|
||||
|
||||
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_FILE' ) ) {
|
||||
|
|
@ -56,60 +57,10 @@ if ( \is_readable( $autoload ) ) {
|
|||
|
||||
require_once ROBOTSTXT_SMTP_AMAZONSES_PATH . 'includes/class-plugin.php';
|
||||
|
||||
if ( ! function_exists( 'robotstxt_smtp_amazonses_dependencies_satisfied' ) ) {
|
||||
/**
|
||||
* Determines whether all plugin dependencies are available.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function robotstxt_smtp_amazonses_dependencies_satisfied(): bool {
|
||||
return class_exists( '\\Robotstxt_SMTP\\Plugin' ) && class_exists( '\\Robotstxt_SMTP\\Admin\\Settings_Page' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'robotstxt_smtp_amazonses_register_dependency_notice' ) ) {
|
||||
/**
|
||||
* Registers the admin notice shown when the core plugin is missing.
|
||||
*
|
||||
* @since 1.0.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function robotstxt_smtp_amazonses_register_dependency_notice(): void {
|
||||
if ( ! is_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$callback = static function (): void {
|
||||
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
|
||||
|
||||
if ( $screen && 'plugins' !== $screen->id && 'plugins-network' !== $screen->id ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$message = sprintf(
|
||||
/* translators: %s: plugin name. */
|
||||
esc_html__( 'The %s add-on requires the ROBOTSTXT SMTP plugin to be installed and active.', 'robotstxt-smtp-amazonses' ),
|
||||
esc_html__( 'ROBOTSTXT SMTP Amazon SES', 'robotstxt-smtp-amazonses' )
|
||||
);
|
||||
?>
|
||||
<div class="notice notice-error">
|
||||
<p><?php echo esc_html( $message ); ?></p>
|
||||
</div>
|
||||
<?php
|
||||
};
|
||||
|
||||
add_action( 'admin_notices', $callback );
|
||||
add_action( 'network_admin_notices', $callback );
|
||||
}
|
||||
}
|
||||
|
||||
if ( robotstxt_smtp_amazonses_dependencies_satisfied() ) {
|
||||
\Robotstxt_SMTP_AmazonSES\Plugin::get_instance()->run();
|
||||
} else {
|
||||
robotstxt_smtp_amazonses_register_dependency_notice();
|
||||
}
|
||||
|
||||
// Initialize the plugin.
|
||||
// Dependency checking is handled by the "Requires Plugins" header in WordPress 6.5+.
|
||||
\Robotstxt_SMTP_AmazonSES\Plugin::get_instance()->run();
|
||||
|
||||
// Initialize ROBOTSTXT updater (auto-configures from plugin headers).
|
||||
require_once __DIR__ . '/robotstxt-updater.php';
|
||||
Robotstxt_Updater::init( __FILE__ );
|
||||
|
|
|
|||
383
robotstxt-updater.php
Normal file
383
robotstxt-updater.php
Normal file
|
|
@ -0,0 +1,383 @@
|
|||
<?php
|
||||
/**
|
||||
* Generic JSON-based updater for ROBOTSTXT plugins.
|
||||
*
|
||||
* This file is designed to be copied to any ROBOTSTXT plugin.
|
||||
* It auto-configures itself by reading the plugin headers.
|
||||
*
|
||||
* @package ROBOTSTXT
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
if ( ! class_exists( 'Robotstxt_Updater' ) ) {
|
||||
/**
|
||||
* Class Robotstxt_Updater
|
||||
*
|
||||
* Generic updater that works with any plugin.
|
||||
* Reads plugin headers and constructs update URL automatically.
|
||||
*/
|
||||
class Robotstxt_Updater {
|
||||
|
||||
/**
|
||||
* Plugin file path.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private string $plugin_file_path;
|
||||
|
||||
/**
|
||||
* Plugin basename (e.g., 'my-plugin/my-plugin.php').
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private string $plugin_basename;
|
||||
|
||||
/**
|
||||
* Plugin slug (directory name).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private string $plugin_slug;
|
||||
|
||||
/**
|
||||
* Remote JSON URL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private string $json_url;
|
||||
|
||||
/**
|
||||
* Cache key.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private string $cache_key;
|
||||
|
||||
/**
|
||||
* Plugin headers.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private array $plugin_data;
|
||||
|
||||
/**
|
||||
* Initialize the updater.
|
||||
*
|
||||
* Usage in your main plugin file:
|
||||
* require_once __DIR__ . '/robotstxt-updater.php';
|
||||
* Robotstxt_Updater::init( __FILE__ );
|
||||
*
|
||||
* @param string $plugin_file_path Absolute path to the main plugin file.
|
||||
*/
|
||||
public static function init( string $plugin_file_path ): void {
|
||||
$instance = new self( $plugin_file_path );
|
||||
$instance->register();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $plugin_file_path Absolute path to the main plugin file.
|
||||
*/
|
||||
private function __construct( string $plugin_file_path ) {
|
||||
$this->plugin_file_path = $plugin_file_path;
|
||||
$this->plugin_basename = plugin_basename( $plugin_file_path );
|
||||
$this->plugin_slug = dirname( $this->plugin_basename );
|
||||
$this->plugin_data = $this->get_plugin_data();
|
||||
$this->json_url = $this->build_json_url();
|
||||
$this->cache_key = 'robotstxt_updater_' . md5( $this->plugin_basename );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register WordPress hooks.
|
||||
*/
|
||||
private function register(): void {
|
||||
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'inject_update_info' ) );
|
||||
add_filter( 'plugins_api', array( $this, 'provide_plugin_details' ), 10, 3 );
|
||||
add_action( 'admin_init', array( $this, 'handle_cache_clear' ) );
|
||||
add_action( 'robotstxt_updater_clear_cache', array( $this, 'clear_cache' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin headers.
|
||||
*
|
||||
* @return array Plugin data.
|
||||
*/
|
||||
private function get_plugin_data(): array {
|
||||
if ( ! function_exists( 'get_plugin_data' ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
||||
}
|
||||
|
||||
return get_plugin_data( $this->plugin_file_path, false, false );
|
||||
}
|
||||
|
||||
/**
|
||||
* Build JSON URL from plugin headers.
|
||||
*
|
||||
* Tries to use "Gitea Plugin URI" header to construct the URL.
|
||||
* Falls back to Plugin URI if Gitea URI is not available.
|
||||
*
|
||||
* @return string JSON URL.
|
||||
*/
|
||||
private function build_json_url(): string {
|
||||
// Try Gitea Plugin URI (format: "OWNER/REPO" or full URL).
|
||||
if ( ! empty( $this->plugin_data['Gitea Plugin URI'] ) ) {
|
||||
$gitea_uri = $this->plugin_data['Gitea Plugin URI'];
|
||||
|
||||
// If it's already a full URL, use it.
|
||||
if ( str_starts_with( $gitea_uri, 'http' ) ) {
|
||||
// Extract base URL and construct JSON path.
|
||||
return rtrim( $gitea_uri, '/' ) . '/raw/branch/main/update.json';
|
||||
}
|
||||
|
||||
// If it's in format "OWNER/REPO", construct full URL.
|
||||
if ( preg_match( '#^[^/]+/[^/]+$#', $gitea_uri ) ) {
|
||||
return "https://git.robotstxt.es/{$gitea_uri}/raw/branch/main/update.json";
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: try to extract from Plugin URI.
|
||||
if ( ! empty( $this->plugin_data['PluginURI'] ) ) {
|
||||
$plugin_uri = $this->plugin_data['PluginURI'];
|
||||
if ( str_contains( $plugin_uri, 'git.robotstxt.es' ) ) {
|
||||
return rtrim( $plugin_uri, '/' ) . '/raw/branch/main/update.json';
|
||||
}
|
||||
}
|
||||
|
||||
// Last resort: construct from plugin slug.
|
||||
return "https://git.robotstxt.es/ROBOTSTXT/{$this->plugin_slug}/raw/branch/main/update.json";
|
||||
}
|
||||
|
||||
/**
|
||||
* Inject update info into WP's plugin update transient.
|
||||
*
|
||||
* @param object|mixed $transient The update_plugins transient.
|
||||
*
|
||||
* @return object The modified transient.
|
||||
*/
|
||||
public function inject_update_info( $transient ) {
|
||||
if ( ! is_object( $transient ) ) {
|
||||
$transient = new stdClass();
|
||||
}
|
||||
|
||||
if ( empty( $transient->checked ) || ! is_array( $transient->checked ) ) {
|
||||
return $transient;
|
||||
}
|
||||
|
||||
if ( empty( $transient->checked[ $this->plugin_basename ] ) ) {
|
||||
return $transient;
|
||||
}
|
||||
|
||||
$current_version = $transient->checked[ $this->plugin_basename ];
|
||||
$remote = $this->get_remote_data();
|
||||
|
||||
if ( empty( $remote['version'] ) || empty( $remote['download_url'] ) ) {
|
||||
return $transient;
|
||||
}
|
||||
|
||||
if ( ! $this->is_compatible( $remote ) ) {
|
||||
return $transient;
|
||||
}
|
||||
|
||||
if ( version_compare( $remote['version'], $current_version, '>' ) ) {
|
||||
$update = (object) array(
|
||||
'slug' => $remote['slug'] ?? $this->plugin_slug,
|
||||
'plugin' => $this->plugin_basename,
|
||||
'new_version' => $remote['version'],
|
||||
'url' => $remote['homepage'] ?? $this->plugin_data['PluginURI'] ?? '',
|
||||
'package' => $remote['download_url'],
|
||||
'tested' => $remote['tested'] ?? '',
|
||||
'requires' => $remote['requires'] ?? '',
|
||||
'requires_php' => $remote['requires_php'] ?? '',
|
||||
);
|
||||
|
||||
$transient->response[ $this->plugin_basename ] = $update;
|
||||
}
|
||||
|
||||
return $transient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide "View details" modal content.
|
||||
*
|
||||
* @param false|object|array $result The result object or array.
|
||||
* @param string $action The type of information being requested.
|
||||
* @param object $args Plugin API arguments.
|
||||
*
|
||||
* @return false|object The plugin information object or false.
|
||||
*/
|
||||
public function provide_plugin_details( $result, string $action, object $args ) {
|
||||
if ( 'plugin_information' !== $action ) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ( empty( $args->slug ) || $args->slug !== $this->plugin_slug ) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$remote = $this->get_remote_data();
|
||||
|
||||
if ( empty( $remote['version'] ) ) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
return (object) array(
|
||||
'name' => $remote['name'] ?? $this->plugin_data['Name'] ?? $this->plugin_slug,
|
||||
'slug' => $remote['slug'] ?? $this->plugin_slug,
|
||||
'version' => $remote['version'],
|
||||
'author' => $remote['author'] ?? $this->plugin_data['Author'] ?? '',
|
||||
'homepage' => $remote['homepage'] ?? $this->plugin_data['PluginURI'] ?? '',
|
||||
'requires' => $remote['requires'] ?? '',
|
||||
'tested' => $remote['tested'] ?? '',
|
||||
'requires_php' => $remote['requires_php'] ?? '',
|
||||
'sections' => array(
|
||||
'description' => $remote['description'] ?? $this->plugin_data['Description'] ?? '',
|
||||
'changelog' => $remote['changelog'] ?? '',
|
||||
),
|
||||
'download_link' => $remote['download_url'] ?? '',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get remote data with caching and HMAC signature verification.
|
||||
*
|
||||
* @return array Remote data.
|
||||
*/
|
||||
private function get_remote_data(): array {
|
||||
$cached = get_site_transient( $this->cache_key );
|
||||
|
||||
// Verify HMAC signature if AUTH_SALT is defined and cache has signature.
|
||||
if ( false !== $cached && defined( 'AUTH_SALT' ) && '' !== AUTH_SALT ) {
|
||||
if ( is_array( $cached ) && isset( $cached['signature'], $cached['data'] ) ) {
|
||||
$expected_sig = hash_hmac( 'sha256', $this->cache_key . serialize( $cached['data'] ), AUTH_SALT );
|
||||
|
||||
if ( hash_equals( $expected_sig, $cached['signature'] ) ) {
|
||||
// Signature valid, return data.
|
||||
return is_array( $cached['data'] ) ? $cached['data'] : array();
|
||||
}
|
||||
|
||||
// Signature invalid, delete corrupted cache.
|
||||
delete_site_transient( $this->cache_key );
|
||||
$cached = false;
|
||||
}
|
||||
}
|
||||
|
||||
// If no valid cache, fetch fresh data.
|
||||
if ( false === $cached ) {
|
||||
$remote = $this->fetch_json();
|
||||
|
||||
// Store with HMAC signature if AUTH_SALT is available.
|
||||
if ( defined( 'AUTH_SALT' ) && '' !== AUTH_SALT ) {
|
||||
$payload = array(
|
||||
'data' => $remote ?: array(),
|
||||
'timestamp' => time(),
|
||||
'signature' => hash_hmac( 'sha256', $this->cache_key . serialize( $remote ?: array() ), AUTH_SALT ),
|
||||
);
|
||||
set_site_transient( $this->cache_key, $payload, 6 * HOUR_IN_SECONDS );
|
||||
} else {
|
||||
// Fallback to standard caching.
|
||||
set_site_transient( $this->cache_key, $remote ?: array(), 6 * HOUR_IN_SECONDS );
|
||||
}
|
||||
|
||||
return is_array( $remote ) ? $remote : array();
|
||||
}
|
||||
|
||||
// Legacy cache format without signature (backward compatibility).
|
||||
return is_array( $cached ) ? $cached : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch JSON from remote URL.
|
||||
*
|
||||
* @return array Decoded JSON data.
|
||||
*/
|
||||
private function fetch_json(): array {
|
||||
$response = wp_remote_get(
|
||||
$this->json_url,
|
||||
array(
|
||||
'timeout' => 10,
|
||||
'headers' => array(
|
||||
'Accept' => 'application/json',
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
if ( is_wp_error( $response ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$code = (int) wp_remote_retrieve_response_code( $response );
|
||||
if ( $code < 200 || $code >= 300 ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$body = wp_remote_retrieve_body( $response );
|
||||
$data = json_decode( $body, true );
|
||||
|
||||
return is_array( $data ) ? $data : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check compatibility.
|
||||
*
|
||||
* @param array $remote Remote data.
|
||||
*
|
||||
* @return bool True if compatible.
|
||||
*/
|
||||
private function is_compatible( array $remote ): bool {
|
||||
if ( ! empty( $remote['requires_php'] ) ) {
|
||||
if ( version_compare( PHP_VERSION, $remote['requires_php'], '<' ) ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $remote['requires'] ) ) {
|
||||
if ( version_compare( get_bloginfo( 'version' ), $remote['requires'], '<' ) ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle manual cache clear via URL parameter.
|
||||
*/
|
||||
public function handle_cache_clear(): void {
|
||||
// Check if this is a cache clear request first.
|
||||
$clear_cache = filter_input( INPUT_GET, 'robotstxt_clear_update_cache', FILTER_UNSAFE_RAW );
|
||||
if ( null === $clear_cache ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// This is a cache clear request - now verify nonce.
|
||||
$nonce_raw = filter_input( INPUT_GET, '_wpnonce', FILTER_UNSAFE_RAW );
|
||||
$nonce = $nonce_raw ? sanitize_text_field( wp_unslash( $nonce_raw ) ) : '';
|
||||
|
||||
if ( ! wp_verify_nonce( $nonce, 'robotstxt_clear_update_cache' ) ) {
|
||||
wp_die( esc_html__( 'Security check failed', 'robotstxt-smtp-amazonses' ) );
|
||||
}
|
||||
|
||||
// Check permissions.
|
||||
if ( ! current_user_can( 'update_plugins' ) ) {
|
||||
wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'robotstxt-smtp-amazonses' ) );
|
||||
}
|
||||
|
||||
$this->clear_cache();
|
||||
wp_safe_redirect( remove_query_arg( array( 'robotstxt_clear_update_cache', '_wpnonce' ) ) );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear update cache.
|
||||
*/
|
||||
public function clear_cache(): void {
|
||||
delete_site_transient( $this->cache_key );
|
||||
delete_site_transient( 'update_plugins' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{ "security_contact": "robotstxt@robotstxt.es" }
|
||||
28
update.json
Normal file
28
update.json
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"name": "SMTP (by ROBOTSTXT) Amazon SES",
|
||||
"slug": "robotstxt-smtp-amazonses",
|
||||
"version": "2.0.0",
|
||||
"download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses/releases/download/2.0.0/robotstxt-smtp-amazonses-2.0.0.zip",
|
||||
"requires": "6.5",
|
||||
"requires_php": "8.2",
|
||||
"tested": "6.9",
|
||||
"last_updated": "2026-01-29",
|
||||
"author": "ROBOTSTXT",
|
||||
"author_profile": "https://www.robotstxt.es/",
|
||||
"homepage": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses",
|
||||
"requires_plugins": ["robotstxt-smtp"],
|
||||
"description": "Adds Amazon SES (Simple Email Service) configuration support to the ROBOTSTXT SMTP plugin. Integrates seamlessly with AWS SDK for PHP to send emails through Amazon SES infrastructure.",
|
||||
"changelog": "<h3>2.0.0 - 2026-01-29</h3><p><strong>⚠️ BREAKING CHANGE:</strong> This version requires PHP 8.2 or higher due to AWS SDK requirements.</p><ul><li><strong>Added:</strong> Reply-To header support for emails sent via Amazon SES</li><li><strong>Fixed:</strong> Improved error handling and validation</li><li><strong>Fixed:</strong> Enhanced compatibility with core SMTP plugin 2.0.0</li><li><strong>Security:</strong> Improved credential handling and encryption</li><li><strong>Security:</strong> Updated AWS SDK for PHP to latest version (3.369.20) with security patches</li><li><strong>Changed:</strong> Minimum PHP version increased to 8.2</li><li><strong>Improved:</strong> Code quality and documentation</li></ul><h3>1.0.0 - 2026-01-27</h3><ul><li>Initial release</li><li>Amazon SES integration via AWS SDK v3</li><li>Full compatibility with ROBOTSTXT SMTP plugin</li><li>Support for AWS regions and credentials configuration</li><li>Automatic dependency management with Composer</li></ul>",
|
||||
"sections": {
|
||||
"description": "Adds Amazon SES (Simple Email Service) configuration support to the ROBOTSTXT SMTP plugin. Integrates seamlessly with AWS SDK for PHP to send emails through Amazon SES infrastructure.",
|
||||
"changelog": "<h3>2.0.0 - 2026-01-29</h3><p><strong>⚠️ BREAKING CHANGE:</strong> This version requires PHP 8.2 or higher due to AWS SDK requirements.</p><ul><li><strong>Added:</strong> Reply-To header support for emails sent via Amazon SES</li><li><strong>Fixed:</strong> Improved error handling and validation</li><li><strong>Fixed:</strong> Enhanced compatibility with core SMTP plugin 2.0.0</li><li><strong>Security:</strong> Improved credential handling and encryption</li><li><strong>Security:</strong> Updated AWS SDK for PHP to latest version (3.369.20) with security patches</li><li><strong>Changed:</strong> Minimum PHP version increased to 8.2</li><li><strong>Improved:</strong> Code quality and documentation</li></ul><h3>1.0.0 - 2026-01-27</h3><ul><li>Initial release</li><li>Amazon SES integration via AWS SDK v3</li><li>Full compatibility with ROBOTSTXT SMTP plugin</li><li>Support for AWS regions and credentials configuration</li><li>Automatic dependency management with Composer</li></ul>"
|
||||
},
|
||||
"banners": {
|
||||
"low": "",
|
||||
"high": ""
|
||||
},
|
||||
"icons": {
|
||||
"1x": "",
|
||||
"2x": ""
|
||||
}
|
||||
}
|
||||
4
vendor/aws/aws-crt-php/CODE_OF_CONDUCT.md
vendored
4
vendor/aws/aws-crt-php/CODE_OF_CONDUCT.md
vendored
|
|
@ -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.
|
||||
117
vendor/aws/aws-crt-php/README.md
vendored
117
vendor/aws/aws-crt-php/README.md
vendored
|
|
@ -1,117 +0,0 @@
|
|||
# AWS Common Runtime PHP bindings
|
||||
|
||||
## Requirements
|
||||
|
||||
* PHP 5.5+ on UNIX platforms, 7.2+ on Windows
|
||||
* CMake 3.x
|
||||
* GCC 4.4+, clang 3.8+ on UNIX, Visual Studio build tools on Windows
|
||||
* Tests require [Composer](https://getcomposer.org)
|
||||
|
||||
## Installing with Composer and PECL
|
||||
|
||||
The package has two different package published to [composer](https://packagist.org/packages/aws/aws-crt-php) and [PECL](https://pecl.php.net/package/awscrt).
|
||||
|
||||
On UNIX, you can get the package from package manager or build from source:
|
||||
|
||||
```
|
||||
pecl install awscrt
|
||||
composer require aws/aws-crt-php
|
||||
```
|
||||
|
||||
On Windows, you need to build from source as instruction written below for the native extension `php_awscrt.dll` . And, follow https://www.php.net/manual/en/install.pecl.windows.php#install.pecl.windows.loading to load extension. After that:
|
||||
|
||||
```
|
||||
composer require aws/aws-crt-php
|
||||
```
|
||||
|
||||
## Building from Github source
|
||||
|
||||
```sh
|
||||
$ git clone --recursive https://github.com/awslabs/aws-crt-php.git
|
||||
$ cd aws-crt-php
|
||||
$ phpize
|
||||
$ ./configure
|
||||
$ make
|
||||
$ ./dev-scripts/run_tests.sh
|
||||
```
|
||||
|
||||
## Building on Windows
|
||||
|
||||
### Requirements for Windows
|
||||
|
||||
* Ensure you have the [windows PHP SDK](https://github.com/microsoft/php-sdk-binary-tools) (this example assumes installation of the SDK to C:\php-sdk and that you've checked out the PHP source to php-src within the build directory) and it works well on your machine.
|
||||
|
||||
* Ensure you have "Development package (SDK to develop PHP extensions)" and PHP available from your system path. You can download them from https://windows.php.net/download/. You can check if they are available by running `phpize -v` and `php -v`
|
||||
|
||||
### Instructions
|
||||
|
||||
From Command Prompt (not powershell). The instruction is based on Visual Studio 2019 on 64bit Windows.
|
||||
|
||||
```bat
|
||||
> git clone --recursive https://github.com/awslabs/aws-crt-php.git
|
||||
> git clone https://github.com/microsoft/php-sdk-binary-tools.git C:\php-sdk
|
||||
> C:\php-sdk\phpsdk-vs16-x64.bat
|
||||
|
||||
C:\php-sdk\
|
||||
$ cd <your-path-to-aws-crt-php>
|
||||
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ phpize
|
||||
|
||||
# --with-prefix only required when your php runtime in system path is different than the runtime you wish to use.
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ configure --enable-awscrt=shared --with-prefix=<your-path-to-php-prefix>
|
||||
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ nmake
|
||||
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ nmake generate-php-ini
|
||||
|
||||
# check .\php-win.ini, it now has the full path to php_awscrt.dll that you can manually load to your php runtime, or you can run the following command to run tests and load the required native extension for awscrt.
|
||||
<your-path-to-aws-crt-php>\
|
||||
$ .\dev-scripts\run_tests.bat <your-path-to-php-binary>
|
||||
```
|
||||
|
||||
Note: for VS2017, Cmake will default to build for Win32, refer to [here](https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2015%202017.html). If you are building for x64 php, you can set environment variable as follow to let cmake pick x64 compiler.
|
||||
|
||||
```bat
|
||||
set CMAKE_GENERATOR=Visual Studio 15 2017
|
||||
set CMAKE_GENERATOR_PLATFORM=x64
|
||||
```
|
||||
|
||||
## Debugging
|
||||
|
||||
Using [PHPBrew](https://github.com/phpbrew/phpbrew) to build/manage multiple versions of PHP is helpful.
|
||||
|
||||
Note: You must use a debug build of PHP to debug native extensions.
|
||||
See the [PHP Internals Book](https://www.phpinternalsbook.com/php7/build_system/building_php.html) for more info
|
||||
|
||||
```shell
|
||||
# PHP 8 example
|
||||
$ phpbrew install --stdout -j 8 8.0 +default -- CFLAGS=-Wno-error --disable-cgi --enable-debug
|
||||
# PHP 5.5 example
|
||||
$ phpbrew install --stdout -j 8 5.5 +default -openssl -mbstring -- CFLAGS="-w -Wno-error" --enable-debug --with-zlib=/usr/local/opt/zlib
|
||||
$ phpbrew switch php-8.0.6 # or whatever version is current, it'll be at the end of the build output
|
||||
$ phpize
|
||||
$ ./configure
|
||||
$ make CMAKE_BUILD_TYPE=Debug
|
||||
```
|
||||
|
||||
Ensure that the php you launch from your debugger is the result of `which php` , not just
|
||||
the system default php.
|
||||
|
||||
## Security
|
||||
|
||||
See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information.
|
||||
|
||||
## Known OpenSSL related issue (Unix only)
|
||||
|
||||
* When your php loads a different version of openssl than your system openssl version, awscrt may fail to load or weirdly crash. You can find the openssl version php linked via: `php -i | grep 'OpenSSL'`, and awscrt linked from the build log, which will be `Found OpenSSL: * (found version *)`
|
||||
|
||||
The easiest workaround to those issue is to build from source and get aws-lc for awscrt to depend on instead.
|
||||
TO do that, same instructions as [here](#building-from-github-source), but use `USE_OPENSSL=OFF make` instead of `make`
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the Apache-2.0 License.
|
||||
35
vendor/aws/aws-crt-php/composer.json
vendored
35
vendor/aws/aws-crt-php/composer.json
vendored
|
|
@ -1,35 +0,0 @@
|
|||
{
|
||||
"name": "aws/aws-crt-php",
|
||||
"homepage": "https://github.com/awslabs/aws-crt-php",
|
||||
"description": "AWS Common Runtime for PHP",
|
||||
"keywords": ["aws","amazon","sdk","crt"],
|
||||
"type": "library",
|
||||
"authors": [
|
||||
{
|
||||
"name": "AWS SDK Common Runtime Team",
|
||||
"email": "aws-sdk-common-runtime@amazon.com"
|
||||
}
|
||||
],
|
||||
"minimum-stability": "alpha",
|
||||
"require": {
|
||||
"php": ">=5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit":"^4.8.35||^5.6.3||^9.5",
|
||||
"yoast/phpunit-polyfills": "^1.0"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/"
|
||||
]
|
||||
},
|
||||
"suggest": {
|
||||
"ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
|
||||
},
|
||||
"scripts": {
|
||||
"test": "./dev-scripts/run_tests.sh",
|
||||
"test-extension": "@test",
|
||||
"test-win": ".\\dev-scripts\\run_tests.bat"
|
||||
},
|
||||
"license": "Apache-2.0"
|
||||
}
|
||||
73
vendor/aws/aws-sdk-php/composer.json
vendored
73
vendor/aws/aws-sdk-php/composer.json
vendored
|
|
@ -1,73 +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://github.com/aws/aws-sdk-php/discussions",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"guzzlehttp/guzzle": "^7.4.5",
|
||||
"guzzlehttp/psr7": "^2.4.5",
|
||||
"guzzlehttp/promises": "^2.0",
|
||||
"mtdowling/jmespath.php": "^2.8.0",
|
||||
"ext-pcre": "*",
|
||||
"ext-json": "*",
|
||||
"ext-simplexml": "*",
|
||||
"aws/aws-crt-php": "^1.2.3",
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer" : "^2.7.8",
|
||||
"ext-openssl": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-pcntl": "*",
|
||||
"ext-sockets": "*",
|
||||
"phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
|
||||
"behat/behat": "~3.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"andrewsville/php-token-reflection": "^1.4",
|
||||
"psr/cache": "^2.0 || ^3.0",
|
||||
"psr/simple-cache": "^2.0 || ^3.0",
|
||||
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
|
||||
"symfony/filesystem": "^v6.4.0 || ^v7.1.0",
|
||||
"yoast/phpunit-polyfills": "^2.0",
|
||||
"dms/phpunit-arraysubset-asserts": "^0.4.0"
|
||||
},
|
||||
"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"],
|
||||
"exclude-from-classmap": ["src/data/"]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Aws\\Test\\": "tests/"
|
||||
},
|
||||
"classmap": ["build/"]
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -31,6 +31,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listPlansInRegionAsync(array $args = [])
|
||||
* @method \Aws\Result listRoute53HealthChecks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRoute53HealthChecksAsync(array $args = [])
|
||||
* @method \Aws\Result listRoute53HealthChecksInRegion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRoute53HealthChecksInRegionAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result startPlanExecution(array $args = [])
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getAlternateContactAsync(array $args = [])
|
||||
* @method \Aws\Result getContactInformation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getContactInformationAsync(array $args = [])
|
||||
* @method \Aws\Result getGovCloudAccountInformation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGovCloudAccountInformationAsync(array $args = [])
|
||||
* @method \Aws\Result getPrimaryEmail(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPrimaryEmailAsync(array $args = [])
|
||||
* @method \Aws\Result getRegionOptStatus(array $args = [])
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getBackendJobAsync(array $args = [])
|
||||
* @method \Aws\Result getBackendStorage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBackendStorageAsync(array $args = [])
|
||||
* @method \Aws\Result getToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTokenAsync(array $args = [])
|
||||
* @method \Aws\Result getChallengeToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getChallengeTokenAsync(array $args = [])
|
||||
* @method \Aws\Result importBackendAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importBackendAuthAsync(array $args = [])
|
||||
* @method \Aws\Result importBackendStorage(array $args = [])
|
||||
|
|
|
|||
|
|
@ -64,10 +64,21 @@ class NonSeekableStreamDecodingEventStreamIterator extends DecodingEventStreamIt
|
|||
while (!empty($this->tempBuffer) && $num > 0) {
|
||||
$byte = array_shift($this->tempBuffer);
|
||||
$bytes .= $byte;
|
||||
$num = $num - 1;
|
||||
$num -= 1;
|
||||
}
|
||||
|
||||
// Loop until we've read the expected number of bytes
|
||||
while ($num > 0 && !$this->stream->eof()) {
|
||||
$chunk = $this->stream->read($num);
|
||||
$chunkLen = strlen($chunk);
|
||||
$bytes .= $chunk;
|
||||
$num -= $chunkLen;
|
||||
|
||||
if ($chunkLen === 0) {
|
||||
break; // Prevent infinite loop on unexpected EOF
|
||||
}
|
||||
}
|
||||
|
||||
$bytes = $bytes . $this->stream->read($num);
|
||||
hash_update($this->hashContext, $bytes);
|
||||
|
||||
return $bytes;
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ abstract class RestSerializer
|
|||
// This path skips setting the content-type header usually done in
|
||||
// RestJsonSerializer and RestXmlSerializer.certain S3 and glacier
|
||||
// operations determine content type in Middleware::ContentType()
|
||||
if (!isset(self::$excludeContentType[$this->api->getServiceName()])) {
|
||||
if (!isset(self::$excludeContentType[$this->api->getServiceName() ?? ''])) {
|
||||
switch ($type) {
|
||||
case 'string':
|
||||
$opts['headers']['Content-Type'] = 'text/plain';
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class RestXmlSerializer extends RestSerializer
|
|||
*/
|
||||
private function getXmlBody(StructureShape $member, array $value)
|
||||
{
|
||||
$xmlBody = (string)$this->xmlBody->build($member, $value);
|
||||
$xmlBody = $this->xmlBody->build($member, $value);
|
||||
$xmlBody = str_replace("'", "'", $xmlBody);
|
||||
$xmlBody = str_replace('\r', " ", $xmlBody);
|
||||
$xmlBody = str_replace('\n', " ", $xmlBody);
|
||||
|
|
|
|||
|
|
@ -99,10 +99,8 @@ class XmlBody
|
|||
// Default to member name
|
||||
$elementName = $k;
|
||||
|
||||
// Only use locationName for non-structure members
|
||||
if (!($definition['member'] instanceof StructureShape)
|
||||
&& $definition['member']['locationName']
|
||||
) {
|
||||
if ($definition['member']['locationName']
|
||||
&& !isset($definition['member']['locationNameAtStructureLevel'])) {
|
||||
$elementName = $definition['member']['locationName'];
|
||||
}
|
||||
|
||||
|
|
|
|||
9
vendor/aws/aws-sdk-php/src/Api/ShapeMap.php
vendored
9
vendor/aws/aws-sdk-php/src/Api/ShapeMap.php
vendored
|
|
@ -51,7 +51,14 @@ class ShapeMap implements \ArrayAccess
|
|||
return $this->simple[$shape];
|
||||
}
|
||||
|
||||
$definition = $shapeRef + $this->definitions[$shape];
|
||||
$shapeDefinition = $this->definitions[$shape];
|
||||
$definition = $shapeRef + $shapeDefinition;
|
||||
// Property to know whether the locationName was set at member level
|
||||
// or the structure level.
|
||||
if (isset($shapeDefinition['locationName'])) {
|
||||
$definition['locationNameAtStructureLevel'] = true;
|
||||
}
|
||||
|
||||
$definition['name'] = $definition['shape'];
|
||||
if (isset($definition['shape'])) {
|
||||
unset($definition['shape']);
|
||||
|
|
|
|||
7
vendor/aws/aws-sdk-php/src/Api/Validator.php
vendored
7
vendor/aws/aws-sdk-php/src/Api/Validator.php
vendored
|
|
@ -2,6 +2,7 @@
|
|||
namespace Aws\Api;
|
||||
|
||||
use Aws;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
* Validates a schema against a hash of input.
|
||||
|
|
@ -292,6 +293,12 @@ class Validator
|
|||
|
||||
private function checkDocumentType($value)
|
||||
{
|
||||
// To allow objects like value, which
|
||||
// can be used within a member which type is `Document`
|
||||
if ($value instanceof stdClass) {
|
||||
$value = (array) $value;
|
||||
}
|
||||
|
||||
if (is_array($value)) {
|
||||
$typeOfFirstKey = gettype(key($value));
|
||||
foreach ($value as $key => $val) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result createModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createModelAsync(array $args = [])
|
||||
* @method \Aws\Result createPortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPortalAsync(array $args = [])
|
||||
* @method \Aws\Result createPortalProduct(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPortalProductAsync(array $args = [])
|
||||
* @method \Aws\Result createProductPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createProductPageAsync(array $args = [])
|
||||
* @method \Aws\Result createProductRestEndpointPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createProductRestEndpointPageAsync(array $args = [])
|
||||
* @method \Aws\Result createRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRouteAsync(array $args = [])
|
||||
* @method \Aws\Result createRouteResponse(array $args = [])
|
||||
|
|
@ -51,6 +59,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteModelAsync(array $args = [])
|
||||
* @method \Aws\Result deletePortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePortalAsync(array $args = [])
|
||||
* @method \Aws\Result deletePortalProduct(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePortalProductAsync(array $args = [])
|
||||
* @method \Aws\Result deletePortalProductSharingPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePortalProductSharingPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteProductPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteProductPageAsync(array $args = [])
|
||||
* @method \Aws\Result deleteProductRestEndpointPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteProductRestEndpointPageAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRouteAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRouteRequestParameter(array $args = [])
|
||||
|
|
@ -67,6 +85,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteVpcLinkAsync(array $args = [])
|
||||
* @method \Aws\Result exportApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportApiAsync(array $args = [])
|
||||
* @method \Aws\Result disablePortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disablePortalAsync(array $args = [])
|
||||
* @method \Aws\Result resetAuthorizersCache(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise resetAuthorizersCacheAsync(array $args = [])
|
||||
* @method \Aws\Result getApiResource(array $args = [])
|
||||
|
|
@ -103,6 +123,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getModelTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result getModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getModelsAsync(array $args = [])
|
||||
* @method \Aws\Result getPortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPortalAsync(array $args = [])
|
||||
* @method \Aws\Result getPortalProduct(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPortalProductAsync(array $args = [])
|
||||
* @method \Aws\Result getPortalProductSharingPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPortalProductSharingPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getProductPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProductPageAsync(array $args = [])
|
||||
* @method \Aws\Result getProductRestEndpointPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProductRestEndpointPageAsync(array $args = [])
|
||||
* @method \Aws\Result getRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRouteAsync(array $args = [])
|
||||
* @method \Aws\Result getRouteResponse(array $args = [])
|
||||
|
|
@ -113,8 +143,6 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getRoutesAsync(array $args = [])
|
||||
* @method \Aws\Result getRoutingRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRoutingRuleAsync(array $args = [])
|
||||
* @method \Aws\Result listRoutingRules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRoutingRulesAsync(array $args = [])
|
||||
* @method \Aws\Result getStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getStageAsync(array $args = [])
|
||||
* @method \Aws\Result getStages(array $args = [])
|
||||
|
|
@ -127,6 +155,22 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getVpcLinksAsync(array $args = [])
|
||||
* @method \Aws\Result importApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importApiAsync(array $args = [])
|
||||
* @method \Aws\Result listPortalProducts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPortalProductsAsync(array $args = [])
|
||||
* @method \Aws\Result listPortals(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPortalsAsync(array $args = [])
|
||||
* @method \Aws\Result listProductPages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProductPagesAsync(array $args = [])
|
||||
* @method \Aws\Result listProductRestEndpointPages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProductRestEndpointPagesAsync(array $args = [])
|
||||
* @method \Aws\Result listRoutingRules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRoutingRulesAsync(array $args = [])
|
||||
* @method \Aws\Result previewPortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise previewPortalAsync(array $args = [])
|
||||
* @method \Aws\Result publishPortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise publishPortalAsync(array $args = [])
|
||||
* @method \Aws\Result putPortalProductSharingPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putPortalProductSharingPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result putRoutingRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putRoutingRuleAsync(array $args = [])
|
||||
* @method \Aws\Result reimportApi(array $args = [])
|
||||
|
|
@ -151,6 +195,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateIntegrationResponseAsync(array $args = [])
|
||||
* @method \Aws\Result updateModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateModelAsync(array $args = [])
|
||||
* @method \Aws\Result updatePortal(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePortalAsync(array $args = [])
|
||||
* @method \Aws\Result updatePortalProduct(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePortalProductAsync(array $args = [])
|
||||
* @method \Aws\Result updateProductPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateProductPageAsync(array $args = [])
|
||||
* @method \Aws\Result updateProductRestEndpointPage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateProductRestEndpointPageAsync(array $args = [])
|
||||
* @method \Aws\Result updateRoute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRouteAsync(array $args = [])
|
||||
* @method \Aws\Result updateRouteResponse(array $args = [])
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise evaluateMappingTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result flushApiCache(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise flushApiCacheAsync(array $args = [])
|
||||
* @method \Aws\Result getApi(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiAsync(array $args = [])
|
||||
* @method \Aws\Result getApiResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiResourceAsync(array $args = [])
|
||||
* @method \Aws\Result getApiAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getApiAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result getApiCache(array $args = [])
|
||||
|
|
|
|||
|
|
@ -1,57 +0,0 @@
|
|||
<?php
|
||||
namespace Aws\AppTest;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Mainframe Modernization Application Testing** service.
|
||||
* @method \Aws\Result createTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result createTestConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTestConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result createTestSuite(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTestSuiteAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTestConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTestConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTestRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTestRunAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTestSuite(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTestSuiteAsync(array $args = [])
|
||||
* @method \Aws\Result getTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result getTestConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTestConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getTestRunStep(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTestRunStepAsync(array $args = [])
|
||||
* @method \Aws\Result getTestSuite(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTestSuiteAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listTestCases(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestCasesAsync(array $args = [])
|
||||
* @method \Aws\Result listTestConfigurations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestConfigurationsAsync(array $args = [])
|
||||
* @method \Aws\Result listTestRunSteps(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestRunStepsAsync(array $args = [])
|
||||
* @method \Aws\Result listTestRunTestCases(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestRunTestCasesAsync(array $args = [])
|
||||
* @method \Aws\Result listTestRuns(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestRunsAsync(array $args = [])
|
||||
* @method \Aws\Result listTestSuites(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestSuitesAsync(array $args = [])
|
||||
* @method \Aws\Result startTestRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startTestRunAsync(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 updateTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result updateTestConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTestConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result updateTestSuite(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTestSuiteAsync(array $args = [])
|
||||
*/
|
||||
class AppTestClient extends AwsClient {}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<?php
|
||||
namespace Aws\AppTest\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS Mainframe Modernization Application Testing** service.
|
||||
*/
|
||||
class AppTestException extends AwsException {}
|
||||
|
|
@ -11,12 +11,20 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise batchUpdateExclusionWindowsAsync(array $args = [])
|
||||
* @method \Aws\Result createServiceLevelObjective(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createServiceLevelObjectiveAsync(array $args = [])
|
||||
* @method \Aws\Result deleteGroupingConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteGroupingConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteServiceLevelObjective(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteServiceLevelObjectiveAsync(array $args = [])
|
||||
* @method \Aws\Result getService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getServiceAsync(array $args = [])
|
||||
* @method \Aws\Result getServiceLevelObjective(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getServiceLevelObjectiveAsync(array $args = [])
|
||||
* @method \Aws\Result listAuditFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAuditFindingsAsync(array $args = [])
|
||||
* @method \Aws\Result listEntityEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEntityEventsAsync(array $args = [])
|
||||
* @method \Aws\Result listGroupingAttributeDefinitions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listGroupingAttributeDefinitionsAsync(array $args = [])
|
||||
* @method \Aws\Result listServiceDependencies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listServiceDependenciesAsync(array $args = [])
|
||||
* @method \Aws\Result listServiceDependents(array $args = [])
|
||||
|
|
@ -27,10 +35,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listServiceLevelObjectivesAsync(array $args = [])
|
||||
* @method \Aws\Result listServiceOperations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listServiceOperationsAsync(array $args = [])
|
||||
* @method \Aws\Result listServiceStates(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listServiceStatesAsync(array $args = [])
|
||||
* @method \Aws\Result listServices(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listServicesAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result putGroupingConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putGroupingConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result startDiscovery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startDiscoveryAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise associateApplicationToEntitlementAsync(array $args = [])
|
||||
* @method \Aws\Result associateFleet(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateFleetAsync(array $args = [])
|
||||
* @method \Aws\Result associateSoftwareToImageBuilder(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSoftwareToImageBuilderAsync(array $args = [])
|
||||
* @method \Aws\Result batchAssociateUserStack(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchAssociateUserStackAsync(array $args = [])
|
||||
* @method \Aws\Result batchDisassociateUserStack(array $args = [])
|
||||
|
|
@ -31,12 +33,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createDirectoryConfigAsync(array $args = [])
|
||||
* @method \Aws\Result createEntitlement(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createEntitlementAsync(array $args = [])
|
||||
* @method \Aws\Result createExportImageTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createExportImageTaskAsync(array $args = [])
|
||||
* @method \Aws\Result createFleet(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createFleetAsync(array $args = [])
|
||||
* @method \Aws\Result createImageBuilder(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createImageBuilderAsync(array $args = [])
|
||||
* @method \Aws\Result createImageBuilderStreamingURL(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createImageBuilderStreamingURLAsync(array $args = [])
|
||||
* @method \Aws\Result createImportedImage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createImportedImageAsync(array $args = [])
|
||||
* @method \Aws\Result createStack(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createStackAsync(array $args = [])
|
||||
* @method \Aws\Result createStreamingURL(array $args = [])
|
||||
|
|
@ -81,6 +87,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeAppBlockBuildersAsync(array $args = [])
|
||||
* @method \Aws\Result describeAppBlocks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeAppBlocksAsync(array $args = [])
|
||||
* @method \Aws\Result describeAppLicenseUsage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeAppLicenseUsageAsync(array $args = [])
|
||||
* @method \Aws\Result describeApplicationFleetAssociations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeApplicationFleetAssociationsAsync(array $args = [])
|
||||
* @method \Aws\Result describeApplications(array $args = [])
|
||||
|
|
@ -99,6 +107,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = [])
|
||||
* @method \Aws\Result describeSessions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeSessionsAsync(array $args = [])
|
||||
* @method \Aws\Result describeSoftwareAssociations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeSoftwareAssociationsAsync(array $args = [])
|
||||
* @method \Aws\Result describeStacks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeStacksAsync(array $args = [])
|
||||
* @method \Aws\Result describeThemeForStack(array $args = [])
|
||||
|
|
@ -119,16 +129,22 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise disassociateApplicationFromEntitlementAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateFleet(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateFleetAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSoftwareFromImageBuilder(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSoftwareFromImageBuilderAsync(array $args = [])
|
||||
* @method \Aws\Result enableUser(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise enableUserAsync(array $args = [])
|
||||
* @method \Aws\Result expireSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise expireSessionAsync(array $args = [])
|
||||
* @method \Aws\Result getExportImageTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getExportImageTaskAsync(array $args = [])
|
||||
* @method \Aws\Result listAssociatedFleets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAssociatedFleetsAsync(array $args = [])
|
||||
* @method \Aws\Result listAssociatedStacks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAssociatedStacksAsync(array $args = [])
|
||||
* @method \Aws\Result listEntitledApplications(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEntitledApplicationsAsync(array $args = [])
|
||||
* @method \Aws\Result listExportImageTasks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listExportImageTasksAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result startAppBlockBuilder(array $args = [])
|
||||
|
|
@ -137,6 +153,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startFleetAsync(array $args = [])
|
||||
* @method \Aws\Result startImageBuilder(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startImageBuilderAsync(array $args = [])
|
||||
* @method \Aws\Result startSoftwareDeploymentToImageBuilder(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startSoftwareDeploymentToImageBuilderAsync(array $args = [])
|
||||
* @method \Aws\Result stopAppBlockBuilder(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopAppBlockBuilderAsync(array $args = [])
|
||||
* @method \Aws\Result stopFleet(array $args = [])
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getTermForReportAsync(array $args = [])
|
||||
* @method \Aws\Result listCustomerAgreements(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCustomerAgreementsAsync(array $args = [])
|
||||
* @method \Aws\Result listReportVersions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listReportVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result listReports(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listReportsAsync(array $args = [])
|
||||
* @method \Aws\Result putAccountSettings(array $args = [])
|
||||
|
|
|
|||
|
|
@ -67,8 +67,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getQueryResultsAsync(array $args = [])
|
||||
* @method \Aws\Result getQueryRuntimeStatistics(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getQueryRuntimeStatisticsAsync(array $args = [])
|
||||
* @method \Aws\Result getResourceDashboard(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getResourceDashboardAsync(array $args = [])
|
||||
* @method \Aws\Result getSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSessionAsync(array $args = [])
|
||||
* @method \Aws\Result getSessionEndpoint(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSessionEndpointAsync(array $args = [])
|
||||
* @method \Aws\Result getSessionStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSessionStatusAsync(array $args = [])
|
||||
* @method \Aws\Result getTableMetadata(array $args = [])
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ namespace Aws\AutoScaling;
|
|||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* Auto Scaling client.
|
||||
* This client is used to interact with the **AWS Auto Scaling** service.
|
||||
*
|
||||
* @method \Aws\Result attachInstances(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise attachInstancesAsync(array $args = [])
|
||||
|
|
@ -106,6 +106,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise exitStandbyAsync(array $args = [])
|
||||
* @method \Aws\Result getPredictiveScalingForecast(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPredictiveScalingForecastAsync(array $args = [])
|
||||
* @method \Aws\Result launchInstances(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise launchInstancesAsync(array $args = [])
|
||||
* @method \Aws\Result putLifecycleHook(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putLifecycleHookAsync(array $args = [])
|
||||
* @method \Aws\Result putNotificationConfiguration(array $args = [])
|
||||
|
|
|
|||
10
vendor/aws/aws-sdk-php/src/AwsClient.php
vendored
10
vendor/aws/aws-sdk-php/src/AwsClient.php
vendored
|
|
@ -568,8 +568,14 @@ class AwsClient implements AwsClientInterface
|
|||
$aliases = \Aws\load_compiled_json($file);
|
||||
$serviceId = $this->api->getServiceId();
|
||||
$version = $this->getApi()->getApiVersion();
|
||||
if (!empty($aliases['operations'][$serviceId][$version])) {
|
||||
$this->aliases = array_flip($aliases['operations'][$serviceId][$version]);
|
||||
$serviceAliases = null;
|
||||
|
||||
if (!is_null($serviceId) && isset($aliases['operations'][$serviceId])) {
|
||||
$serviceAliases = $aliases['operations'][$serviceId];
|
||||
}
|
||||
|
||||
if ($serviceAliases && isset($serviceAliases[$version])) {
|
||||
$this->aliases = array_flip($serviceAliases[$version]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createRestoreTestingPlanAsync(array $args = [])
|
||||
* @method \Aws\Result createRestoreTestingSelection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRestoreTestingSelectionAsync(array $args = [])
|
||||
* @method \Aws\Result createTieringConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTieringConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackupPlan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBackupPlanAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBackupSelection(array $args = [])
|
||||
|
|
@ -51,6 +53,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteRestoreTestingPlanAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRestoreTestingSelection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRestoreTestingSelectionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTieringConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTieringConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result describeBackupJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeBackupJobAsync(array $args = [])
|
||||
* @method \Aws\Result describeBackupVault(array $args = [])
|
||||
|
|
@ -73,6 +77,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeReportPlanAsync(array $args = [])
|
||||
* @method \Aws\Result describeRestoreJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeRestoreJobAsync(array $args = [])
|
||||
* @method \Aws\Result describeScanJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeScanJobAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateBackupVaultMpaApprovalTeam(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateBackupVaultMpaApprovalTeamAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateRecoveryPoint(array $args = [])
|
||||
|
|
@ -109,6 +115,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getRestoreTestingSelectionAsync(array $args = [])
|
||||
* @method \Aws\Result getSupportedResourceTypes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSupportedResourceTypesAsync(array $args = [])
|
||||
* @method \Aws\Result getTieringConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTieringConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result listBackupJobSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBackupJobSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listBackupJobs(array $args = [])
|
||||
|
|
@ -159,8 +167,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listRestoreTestingPlansAsync(array $args = [])
|
||||
* @method \Aws\Result listRestoreTestingSelections(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRestoreTestingSelectionsAsync(array $args = [])
|
||||
* @method \Aws\Result listScanJobSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listScanJobSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listScanJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listScanJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listTags(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsAsync(array $args = [])
|
||||
* @method \Aws\Result listTieringConfigurations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTieringConfigurationsAsync(array $args = [])
|
||||
* @method \Aws\Result putBackupVaultAccessPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putBackupVaultAccessPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result putBackupVaultLockConfiguration(array $args = [])
|
||||
|
|
@ -179,6 +193,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startReportJobAsync(array $args = [])
|
||||
* @method \Aws\Result startRestoreJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startRestoreJobAsync(array $args = [])
|
||||
* @method \Aws\Result startScanJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startScanJobAsync(array $args = [])
|
||||
* @method \Aws\Result stopBackupJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopBackupJobAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
|
|
@ -203,5 +219,7 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateRestoreTestingPlanAsync(array $args = [])
|
||||
* @method \Aws\Result updateRestoreTestingSelection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRestoreTestingSelectionAsync(array $args = [])
|
||||
* @method \Aws\Result updateTieringConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTieringConfigurationAsync(array $args = [])
|
||||
*/
|
||||
class BackupClient extends AwsClient {}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteCustomModelAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCustomModelDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCustomModelDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEnforcedGuardrailConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteEnforcedGuardrailConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteFoundationModelAgreement(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteFoundationModelAgreementAsync(array $args = [])
|
||||
* @method \Aws\Result deleteGuardrail(array $args = [])
|
||||
|
|
@ -133,6 +135,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listCustomModelDeploymentsAsync(array $args = [])
|
||||
* @method \Aws\Result listCustomModels(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCustomModelsAsync(array $args = [])
|
||||
* @method \Aws\Result listEnforcedGuardrailsConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEnforcedGuardrailsConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result listEvaluationJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEvaluationJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listFoundationModelAgreementOffers(array $args = [])
|
||||
|
|
@ -161,6 +165,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listProvisionedModelThroughputsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result putEnforcedGuardrailConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putEnforcedGuardrailConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result putModelInvocationLoggingConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putModelInvocationLoggingConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result putUseCaseForModelAccess(array $args = [])
|
||||
|
|
@ -187,6 +193,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateAutomatedReasoningPolicyAnnotationsAsync(array $args = [])
|
||||
* @method \Aws\Result updateAutomatedReasoningPolicyTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAutomatedReasoningPolicyTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result updateCustomModelDeployment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCustomModelDeploymentAsync(array $args = [])
|
||||
* @method \Aws\Result updateGuardrail(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateGuardrailAsync(array $args = [])
|
||||
* @method \Aws\Result updateMarketplaceModelEndpoint(array $args = [])
|
||||
|
|
|
|||
|
|
@ -5,12 +5,24 @@ use Aws\AwsClient;
|
|||
|
||||
/**
|
||||
* This client is used to interact with the **Amazon Bedrock AgentCore Data Plane Fronting Layer** service.
|
||||
* @method \Aws\Result batchCreateMemoryRecords(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchCreateMemoryRecordsAsync(array $args = [])
|
||||
* @method \Aws\Result batchDeleteMemoryRecords(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchDeleteMemoryRecordsAsync(array $args = [])
|
||||
* @method \Aws\Result batchUpdateMemoryRecords(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchUpdateMemoryRecordsAsync(array $args = [])
|
||||
* @method \Aws\Result completeResourceTokenAuth(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise completeResourceTokenAuthAsync(array $args = [])
|
||||
* @method \Aws\Result createEvent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createEventAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEvent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteEventAsync(array $args = [])
|
||||
* @method \Aws\Result deleteMemoryRecord(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteMemoryRecordAsync(array $args = [])
|
||||
* @method \Aws\Result evaluate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise evaluateAsync(array $args = [])
|
||||
* @method \Aws\Result getAgentCard(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAgentCardAsync(array $args = [])
|
||||
* @method \Aws\Result getBrowserSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBrowserSessionAsync(array $args = [])
|
||||
* @method \Aws\Result getCodeInterpreterSession(array $args = [])
|
||||
|
|
@ -41,6 +53,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listCodeInterpreterSessionsAsync(array $args = [])
|
||||
* @method \Aws\Result listEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEventsAsync(array $args = [])
|
||||
* @method \Aws\Result listMemoryExtractionJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMemoryExtractionJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listMemoryRecords(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMemoryRecordsAsync(array $args = [])
|
||||
* @method \Aws\Result listSessions(array $args = [])
|
||||
|
|
@ -51,10 +65,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startBrowserSessionAsync(array $args = [])
|
||||
* @method \Aws\Result startCodeInterpreterSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startCodeInterpreterSessionAsync(array $args = [])
|
||||
* @method \Aws\Result startMemoryExtractionJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMemoryExtractionJobAsync(array $args = [])
|
||||
* @method \Aws\Result stopBrowserSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopBrowserSessionAsync(array $args = [])
|
||||
* @method \Aws\Result stopCodeInterpreterSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopCodeInterpreterSessionAsync(array $args = [])
|
||||
* @method \Aws\Result stopRuntimeSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopRuntimeSessionAsync(array $args = [])
|
||||
* @method \Aws\Result updateBrowserStream(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateBrowserStreamAsync(array $args = [])
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createBrowserAsync(array $args = [])
|
||||
* @method \Aws\Result createCodeInterpreter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createCodeInterpreterAsync(array $args = [])
|
||||
* @method \Aws\Result createEvaluator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createEvaluatorAsync(array $args = [])
|
||||
* @method \Aws\Result createGateway(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createGatewayAsync(array $args = [])
|
||||
* @method \Aws\Result createGatewayTarget(array $args = [])
|
||||
|
|
@ -23,6 +25,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createMemoryAsync(array $args = [])
|
||||
* @method \Aws\Result createOauth2CredentialProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createOauth2CredentialProviderAsync(array $args = [])
|
||||
* @method \Aws\Result createOnlineEvaluationConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createOnlineEvaluationConfigAsync(array $args = [])
|
||||
* @method \Aws\Result createPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result createPolicyEngine(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPolicyEngineAsync(array $args = [])
|
||||
* @method \Aws\Result createWorkloadIdentity(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createWorkloadIdentityAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAgentRuntime(array $args = [])
|
||||
|
|
@ -35,6 +43,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteBrowserAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCodeInterpreter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCodeInterpreterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEvaluator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteEvaluatorAsync(array $args = [])
|
||||
* @method \Aws\Result deleteGateway(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteGatewayAsync(array $args = [])
|
||||
* @method \Aws\Result deleteGatewayTarget(array $args = [])
|
||||
|
|
@ -43,6 +53,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteMemoryAsync(array $args = [])
|
||||
* @method \Aws\Result deleteOauth2CredentialProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteOauth2CredentialProviderAsync(array $args = [])
|
||||
* @method \Aws\Result deleteOnlineEvaluationConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteOnlineEvaluationConfigAsync(array $args = [])
|
||||
* @method \Aws\Result deletePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deletePolicyEngine(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePolicyEngineAsync(array $args = [])
|
||||
* @method \Aws\Result deleteResourcePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWorkloadIdentity(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteWorkloadIdentityAsync(array $args = [])
|
||||
* @method \Aws\Result getAgentRuntime(array $args = [])
|
||||
|
|
@ -55,6 +73,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getBrowserAsync(array $args = [])
|
||||
* @method \Aws\Result getCodeInterpreter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCodeInterpreterAsync(array $args = [])
|
||||
* @method \Aws\Result getEvaluator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getEvaluatorAsync(array $args = [])
|
||||
* @method \Aws\Result getGateway(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGatewayAsync(array $args = [])
|
||||
* @method \Aws\Result getGatewayTarget(array $args = [])
|
||||
|
|
@ -63,6 +83,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getMemoryAsync(array $args = [])
|
||||
* @method \Aws\Result getOauth2CredentialProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getOauth2CredentialProviderAsync(array $args = [])
|
||||
* @method \Aws\Result getOnlineEvaluationConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getOnlineEvaluationConfigAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicyEngine(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPolicyEngineAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicyGeneration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPolicyGenerationAsync(array $args = [])
|
||||
* @method \Aws\Result getResourcePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getResourcePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getTokenVault(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTokenVaultAsync(array $args = [])
|
||||
* @method \Aws\Result getWorkloadIdentity(array $args = [])
|
||||
|
|
@ -79,6 +109,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listBrowsersAsync(array $args = [])
|
||||
* @method \Aws\Result listCodeInterpreters(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCodeInterpretersAsync(array $args = [])
|
||||
* @method \Aws\Result listEvaluators(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEvaluatorsAsync(array $args = [])
|
||||
* @method \Aws\Result listGatewayTargets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listGatewayTargetsAsync(array $args = [])
|
||||
* @method \Aws\Result listGateways(array $args = [])
|
||||
|
|
@ -87,12 +119,28 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listMemoriesAsync(array $args = [])
|
||||
* @method \Aws\Result listOauth2CredentialProviders(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listOauth2CredentialProvidersAsync(array $args = [])
|
||||
* @method \Aws\Result listOnlineEvaluationConfigs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listOnlineEvaluationConfigsAsync(array $args = [])
|
||||
* @method \Aws\Result listPolicies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPoliciesAsync(array $args = [])
|
||||
* @method \Aws\Result listPolicyEngines(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPolicyEnginesAsync(array $args = [])
|
||||
* @method \Aws\Result listPolicyGenerationAssets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPolicyGenerationAssetsAsync(array $args = [])
|
||||
* @method \Aws\Result listPolicyGenerations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPolicyGenerationsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listWorkloadIdentities(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listWorkloadIdentitiesAsync(array $args = [])
|
||||
* @method \Aws\Result putResourcePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putResourcePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result setTokenVaultCMK(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise setTokenVaultCMKAsync(array $args = [])
|
||||
* @method \Aws\Result startPolicyGeneration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startPolicyGenerationAsync(array $args = [])
|
||||
* @method \Aws\Result synchronizeGatewayTargets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise synchronizeGatewayTargetsAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
|
|
@ -103,6 +151,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateAgentRuntimeEndpointAsync(array $args = [])
|
||||
* @method \Aws\Result updateApiKeyCredentialProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateApiKeyCredentialProviderAsync(array $args = [])
|
||||
* @method \Aws\Result updateEvaluator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateEvaluatorAsync(array $args = [])
|
||||
* @method \Aws\Result updateGateway(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateGatewayAsync(array $args = [])
|
||||
* @method \Aws\Result updateGatewayTarget(array $args = [])
|
||||
|
|
@ -111,6 +161,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateMemoryAsync(array $args = [])
|
||||
* @method \Aws\Result updateOauth2CredentialProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateOauth2CredentialProviderAsync(array $args = [])
|
||||
* @method \Aws\Result updateOnlineEvaluationConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateOnlineEvaluationConfigAsync(array $args = [])
|
||||
* @method \Aws\Result updatePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result updatePolicyEngine(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePolicyEngineAsync(array $args = [])
|
||||
* @method \Aws\Result updateWorkloadIdentity(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWorkloadIdentityAsync(array $args = [])
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ use Aws\AwsClient;
|
|||
|
||||
/**
|
||||
* This client is used to interact with the **Data Automation for Amazon Bedrock** service.
|
||||
* @method \Aws\Result copyBlueprintStage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise copyBlueprintStageAsync(array $args = [])
|
||||
* @method \Aws\Result createBlueprint(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBlueprintAsync(array $args = [])
|
||||
* @method \Aws\Result createBlueprintVersion(array $args = [])
|
||||
|
|
@ -17,8 +19,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteDataAutomationProjectAsync(array $args = [])
|
||||
* @method \Aws\Result getBlueprint(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBlueprintAsync(array $args = [])
|
||||
* @method \Aws\Result getBlueprintOptimizationStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBlueprintOptimizationStatusAsync(array $args = [])
|
||||
* @method \Aws\Result getDataAutomationProject(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDataAutomationProjectAsync(array $args = [])
|
||||
* @method \Aws\Result invokeBlueprintOptimizationAsync(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise invokeBlueprintOptimizationAsyncAsync(array $args = [])
|
||||
* @method \Aws\Result listBlueprints(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBlueprintsAsync(array $args = [])
|
||||
* @method \Aws\Result listDataAutomationProjects(array $args = [])
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ use Aws\AwsClient;
|
|||
* This client is used to interact with the **Runtime for Amazon Bedrock Data Automation** service.
|
||||
* @method \Aws\Result getDataAutomationStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDataAutomationStatusAsync(array $args = [])
|
||||
* @method \Aws\Result invokeDataAutomation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise invokeDataAutomationAsync(array $args = [])
|
||||
* @method \Aws\Result invokeDataAutomationAsync(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise invokeDataAutomationAsyncAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
|
|
|
|||
|
|
@ -5,10 +5,14 @@ use Aws\AwsClient;
|
|||
|
||||
/**
|
||||
* This client is used to interact with the **AWS Billing** service.
|
||||
* @method \Aws\Result associateSourceViews(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSourceViewsAsync(array $args = [])
|
||||
* @method \Aws\Result createBillingView(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createBillingViewAsync(array $args = [])
|
||||
* @method \Aws\Result deleteBillingView(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteBillingViewAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSourceViews(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSourceViewsAsync(array $args = [])
|
||||
* @method \Aws\Result getBillingView(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getBillingViewAsync(array $args = [])
|
||||
* @method \Aws\Result getResourcePolicy(array $args = [])
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createJobAsync(array $args = [])
|
||||
* @method \Aws\Result createQuantumTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createQuantumTaskAsync(array $args = [])
|
||||
* @method \Aws\Result createSpendingLimit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createSpendingLimitAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSpendingLimit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSpendingLimitAsync(array $args = [])
|
||||
* @method \Aws\Result getDevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeviceAsync(array $args = [])
|
||||
* @method \Aws\Result getJob(array $args = [])
|
||||
|
|
@ -27,9 +31,13 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise searchJobsAsync(array $args = [])
|
||||
* @method \Aws\Result searchQuantumTasks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchQuantumTasksAsync(array $args = [])
|
||||
* @method \Aws\Result searchSpendingLimits(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchSpendingLimitsAsync(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 updateSpendingLimit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateSpendingLimitAsync(array $args = [])
|
||||
*/
|
||||
class BraketClient extends AwsClient {}
|
||||
|
|
|
|||
|
|
@ -157,6 +157,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateAnalysisTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result updateCollaboration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCollaborationAsync(array $args = [])
|
||||
* @method \Aws\Result updateCollaborationChangeRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCollaborationChangeRequestAsync(array $args = [])
|
||||
* @method \Aws\Result updateConfiguredAudienceModelAssociation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateConfiguredAudienceModelAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result updateConfiguredTable(array $args = [])
|
||||
|
|
|
|||
|
|
@ -61,6 +61,8 @@ class ClientResolver
|
|||
__CLASS__,
|
||||
'_resolve_from_env_ini'
|
||||
];
|
||||
private const ANONYMOUS_SIGNATURE = 'anonymous';
|
||||
private const DPOP_SIGNATURE = 'dpop';
|
||||
|
||||
/** @var array Map of types to a corresponding function */
|
||||
private static $typeMap = [
|
||||
|
|
@ -668,7 +670,10 @@ class ClientResolver
|
|||
$args['credentials'] = CredentialProvider::fromCredentials(
|
||||
new Credentials('', '')
|
||||
);
|
||||
$args['config']['signature_version'] = 'anonymous';
|
||||
if ($args['config']['signature_version'] !== self::DPOP_SIGNATURE) {
|
||||
$args['config']['signature_version'] = self::ANONYMOUS_SIGNATURE;
|
||||
}
|
||||
|
||||
$args['config']['configured_signature_version'] = true;
|
||||
} elseif ($value instanceof CacheInterface) {
|
||||
$args['credentials'] = CredentialProvider::defaultProvider($args);
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeChangeSetAsync(array $args = [])
|
||||
* @method \Aws\Result describeChangeSetHooks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeChangeSetHooksAsync(array $args = [])
|
||||
* @method \Aws\Result describeEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeEventsAsync(array $args = [])
|
||||
* @method \Aws\Result describeGeneratedTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeGeneratedTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result describeOrganizationsAccess(array $args = [])
|
||||
|
|
@ -96,6 +98,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise executeStackRefactorAsync(array $args = [])
|
||||
* @method \Aws\Result getGeneratedTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGeneratedTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result getHookResult(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getHookResultAsync(array $args = [])
|
||||
* @method \Aws\Result getStackPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getStackPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getTemplate(array $args = [])
|
||||
|
|
|
|||
|
|
@ -110,6 +110,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createCachePolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise createCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise createConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createConnectionGroup(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise createConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -134,12 +136,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise createResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createTrustStore(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise createTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result createVpcOrigin(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteAnycastIpList(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteCachePolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteConnectionGroup(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -160,10 +166,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteOriginRequestPolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteResourcePolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteTrustStore(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result deleteVpcOrigin(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result describeConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise describeConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result describeFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise describeFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result describeKeyValueStore(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -178,6 +190,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getCachePolicyConfig(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getCachePolicyConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getConnectionGroup(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getConnectionGroupByRoutingEndpoint(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -212,10 +226,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getOriginRequestPolicyConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getResourcePolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getResourcePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getResponseHeadersPolicyConfig(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getResponseHeadersPolicyConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getTrustStore(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result getVpcOrigin(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listAnycastIpLists(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -224,6 +242,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listCachePoliciesAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listConflictingAliases(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listConflictingAliasesAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listConnectionFunctions(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listConnectionFunctionsAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listConnectionGroups(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listConnectionGroupsAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listContinuousDeploymentPolicies(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -236,16 +256,22 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listDistributionsByAnycastIpListIdAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByCachePolicyId(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByCachePolicyIdAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByConnectionMode(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByConnectionModeAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByKeyGroup(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByKeyGroupAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByOriginRequestPolicyId(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByOriginRequestPolicyIdAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByOwnedResource(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByOwnedResourceAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByRealtimeLogConfig(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByResponseHeadersPolicyId(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByResponseHeadersPolicyIdAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByTrustStore(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDistributionsByVpcOriginId(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listDistributionsByVpcOriginIdAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listDomainConflicts(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -266,14 +292,26 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listRealtimeLogConfigsAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listResponseHeadersPolicies(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listResponseHeadersPoliciesAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listTrustStores(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listTrustStoresAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result listVpcOrigins(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise listVpcOriginsAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result publishConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise publishConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result publishFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise publishFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result putResourcePolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise putResourcePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result testConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise testConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result testFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise testFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateAnycastIpList(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateAnycastIpListAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateCachePolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateCachePolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateConnectionFunction(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateConnectionFunctionAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateConnectionGroup(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateConnectionGroupAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateContinuousDeploymentPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
@ -298,6 +336,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateRealtimeLogConfigAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateResponseHeadersPolicy(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateResponseHeadersPolicyAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateTrustStore(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateTrustStoreAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result updateVpcOrigin(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \GuzzleHttp\Promise\Promise updateVpcOriginAsync(array $args = []) (supported in versions 2020-05-31)
|
||||
* @method \Aws\Result verifyDnsConfiguration(array $args = []) (supported in versions 2020-05-31)
|
||||
|
|
|
|||
|
|
@ -72,6 +72,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listImportFailuresAsync(array $args = [])
|
||||
* @method \Aws\Result listImports(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listImportsAsync(array $args = [])
|
||||
* @method \Aws\Result listInsightsData(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listInsightsDataAsync(array $args = [])
|
||||
* @method \Aws\Result listInsightsMetricData(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listInsightsMetricDataAsync(array $args = [])
|
||||
* @method \Aws\Result listPublicKeys(array $args = [])
|
||||
|
|
|
|||
|
|
@ -10,18 +10,26 @@ use Generator;
|
|||
*
|
||||
* @method \Aws\Result associateKmsKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateKmsKeyAsync(array $args = [])
|
||||
* @method \Aws\Result associateSourceToS3TableIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSourceToS3TableIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result cancelExportTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelExportTaskAsync(array $args = [])
|
||||
* @method \Aws\Result cancelImportTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelImportTaskAsync(array $args = [])
|
||||
* @method \Aws\Result createDelivery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDeliveryAsync(array $args = [])
|
||||
* @method \Aws\Result createExportTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createExportTaskAsync(array $args = [])
|
||||
* @method \Aws\Result createImportTask(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createImportTaskAsync(array $args = [])
|
||||
* @method \Aws\Result createLogAnomalyDetector(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createLogAnomalyDetectorAsync(array $args = [])
|
||||
* @method \Aws\Result createLogGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createLogGroupAsync(array $args = [])
|
||||
* @method \Aws\Result createLogStream(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createLogStreamAsync(array $args = [])
|
||||
* @method \Aws\Result createScheduledQuery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createScheduledQueryAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAccountPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAccountPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDataProtectionPolicy(array $args = [])
|
||||
|
|
@ -54,6 +62,8 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteResourcePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRetentionPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRetentionPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteScheduledQuery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteScheduledQueryAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSubscriptionFilter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSubscriptionFilterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTransformer(array $args = [])
|
||||
|
|
@ -74,6 +84,10 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise describeExportTasksAsync(array $args = [])
|
||||
* @method \Aws\Result describeFieldIndexes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeFieldIndexesAsync(array $args = [])
|
||||
* @method \Aws\Result describeImportTaskBatches(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeImportTaskBatchesAsync(array $args = [])
|
||||
* @method \Aws\Result describeImportTasks(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeImportTasksAsync(array $args = [])
|
||||
* @method \Aws\Result describeIndexPolicies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeIndexPoliciesAsync(array $args = [])
|
||||
* @method \Aws\Result describeLogGroups(array $args = [])
|
||||
|
|
@ -92,6 +106,8 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise describeSubscriptionFiltersAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateKmsKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateKmsKeyAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSourceFromS3TableIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSourceFromS3TableIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result filterLogEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise filterLogEventsAsync(array $args = [])
|
||||
* @method \Aws\Result getDataProtectionPolicy(array $args = [])
|
||||
|
|
@ -110,6 +126,8 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise getLogAnomalyDetectorAsync(array $args = [])
|
||||
* @method \Aws\Result getLogEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getLogEventsAsync(array $args = [])
|
||||
* @method \Aws\Result getLogFields(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getLogFieldsAsync(array $args = [])
|
||||
* @method \Aws\Result getLogGroupFields(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getLogGroupFieldsAsync(array $args = [])
|
||||
* @method \Aws\Result getLogObject(array $args = [])
|
||||
|
|
@ -118,8 +136,14 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise getLogRecordAsync(array $args = [])
|
||||
* @method \Aws\Result getQueryResults(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getQueryResultsAsync(array $args = [])
|
||||
* @method \Aws\Result getScheduledQuery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getScheduledQueryAsync(array $args = [])
|
||||
* @method \Aws\Result getScheduledQueryHistory(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getScheduledQueryHistoryAsync(array $args = [])
|
||||
* @method \Aws\Result getTransformer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTransformerAsync(array $args = [])
|
||||
* @method \Aws\Result listAggregateLogGroupSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAggregateLogGroupSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listAnomalies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAnomaliesAsync(array $args = [])
|
||||
* @method \Aws\Result listIntegrations(array $args = [])
|
||||
|
|
@ -130,6 +154,10 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise listLogGroupsAsync(array $args = [])
|
||||
* @method \Aws\Result listLogGroupsForQuery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listLogGroupsForQueryAsync(array $args = [])
|
||||
* @method \Aws\Result listScheduledQueries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listScheduledQueriesAsync(array $args = [])
|
||||
* @method \Aws\Result listSourcesForS3TableIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSourcesForS3TableIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsLogGroup(array $args = [])
|
||||
|
|
@ -154,6 +182,8 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result putLogEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putLogEventsAsync(array $args = [])
|
||||
* @method \Aws\Result putLogGroupDeletionProtection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putLogGroupDeletionProtectionAsync(array $args = [])
|
||||
* @method \Aws\Result putMetricFilter(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putMetricFilterAsync(array $args = [])
|
||||
* @method \Aws\Result putQueryDefinition(array $args = [])
|
||||
|
|
@ -190,6 +220,8 @@ use Generator;
|
|||
* @method \GuzzleHttp\Promise\Promise updateDeliveryConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result updateLogAnomalyDetector(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateLogAnomalyDetectorAsync(array $args = [])
|
||||
* @method \Aws\Result updateScheduledQuery(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateScheduledQueryAsync(array $args = [])
|
||||
*/
|
||||
class CloudWatchLogsClient extends AwsClient {
|
||||
static $streamingCommands = [
|
||||
|
|
|
|||
55
vendor/aws/aws-sdk-php/src/ComputeOptimizerAutomation/ComputeOptimizerAutomationClient.php
vendored
Normal file
55
vendor/aws/aws-sdk-php/src/ComputeOptimizerAutomation/ComputeOptimizerAutomationClient.php
vendored
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
namespace Aws\ComputeOptimizerAutomation;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **Compute Optimizer Automation** service.
|
||||
* @method \Aws\Result associateAccounts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateAccountsAsync(array $args = [])
|
||||
* @method \Aws\Result createAutomationRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAutomationRuleAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAutomationRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAutomationRuleAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateAccounts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateAccountsAsync(array $args = [])
|
||||
* @method \Aws\Result getAutomationEvent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAutomationEventAsync(array $args = [])
|
||||
* @method \Aws\Result getAutomationRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAutomationRuleAsync(array $args = [])
|
||||
* @method \Aws\Result getEnrollmentConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getEnrollmentConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result listAccounts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAccountsAsync(array $args = [])
|
||||
* @method \Aws\Result listAutomationEventSteps(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutomationEventStepsAsync(array $args = [])
|
||||
* @method \Aws\Result listAutomationEventSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutomationEventSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listAutomationEvents(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutomationEventsAsync(array $args = [])
|
||||
* @method \Aws\Result listAutomationRulePreview(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutomationRulePreviewAsync(array $args = [])
|
||||
* @method \Aws\Result listAutomationRulePreviewSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutomationRulePreviewSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listAutomationRules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAutomationRulesAsync(array $args = [])
|
||||
* @method \Aws\Result listRecommendedActionSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRecommendedActionSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listRecommendedActions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRecommendedActionsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result rollbackAutomationEvent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise rollbackAutomationEventAsync(array $args = [])
|
||||
* @method \Aws\Result startAutomationEvent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startAutomationEventAsync(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 updateAutomationRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAutomationRuleAsync(array $args = [])
|
||||
* @method \Aws\Result updateEnrollmentConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateEnrollmentConfigurationAsync(array $args = [])
|
||||
*/
|
||||
class ComputeOptimizerAutomationClient extends AwsClient {}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
namespace Aws\ComputeOptimizerAutomation\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **Compute Optimizer Automation** service.
|
||||
*/
|
||||
class ComputeOptimizerAutomationException extends AwsException {}
|
||||
|
|
@ -238,8 +238,11 @@ class ConfigurationResolver
|
|||
"services {$data[$profile]['services']}"
|
||||
);
|
||||
|
||||
if (!isset($services_section[$options['subsection']][$options['key']])
|
||||
) {
|
||||
if (empty($options['subsection']) || empty($options['key'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!isset($services_section[$options['subsection']][$options['key']])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
144
vendor/aws/aws-sdk-php/src/Connect/ConnectClient.php
vendored
144
vendor/aws/aws-sdk-php/src/Connect/ConnectClient.php
vendored
|
|
@ -13,10 +13,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise associateApprovedOriginAsync(array $args = [])
|
||||
* @method \Aws\Result associateBot(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateBotAsync(array $args = [])
|
||||
* @method \Aws\Result associateContactWithUser(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateContactWithUserAsync(array $args = [])
|
||||
* @method \Aws\Result associateDefaultVocabulary(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateDefaultVocabularyAsync(array $args = [])
|
||||
* @method \Aws\Result associateEmailAddressAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateEmailAddressAliasAsync(array $args = [])
|
||||
* @method \Aws\Result associateFlow(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateFlowAsync(array $args = [])
|
||||
* @method \Aws\Result associateHoursOfOperations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateHoursOfOperationsAsync(array $args = [])
|
||||
* @method \Aws\Result associateInstanceStorageConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateInstanceStorageConfigAsync(array $args = [])
|
||||
* @method \Aws\Result associateLambdaFunction(array $args = [])
|
||||
|
|
@ -31,12 +37,22 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise associateRoutingProfileQueuesAsync(array $args = [])
|
||||
* @method \Aws\Result associateSecurityKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSecurityKeyAsync(array $args = [])
|
||||
* @method \Aws\Result associateSecurityProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateSecurityProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result associateTrafficDistributionGroupUser(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateTrafficDistributionGroupUserAsync(array $args = [])
|
||||
* @method \Aws\Result associateUserProficiencies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateUserProficienciesAsync(array $args = [])
|
||||
* @method \Aws\Result associateWorkspace(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateWorkspaceAsync(array $args = [])
|
||||
* @method \Aws\Result batchAssociateAnalyticsDataSet(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchAssociateAnalyticsDataSetAsync(array $args = [])
|
||||
* @method \Aws\Result batchCreateDataTableValue(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchCreateDataTableValueAsync(array $args = [])
|
||||
* @method \Aws\Result batchDeleteDataTableValue(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchDeleteDataTableValueAsync(array $args = [])
|
||||
* @method \Aws\Result batchDescribeDataTableValue(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchDescribeDataTableValueAsync(array $args = [])
|
||||
* @method \Aws\Result batchDisassociateAnalyticsDataSet(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchDisassociateAnalyticsDataSetAsync(array $args = [])
|
||||
* @method \Aws\Result batchGetAttachedFileMetadata(array $args = [])
|
||||
|
|
@ -45,6 +61,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise batchGetFlowAssociationAsync(array $args = [])
|
||||
* @method \Aws\Result batchPutContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchPutContactAsync(array $args = [])
|
||||
* @method \Aws\Result batchUpdateDataTableValue(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchUpdateDataTableValueAsync(array $args = [])
|
||||
* @method \Aws\Result claimPhoneNumber(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise claimPhoneNumberAsync(array $args = [])
|
||||
* @method \Aws\Result completeAttachedFileUpload(array $args = [])
|
||||
|
|
@ -57,8 +75,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createContactFlowAsync(array $args = [])
|
||||
* @method \Aws\Result createContactFlowModule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createContactFlowModuleAsync(array $args = [])
|
||||
* @method \Aws\Result createContactFlowModuleAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createContactFlowModuleAliasAsync(array $args = [])
|
||||
* @method \Aws\Result createContactFlowModuleVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createContactFlowModuleVersionAsync(array $args = [])
|
||||
* @method \Aws\Result createContactFlowVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createContactFlowVersionAsync(array $args = [])
|
||||
* @method \Aws\Result createDataTable(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDataTableAsync(array $args = [])
|
||||
* @method \Aws\Result createDataTableAttribute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDataTableAttributeAsync(array $args = [])
|
||||
* @method \Aws\Result createEmailAddress(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createEmailAddressAsync(array $args = [])
|
||||
* @method \Aws\Result createEvaluationForm(array $args = [])
|
||||
|
|
@ -93,6 +119,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createSecurityProfileAsync(array $args = [])
|
||||
* @method \Aws\Result createTaskTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTaskTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result createTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result createTrafficDistributionGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createTrafficDistributionGroupAsync(array $args = [])
|
||||
* @method \Aws\Result createUseCase(array $args = [])
|
||||
|
|
@ -107,6 +135,10 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createViewVersionAsync(array $args = [])
|
||||
* @method \Aws\Result createVocabulary(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createVocabularyAsync(array $args = [])
|
||||
* @method \Aws\Result createWorkspace(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createWorkspaceAsync(array $args = [])
|
||||
* @method \Aws\Result createWorkspacePage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createWorkspacePageAsync(array $args = [])
|
||||
* @method \Aws\Result deactivateEvaluationForm(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deactivateEvaluationFormAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAttachedFile(array $args = [])
|
||||
|
|
@ -117,8 +149,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteContactFlowAsync(array $args = [])
|
||||
* @method \Aws\Result deleteContactFlowModule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleAsync(array $args = [])
|
||||
* @method \Aws\Result deleteContactFlowModuleAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleAliasAsync(array $args = [])
|
||||
* @method \Aws\Result deleteContactFlowModuleVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteContactFlowModuleVersionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteContactFlowVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteContactFlowVersionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDataTable(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDataTableAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDataTableAttribute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDataTableAttributeAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEmailAddress(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteEmailAddressAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEvaluationForm(array $args = [])
|
||||
|
|
@ -149,6 +189,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteSecurityProfileAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTaskTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTaskTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTrafficDistributionGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTrafficDistributionGroupAsync(array $args = [])
|
||||
* @method \Aws\Result deleteUseCase(array $args = [])
|
||||
|
|
@ -163,6 +205,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteViewVersionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteVocabulary(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVocabularyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWorkspace(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteWorkspaceAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWorkspaceMedia(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteWorkspaceMediaAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWorkspacePage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteWorkspacePageAsync(array $args = [])
|
||||
* @method \Aws\Result describeAgentStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeAgentStatusAsync(array $args = [])
|
||||
* @method \Aws\Result describeAuthenticationProfile(array $args = [])
|
||||
|
|
@ -175,6 +223,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeContactFlowAsync(array $args = [])
|
||||
* @method \Aws\Result describeContactFlowModule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeContactFlowModuleAsync(array $args = [])
|
||||
* @method \Aws\Result describeContactFlowModuleAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeContactFlowModuleAliasAsync(array $args = [])
|
||||
* @method \Aws\Result describeDataTable(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeDataTableAsync(array $args = [])
|
||||
* @method \Aws\Result describeDataTableAttribute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeDataTableAttributeAsync(array $args = [])
|
||||
* @method \Aws\Result describeEmailAddress(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeEmailAddressAsync(array $args = [])
|
||||
* @method \Aws\Result describeEvaluationForm(array $args = [])
|
||||
|
|
@ -205,6 +259,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeRuleAsync(array $args = [])
|
||||
* @method \Aws\Result describeSecurityProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeSecurityProfileAsync(array $args = [])
|
||||
* @method \Aws\Result describeTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result describeTrafficDistributionGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeTrafficDistributionGroupAsync(array $args = [])
|
||||
* @method \Aws\Result describeUser(array $args = [])
|
||||
|
|
@ -217,14 +273,20 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeViewAsync(array $args = [])
|
||||
* @method \Aws\Result describeVocabulary(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeVocabularyAsync(array $args = [])
|
||||
* @method \Aws\Result describeWorkspace(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeWorkspaceAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateAnalyticsDataSet(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateAnalyticsDataSetAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateApprovedOrigin(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateApprovedOriginAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateBot(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateBotAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateEmailAddressAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateEmailAddressAliasAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateFlow(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateFlowAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateHoursOfOperations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateHoursOfOperationsAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateInstanceStorageConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateInstanceStorageConfigAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateLambdaFunction(array $args = [])
|
||||
|
|
@ -239,12 +301,18 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise disassociateRoutingProfileQueuesAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSecurityKey(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSecurityKeyAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateSecurityProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateSecurityProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateTrafficDistributionGroupUser(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateTrafficDistributionGroupUserAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateUserProficiencies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateUserProficienciesAsync(array $args = [])
|
||||
* @method \Aws\Result disassociateWorkspace(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disassociateWorkspaceAsync(array $args = [])
|
||||
* @method \Aws\Result dismissUserContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise dismissUserContactAsync(array $args = [])
|
||||
* @method \Aws\Result evaluateDataTableValues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise evaluateDataTableValuesAsync(array $args = [])
|
||||
* @method \Aws\Result getAttachedFile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAttachedFileAsync(array $args = [])
|
||||
* @method \Aws\Result getContactAttributes(array $args = [])
|
||||
|
|
@ -269,10 +337,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getPromptFileAsync(array $args = [])
|
||||
* @method \Aws\Result getTaskTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTaskTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result getTestCaseExecutionSummary(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTestCaseExecutionSummaryAsync(array $args = [])
|
||||
* @method \Aws\Result getTrafficDistribution(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTrafficDistributionAsync(array $args = [])
|
||||
* @method \Aws\Result importPhoneNumber(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importPhoneNumberAsync(array $args = [])
|
||||
* @method \Aws\Result importWorkspaceMedia(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importWorkspaceMediaAsync(array $args = [])
|
||||
* @method \Aws\Result listAgentStatuses(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAgentStatusesAsync(array $args = [])
|
||||
* @method \Aws\Result listAnalyticsDataAssociations(array $args = [])
|
||||
|
|
@ -287,8 +359,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listAuthenticationProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result listBots(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listBotsAsync(array $args = [])
|
||||
* @method \Aws\Result listChildHoursOfOperations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listChildHoursOfOperationsAsync(array $args = [])
|
||||
* @method \Aws\Result listContactEvaluations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listContactEvaluationsAsync(array $args = [])
|
||||
* @method \Aws\Result listContactFlowModuleAliases(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listContactFlowModuleAliasesAsync(array $args = [])
|
||||
* @method \Aws\Result listContactFlowModuleVersions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listContactFlowModuleVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result listContactFlowModules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listContactFlowModulesAsync(array $args = [])
|
||||
* @method \Aws\Result listContactFlowVersions(array $args = [])
|
||||
|
|
@ -297,8 +375,18 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listContactFlowsAsync(array $args = [])
|
||||
* @method \Aws\Result listContactReferences(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listContactReferencesAsync(array $args = [])
|
||||
* @method \Aws\Result listDataTableAttributes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDataTableAttributesAsync(array $args = [])
|
||||
* @method \Aws\Result listDataTablePrimaryValues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDataTablePrimaryValuesAsync(array $args = [])
|
||||
* @method \Aws\Result listDataTableValues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDataTableValuesAsync(array $args = [])
|
||||
* @method \Aws\Result listDataTables(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDataTablesAsync(array $args = [])
|
||||
* @method \Aws\Result listDefaultVocabularies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDefaultVocabulariesAsync(array $args = [])
|
||||
* @method \Aws\Result listEntitySecurityProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEntitySecurityProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result listEvaluationFormVersions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEvaluationFormVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result listEvaluationForms(array $args = [])
|
||||
|
|
@ -337,6 +425,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listQuickConnectsAsync(array $args = [])
|
||||
* @method \Aws\Result listRealtimeContactAnalysisSegmentsV2(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRealtimeContactAnalysisSegmentsV2Async(array $args = [])
|
||||
* @method \Aws\Result listRoutingProfileManualAssignmentQueues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRoutingProfileManualAssignmentQueuesAsync(array $args = [])
|
||||
* @method \Aws\Result listRoutingProfileQueues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRoutingProfileQueuesAsync(array $args = [])
|
||||
* @method \Aws\Result listRoutingProfiles(array $args = [])
|
||||
|
|
@ -347,6 +437,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listSecurityKeysAsync(array $args = [])
|
||||
* @method \Aws\Result listSecurityProfileApplications(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSecurityProfileApplicationsAsync(array $args = [])
|
||||
* @method \Aws\Result listSecurityProfileFlowModules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSecurityProfileFlowModulesAsync(array $args = [])
|
||||
* @method \Aws\Result listSecurityProfilePermissions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSecurityProfilePermissionsAsync(array $args = [])
|
||||
* @method \Aws\Result listSecurityProfiles(array $args = [])
|
||||
|
|
@ -355,6 +447,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result listTaskTemplates(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTaskTemplatesAsync(array $args = [])
|
||||
* @method \Aws\Result listTestCaseExecutionRecords(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestCaseExecutionRecordsAsync(array $args = [])
|
||||
* @method \Aws\Result listTestCaseExecutions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestCaseExecutionsAsync(array $args = [])
|
||||
* @method \Aws\Result listTestCases(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTestCasesAsync(array $args = [])
|
||||
* @method \Aws\Result listTrafficDistributionGroupUsers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTrafficDistributionGroupUsersAsync(array $args = [])
|
||||
* @method \Aws\Result listTrafficDistributionGroups(array $args = [])
|
||||
|
|
@ -371,6 +469,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listViewVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result listViews(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listViewsAsync(array $args = [])
|
||||
* @method \Aws\Result listWorkspaceMedia(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listWorkspaceMediaAsync(array $args = [])
|
||||
* @method \Aws\Result listWorkspacePages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listWorkspacePagesAsync(array $args = [])
|
||||
* @method \Aws\Result listWorkspaces(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listWorkspacesAsync(array $args = [])
|
||||
* @method \Aws\Result monitorContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise monitorContactAsync(array $args = [])
|
||||
* @method \Aws\Result pauseContact(array $args = [])
|
||||
|
|
@ -389,14 +493,20 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise searchAgentStatusesAsync(array $args = [])
|
||||
* @method \Aws\Result searchAvailablePhoneNumbers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchAvailablePhoneNumbersAsync(array $args = [])
|
||||
* @method \Aws\Result searchContactEvaluations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchContactEvaluationsAsync(array $args = [])
|
||||
* @method \Aws\Result searchContactFlowModules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchContactFlowModulesAsync(array $args = [])
|
||||
* @method \Aws\Result searchContactFlows(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchContactFlowsAsync(array $args = [])
|
||||
* @method \Aws\Result searchContacts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchContactsAsync(array $args = [])
|
||||
* @method \Aws\Result searchDataTables(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchDataTablesAsync(array $args = [])
|
||||
* @method \Aws\Result searchEmailAddresses(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchEmailAddressesAsync(array $args = [])
|
||||
* @method \Aws\Result searchEvaluationForms(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchEvaluationFormsAsync(array $args = [])
|
||||
* @method \Aws\Result searchHoursOfOperationOverrides(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchHoursOfOperationOverridesAsync(array $args = [])
|
||||
* @method \Aws\Result searchHoursOfOperations(array $args = [])
|
||||
|
|
@ -415,12 +525,20 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise searchRoutingProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result searchSecurityProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchSecurityProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result searchTestCases(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchTestCasesAsync(array $args = [])
|
||||
* @method \Aws\Result searchUserHierarchyGroups(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchUserHierarchyGroupsAsync(array $args = [])
|
||||
* @method \Aws\Result searchUsers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchUsersAsync(array $args = [])
|
||||
* @method \Aws\Result searchViews(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchViewsAsync(array $args = [])
|
||||
* @method \Aws\Result searchVocabularies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchVocabulariesAsync(array $args = [])
|
||||
* @method \Aws\Result searchWorkspaceAssociations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchWorkspaceAssociationsAsync(array $args = [])
|
||||
* @method \Aws\Result searchWorkspaces(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchWorkspacesAsync(array $args = [])
|
||||
* @method \Aws\Result sendChatIntegrationEvent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise sendChatIntegrationEventAsync(array $args = [])
|
||||
* @method \Aws\Result sendOutboundEmail(array $args = [])
|
||||
|
|
@ -431,6 +549,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startChatContactAsync(array $args = [])
|
||||
* @method \Aws\Result startContactEvaluation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startContactEvaluationAsync(array $args = [])
|
||||
* @method \Aws\Result startContactMediaProcessing(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startContactMediaProcessingAsync(array $args = [])
|
||||
* @method \Aws\Result startContactRecording(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startContactRecordingAsync(array $args = [])
|
||||
* @method \Aws\Result startContactStreaming(array $args = [])
|
||||
|
|
@ -447,14 +567,20 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startScreenSharingAsync(array $args = [])
|
||||
* @method \Aws\Result startTaskContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startTaskContactAsync(array $args = [])
|
||||
* @method \Aws\Result startTestCaseExecution(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startTestCaseExecutionAsync(array $args = [])
|
||||
* @method \Aws\Result startWebRTCContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startWebRTCContactAsync(array $args = [])
|
||||
* @method \Aws\Result stopContact(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopContactAsync(array $args = [])
|
||||
* @method \Aws\Result stopContactMediaProcessing(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopContactMediaProcessingAsync(array $args = [])
|
||||
* @method \Aws\Result stopContactRecording(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopContactRecordingAsync(array $args = [])
|
||||
* @method \Aws\Result stopContactStreaming(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopContactStreamingAsync(array $args = [])
|
||||
* @method \Aws\Result stopTestCaseExecution(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopTestCaseExecutionAsync(array $args = [])
|
||||
* @method \Aws\Result submitContactEvaluation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise submitContactEvaluationAsync(array $args = [])
|
||||
* @method \Aws\Result suspendContactRecording(array $args = [])
|
||||
|
|
@ -483,6 +609,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateContactFlowContentAsync(array $args = [])
|
||||
* @method \Aws\Result updateContactFlowMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateContactFlowMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result updateContactFlowModuleAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateContactFlowModuleAliasAsync(array $args = [])
|
||||
* @method \Aws\Result updateContactFlowModuleContent(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateContactFlowModuleContentAsync(array $args = [])
|
||||
* @method \Aws\Result updateContactFlowModuleMetadata(array $args = [])
|
||||
|
|
@ -493,6 +621,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateContactRoutingDataAsync(array $args = [])
|
||||
* @method \Aws\Result updateContactSchedule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateContactScheduleAsync(array $args = [])
|
||||
* @method \Aws\Result updateDataTableAttribute(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDataTableAttributeAsync(array $args = [])
|
||||
* @method \Aws\Result updateDataTableMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDataTableMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result updateDataTablePrimaryValues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDataTablePrimaryValuesAsync(array $args = [])
|
||||
* @method \Aws\Result updateEmailAddressMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateEmailAddressMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result updateEvaluationForm(array $args = [])
|
||||
|
|
@ -549,6 +683,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateSecurityProfileAsync(array $args = [])
|
||||
* @method \Aws\Result updateTaskTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTaskTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result updateTestCase(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTestCaseAsync(array $args = [])
|
||||
* @method \Aws\Result updateTrafficDistribution(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateTrafficDistributionAsync(array $args = [])
|
||||
* @method \Aws\Result updateUserHierarchy(array $args = [])
|
||||
|
|
@ -571,5 +707,13 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateViewContentAsync(array $args = [])
|
||||
* @method \Aws\Result updateViewMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateViewMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result updateWorkspaceMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWorkspaceMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result updateWorkspacePage(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWorkspacePageAsync(array $args = [])
|
||||
* @method \Aws\Result updateWorkspaceTheme(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWorkspaceThemeAsync(array $args = [])
|
||||
* @method \Aws\Result updateWorkspaceVisibility(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateWorkspaceVisibilityAsync(array $args = [])
|
||||
*/
|
||||
class ConnectClient extends AwsClient {}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listTemplatesAsync(array $args = [])
|
||||
* @method \Aws\Result putCaseEventConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putCaseEventConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result searchAllRelatedItems(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchAllRelatedItemsAsync(array $args = [])
|
||||
* @method \Aws\Result searchCases(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchCasesAsync(array $args = [])
|
||||
* @method \Aws\Result searchRelatedItems(array $args = [])
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listCostAllocationTagsAsync(array $args = [])
|
||||
* @method \Aws\Result listCostCategoryDefinitions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCostCategoryDefinitionsAsync(array $args = [])
|
||||
* @method \Aws\Result listCostCategoryResourceAssociations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCostCategoryResourceAssociationsAsync(array $args = [])
|
||||
* @method \Aws\Result listSavingsPlansPurchaseRecommendationGeneration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listSavingsPlansPurchaseRecommendationGenerationAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getPreferencesAsync(array $args = [])
|
||||
* @method \Aws\Result getRecommendation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRecommendationAsync(array $args = [])
|
||||
* @method \Aws\Result listEfficiencyMetrics(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEfficiencyMetricsAsync(array $args = [])
|
||||
* @method \Aws\Result listEnrollmentStatuses(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEnrollmentStatusesAsync(array $args = [])
|
||||
* @method \Aws\Result listRecommendationSummaries(array $args = [])
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ class AssumeRoleWithWebIdentityCredentialProvider
|
|||
|
||||
/** @var integer */
|
||||
private $tokenFileReadAttempts;
|
||||
|
||||
/** @var string */
|
||||
private $source;
|
||||
|
||||
|
|
@ -72,15 +73,15 @@ class AssumeRoleWithWebIdentityCredentialProvider
|
|||
$this->tokenFileReadAttempts = 0;
|
||||
$this->session = $config['SessionName']
|
||||
?? 'aws-sdk-php-' . round(microtime(true) * 1000);
|
||||
$region = $config['region'] ?? 'us-east-1';
|
||||
|
||||
if (isset($config['client'])) {
|
||||
$this->client = $config['client'];
|
||||
} else {
|
||||
$this->client = new StsClient([
|
||||
'credentials' => false,
|
||||
'region' => $region,
|
||||
'version' => 'latest'
|
||||
]);
|
||||
$region = $config['region']
|
||||
?? getEnv(CredentialProvider::ENV_REGION)
|
||||
?: null;
|
||||
|
||||
$this->client = $this->createDefaultStsClient($region);
|
||||
}
|
||||
|
||||
$this->source = $config['source']
|
||||
|
|
@ -167,4 +168,34 @@ class AssumeRoleWithWebIdentityCredentialProvider
|
|||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $region
|
||||
*
|
||||
* @return StsClient
|
||||
*/
|
||||
private function createDefaultStsClient(
|
||||
?string $region
|
||||
): StsClient
|
||||
{
|
||||
if (empty($region)) {
|
||||
$region = CredentialProvider::FALLBACK_REGION;
|
||||
trigger_error(
|
||||
'NOTICE: STS client created without explicit `region` configuration.' . PHP_EOL
|
||||
. "Defaulting to {$region}. This fallback behavior may be removed." . PHP_EOL
|
||||
. 'To avoid potential disruptions, configure a region using one of the following methods:' . PHP_EOL
|
||||
. '(1) Pass `region` in the `$config` array when calling the provider,' . PHP_EOL
|
||||
. '(2) Set the `AWS_REGION` environment variable.' . PHP_EOL
|
||||
. 'OR provide an STS client in the `$config` array when creating the provider as `client`.' . PHP_EOL
|
||||
. 'See: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/assume-role-with-web-identity-provider.html'
|
||||
. PHP_EOL,
|
||||
E_USER_NOTICE
|
||||
);
|
||||
}
|
||||
|
||||
return new StsClient([
|
||||
'credentials' => false,
|
||||
'region' => $region
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,15 +43,18 @@ use GuzzleHttp\Promise;
|
|||
*/
|
||||
class CredentialProvider
|
||||
{
|
||||
const ENV_ARN = 'AWS_ROLE_ARN';
|
||||
const ENV_KEY = 'AWS_ACCESS_KEY_ID';
|
||||
const ENV_PROFILE = 'AWS_PROFILE';
|
||||
const ENV_ROLE_SESSION_NAME = 'AWS_ROLE_SESSION_NAME';
|
||||
const ENV_SECRET = 'AWS_SECRET_ACCESS_KEY';
|
||||
const ENV_ACCOUNT_ID = 'AWS_ACCOUNT_ID';
|
||||
const ENV_SESSION = 'AWS_SESSION_TOKEN';
|
||||
const ENV_TOKEN_FILE = 'AWS_WEB_IDENTITY_TOKEN_FILE';
|
||||
const ENV_SHARED_CREDENTIALS_FILE = 'AWS_SHARED_CREDENTIALS_FILE';
|
||||
public const ENV_ARN = 'AWS_ROLE_ARN';
|
||||
public const ENV_KEY = 'AWS_ACCESS_KEY_ID';
|
||||
public const ENV_PROFILE = 'AWS_PROFILE';
|
||||
public const ENV_ROLE_SESSION_NAME = 'AWS_ROLE_SESSION_NAME';
|
||||
public const ENV_SECRET = 'AWS_SECRET_ACCESS_KEY';
|
||||
public const ENV_ACCOUNT_ID = 'AWS_ACCOUNT_ID';
|
||||
public const ENV_SESSION = 'AWS_SESSION_TOKEN';
|
||||
public const ENV_TOKEN_FILE = 'AWS_WEB_IDENTITY_TOKEN_FILE';
|
||||
public const ENV_SHARED_CREDENTIALS_FILE = 'AWS_SHARED_CREDENTIALS_FILE';
|
||||
public const ENV_CONFIG_FILE = 'AWS_CONFIG_FILE';
|
||||
public const ENV_REGION = 'AWS_REGION';
|
||||
public const FALLBACK_REGION = 'us-east-1';
|
||||
public const REFRESH_WINDOW = 60;
|
||||
|
||||
/**
|
||||
|
|
@ -80,6 +83,7 @@ class CredentialProvider
|
|||
$cacheable = [
|
||||
'web_identity',
|
||||
'sso',
|
||||
'login',
|
||||
'process_credentials',
|
||||
'process_config',
|
||||
'ecs',
|
||||
|
|
@ -92,24 +96,24 @@ class CredentialProvider
|
|||
'env' => self::env(),
|
||||
'web_identity' => self::assumeRoleWithWebIdentityCredentialProvider($config),
|
||||
];
|
||||
if (
|
||||
!isset($config['use_aws_shared_config_files'])
|
||||
if (!isset($config['use_aws_shared_config_files'])
|
||||
|| $config['use_aws_shared_config_files'] !== false
|
||||
) {
|
||||
$defaultChain['sso'] = self::sso(
|
||||
$profileName,
|
||||
self::getHomeDir() . '/.aws/config',
|
||||
self::getConfigFileName(),
|
||||
$config
|
||||
);
|
||||
$defaultChain['login'] = self::login($profileName, $config);
|
||||
$defaultChain['process_credentials'] = self::process();
|
||||
$defaultChain['ini'] = self::ini();
|
||||
$defaultChain['ini'] = self::ini(null, null, $config);
|
||||
$defaultChain['process_config'] = self::process(
|
||||
'profile ' . $profileName,
|
||||
self::getHomeDir() . '/.aws/config'
|
||||
self::getConfigFileName()
|
||||
);
|
||||
$defaultChain['ini_config'] = self::ini(
|
||||
'profile '. $profileName,
|
||||
self::getHomeDir() . '/.aws/config'
|
||||
self::getConfigFileName()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -337,11 +341,12 @@ class CredentialProvider
|
|||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function sso($ssoProfileName = 'default',
|
||||
$filename = null,
|
||||
$config = []
|
||||
public static function sso(
|
||||
$ssoProfileName = 'default',
|
||||
$filename = null,
|
||||
$config = []
|
||||
) {
|
||||
$filename = $filename ?: (self::getHomeDir() . '/.aws/config');
|
||||
$filename = $filename ?? self::getConfigFileName();
|
||||
|
||||
return function () use ($ssoProfileName, $filename, $config) {
|
||||
if (!@is_readable($filename)) {
|
||||
|
|
@ -487,17 +492,13 @@ class CredentialProvider
|
|||
*/
|
||||
public static function ini($profile = null, $filename = null, array $config = [])
|
||||
{
|
||||
$filename = self::getFileName($filename);
|
||||
$filename = self::getCredentialsFileName($filename);
|
||||
$profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default');
|
||||
|
||||
return function () use ($profile, $filename, $config) {
|
||||
$preferStaticCredentials = isset($config['preferStaticCredentials'])
|
||||
? $config['preferStaticCredentials']
|
||||
: false;
|
||||
$disableAssumeRole = isset($config['disableAssumeRole'])
|
||||
? $config['disableAssumeRole']
|
||||
: false;
|
||||
$stsClient = isset($config['stsClient']) ? $config['stsClient'] : null;
|
||||
$preferStaticCredentials = $config['preferStaticCredentials'] ?? false;
|
||||
$disableAssumeRole = $config['disableAssumeRole'] ?? false;
|
||||
$stsClient = $config['stsClient'] ?? null;
|
||||
|
||||
if (!@is_readable($filename)) {
|
||||
return self::reject("Cannot read credentials from $filename");
|
||||
|
|
@ -581,7 +582,7 @@ class CredentialProvider
|
|||
*/
|
||||
public static function process($profile = null, $filename = null)
|
||||
{
|
||||
$filename = self::getFileName($filename);
|
||||
$filename = self::getCredentialsFileName($filename);
|
||||
$profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default');
|
||||
|
||||
return function () use ($profile, $filename) {
|
||||
|
|
@ -657,6 +658,41 @@ class CredentialProvider
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Login credential provider for AWS local development using console credentials
|
||||
*
|
||||
* @param string|null $profileName profile containing your console login session information
|
||||
* @param array $config region used for refresh requests.
|
||||
* pass `'region' => <your_region>` to configure a region,
|
||||
* otherwise, provider construction falls back to AWS_REGION,
|
||||
* then the profile specified for `login`
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public static function login(
|
||||
?string $profileName = null,
|
||||
array $config = [],
|
||||
): callable
|
||||
{
|
||||
$resolvedProfile = $profileName ?? getenv(self::ENV_PROFILE) ?: 'default';
|
||||
|
||||
return static function () use ($resolvedProfile, $config) {
|
||||
try {
|
||||
$provider = new LoginCredentialProvider(
|
||||
$resolvedProfile,
|
||||
$config['region'] ?? null
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
return self::reject(
|
||||
"Failed to initialize login credential provider for profile '{$resolvedProfile}': "
|
||||
. $e->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
return $provider();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Assumes role for profile that includes role_arn
|
||||
*
|
||||
|
|
@ -670,13 +706,11 @@ class CredentialProvider
|
|||
$config = []
|
||||
) {
|
||||
$roleProfile = $profiles[$profileName];
|
||||
$roleArn = isset($roleProfile['role_arn']) ? $roleProfile['role_arn'] : '';
|
||||
$roleSessionName = isset($roleProfile['role_session_name'])
|
||||
? $roleProfile['role_session_name']
|
||||
: 'aws-sdk-php-' . round(microtime(true) * 1000);
|
||||
$roleArn = $roleProfile['role_arn'] ?? '';
|
||||
$roleSessionName = $roleProfile['role_session_name']
|
||||
?? 'aws-sdk-php-' . round(microtime(true) * 1000);
|
||||
|
||||
if (
|
||||
empty($roleProfile['source_profile'])
|
||||
if (empty($roleProfile['source_profile'])
|
||||
== empty($roleProfile['credential_source'])
|
||||
) {
|
||||
return self::reject("Either source_profile or credential_source must be set " .
|
||||
|
|
@ -708,9 +742,6 @@ class CredentialProvider
|
|||
}
|
||||
|
||||
if (empty($stsClient)) {
|
||||
$sourceRegion = isset($profiles[$sourceProfileName]['region'])
|
||||
? $profiles[$sourceProfileName]['region']
|
||||
: 'us-east-1';
|
||||
$config['preferStaticCredentials'] = true;
|
||||
$sourceCredentials = null;
|
||||
if (!empty($roleProfile['source_profile'])){
|
||||
|
|
@ -723,11 +754,13 @@ class CredentialProvider
|
|||
$filename
|
||||
);
|
||||
}
|
||||
$stsClient = new StsClient([
|
||||
'credentials' => $sourceCredentials,
|
||||
'region' => $sourceRegion,
|
||||
'version' => '2011-06-15',
|
||||
]);
|
||||
|
||||
$region = $profiles[$sourceProfileName]['region']
|
||||
?? $config['region']
|
||||
?? getEnv(self::ENV_REGION)
|
||||
?: null;
|
||||
|
||||
$stsClient = self::createDefaultStsClient($sourceCredentials, $region);
|
||||
}
|
||||
|
||||
$result = $stsClient->assumeRole([
|
||||
|
|
@ -747,7 +780,7 @@ class CredentialProvider
|
|||
*
|
||||
* @return null|string
|
||||
*/
|
||||
private static function getHomeDir()
|
||||
public static function getHomeDir()
|
||||
{
|
||||
// On Linux/Unix-like systems, use the HOME environment variable
|
||||
if ($homeDir = getenv('HOME')) {
|
||||
|
|
@ -764,7 +797,7 @@ class CredentialProvider
|
|||
/**
|
||||
* Gets profiles from specified $filename, or default ini files.
|
||||
*/
|
||||
private static function loadProfiles($filename)
|
||||
public static function loadProfiles($filename)
|
||||
{
|
||||
$profileData = \Aws\parse_ini_file($filename, true, INI_SCANNER_RAW);
|
||||
|
||||
|
|
@ -772,7 +805,7 @@ class CredentialProvider
|
|||
if ($filename === self::getHomeDir() . '/.aws/credentials'
|
||||
&& getenv('AWS_SDK_LOAD_NONDEFAULT_CONFIG')
|
||||
) {
|
||||
$configFilename = self::getHomeDir() . '/.aws/config';
|
||||
$configFilename = self::getConfigFileName();
|
||||
$configProfileData = \Aws\parse_ini_file($configFilename, true, INI_SCANNER_RAW);
|
||||
foreach ($configProfileData as $name => $profile) {
|
||||
// standardize config profile names
|
||||
|
|
@ -789,7 +822,8 @@ class CredentialProvider
|
|||
/**
|
||||
* Gets profiles from ~/.aws/credentials and ~/.aws/config ini files
|
||||
*/
|
||||
private static function loadDefaultProfiles() {
|
||||
private static function loadDefaultProfiles()
|
||||
{
|
||||
$profiles = [];
|
||||
$credFile = self::getHomeDir() . '/.aws/credentials';
|
||||
$configFile = self::getHomeDir() . '/.aws/config';
|
||||
|
|
@ -860,15 +894,32 @@ class CredentialProvider
|
|||
}
|
||||
|
||||
/**
|
||||
* Locates shared configuration file by first checking for AWS_CONFIG,
|
||||
* then falling back to the default location. Returns the path of the
|
||||
* resolved configuration file.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getConfigFileName(): string
|
||||
{
|
||||
return getenv(self::ENV_CONFIG_FILE) ?: self::getHomeDir() . '/.aws/config';
|
||||
}
|
||||
|
||||
/**
|
||||
* Locates credentials file by first checking for AWS_SHARED_CREDENTIALS_FILE,
|
||||
* then falling back to the default location. Returns the path of the
|
||||
* resolved credentials file.
|
||||
*
|
||||
* @param $filename
|
||||
* @return string
|
||||
*/
|
||||
private static function getFileName($filename)
|
||||
public static function getCredentialsFileName($filename): string
|
||||
{
|
||||
if (!isset($filename)) {
|
||||
$filename = getenv(self::ENV_SHARED_CREDENTIALS_FILE) ?:
|
||||
(self::getHomeDir() . '/.aws/credentials');
|
||||
}
|
||||
|
||||
return $filename;
|
||||
}
|
||||
|
||||
|
|
@ -1026,5 +1077,37 @@ class CredentialProvider
|
|||
$ssoCredentials = $ssoResponse['roleCredentials'];
|
||||
return $ssoCredentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CredentialsInterface $credentials
|
||||
* @param string|null $region
|
||||
*
|
||||
* @return StsClient
|
||||
*/
|
||||
private static function createDefaultStsClient(
|
||||
CredentialsInterface|callable $credentials,
|
||||
?string $region
|
||||
): StsClient
|
||||
{
|
||||
if (empty($region)) {
|
||||
$region = self::FALLBACK_REGION;
|
||||
trigger_error(
|
||||
'NOTICE: STS client created without explicit `region` configuration.' . PHP_EOL
|
||||
. "Defaulting to `{$region}`. This fallback behavior may be removed." . PHP_EOL
|
||||
. 'To avoid potential disruptions, configure a `region` using one of the following methods:' . PHP_EOL
|
||||
. '(1) Add `region` to your source profile in ~/.aws/credentials,' . PHP_EOL
|
||||
. '(2) Pass `region` in the `$config` array when calling the provider,' . PHP_EOL
|
||||
. '(3) Set the `AWS_REGION` environment variable.' . PHP_EOL
|
||||
. 'See: https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_assume_role.html#assume-role-with-profile'
|
||||
. PHP_EOL,
|
||||
E_USER_NOTICE
|
||||
);
|
||||
}
|
||||
|
||||
return new StsClient([
|
||||
'credentials' => $credentials,
|
||||
'region' => $region
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,4 +19,5 @@ final class CredentialSources
|
|||
const PROFILE_SSO = 'profile_sso';
|
||||
const PROFILE_SSO_LEGACY = 'profile_sso_legacy';
|
||||
const PROFILE_PROCESS = 'profile_process';
|
||||
const PROFILE_LOGIN = 'profile_login';
|
||||
}
|
||||
|
|
|
|||
527
vendor/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php
vendored
Normal file
527
vendor/aws/aws-sdk-php/src/Credentials/LoginCredentialProvider.php
vendored
Normal file
|
|
@ -0,0 +1,527 @@
|
|||
<?php
|
||||
namespace Aws\Credentials;
|
||||
|
||||
use Aws\Configuration\ConfigurationResolver;
|
||||
use Aws\Exception\CredentialsException;
|
||||
use Aws\Signin\SigninClient;
|
||||
use Aws\Signin\Exception\SigninException;
|
||||
use GuzzleHttp\Promise;
|
||||
|
||||
/**
|
||||
* Credential provider for login using console credentials
|
||||
*/
|
||||
final class LoginCredentialProvider
|
||||
{
|
||||
private const EXT_OPENSSL = 'openssl';
|
||||
private const DEFAULT_REFRESH_THRESHOLD = 180; // 3 minutes
|
||||
private const ENV_CACHE_DIRECTORY = 'AWS_LOGIN_CACHE_DIRECTORY';
|
||||
private const DEFAULT_CACHE_DIRECTORY = '/.aws/login/cache';
|
||||
private const REAUTHENTICATE_MSG = ' Please reauthenticate using `aws login`.';
|
||||
private const PROFILE_DEFAULT = 'default';
|
||||
private const PROFILE_SECONDARY = 'profile ';
|
||||
private const GRANT_TYPE = 'refresh_token';
|
||||
private const REQUEST_KEY_GRANT_TYPE = 'grantType';
|
||||
private const REQUEST_KEY_CLIENT_ID = 'clientId';
|
||||
private const REQUEST_KEY_REFRESH_TOKEN = 'refreshToken';
|
||||
private const REQUEST_KEY_TOKEN_INPUT = 'tokenInput';
|
||||
private const RESULT_TOKEN_OUTPUT = 'tokenOutput';
|
||||
private const RESULT_EXPIRES_IN = 'expiresIn';
|
||||
private const CLIENT_SIGNATURE_DPOP = 'dpop';
|
||||
private const KEY_CLIENT_SIGNATURE_VERSION = 'signature_version';
|
||||
private const KEY_CLIENT_REGION = 'region';
|
||||
private const KEY_CLIENT_CREDENTIALS = 'credentials';
|
||||
private const KEY_PROFILE_LOGIN_SESSION = 'login_session';
|
||||
private const KEY_ACCESS_TOKEN = 'accessToken';
|
||||
private const KEY_DPOP_KEY = 'dpopKey';
|
||||
private const KEY_ACCESS_KEY_ID = 'accessKeyId';
|
||||
private const KEY_SECRET_ACCESS_KEY = 'secretAccessKey';
|
||||
private const KEY_SESSION_TOKEN = 'sessionToken';
|
||||
private const KEY_ACCOUNT_ID = 'accountId';
|
||||
private const KEY_EXPIRES_AT = 'expiresAt';
|
||||
private const REQUIRED_CACHE_KEYS = [
|
||||
self::KEY_ACCESS_TOKEN,
|
||||
self::REQUEST_KEY_CLIENT_ID,
|
||||
self::REQUEST_KEY_REFRESH_TOKEN,
|
||||
self::KEY_DPOP_KEY
|
||||
];
|
||||
private const REQUIRED_ACCESS_TOKEN_KEYS = [
|
||||
self::KEY_ACCESS_KEY_ID,
|
||||
self::KEY_SECRET_ACCESS_KEY,
|
||||
self::KEY_SESSION_TOKEN,
|
||||
self::KEY_ACCOUNT_ID,
|
||||
self::KEY_EXPIRES_AT
|
||||
];
|
||||
|
||||
/** @var string The profile name used for login session configuration */
|
||||
private string $profileName;
|
||||
|
||||
/** @var SigninClient The Signin service client used for token refresh operations */
|
||||
private SigninClient $client;
|
||||
|
||||
/** @var string The file path to the cached token location */
|
||||
private string $tokenLocation;
|
||||
|
||||
/** @var array|null The cached token data including access token, refresh token, and DPoP key */
|
||||
private ?array $token = null;
|
||||
|
||||
/**
|
||||
* @param string $profileName Profile containing your console login session information
|
||||
* @param string|null $region Region used for refresh requests. If not provided,
|
||||
* attempts will be made to resolve a region using
|
||||
* `AWS_REGION`, then the profile specified for `login`.
|
||||
*/
|
||||
public function __construct(
|
||||
string $profileName,
|
||||
?string $region = null
|
||||
) {
|
||||
if (!extension_loaded(self::EXT_OPENSSL)) {
|
||||
throw new \RuntimeException(
|
||||
'The `openssl` extension is required to use Login credentials. '
|
||||
. 'Please install or enable the `openssl` extension.'
|
||||
);
|
||||
}
|
||||
|
||||
$this->profileName = $profileName;
|
||||
$this->client = $this->createSigninClient($profileName, $region);
|
||||
$this->tokenLocation = $this->resolveTokenLocation($profileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a promise that resolves to AWS credentials
|
||||
*
|
||||
* This method loads the cached token, refreshes it if necessary,
|
||||
* and returns AWS credentials sourced from the access token.
|
||||
*
|
||||
* @return Promise\PromiseInterface A promise that resolves to a Credentials object
|
||||
* @throws CredentialsException If re-authentication is required or credentials cannot be loaded
|
||||
* @throws SigninException If the token refresh fails with a SigninException
|
||||
*/
|
||||
public function __invoke(): Promise\PromiseInterface
|
||||
{
|
||||
return Promise\Coroutine::of(function () {
|
||||
$this->token ??= $this->loadToken();
|
||||
$credentials = $this->token[self::KEY_ACCESS_TOKEN];
|
||||
|
||||
if ($this->shouldRefresh($credentials)) {
|
||||
try {
|
||||
$credentials = yield from $this->refresh($credentials);
|
||||
} catch (CredentialsException $e) {
|
||||
// For specific re-authentication errors, re-throw
|
||||
throw $e;
|
||||
} catch (SigninException $e) {
|
||||
// For SigninException not handled by refresh(), re-throw
|
||||
throw new CredentialsException(
|
||||
'Unable to refresh login credentials: ' . $e->getAwsErrorMessage(),
|
||||
$e->getCode(),
|
||||
$e
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
// For other refresh failures, log and continue with existing token
|
||||
trigger_error(
|
||||
'Continuing with existing token after refresh failure: ' . $e->getMessage(),
|
||||
E_USER_NOTICE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
yield $credentials;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshes the access token using the refresh token and returns new credentials,
|
||||
* or, if refreshed from another source, returns the externally refreshed credentials.
|
||||
*
|
||||
* @param Credentials $currentCredentials The current credentials to refresh
|
||||
*
|
||||
* @return \Generator Generator that yields and returns refreshed credentials
|
||||
* @throws CredentialsException If re-authentication is required due to expired or changed credentials
|
||||
* @throws SigninException If the token refresh fails with a SigninException
|
||||
* @throws \Exception For unexpected errors during refresh
|
||||
*/
|
||||
private function refresh(Credentials $currentCredentials): \Generator
|
||||
{
|
||||
// Check for external refresh
|
||||
if ($refreshedToken = $this->getExternalRefresh($currentCredentials)) {
|
||||
$this->token = $refreshedToken;
|
||||
|
||||
return $refreshedToken[self::KEY_ACCESS_TOKEN];
|
||||
}
|
||||
|
||||
try {
|
||||
$refreshed = (yield $this->client->createOAuth2TokenAsync([
|
||||
self::REQUEST_KEY_TOKEN_INPUT => [
|
||||
self::REQUEST_KEY_CLIENT_ID => $this->token[self::REQUEST_KEY_CLIENT_ID],
|
||||
self::REQUEST_KEY_GRANT_TYPE => self::GRANT_TYPE,
|
||||
self::REQUEST_KEY_REFRESH_TOKEN => $this->token[self::REQUEST_KEY_REFRESH_TOKEN]
|
||||
],
|
||||
self::KEY_DPOP_KEY => $this->token[self::KEY_DPOP_KEY]
|
||||
]))->get(self::RESULT_TOKEN_OUTPUT);
|
||||
|
||||
$newCredentials = self::createCredentials(
|
||||
$refreshed[self::KEY_ACCESS_TOKEN],
|
||||
time() + $refreshed[self::RESULT_EXPIRES_IN],
|
||||
$currentCredentials->getAccountId()
|
||||
);
|
||||
|
||||
$this->token[self::KEY_ACCESS_TOKEN] = $newCredentials;
|
||||
$this->token[self::REQUEST_KEY_REFRESH_TOKEN] = $refreshed[self::REQUEST_KEY_REFRESH_TOKEN];
|
||||
} catch (\Exception $e) {
|
||||
throw $this->handleRefreshException($e);
|
||||
}
|
||||
|
||||
try {
|
||||
$this->writeToCache();
|
||||
} catch (\JsonException|\RuntimeException $e) {
|
||||
trigger_error(
|
||||
'Failed to update credential cache during refresh: ' . $e->getMessage()
|
||||
. '. Using refreshed credentials in memory.',
|
||||
E_USER_NOTICE
|
||||
);
|
||||
}
|
||||
|
||||
return $newCredentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets externally refreshed token if token has been refreshed from another source.
|
||||
* If the new token does not need refreshing, returns it.
|
||||
*
|
||||
* @param Credentials $currentCredentials Current credentials to compare against
|
||||
* @return array|null Returns the updated token array if externally refreshed, null otherwise
|
||||
*/
|
||||
private function getExternalRefresh(Credentials $currentCredentials): ?array
|
||||
{
|
||||
try {
|
||||
$latestToken = $this->loadToken();
|
||||
$latestCredentials = $latestToken[self::KEY_ACCESS_TOKEN];
|
||||
|
||||
// Refresh token must be different
|
||||
if ($latestToken[self::REQUEST_KEY_REFRESH_TOKEN]
|
||||
=== $this->token[self::REQUEST_KEY_REFRESH_TOKEN]
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Expiration must be newer
|
||||
if ($latestCredentials->getExpiration()
|
||||
<= $currentCredentials->getExpiration()
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// New token should not need refresh itself
|
||||
if ($this->shouldRefresh($latestCredentials)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $latestToken;
|
||||
} catch (\Exception $e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the updated access token and refresh token to the cache file
|
||||
*
|
||||
* @throws \JsonException|\RuntimeException
|
||||
*/
|
||||
private function writeToCache(): void
|
||||
{
|
||||
$credentials = $this->token[self::KEY_ACCESS_TOKEN];
|
||||
$updates = [
|
||||
self::KEY_ACCESS_TOKEN => [
|
||||
self::KEY_ACCESS_KEY_ID => $credentials->getAccessKeyId(),
|
||||
self::KEY_SECRET_ACCESS_KEY => $credentials->getSecretKey(),
|
||||
self::KEY_SESSION_TOKEN => $credentials->getSecurityToken(),
|
||||
self::KEY_ACCOUNT_ID => $credentials->getAccountId(),
|
||||
self::KEY_EXPIRES_AT => gmdate('Y-m-d\TH:i:s\Z', $credentials->getExpiration())
|
||||
],
|
||||
self::REQUEST_KEY_REFRESH_TOKEN => $this->token[self::REQUEST_KEY_REFRESH_TOKEN]
|
||||
];
|
||||
|
||||
$existing = json_decode(
|
||||
file_get_contents($this->tokenLocation), true, 512, JSON_THROW_ON_ERROR
|
||||
);
|
||||
$merged = array_merge($existing, $updates);
|
||||
|
||||
$result = file_put_contents(
|
||||
$this->tokenLocation,
|
||||
json_encode($merged, JSON_THROW_ON_ERROR),
|
||||
LOCK_EX
|
||||
);
|
||||
|
||||
if (!$result) {
|
||||
throw new \RuntimeException('Failed to write cache file');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads and validates the token from the cache file
|
||||
*
|
||||
* @return array The loaded token data with Credentials object, DPoP key, and other fields
|
||||
* @throws CredentialsException If the cache file is invalid, missing required keys,
|
||||
* or DPoP key cannot be loaded
|
||||
*/
|
||||
private function loadToken(): array
|
||||
{
|
||||
try {
|
||||
$cached = json_decode(
|
||||
file_get_contents($this->tokenLocation),
|
||||
true, 512, JSON_THROW_ON_ERROR
|
||||
);
|
||||
} catch (\JsonException $e) {
|
||||
throw new CredentialsException(
|
||||
'Invalid JSON in cache file: ' . $e->getMessage(),
|
||||
0,
|
||||
$e
|
||||
);
|
||||
}
|
||||
|
||||
if (self::hasAllRequiredKeys($cached, self::REQUIRED_CACHE_KEYS)
|
||||
&& self::hasAllRequiredKeys(
|
||||
$cached[self::KEY_ACCESS_TOKEN] ?? [],
|
||||
self::REQUIRED_ACCESS_TOKEN_KEYS
|
||||
)
|
||||
) {
|
||||
// Convert expiresAt to Unix timestamp
|
||||
$expiresAt = strtotime($cached[self::KEY_ACCESS_TOKEN][self::KEY_EXPIRES_AT]);
|
||||
if ($expiresAt === false) {
|
||||
throw new CredentialsException(
|
||||
'Invalid expiration date format in cached token `'
|
||||
. self::KEY_EXPIRES_AT . '` field.' . self::REAUTHENTICATE_MSG
|
||||
);
|
||||
}
|
||||
|
||||
$cached[self::KEY_ACCESS_TOKEN] = self::createCredentials(
|
||||
$cached[self::KEY_ACCESS_TOKEN],
|
||||
$expiresAt,
|
||||
$cached[self::KEY_ACCESS_TOKEN][self::KEY_ACCOUNT_ID]
|
||||
);
|
||||
|
||||
// Load DPoP key
|
||||
$cached[self::KEY_DPOP_KEY] = openssl_pkey_get_private($cached[self::KEY_DPOP_KEY]);
|
||||
if ($cached[self::KEY_DPOP_KEY] === false) {
|
||||
$error = openssl_error_string();
|
||||
throw new CredentialsException(
|
||||
'Failed to load DPoP private key from cached token for profile '
|
||||
. "{$this->profileName}: " . ($error ? ": {$error}" : '.')
|
||||
. self::REAUTHENTICATE_MSG
|
||||
);
|
||||
}
|
||||
|
||||
return $cached;
|
||||
}
|
||||
|
||||
throw new CredentialsException(
|
||||
'Missing required keys in cached token for profile '
|
||||
. $this->profileName . '.' . self::REAUTHENTICATE_MSG
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Credentials $credentials The credentials to check for expiration
|
||||
*
|
||||
* @return bool True if the token expires within the refresh threshold
|
||||
*/
|
||||
private function shouldRefresh(Credentials $credentials): bool
|
||||
{
|
||||
return ($credentials->getExpiration() - time()) <= self::DEFAULT_REFRESH_THRESHOLD;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles exceptions thrown during token refresh
|
||||
*
|
||||
* @param \Exception $e The exception thrown during refresh
|
||||
*
|
||||
* @return \Exception The exception to be thrown (either transformed or original)
|
||||
*/
|
||||
private function handleRefreshException(\Exception $e): \Exception
|
||||
{
|
||||
if ($e instanceof SigninException) {
|
||||
trigger_error(
|
||||
'Failed to refresh login credentials: ' . $e->getAwsErrorMessage(),
|
||||
E_USER_NOTICE
|
||||
);
|
||||
|
||||
if ($e->getAwsErrorCode() === 'AccessDeniedException') {
|
||||
$error = strtolower($e->get('error'));
|
||||
switch ($error) {
|
||||
case 'token_expired':
|
||||
return new CredentialsException(
|
||||
'Your session has expired.' . self::REAUTHENTICATE_MSG,
|
||||
0,
|
||||
$e
|
||||
);
|
||||
case 'user_credentials_changed':
|
||||
return new CredentialsException(
|
||||
'Unable to refresh credentials because of a change in your password. '
|
||||
. 'Please reauthenticate with your new password.',
|
||||
0,
|
||||
$e
|
||||
);
|
||||
case 'insufficient_permissions':
|
||||
return new CredentialsException(
|
||||
'Unable to refresh credentials due to insufficient permissions. '
|
||||
. 'You may be missing permission for the `CreateOAuth2Token` action.',
|
||||
0,
|
||||
$e
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $e;
|
||||
}
|
||||
|
||||
// For all other exceptions
|
||||
trigger_error(
|
||||
'Unexpected error refreshing login credentials: ' . $e->getMessage(),
|
||||
E_USER_NOTICE
|
||||
);
|
||||
|
||||
return $e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves the cache file location for the given profile
|
||||
*
|
||||
* @param string $profileName The profile name to resolve the token location for
|
||||
*
|
||||
* @return string The full path to the cache file
|
||||
* @throws CredentialsException If the profile doesn't exist, lacks login_session,
|
||||
* or cache file is not readable
|
||||
*/
|
||||
private function resolveTokenLocation(string $profileName): string
|
||||
{
|
||||
$configFile = CredentialProvider::getConfigFileName();
|
||||
if (!is_readable($configFile)) {
|
||||
throw new CredentialsException(
|
||||
'Unable to load configuration file at ' . $configFile
|
||||
. '. Please ensure the file exists at the specified location.'
|
||||
);
|
||||
}
|
||||
|
||||
// Ensure profile and session are set
|
||||
$profiles = CredentialProvider::loadProfiles($configFile);
|
||||
if ($profileName === self::PROFILE_DEFAULT) {
|
||||
$profileData = $profiles[self::PROFILE_DEFAULT] ?? null;
|
||||
} elseif (str_starts_with($profileName, self::PROFILE_SECONDARY)) {
|
||||
$profileData = $profiles[$profileName] ?? null;
|
||||
} else {
|
||||
// Try without prefix first, then with prefix
|
||||
$profileData = $profiles[$profileName]
|
||||
?? $profiles[self::PROFILE_SECONDARY . $profileName]
|
||||
?? null;
|
||||
}
|
||||
|
||||
if (!$profileData) {
|
||||
throw new CredentialsException(
|
||||
"Profile '{$profileName}' does not exist. "
|
||||
. "Please ensure the specified profile is set at {$configFile}."
|
||||
);
|
||||
}
|
||||
|
||||
if (empty($session = $profileData[self::KEY_PROFILE_LOGIN_SESSION] ?? null)) {
|
||||
throw new CredentialsException(
|
||||
"Profile '{$profileName}' did not contain a "
|
||||
. self::KEY_PROFILE_LOGIN_SESSION . " value. "
|
||||
. 're-authentication using `aws login` may be needed.'
|
||||
);
|
||||
}
|
||||
|
||||
// Resolve location and ensure it exists
|
||||
$cacheDirectory = getenv(self::ENV_CACHE_DIRECTORY)
|
||||
?: CredentialProvider::getHomeDir() . self::DEFAULT_CACHE_DIRECTORY;
|
||||
$cacheFile = $cacheDirectory . DIRECTORY_SEPARATOR . hash('sha256', trim($session)) . '.json';
|
||||
if (!@is_readable($cacheFile)) {
|
||||
throw new CredentialsException(
|
||||
"Failed to load cached credentials for profile "
|
||||
. "'{$profileName}'." . self::REAUTHENTICATE_MSG
|
||||
);
|
||||
}
|
||||
|
||||
return $cacheFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SigninClient configured for DPoP authentication
|
||||
*
|
||||
* @param string $profile
|
||||
* @param string|null $region The AWS region for the Signin service
|
||||
*
|
||||
* @return SigninClient A configured SigninClient instance with DPoP signature version
|
||||
*/
|
||||
private function createSigninClient(string $profile, ?string $region): SigninClient
|
||||
{
|
||||
$resolvedRegion = $region
|
||||
?? ConfigurationResolver::env(self::KEY_CLIENT_REGION)
|
||||
?? ConfigurationResolver::ini(self::KEY_CLIENT_REGION, 'string', $profile)
|
||||
?? ConfigurationResolver::ini(
|
||||
self::KEY_CLIENT_REGION,
|
||||
'string',
|
||||
self::PROFILE_SECONDARY . $profile
|
||||
);
|
||||
|
||||
if (empty($resolvedRegion)) {
|
||||
throw new CredentialsException(
|
||||
'Unable to determine region for the Sign-In service client '
|
||||
. ' used for refreshing Login credentials. You can provide a region in-code '
|
||||
. 'when constructing the provider, by setting the AWS_REGION environment variable'
|
||||
. ', or by setting a `region` in your specified profile.'
|
||||
);
|
||||
}
|
||||
|
||||
return new SigninClient([
|
||||
self::KEY_CLIENT_REGION => $resolvedRegion,
|
||||
self::KEY_CLIENT_SIGNATURE_VERSION => self::CLIENT_SIGNATURE_DPOP,
|
||||
self::KEY_CLIENT_CREDENTIALS => false
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a Credentials object from token data
|
||||
*
|
||||
* @param array $tokenData The token data containing access key, secret, and session token
|
||||
* @param int $expiration Unix timestamp for credential expiration
|
||||
* @param string $accountId The AWS account ID
|
||||
*
|
||||
* @return Credentials The created Credentials object
|
||||
*/
|
||||
private static function createCredentials(
|
||||
array $tokenData,
|
||||
int $expiration,
|
||||
string $accountId
|
||||
): Credentials
|
||||
{
|
||||
return new Credentials(
|
||||
$tokenData[self::KEY_ACCESS_KEY_ID],
|
||||
$tokenData[self::KEY_SECRET_ACCESS_KEY],
|
||||
$tokenData[self::KEY_SESSION_TOKEN],
|
||||
$expiration,
|
||||
$accountId,
|
||||
CredentialSources::PROFILE_LOGIN
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if all required keys are present and non-empty in the data array
|
||||
*
|
||||
* @param array $data The data array to check
|
||||
* @param array $requiredKeys The list of keys that must be present and non-empty
|
||||
*
|
||||
* @return bool True if all required keys are present and non-empty, false otherwise
|
||||
*/
|
||||
private static function hasAllRequiredKeys(
|
||||
array $data,
|
||||
array $requiredKeys
|
||||
): bool
|
||||
{
|
||||
foreach ($requiredKeys as $key) {
|
||||
if (empty($data[$key])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,10 @@ use GuzzleHttp\Psr7\Stream;
|
|||
*/
|
||||
abstract class AbstractCryptoClientV2
|
||||
{
|
||||
const KEY_COMMITMENT_POLICIES = [
|
||||
'FORBID_ENCRYPT_ALLOW_DECRYPT'
|
||||
];
|
||||
|
||||
public static $supportedCiphers = ['gcm'];
|
||||
|
||||
public static $supportedKeyWraps = [
|
||||
|
|
@ -19,6 +23,18 @@ abstract class AbstractCryptoClientV2
|
|||
|
||||
public static $legacySecurityProfiles = ['V2_AND_LEGACY'];
|
||||
|
||||
/**
|
||||
* Returns if the passed policy name is supported for encryption by the SDK.
|
||||
*
|
||||
* @param string $policy The name of a key commitment policy to verify is registered.
|
||||
*
|
||||
* @return bool If the key commitment policy passed is in our supported list.
|
||||
*/
|
||||
public static function isSupportedKeyCommitmentPolicy(string $policy): bool
|
||||
{
|
||||
return in_array($policy, self::KEY_COMMITMENT_POLICIES, strict: true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the passed cipher name is supported for encryption by the SDK.
|
||||
*
|
||||
|
|
|
|||
151
vendor/aws/aws-sdk-php/src/Crypto/AbstractCryptoClientV3.php
vendored
Normal file
151
vendor/aws/aws-sdk-php/src/Crypto/AbstractCryptoClientV3.php
vendored
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
<?php
|
||||
|
||||
namespace Aws\Crypto;
|
||||
|
||||
use Aws\Crypto\Cipher\CipherMethod;
|
||||
use GuzzleHttp\Psr7\AppendStream;
|
||||
use GuzzleHttp\Psr7\Stream;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
abstract class AbstractCryptoClientV3
|
||||
{
|
||||
const SUPPORTED_SECURITY_PROFILES = ['V3', 'V3_AND_LEGACY'];
|
||||
|
||||
const LEGACY_SECURITY_PROFILES = ['V3_AND_LEGACY'];
|
||||
|
||||
const KEY_COMMITMENT_POLICIES = [
|
||||
'FORBID_ENCRYPT_ALLOW_DECRYPT',
|
||||
'REQUIRE_ENCRYPT_ALLOW_DECRYPT',
|
||||
'REQUIRE_ENCRYPT_REQUIRE_DECRYPT'
|
||||
];
|
||||
|
||||
public static array $supportedCiphers = ['gcm'];
|
||||
|
||||
public static array $supportedKeyWraps = [
|
||||
KmsMaterialsProviderV3::WRAP_ALGORITHM_NAME
|
||||
];
|
||||
|
||||
/**
|
||||
* Returns if the passed policy name is supported for encryption by the SDK.
|
||||
*
|
||||
* @param string $policy The name of a key commitment policy to verify is registered.
|
||||
*
|
||||
* @return bool If the key commitment policy passed is in our supported list.
|
||||
*/
|
||||
public static function isSupportedKeyCommitmentPolicy(string $policy): bool
|
||||
{
|
||||
return in_array($policy, AbstractCryptoClientV3::KEY_COMMITMENT_POLICIES, strict: true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the passed cipher name is supported for encryption by the SDK.
|
||||
*
|
||||
* @param string $cipherName The name of a cipher to verify is registered.
|
||||
*
|
||||
* @return bool If the cipher passed is in our supported list.
|
||||
*/
|
||||
public static function isSupportedCipher(string $cipherName): bool
|
||||
{
|
||||
return in_array($cipherName, self::$supportedCiphers, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an identifier recognizable by `openssl_*` functions, such as
|
||||
* `aes-256-gcm`
|
||||
*
|
||||
* @param string $cipherName Name of the cipher being used for encrypting
|
||||
* or decrypting.
|
||||
* @param int $keySize Size of the encryption key, in bits, that will be
|
||||
* used.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract protected function getCipherOpenSslName(
|
||||
$cipherName,
|
||||
$keySize
|
||||
);
|
||||
|
||||
/**
|
||||
* Constructs a CipherMethod for the given name, initialized with the other
|
||||
* data passed for use in encrypting or decrypting.
|
||||
*
|
||||
* @param string $cipherName Name of the cipher to generate for encrypting.
|
||||
* @param string $iv Base Initialization Vector for the cipher.
|
||||
* @param int $keySize Size of the encryption key, in bits, that will be
|
||||
* used.
|
||||
*
|
||||
* @return CipherMethod
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract protected function buildCipherMethod(
|
||||
$cipherName,
|
||||
$iv,
|
||||
$keySize
|
||||
);
|
||||
|
||||
/**
|
||||
* Performs a reverse lookup to get the openssl_* cipher name from the
|
||||
* AESName passed in from the MetadataEnvelope.
|
||||
*
|
||||
* @param string $aesName
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract protected function getCipherFromAesName($aesName);
|
||||
|
||||
/**
|
||||
* Dependency to provide an interface for building an encryption stream for
|
||||
* data given cipher details, metadata, and materials to do so.
|
||||
*
|
||||
* @param Stream $plaintext Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param AlgorithmSuite $algorithmSuite AlgorithmSuite for use in encryption.
|
||||
* @param array $options Options for use in encryption, including cipher
|
||||
* options, and encryption context.
|
||||
* @param MaterialsProviderV3 $provider A provider to supply and encrypt
|
||||
* materials used in encryption.
|
||||
* @param MetadataEnvelope $envelope A storage envelope for encryption
|
||||
* metadata to be added to.
|
||||
*
|
||||
* @return AppendStream
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract public function encrypt(
|
||||
Stream $plaintext,
|
||||
AlgorithmSuite $algorithmSuite,
|
||||
array $options,
|
||||
MaterialsProviderV3 $provider,
|
||||
MetadataEnvelope $envelope
|
||||
): AppendStream;
|
||||
|
||||
/**
|
||||
* Dependency to provide an interface for building a decryption stream for
|
||||
* cipher text given metadata and materials to do so.
|
||||
*
|
||||
* @param string $cipherText Plain-text data to be decrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param MaterialsProviderInterface $provider A provider to supply and encrypt
|
||||
* materials used in encryption.
|
||||
* @param MetadataEnvelope $envelope A storage envelope for encryption
|
||||
* metadata to be read from.
|
||||
* @param string $commitmentPolicy Commitment Policy to use for decrypting objects.
|
||||
* @param array $options Options used for decryption.
|
||||
*
|
||||
* @return AesStreamInterface
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract public function decrypt(
|
||||
string $cipherText,
|
||||
MaterialsProviderInterfaceV3 $provider,
|
||||
MetadataEnvelope $envelope,
|
||||
string $commitmentPolicy,
|
||||
array $options = []
|
||||
): AesStreamInterface;
|
||||
}
|
||||
26
vendor/aws/aws-sdk-php/src/Crypto/AlgorithmConstants.php
vendored
Normal file
26
vendor/aws/aws-sdk-php/src/Crypto/AlgorithmConstants.php
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
namespace Aws\Crypto;
|
||||
|
||||
class AlgorithmConstants
|
||||
{
|
||||
/**
|
||||
* The maximum number of 16-byte blocks that can be encrypted with a
|
||||
* GCM cipher. Note the maximum bit-length of the plaintext is (2^39 - 256),
|
||||
* which translates to a maximum byte-length of (2^36 - 32), which in turn
|
||||
* translates to a maximum block-length of (2^32 - 2).
|
||||
*
|
||||
* Reference: NIST Special Publication 800-38D.
|
||||
* @link http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf
|
||||
*/
|
||||
public const GCM_MAX_CONTENT_LENGTH_BITS = (1 << 39) - 256;
|
||||
|
||||
/**
|
||||
* The Maximum length of the content that can be encrypted in CBC mode.
|
||||
*/
|
||||
public const CBC_MAX_CONTENT_LENGTH_BYTES = 1 << 55;
|
||||
|
||||
/**
|
||||
* The maximum number of bytes that can be securely encrypted per a single key using AES/CTR.
|
||||
*/
|
||||
public const CTR_MAX_CONTENT_LENGTH_BYTES = -1;
|
||||
}
|
||||
227
vendor/aws/aws-sdk-php/src/Crypto/AlgorithmSuite.php
vendored
Normal file
227
vendor/aws/aws-sdk-php/src/Crypto/AlgorithmSuite.php
vendored
Normal file
|
|
@ -0,0 +1,227 @@
|
|||
<?php
|
||||
namespace Aws\Crypto;
|
||||
|
||||
use Aws\S3\Crypto\S3EncryptionClientV3;
|
||||
|
||||
enum AlgorithmSuite: int
|
||||
{
|
||||
case ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY = 0x0073;
|
||||
case ALG_AES_256_GCM_IV12_TAG16_NO_KDF = 0x0072;
|
||||
case ALG_AES_256_CBC_IV16_NO_KDF = 0x0070;
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function isLegacy(): bool
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => true,
|
||||
default => false,
|
||||
};
|
||||
}
|
||||
|
||||
public function isKeyCommitting(): bool
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => true,
|
||||
default => false,
|
||||
};
|
||||
}
|
||||
|
||||
public function getDataKeyAlgorithm(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF,
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => "AES",
|
||||
};
|
||||
}
|
||||
|
||||
public function getDataKeyLengthBits(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF,
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => "256",
|
||||
};
|
||||
}
|
||||
|
||||
public function getCipherName(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => "gcm",
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => "cbc",
|
||||
};
|
||||
}
|
||||
|
||||
public function getCipherBlockSizeBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF,
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => 128,
|
||||
};
|
||||
}
|
||||
|
||||
public function getCipherBlockSizeBytes(): int
|
||||
{
|
||||
return $this->getCipherBlockSizeBits() / 8;
|
||||
}
|
||||
|
||||
public function getIvLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => 96,
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => 128,
|
||||
};
|
||||
}
|
||||
|
||||
public function getIvLengthBytes(): int
|
||||
{
|
||||
return $this->getIvLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getCipherTagLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => 128,
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => 0,
|
||||
};
|
||||
}
|
||||
|
||||
public function getCipherTagLengthInBytes(): int
|
||||
{
|
||||
return $this->getCipherTagLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getCipherMaxContentLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF => AlgorithmConstants::GCM_MAX_CONTENT_LENGTH_BITS,
|
||||
self::ALG_AES_256_CBC_IV16_NO_KDF => AlgorithmConstants::CBC_MAX_CONTENT_LENGTH_BYTES,
|
||||
};
|
||||
}
|
||||
|
||||
public function getCipherMaxContentLengthBytes(): int
|
||||
{
|
||||
return $this->getCipherMaxContentLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getHashingAlgorithm(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => "sha512",
|
||||
default => "",
|
||||
};
|
||||
}
|
||||
|
||||
public function getDerivationInputKeyLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256,
|
||||
default => 0,
|
||||
};
|
||||
}
|
||||
|
||||
public function getDerivationInputKeyLengthBytes(): int
|
||||
{
|
||||
return $this->getDerivationInputKeyLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getDerivationOutputKeyLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256,
|
||||
default => 0,
|
||||
};
|
||||
}
|
||||
|
||||
public function getDerivationOutputKeyLengthBytes(): int
|
||||
{
|
||||
return $this->getDerivationOutputKeyLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getCommitmentInputKeyLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 256,
|
||||
default => 0,
|
||||
};
|
||||
}
|
||||
|
||||
public function getCommitmentInputKeyLengthBytes(): int
|
||||
{
|
||||
return $this->getCommitmentInputKeyLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getCommitmentOutputKeyLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 224,
|
||||
default => 0,
|
||||
};
|
||||
}
|
||||
|
||||
public function getCommitmentOutputKeyLengthBytes(): int
|
||||
{
|
||||
return $this->getCommitmentOutputKeyLengthBits() / 8;
|
||||
}
|
||||
|
||||
public function getKeyCommitmentSaltLengthBits(): int
|
||||
{
|
||||
return match ($this) {
|
||||
self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY => 224,
|
||||
default => 0,
|
||||
};
|
||||
}
|
||||
|
||||
//= ../specification/s3-encryption/client.md#key-commitment
|
||||
//# The S3EC MUST validate the configured Encryption Algorithm against the provided key commitment policy.
|
||||
public static function validateCommitmentPolicyOnEncrypt(
|
||||
array $cipherOptions,
|
||||
string $keyCommitmentPolicy
|
||||
): self {
|
||||
$cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']);
|
||||
//= ../specification/s3-encryption/client.md#encryption-algorithm
|
||||
//# The S3EC MUST validate that the configured encryption algorithm is not legacy.
|
||||
if (!S3EncryptionClientV3::isSupportedCipher($cipherOptions['Cipher'])) {
|
||||
//= ../specification/s3-encryption/client.md#encryption-algorithm
|
||||
//# If the configured encryption algorithm is legacy, then the S3EC MUST throw an exception.
|
||||
throw new \InvalidArgumentException('The cipher requested is not'
|
||||
. ' supported by the SDK.');
|
||||
}
|
||||
|
||||
if (empty($cipherOptions['KeySize'])) {
|
||||
$cipherOptions['KeySize'] = 256;
|
||||
}
|
||||
|
||||
if (!is_int($cipherOptions['KeySize'])) {
|
||||
throw new \InvalidArgumentException('The cipher "KeySize" must be'
|
||||
. ' an integer.');
|
||||
}
|
||||
|
||||
if (!MaterialsProviderV3::isSupportedKeySize($cipherOptions['KeySize'])) {
|
||||
throw new \InvalidArgumentException('The cipher "KeySize" requested'
|
||||
. ' is not supported by AES (256).');
|
||||
}
|
||||
|
||||
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
|
||||
//# When the commitment policy is FORBID_ENCRYPT_ALLOW_DECRYPT, the S3EC MUST NOT encrypt using an algorithm suite which supports key commitment.
|
||||
if ($keyCommitmentPolicy === 'FORBID_ENCRYPT_ALLOW_DECRYPT') {
|
||||
return self::ALG_AES_256_GCM_IV12_TAG16_NO_KDF;
|
||||
} else {
|
||||
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
|
||||
//# When the commitment policy is REQUIRE_ENCRYPT_ALLOW_DECRYPT, the S3EC MUST only encrypt using an algorithm suite which supports key commitment.
|
||||
|
||||
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
|
||||
//# When the commitment policy is REQUIRE_ENCRYPT_REQUIRE_DECRYPT, the S3EC MUST only encrypt using an algorithm suite which supports key commitment.
|
||||
return self::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -60,48 +60,138 @@ trait DecryptionTraitV2
|
|||
MaterialsProviderInterfaceV2 $provider,
|
||||
MetadataEnvelope $envelope,
|
||||
array $options = []
|
||||
) {
|
||||
$options['@CipherOptions'] = !empty($options['@CipherOptions'])
|
||||
? $options['@CipherOptions']
|
||||
: [];
|
||||
$options['@CipherOptions']['Iv'] = base64_decode(
|
||||
$envelope[MetadataEnvelope::IV_HEADER]
|
||||
);
|
||||
|
||||
$options['@CipherOptions']['TagLength'] =
|
||||
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] / 8;
|
||||
|
||||
$cek = $provider->decryptCek(
|
||||
base64_decode(
|
||||
$envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER]
|
||||
),
|
||||
json_decode(
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
|
||||
)
|
||||
{
|
||||
$commitmentPolicy = $this->getKeyCommitmentPolicy($options);
|
||||
unset($options['@CommitmentPolicy']);
|
||||
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
|
||||
if ($commitmentPolicy !== "FORBID_ENCRYPT_ALLOW_DECRYPT") {
|
||||
throw new CryptoException(
|
||||
"The requested item is encrypted"
|
||||
. " with Key Commitment. The current policy {$commitmentPolicy}"
|
||||
. " conflicts with the object metadata. Select an appropriate"
|
||||
. " '@CommitmentPolicy' to decrypt this item."
|
||||
);
|
||||
}
|
||||
$algorithmSuite = AlgorithmSuite::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY;
|
||||
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
|
||||
$options['@CipherOptions']['Iv'] = str_repeat("\1", 12);
|
||||
$options['@CipherOptions']['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes();
|
||||
$materialDescription = json_decode(
|
||||
$envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3],
|
||||
true
|
||||
),
|
||||
$options
|
||||
);
|
||||
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
|
||||
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
|
||||
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
|
||||
);
|
||||
);
|
||||
|
||||
$this->validateOptionsAndEnvelope($options, $envelope);
|
||||
|
||||
$decryptionStream = $this->getDecryptingStream(
|
||||
$cipherText,
|
||||
$cek,
|
||||
$options['@CipherOptions']
|
||||
);
|
||||
unset($cek);
|
||||
$cek = $provider->decryptCek(
|
||||
base64_decode($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]),
|
||||
$materialDescription,
|
||||
$options
|
||||
);
|
||||
|
||||
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
|
||||
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
|
||||
$this->numericalContenCipherToAesName($envelope)
|
||||
);
|
||||
$this->validateOptionsAndEnvelope($options, $envelope);
|
||||
|
||||
$messageId = base64_decode($envelope[MetadataEnvelope::MESSAGE_ID_V3]);
|
||||
$commitmentKey = base64_decode($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]);
|
||||
|
||||
if (strlen($messageId) !== ($algorithmSuite->getKeyCommitmentSaltLengthBits()) / 8) {
|
||||
throw new CryptoException("Invalid MessageId length found in object envelope.");
|
||||
}
|
||||
|
||||
if (strlen($commitmentKey) !== $algorithmSuite->getCommitmentOutputKeyLengthBytes()) {
|
||||
throw new CryptoException("Invalid Commitment Key length found in object envelope.");
|
||||
}
|
||||
|
||||
$decryptionStream = $this->getCommitingDecryptingStream(
|
||||
$cipherText,
|
||||
$cek,
|
||||
$options['@CipherOptions'],
|
||||
$messageId,
|
||||
$commitmentKey,
|
||||
$algorithmSuite
|
||||
);
|
||||
unset($cek);
|
||||
|
||||
return $decryptionStream;
|
||||
} else {
|
||||
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
|
||||
$options['@CipherOptions']['Iv'] = base64_decode(
|
||||
$envelope[MetadataEnvelope::IV_HEADER]
|
||||
);
|
||||
|
||||
$options['@CipherOptions']['TagLength'] =
|
||||
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] / 8;
|
||||
|
||||
$cek = $provider->decryptCek(
|
||||
base64_decode(
|
||||
$envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER]
|
||||
),
|
||||
json_decode(
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
|
||||
true
|
||||
),
|
||||
$options
|
||||
);
|
||||
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
|
||||
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
|
||||
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
|
||||
);
|
||||
|
||||
$this->validateOptionsAndEnvelope($options, $envelope);
|
||||
|
||||
$decryptionStream = $this->getDecryptingStream(
|
||||
$cipherText,
|
||||
$cek,
|
||||
$options['@CipherOptions']
|
||||
);
|
||||
unset($cek);
|
||||
|
||||
return $decryptionStream;
|
||||
}
|
||||
}
|
||||
|
||||
private function buildMaterialDescription(
|
||||
MetadataEnvelope $envelope
|
||||
): array
|
||||
{
|
||||
switch ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) {
|
||||
case 12:
|
||||
return ['aws:x-amz-cek-alg' => '115'];
|
||||
default:
|
||||
throw new CryptoException(
|
||||
"Unknown Encrypted Data Key "
|
||||
. "wrapping algorithm found: "
|
||||
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function numericalContenCipherToAesName(
|
||||
MetadataEnvelope $envelope
|
||||
): string
|
||||
{
|
||||
switch ($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) {
|
||||
case 115:
|
||||
return 'AES/GCM/NoPadding';
|
||||
default:
|
||||
throw new CryptoException(
|
||||
"Unknown Encrypted Data Key "
|
||||
. "wrapping algorithm found: "
|
||||
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
|
||||
);
|
||||
}
|
||||
|
||||
return $decryptionStream;
|
||||
}
|
||||
|
||||
private function getTagFromCiphertextStream(
|
||||
StreamInterface $cipherText,
|
||||
$tagLength
|
||||
) {
|
||||
)
|
||||
{
|
||||
$cipherTextSize = $cipherText->getSize();
|
||||
if ($cipherTextSize == null || $cipherTextSize <= 0) {
|
||||
throw new \RuntimeException('Cannot decrypt a stream of unknown'
|
||||
|
|
@ -117,7 +207,8 @@ trait DecryptionTraitV2
|
|||
private function getStrippedCiphertextStream(
|
||||
StreamInterface $cipherText,
|
||||
$tagLength
|
||||
) {
|
||||
)
|
||||
{
|
||||
$cipherTextSize = $cipherText->getSize();
|
||||
if ($cipherTextSize == null || $cipherTextSize <= 0) {
|
||||
throw new \RuntimeException('Cannot decrypt a stream of unknown'
|
||||
|
|
@ -130,7 +221,7 @@ trait DecryptionTraitV2
|
|||
);
|
||||
}
|
||||
|
||||
private function validateOptionsAndEnvelope($options, $envelope)
|
||||
private function validateOptionsAndEnvelope($options, $envelope): void
|
||||
{
|
||||
$allowedCiphers = AbstractCryptoClientV2::$supportedCiphers;
|
||||
$allowedKeywraps = AbstractCryptoClientV2::$supportedKeyWraps;
|
||||
|
|
@ -160,34 +251,38 @@ trait DecryptionTraitV2
|
|||
. " This profile allows decryption with: "
|
||||
. implode(", ", $allowedCiphers));
|
||||
}
|
||||
if (!in_array(
|
||||
$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER],
|
||||
$allowedKeywraps
|
||||
)) {
|
||||
if (in_array(
|
||||
$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER],
|
||||
AbstractCryptoClient::$supportedKeyWraps)
|
||||
) {
|
||||
throw $v1SchemaException;
|
||||
}
|
||||
throw new CryptoException("The requested object is encrypted with"
|
||||
. " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}',"
|
||||
. " which is not supported for decryption with the current security"
|
||||
. " profile.");
|
||||
}
|
||||
|
||||
$matdesc = json_decode(
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
|
||||
true
|
||||
);
|
||||
if (isset($matdesc['aws:x-amz-cek-alg'])
|
||||
&& $envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] !==
|
||||
$matdesc['aws:x-amz-cek-alg']
|
||||
) {
|
||||
throw new CryptoException("There is a mismatch in specified content"
|
||||
. " encryption algrithm between the materials description value"
|
||||
. " and the metadata envelope value: {$matdesc['aws:x-amz-cek-alg']}"
|
||||
. " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}.");
|
||||
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
|
||||
if ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] !== '12') {
|
||||
throw new CryptoException("The requested object is encrypted with"
|
||||
. " the keywrap schema '{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}',"
|
||||
. " which is not supported for decryption with the current security"
|
||||
. " profile.");
|
||||
}
|
||||
} else {
|
||||
if (!in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], $allowedKeywraps)) {
|
||||
if (in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], AbstractCryptoClient::$supportedKeyWraps)) {
|
||||
throw $v1SchemaException;
|
||||
}
|
||||
|
||||
throw new CryptoException("The requested object is encrypted with"
|
||||
. " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}',"
|
||||
. " which is not supported for decryption with the current security"
|
||||
. " profile.");
|
||||
}
|
||||
$matdesc = json_decode(
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
|
||||
true
|
||||
);
|
||||
if (isset($matdesc['aws:x-amz-cek-alg'])
|
||||
&& ($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
|
||||
!== $matdesc['aws:x-amz-cek-alg'])
|
||||
) {
|
||||
throw new CryptoException("There is a mismatch in specified content"
|
||||
. " encryption algrithm between the materials description value"
|
||||
. " and the metadata envelope value: {$matdesc['aws:x-amz-cek-alg']}"
|
||||
. " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -210,14 +305,15 @@ trait DecryptionTraitV2
|
|||
$cipherText,
|
||||
$cek,
|
||||
$cipherOptions
|
||||
) {
|
||||
)
|
||||
{
|
||||
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
|
||||
switch ($cipherOptions['Cipher']) {
|
||||
case 'gcm':
|
||||
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
);
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
);
|
||||
|
||||
return new AesGcmDecryptingStream(
|
||||
$this->getStrippedCiphertextStream(
|
||||
|
|
@ -227,9 +323,7 @@ trait DecryptionTraitV2
|
|||
$cek,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Tag'],
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad']
|
||||
: '',
|
||||
$cipherOptions['Aad'] = $cipherOptions['Aad'] ?? '',
|
||||
$cipherOptions['TagLength'] ?: null,
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
|
|
@ -246,4 +340,85 @@ trait DecryptionTraitV2
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a stream that wraps the cipher text with the proper cipher and
|
||||
* uses the content encryption key (CEK) to derive both a derived content encryption key
|
||||
* and a commitment key to decrypt the data when read.
|
||||
*
|
||||
* @param string $cipherText Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param string $cek A content encryption key for use by the stream for
|
||||
* encrypting the plaintext data.
|
||||
* @param array $cipherOptions Options for use in determining the cipher to
|
||||
* be used for encrypting data.
|
||||
* @param string $messageId a string value used to calculate both a commitment
|
||||
* key and derived content encryption key
|
||||
* @param string $commitmentKey a string value to compare with the calculated commitment
|
||||
* key value, if the values don't match an exception is raised.
|
||||
*
|
||||
* @return AesStreamInterface | CryptoException
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
protected function getCommitingDecryptingStream(
|
||||
string $cipherText,
|
||||
string $cek,
|
||||
array $cipherOptions,
|
||||
string $messageId,
|
||||
string $commitmentKey,
|
||||
AlgorithmSuite $algorithmSuite
|
||||
): AesStreamInterface|CryptoException
|
||||
{
|
||||
$algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId());
|
||||
$derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY";
|
||||
$commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY";
|
||||
$derivedEncryptionKey = hash_hkdf(
|
||||
$algorithmSuite->getHashingAlgorithm(),
|
||||
$cek,
|
||||
$algorithmSuite->getDerivationOutputKeyLengthBytes(),
|
||||
$derivedEncryptionKeyInfo,
|
||||
$messageId
|
||||
);
|
||||
$calculatedCommitmentKey = hash_hkdf(
|
||||
$algorithmSuite->getHashingAlgorithm(),
|
||||
$cek,
|
||||
$algorithmSuite->getCommitmentOutputKeyLengthBytes(),
|
||||
$commitmentKeyInfo,
|
||||
$messageId
|
||||
);
|
||||
|
||||
if ($commitmentKey != $calculatedCommitmentKey) {
|
||||
throw new CryptoException("Calculated commitment key does "
|
||||
. "not match expected commitment key value ");
|
||||
}
|
||||
|
||||
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
|
||||
switch ($cipherOptions['Cipher']) {
|
||||
case 'gcm':
|
||||
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
);
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad'] + $algorithmSuiteIdAsBytes
|
||||
: $algorithmSuiteIdAsBytes;
|
||||
|
||||
return new AesGcmDecryptingStream(
|
||||
$this->getStrippedCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
),
|
||||
$derivedEncryptionKey,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Tag'],
|
||||
$cipherOptions['Aad'],
|
||||
$cipherOptions['TagLength'] ?: null,
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
default:
|
||||
throw new CryptoException("Unsupported Cipher used for key commitment messages."
|
||||
. " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
530
vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php
vendored
Normal file
530
vendor/aws/aws-sdk-php/src/Crypto/DecryptionTraitV3.php
vendored
Normal file
|
|
@ -0,0 +1,530 @@
|
|||
<?php
|
||||
|
||||
namespace Aws\Crypto;
|
||||
|
||||
use Aws\Crypto\Cipher\CipherMethod;
|
||||
use Aws\Exception\CryptoException;
|
||||
use GuzzleHttp\Psr7;
|
||||
use GuzzleHttp\Psr7\LimitStream;
|
||||
use PHPUnit\Framework\Constraint\IsEmpty;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
trait DecryptionTraitV3
|
||||
{
|
||||
/**
|
||||
* Dependency to reverse lookup the openssl_* cipher name from the AESName
|
||||
* in the MetadataEnvelope.
|
||||
*
|
||||
* @param string $aesName
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract protected function getCipherFromAesName($aesName);
|
||||
|
||||
/**
|
||||
* Dependency to generate a CipherMethod from a set of inputs for loading
|
||||
* in to an AesDecryptingStream.
|
||||
*
|
||||
* @param string $cipherName Name of the cipher to generate for decrypting.
|
||||
* @param string $iv Base Initialization Vector for the cipher.
|
||||
* @param int $keySize Size of the encryption key, in bits, that will be
|
||||
* used.
|
||||
*
|
||||
* @return Cipher\CipherMethod
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract protected function buildCipherMethod(
|
||||
$cipherName,
|
||||
$iv,
|
||||
$keySize
|
||||
);
|
||||
|
||||
/**
|
||||
* Builds an AesStreamInterface using cipher options loaded from the
|
||||
* MetadataEnvelope and MaterialsProvider. Can decrypt data from both the
|
||||
* legacy and V3 encryption client workflows.
|
||||
*
|
||||
* @param string $cipherText Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param MaterialsProviderInterfaceV3 $provider A provider to supply and encrypt
|
||||
* materials used in encryption.
|
||||
* @param MetadataEnvelope $envelope A storage envelope for encryption
|
||||
* metadata to be read from.
|
||||
* @param string $commitmentPolicy Commitment Policy to use for decrypting objects.
|
||||
* @param array $options Options used for decryption.
|
||||
*
|
||||
* @return AesStreamInterface
|
||||
*
|
||||
* @throws \InvalidArgumentException Thrown when a value in $cipherOptions
|
||||
* is not valid.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function decrypt(
|
||||
string $cipherText,
|
||||
MaterialsProviderInterfaceV3 $provider,
|
||||
MetadataEnvelope $envelope,
|
||||
string $commitmentPolicy,
|
||||
array $options = []
|
||||
): AesStreamInterface
|
||||
{
|
||||
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
|
||||
$this->checkEnvelopeForExclusiveMapKeys(
|
||||
$envelope,
|
||||
MetadataEnvelope::getV2Fields(),
|
||||
"Expected V3 only fields but found V2 fields in header metadata."
|
||||
);
|
||||
// PHP only supports one commiting algorithm suite
|
||||
$algorithmSuite = AlgorithmSuite::ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY;
|
||||
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
|
||||
$options['@CipherOptions']['Iv'] = str_repeat("\1", 12);
|
||||
$options['@CipherOptions']['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes();
|
||||
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#v3-only
|
||||
//= type=implication
|
||||
//# - The wrapping algorithm value "12" MUST be translated to kms+context upon retrieval, and vice versa on write.
|
||||
$materialDescription = $this->buildMaterialDescription($envelope);
|
||||
|
||||
$cek = $provider->decryptCek(
|
||||
base64_decode($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3]),
|
||||
$materialDescription,
|
||||
$options
|
||||
);
|
||||
|
||||
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
|
||||
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
|
||||
$this->numericalContenCipherToAesName($envelope)
|
||||
);
|
||||
$this->validateOptionsAndEnvelope($options, $envelope, $commitmentPolicy);
|
||||
|
||||
$messageId = base64_decode($envelope[MetadataEnvelope::MESSAGE_ID_V3]);
|
||||
$commitmentKey = base64_decode($envelope[MetadataEnvelope::KEY_COMMITMENT_V3]);
|
||||
|
||||
if (strlen($messageId) !== ($algorithmSuite->getKeyCommitmentSaltLengthBits()) / 8) {
|
||||
throw new CryptoException("Invalid MessageId length found in object envelope.");
|
||||
}
|
||||
|
||||
if (strlen($commitmentKey) !== $algorithmSuite->getCommitmentOutputKeyLengthBytes()) {
|
||||
throw new CryptoException("Invalid Commitment Key length found in object envelope.");
|
||||
}
|
||||
|
||||
$decryptionStream = $this->getCommitingDecryptingStream(
|
||||
$cipherText,
|
||||
$cek,
|
||||
$options['@CipherOptions'],
|
||||
$messageId,
|
||||
$commitmentKey,
|
||||
$algorithmSuite
|
||||
);
|
||||
unset($cek);
|
||||
|
||||
return $decryptionStream;
|
||||
} else {
|
||||
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
|
||||
//# When the commitment policy is REQUIRE_ENCRYPT_REQUIRE_DECRYPT,
|
||||
//# the S3EC MUST NOT allow decryption using algorithm suites which do not support key commitment.
|
||||
if ($commitmentPolicy == "REQUIRE_ENCRYPT_REQUIRE_DECRYPT") {
|
||||
//= ../specification/s3-encryption/client.md#key-commitment
|
||||
//# If the configured Encryption Algorithm is incompatible with
|
||||
//# the key commitment policy, then it MUST throw an exception.
|
||||
throw new CryptoException("Message is encrypted with a "
|
||||
. "non commiting algorithm but commitment policy is set "
|
||||
. "to {$commitmentPolicy}. Select a valid commitment "
|
||||
. "policy to decrypt this object. ");
|
||||
}
|
||||
$this->checkEnvelopeForExclusiveMapKeys(
|
||||
$envelope,
|
||||
MetadataEnvelope::getV3Fields(),
|
||||
"Expected V2 only fields but found V3 fields in header metadata."
|
||||
);
|
||||
$options['@CipherOptions'] = $options['@CipherOptions'] ?? [];
|
||||
$options['@CipherOptions']['Iv'] = base64_decode(
|
||||
$envelope[MetadataEnvelope::IV_HEADER]
|
||||
);
|
||||
|
||||
$options['@CipherOptions']['TagLength'] =
|
||||
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] / 8;
|
||||
|
||||
$cek = $provider->decryptCek(
|
||||
base64_decode(
|
||||
$envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER]
|
||||
),
|
||||
json_decode(
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
|
||||
true
|
||||
),
|
||||
$options
|
||||
);
|
||||
$options['@CipherOptions']['KeySize'] = strlen($cek) * 8;
|
||||
$options['@CipherOptions']['Cipher'] = $this->getCipherFromAesName(
|
||||
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
|
||||
);
|
||||
|
||||
//= ../specification/s3-encryption/decryption.md#key-commitment
|
||||
//= type=implication
|
||||
//# The S3EC MUST validate the algorithm suite used for decryption
|
||||
//# against the key commitment policy before attempting to decrypt
|
||||
//# the content ciphertext.
|
||||
$this->validateOptionsAndEnvelope($options, $envelope, $commitmentPolicy);
|
||||
|
||||
$decryptionStream = $this->getNonCommitingDecryptingStream(
|
||||
$cipherText,
|
||||
$cek,
|
||||
$options['@CipherOptions']
|
||||
);
|
||||
unset($cek);
|
||||
|
||||
return $decryptionStream;
|
||||
}
|
||||
}
|
||||
|
||||
private function checkEnvelopeForExclusiveMapKeys(
|
||||
MetadataEnvelope $envelope,
|
||||
array $exclusiveKeys,
|
||||
string $errorMessage
|
||||
): void
|
||||
{
|
||||
foreach ($exclusiveKeys as $exclusiveKey) {
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
|
||||
//# If there are multiple mapkeys which are meant to be exclusive, such as "x-amz-key", "x-amz-key-v2", and "x-amz-3" then the S3EC SHOULD throw an exception.
|
||||
if (isset($envelope[$exclusiveKey])) {
|
||||
throw new CryptoException($errorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function numericalContenCipherToAesName(
|
||||
MetadataEnvelope $envelope
|
||||
): string
|
||||
{
|
||||
switch ($envelope[MetadataEnvelope::CONTENT_CIPHER_V3]) {
|
||||
case 115:
|
||||
return 'AES/GCM/NoPadding';
|
||||
default:
|
||||
throw new CryptoException(
|
||||
"Unknown Encrypted Data Key "
|
||||
. "wrapping algorithm found: "
|
||||
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function buildMaterialDescription(
|
||||
MetadataEnvelope $envelope
|
||||
): array
|
||||
{
|
||||
switch ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]) {
|
||||
case 12:
|
||||
return json_decode(
|
||||
$envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3],
|
||||
true
|
||||
);
|
||||
default:
|
||||
throw new CryptoException(
|
||||
"Unknown Encrypted Data Key "
|
||||
. "wrapping algorithm found: "
|
||||
. "{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function getTagFromCiphertextStream(
|
||||
StreamInterface $cipherText,
|
||||
$tagLength
|
||||
): string
|
||||
{
|
||||
$cipherTextSize = $cipherText->getSize();
|
||||
if ($cipherTextSize == null || $cipherTextSize <= 0) {
|
||||
throw new \RuntimeException('Cannot decrypt a stream of unknown size');
|
||||
}
|
||||
|
||||
return (string) new LimitStream(
|
||||
$cipherText,
|
||||
$tagLength,
|
||||
$cipherTextSize - $tagLength
|
||||
);
|
||||
}
|
||||
|
||||
private function getStrippedCiphertextStream(
|
||||
StreamInterface $cipherText,
|
||||
$tagLength
|
||||
): LimitStream
|
||||
{
|
||||
$cipherTextSize = $cipherText->getSize();
|
||||
if ($cipherTextSize == null || $cipherTextSize <= 0) {
|
||||
throw new \RuntimeException('Cannot decrypt a stream of unknown size');
|
||||
}
|
||||
|
||||
return new LimitStream(
|
||||
$cipherText,
|
||||
$cipherTextSize - $tagLength,
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
private function validateOptionsAndEnvelope(
|
||||
array $options,
|
||||
MetadataEnvelope $envelope,
|
||||
string $commitmentPolicy
|
||||
): void
|
||||
{
|
||||
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
|
||||
//# When the commitment policy is REQUIRE_ENCRYPT_ALLOW_DECRYPT,
|
||||
//# the S3EC MUST allow decryption using algorithm suites which do not support key commitment.
|
||||
|
||||
//= ../specification/s3-encryption/key-commitment.md#commitment-policy
|
||||
//# When the commitment policy is FORBID_ENCRYPT_ALLOW_DECRYPT,
|
||||
//# the S3EC MUST allow decryption using algorithm suites which do not support key commitment.
|
||||
|
||||
$allowedCiphers = AbstractCryptoClientV3::$supportedCiphers;
|
||||
$allowedKeywraps = AbstractCryptoClientV3::$supportedKeyWraps;
|
||||
//= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms
|
||||
//# When enabled, the S3EC MUST be able to decrypt objects encrypted with all
|
||||
//# supported wrapping algorithms (both legacy and fully supported).
|
||||
if ($options['@SecurityProfile'] == 'V3_AND_LEGACY') {
|
||||
$allowedCiphers = array_unique(array_merge(
|
||||
$allowedCiphers,
|
||||
AbstractCryptoClient::$supportedCiphers
|
||||
));
|
||||
$allowedKeywraps = array_unique(array_merge(
|
||||
$allowedKeywraps,
|
||||
AbstractCryptoClient::$supportedKeyWraps
|
||||
));
|
||||
}
|
||||
|
||||
$v1SchemaException = new CryptoException("The requested object is encrypted"
|
||||
. " with V1 encryption schemas that have been disabled by"
|
||||
. " client configuration @SecurityProfile=V3. Retry with"
|
||||
. " V3_AND_LEGACY enabled or reencrypt the object.");
|
||||
|
||||
if (!in_array($options['@CipherOptions']['Cipher'], $allowedCiphers)) {
|
||||
//= ../specification/s3-encryption/client.md#enable-legacy-wrapping-algorithms
|
||||
//= type=implication
|
||||
//# When disabled, the S3EC MUST NOT decrypt objects encrypted using legacy wrapping algorithms;
|
||||
//# it MUST throw an exception when attempting to decrypt an object encrypted with a legacy wrapping algorithm.
|
||||
|
||||
//= ../specification/s3-encryption/decryption.md#legacy-decryption
|
||||
//# The S3EC MUST NOT decrypt objects encrypted using legacy unauthenticated algorithm suites unless specifically configured to do so.
|
||||
if (in_array($options['@CipherOptions']['Cipher'], AbstractCryptoClient::$supportedCiphers)) {
|
||||
//= ../specification/s3-encryption/decryption.md#legacy-decryption
|
||||
//# If the S3EC is not configured to enable legacy unauthenticated content decryption, the client MUST throw an exception when attempting to decrypt an object encrypted with a legacy unauthenticated algorithm suite.
|
||||
throw $v1SchemaException;
|
||||
}
|
||||
|
||||
throw new CryptoException("The requested object is encrypted with"
|
||||
. " the cipher '{$options['@CipherOptions']['Cipher']}', which is not"
|
||||
. " supported for decryption with the selected security profile."
|
||||
. " This profile allows decryption with: "
|
||||
. implode(", ", $allowedCiphers));
|
||||
}
|
||||
|
||||
if (isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])) {
|
||||
if ($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] !== '12') {
|
||||
throw new CryptoException("The requested object is encrypted with"
|
||||
. " the keywrap schema '{$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3]}',"
|
||||
. " which is not supported for decryption with the current security"
|
||||
. " profile.");
|
||||
}
|
||||
} else {
|
||||
if (!in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], $allowedKeywraps)) {
|
||||
if (in_array($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER], AbstractCryptoClient::$supportedKeyWraps)) {
|
||||
throw $v1SchemaException;
|
||||
}
|
||||
|
||||
throw new CryptoException("The requested object is encrypted with"
|
||||
. " the keywrap schema '{$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER]}',"
|
||||
. " which is not supported for decryption with the current security"
|
||||
. " profile.");
|
||||
}
|
||||
$matdesc = json_decode(
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER],
|
||||
true
|
||||
);
|
||||
if (isset($matdesc['aws:x-amz-cek-alg'])
|
||||
&& ($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]
|
||||
!== $matdesc['aws:x-amz-cek-alg'])
|
||||
) {
|
||||
throw new CryptoException("There is a mismatch in specified content"
|
||||
. " encryption algrithm between the materials description value"
|
||||
. " and the metadata envelope value: {$matdesc['aws:x-amz-cek-alg']}"
|
||||
. " vs. {$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER]}.");
|
||||
}
|
||||
}
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
|
||||
//= type=implication
|
||||
//# - If the metadata contains "x-amz-3" and "x-amz-d" and "x-amz-i" then the object MUST be considered an S3EC-encrypted object using the V3 format.
|
||||
if (!MetadataEnvelope::isV3Envelope($envelope)
|
||||
&& $commitmentPolicy == "REQUIRE_ENCRYPT_REQUIRE_DECRYPT"
|
||||
) {
|
||||
//= ../specification/s3-encryption/decryption.md#key-commitment
|
||||
//# If the commitment policy requires decryption using a committing algorithm suite
|
||||
//# and the algorithm suite associated with the object does not support key commitment,
|
||||
//# then the S3EC MUST throw an exception.
|
||||
throw new CryptoException("There is a mismatch in specified"
|
||||
. "commitment policy value {$commitmentPolicy} and"
|
||||
. "Metadata Envelope found in object.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a stream that wraps the cipher text with the proper cipher and
|
||||
* uses the content encryption key (CEK) to decrypt the data when read.
|
||||
*
|
||||
* @param string $cipherText Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param string $cek A content encryption key for use by the stream for
|
||||
* encrypting the plaintext data.
|
||||
* @param array $cipherOptions Options for use in determining the cipher to
|
||||
* be used for encrypting data.
|
||||
*
|
||||
* @return AesStreamInterface
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
protected function getNonCommitingDecryptingStream(
|
||||
string $cipherText,
|
||||
string $cek,
|
||||
array $cipherOptions
|
||||
): AesStreamInterface
|
||||
{
|
||||
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
|
||||
switch ($cipherOptions['Cipher']) {
|
||||
case 'gcm':
|
||||
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
);
|
||||
|
||||
return new AesGcmDecryptingStream(
|
||||
$this->getStrippedCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
),
|
||||
$cek,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Tag'],
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad']
|
||||
: '',
|
||||
$cipherOptions['TagLength'] ?: null,
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
default:
|
||||
$cipherMethod = $this->buildCipherMethod(
|
||||
$cipherOptions['Cipher'],
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
|
||||
return new AesDecryptingStream(
|
||||
$cipherTextStream,
|
||||
$cek,
|
||||
$cipherMethod
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a stream that wraps the cipher text with the proper cipher and
|
||||
* uses the content encryption key (CEK) to derive both a derived content encryption key
|
||||
* and a commitment key to decrypt the data when read.
|
||||
*
|
||||
* @param string $cipherText Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param string $cek A content encryption key for use by the stream for
|
||||
* encrypting the plaintext data.
|
||||
* @param array $cipherOptions Options for use in determining the cipher to
|
||||
* be used for encrypting data.
|
||||
* @param string $messageId a string value used to calculate both a commitment
|
||||
* key and derived content encryption key
|
||||
* @param string $commitmentKey a string value to compare with the calculated commitment
|
||||
* key value, if the values don't match an exception is raised.
|
||||
*
|
||||
* @return AesStreamInterface | CryptoException
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
protected function getCommitingDecryptingStream(
|
||||
string $cipherText,
|
||||
string $cek,
|
||||
array $cipherOptions,
|
||||
string $messageId,
|
||||
string $commitmentKey,
|
||||
AlgorithmSuite $algorithmSuite
|
||||
): AesStreamInterface|CryptoException
|
||||
{
|
||||
$algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId());
|
||||
$derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY";
|
||||
$commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY";
|
||||
$calculatedCommitmentKey = hash_hkdf(
|
||||
$algorithmSuite->getHashingAlgorithm(),
|
||||
$cek,
|
||||
$algorithmSuite->getCommitmentOutputKeyLengthBytes(),
|
||||
$commitmentKeyInfo,
|
||||
$messageId
|
||||
);
|
||||
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
|
||||
//= type=implication
|
||||
//# When using an algorithm suite which supports key commitment, the client MUST verify that the [derived key commitment](./key-derivation.md#hkdf-operation) contains the same bytes as the stored key commitment retrieved from the stored object's metadata.
|
||||
if (
|
||||
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
|
||||
//= type=implication
|
||||
//# When using an algorithm suite which supports key commitment,
|
||||
//# the verification of the derived key commitment value MUST be done in constant time.
|
||||
!hash_equals($commitmentKey, $calculatedCommitmentKey)
|
||||
) {
|
||||
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
|
||||
//= type=implication
|
||||
//# When using an algorithm suite which supports key commitment, the client MUST
|
||||
//# throw an exception when the derived key commitment value
|
||||
//# and stored key commitment value do not match.
|
||||
throw new CryptoException("Calculated commitment key does "
|
||||
. "not match expected commitment key value ");
|
||||
}
|
||||
//= ../specification/s3-encryption/decryption.md#decrypting-with-commitment
|
||||
//= type=implication
|
||||
//# When using an algorithm suite which supports key commitment,
|
||||
//# the client MUST verify the key commitment values match before
|
||||
//# deriving the [derived encryption key](./key-derivation.md#hkdf-operation).
|
||||
$derivedEncryptionKey = hash_hkdf(
|
||||
$algorithmSuite->getHashingAlgorithm(),
|
||||
$cek,
|
||||
$algorithmSuite->getDerivationOutputKeyLengthBytes(),
|
||||
$derivedEncryptionKeyInfo,
|
||||
$messageId
|
||||
);
|
||||
|
||||
$cipherTextStream = Psr7\Utils::streamFor($cipherText);
|
||||
switch ($cipherOptions['Cipher']) {
|
||||
case 'gcm':
|
||||
$cipherOptions['Tag'] = $this->getTagFromCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
);
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad'] + $algorithmSuiteIdAsBytes
|
||||
: $algorithmSuiteIdAsBytes;
|
||||
|
||||
return new AesGcmDecryptingStream(
|
||||
$this->getStrippedCiphertextStream(
|
||||
$cipherTextStream,
|
||||
$cipherOptions['TagLength']
|
||||
),
|
||||
$derivedEncryptionKey,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Tag'],
|
||||
$cipherOptions['Aad'],
|
||||
$cipherOptions['TagLength'] ?: null,
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
default:
|
||||
throw new CryptoException("Unsupported Cipher used for key commitment messages."
|
||||
. " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -85,9 +85,7 @@ trait EncryptionTraitV2
|
|||
. ' an integer.');
|
||||
}
|
||||
|
||||
if (!MaterialsProviderV2::isSupportedKeySize(
|
||||
$cipherOptions['KeySize']
|
||||
)) {
|
||||
if (!MaterialsProviderV2::isSupportedKeySize($cipherOptions['KeySize'])) {
|
||||
throw new \InvalidArgumentException('The cipher "KeySize" requested'
|
||||
. ' is not supported by AES (128 or 256).');
|
||||
}
|
||||
|
|
@ -130,12 +128,12 @@ trait EncryptionTraitV2
|
|||
$provider->getWrapAlgorithmName();
|
||||
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName;
|
||||
$envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] =
|
||||
strlen($plaintext);
|
||||
(string) strlen($plaintext);
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] =
|
||||
json_encode($materialsDescription);
|
||||
if (!empty($cipherOptions['Tag'])) {
|
||||
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] =
|
||||
strlen($cipherOptions['Tag']) * 8;
|
||||
(string) (strlen($cipherOptions['Tag']) * 8);
|
||||
}
|
||||
|
||||
return $encryptingStream;
|
||||
|
|
@ -170,9 +168,7 @@ trait EncryptionTraitV2
|
|||
$plaintext,
|
||||
$cek,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad']
|
||||
: '',
|
||||
$cipherOptions['Aad'] = $cipherOptions['Aad'] ?? '',
|
||||
$cipherOptions['TagLength'],
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
|
|
|
|||
474
vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php
vendored
Normal file
474
vendor/aws/aws-sdk-php/src/Crypto/EncryptionTraitV3.php
vendored
Normal file
|
|
@ -0,0 +1,474 @@
|
|||
<?php
|
||||
namespace Aws\Crypto;
|
||||
|
||||
use Aws\Crypto\Cipher\CipherMethod;
|
||||
use Aws\Exception\CryptoException;
|
||||
use GuzzleHttp\Psr7;
|
||||
use GuzzleHttp\Psr7\AppendStream;
|
||||
use GuzzleHttp\Psr7\Stream;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
|
||||
trait EncryptionTraitV3
|
||||
{
|
||||
private static array $allowedOptions = [
|
||||
'Cipher' => true,
|
||||
'KeySize' => true,
|
||||
'Aad' => true,
|
||||
];
|
||||
|
||||
private static array $encryptClasses = [
|
||||
'gcm' => AesGcmEncryptingStream::class
|
||||
];
|
||||
|
||||
/**
|
||||
* Dependency to generate a CipherMethod from a set of inputs for loading
|
||||
* in to an AesEncryptingStream.
|
||||
*
|
||||
* @param string $cipherName Name of the cipher to generate for encrypting.
|
||||
* @param string $iv Base Initialization Vector for the cipher.
|
||||
* @param int $keySize Size of the encryption key, in bits, that will be
|
||||
* used.
|
||||
*
|
||||
* @return Cipher\CipherMethod
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract protected function buildCipherMethod(
|
||||
$cipherName,
|
||||
$iv,
|
||||
$keySize
|
||||
);
|
||||
|
||||
/**
|
||||
* Builds an AesStreamInterface and populates encryption metadata into the
|
||||
* supplied envelope.
|
||||
*
|
||||
* @param Stream $plaintext Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param AlgorithmSuite $algorithmSuite Algorithm Suite for use in encryption
|
||||
* @param array $options Options for use in encryption, including cipher
|
||||
* options, and encryption context.
|
||||
* @param MaterialsProviderV3 $provider A provider to supply and encrypt
|
||||
* materials used in encryption.
|
||||
* @param MetadataEnvelope $envelope A storage envelope for encryption
|
||||
* metadata to be added to.
|
||||
*
|
||||
* @return AppendStream
|
||||
*
|
||||
* @throws \InvalidArgumentException Thrown when a value in $options['@CipherOptions']
|
||||
* is not valid.
|
||||
*s
|
||||
* @internal
|
||||
*/
|
||||
public function encrypt(
|
||||
Stream $plaintext,
|
||||
AlgorithmSuite $algorithmSuite,
|
||||
array $options,
|
||||
MaterialsProviderV3 $provider,
|
||||
MetadataEnvelope $envelope
|
||||
): AppendStream
|
||||
{
|
||||
$options = array_change_key_case($options);
|
||||
$cipherOptions = array_intersect_key(
|
||||
$options['@cipheroptions'],
|
||||
self::$allowedOptions
|
||||
);
|
||||
//= ../specification/s3-encryption/encryption.md#content-encryption
|
||||
//= type=implication
|
||||
//# The client MUST validate that the length of the plaintext bytes does not exceed
|
||||
//# the algorithm suite's cipher's maximum content length in bytes.
|
||||
if (strlen($plaintext) > $algorithmSuite->getCipherMaxContentLengthBytes()) {
|
||||
throw new \InvalidArgumentException("The contentLength of the object you are attempting"
|
||||
. " to encrypt exceeds the maximum length allowed for GCM encryption.");
|
||||
}
|
||||
$cipherOptions['Cipher'] = strtolower($cipherOptions['Cipher']);
|
||||
|
||||
if (!self::isSupportedCipher($cipherOptions['Cipher'])) {
|
||||
throw new \InvalidArgumentException('The cipher requested is not'
|
||||
. ' supported by the SDK.');
|
||||
}
|
||||
|
||||
if (empty($cipherOptions['KeySize'])) {
|
||||
$cipherOptions['KeySize'] = 256;
|
||||
}
|
||||
|
||||
if (!is_int($cipherOptions['KeySize'])) {
|
||||
throw new \InvalidArgumentException('The cipher "KeySize" must be'
|
||||
. ' an integer.');
|
||||
}
|
||||
|
||||
if (!MaterialsProviderV3::isSupportedKeySize($cipherOptions['KeySize'])) {
|
||||
throw new \InvalidArgumentException('The cipher "KeySize" requested'
|
||||
. ' is not supported by AES (256).');
|
||||
}
|
||||
|
||||
$encryptClass = self::$encryptClasses[$algorithmSuite->getCipherName()];
|
||||
$aesName = $encryptClass::getStaticAesName();
|
||||
$materialsDescription = $algorithmSuite->isKeyCommitting()
|
||||
? ['aws:x-amz-cek-alg' => '115']
|
||||
: ['aws:x-amz-cek-alg' => $aesName];
|
||||
|
||||
$keys = $provider->generateCek(
|
||||
$algorithmSuite->getDataKeyLengthBits(),
|
||||
$materialsDescription,
|
||||
$options
|
||||
);
|
||||
|
||||
// Some providers modify materials description based on options
|
||||
if (isset($keys['UpdatedContext'])) {
|
||||
$materialsDescription = $keys['UpdatedContext'];
|
||||
}
|
||||
|
||||
if ($algorithmSuite->isKeyCommitting()) {
|
||||
return $this->encryptCommitingStream(
|
||||
$plaintext,
|
||||
$algorithmSuite,
|
||||
$cipherOptions,
|
||||
$keys,
|
||||
$materialsDescription,
|
||||
$provider,
|
||||
$envelope
|
||||
);
|
||||
} else {
|
||||
return $this->encryptNonCommitingStream(
|
||||
$plaintext,
|
||||
$cipherOptions,
|
||||
$keys,
|
||||
$materialsDescription,
|
||||
$aesName,
|
||||
$provider,
|
||||
$envelope
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function encryptNonCommitingStream(
|
||||
Stream $plaintext,
|
||||
array &$cipherOptions,
|
||||
array $keys,
|
||||
array $materialsDescription,
|
||||
string $aesName,
|
||||
MaterialsProviderV3 $provider,
|
||||
MetadataEnvelope $envelope
|
||||
): AppendStream
|
||||
{
|
||||
//= ../specification/s3-encryption/encryption.md#content-encryption
|
||||
//# The generated IV or Message ID MUST be set or returned from the
|
||||
//# encryption process such that it can be included in the content metadata.
|
||||
//= ../specification/s3-encryption/encryption.md#content-encryption
|
||||
//# The client MUST generate an IV or Message ID using the length of the IV or Message ID defined in the algorithm suite.
|
||||
$cipherOptions['Iv'] = $provider->generateIv(
|
||||
$this->getCipherOpenSslName(
|
||||
$cipherOptions['Cipher'],
|
||||
$cipherOptions['KeySize']
|
||||
)
|
||||
);
|
||||
// Some providers modify materials description based on options
|
||||
if (isset($keys['UpdatedContext'])) {
|
||||
$materialsDescription = $keys['UpdatedContext'];
|
||||
}
|
||||
|
||||
$encryptingStream = $this->getNonCommittingEncryptingStream(
|
||||
$plaintext,
|
||||
$keys['Plaintext'],
|
||||
$cipherOptions
|
||||
);
|
||||
|
||||
// Populate envelope data
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
|
||||
//# - If the metadata contains "x-amz-iv" and "x-amz-metadata-x-amz-key-v2" then the object MUST be considered as an S3EC-encrypted object using the V2 format.
|
||||
$envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER] = $keys['Ciphertext'];
|
||||
unset($keys);
|
||||
|
||||
$envelope[MetadataEnvelope::IV_HEADER] =
|
||||
base64_encode($cipherOptions['Iv']);
|
||||
$envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER] =
|
||||
$provider->getWrapAlgorithmName();
|
||||
$envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER] = $aesName;
|
||||
$envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER] =
|
||||
(string) strlen($plaintext);
|
||||
$envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER] =
|
||||
json_encode($materialsDescription);
|
||||
if (!empty($cipherOptions['Tag'])) {
|
||||
$envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER] =
|
||||
(string) (strlen($cipherOptions['Tag']) * 8);
|
||||
}
|
||||
if (!MetadataEnvelope::isV2Envelope($envelope)) {
|
||||
throw new CryptoException("Error while writing metadata envelope."
|
||||
. " Not all required fields were set.");
|
||||
}
|
||||
|
||||
return $encryptingStream;
|
||||
}
|
||||
|
||||
private function encryptCommitingStream(
|
||||
Stream $plaintext,
|
||||
AlgorithmSuite $algorithmSuite,
|
||||
array &$options,
|
||||
array $keys,
|
||||
array $materialsDescription,
|
||||
MaterialsProviderV3 $provider,
|
||||
MetadataEnvelope $envelope
|
||||
): AppendStream
|
||||
{
|
||||
//= ../specification/s3-encryption/encryption.md#content-encryption
|
||||
//# The generated IV or Message ID MUST be set or returned from the
|
||||
//# encryption process such that it can be included in the content metadata.
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# When encrypting or decrypting with ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY,
|
||||
//# the IV used in the AES-GCM content encryption/decryption
|
||||
//# MUST consist entirely of bytes with the value 0x01.
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# The IV's total length MUST match the IV length defined by the algorithm suite.
|
||||
$options['Iv'] = str_repeat("\1", $algorithmSuite->getIvLengthBytes());
|
||||
$messageId = $provider->generateIv(
|
||||
$this->getCipherOpenSslName(
|
||||
$algorithmSuite->getCipherName(),
|
||||
//= ../specification/s3-encryption/encryption.md#content-encryption
|
||||
//# The client MUST generate an IV or Message ID using the length of
|
||||
//# the IV or Message ID defined in the algorithm suite.
|
||||
$algorithmSuite->getKeyCommitmentSaltLengthBits()
|
||||
)
|
||||
);
|
||||
// Some providers modify materials description based on options
|
||||
if (isset($keys['UpdatedContext'])) {
|
||||
$materialsDescription["aws:x-amz-cek-alg"] = (string) $algorithmSuite->getId();
|
||||
}
|
||||
$commitingEncryptingArray = $this->getCommitingEncryptionStream(
|
||||
$plaintext,
|
||||
$keys['Plaintext'],
|
||||
$options,
|
||||
$messageId,
|
||||
$algorithmSuite
|
||||
);
|
||||
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key
|
||||
//= type=implication
|
||||
//# The derived key commitment value MUST be set or returned from the encryption process
|
||||
//# such that it can be included in the content metadata.
|
||||
$commitmentKey = $commitingEncryptingArray[0];
|
||||
$encryptionStream = $commitingEncryptingArray[1];
|
||||
|
||||
// Populate envelope data
|
||||
$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3] = $keys['Ciphertext'];
|
||||
unset($keys);
|
||||
|
||||
$envelope[MetadataEnvelope::CONTENT_CIPHER_V3] = $algorithmSuite->getId();
|
||||
// we are able to always set the encryption context in the envelope because PHP
|
||||
// only supports a KMS Material Provider.
|
||||
$envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3] =
|
||||
json_encode($materialsDescription);
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#v3-only
|
||||
//# The Encryption Context value MUST be used for wrapping algorithm `kms+context` or `12`.
|
||||
$envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3] = '12';
|
||||
$envelope[MetadataEnvelope::KEY_COMMITMENT_V3] = $commitmentKey;
|
||||
$envelope[MetadataEnvelope::MESSAGE_ID_V3] = base64_encode($messageId);
|
||||
if (!MetadataEnvelope::isV3Envelope($envelope)) {
|
||||
throw new CryptoException("Error while writing metadata envelope."
|
||||
. " Not all required fields were set.");
|
||||
}
|
||||
|
||||
return $encryptionStream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a stream that wraps the plaintext with the proper cipher and
|
||||
* uses the content encryption key (CEK) to encrypt the data when read.
|
||||
*
|
||||
* @param Stream $plaintext Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param string $cek A content encryption key for use by the stream for
|
||||
* encrypting the plaintext data.
|
||||
* @param array $cipherOptions Options for use in determining the cipher to
|
||||
* be used for encrypting data.
|
||||
*
|
||||
* @return AppendStream returns an AppendStream
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
protected function getNonCommittingEncryptingStream(
|
||||
Stream $plaintext,
|
||||
string $cek,
|
||||
array &$cipherOptions
|
||||
): AppendStream
|
||||
{
|
||||
// Only 'gcm' is supported for encryption currently
|
||||
switch ($cipherOptions['Cipher']) {
|
||||
//= ../specification/s3-encryption/encryption.md#content-encryption
|
||||
//= type=implication
|
||||
//# The S3EC MUST use the encryption algorithm configured during [client](./client.md) initialization.
|
||||
case 'gcm':
|
||||
$cipherOptions['TagLength'] = 16;
|
||||
$encryptClass = self::$encryptClasses['gcm'];
|
||||
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-iv12-tag16-no-kdf
|
||||
//= type=implication
|
||||
//# The client MUST initialize the cipher, or call an AES-GCM encryption API,
|
||||
//# with the plaintext data key, the generated IV, and the tag length defined
|
||||
//# in the Algorithm Suite when encrypting with ALG_AES_256_GCM_IV12_TAG16_NO_KDF.
|
||||
$cipherTextStream = new $encryptClass(
|
||||
$plaintext,
|
||||
$cek,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad']
|
||||
: '',
|
||||
$cipherOptions['TagLength'],
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
|
||||
if (!empty($cipherOptions['Aad'])) {
|
||||
trigger_error("'Aad' has been supplied for content encryption"
|
||||
. " with " . $cipherTextStream->getAesName() . ". The"
|
||||
. " PHP SDK encryption client can decrypt an object"
|
||||
. " encrypted in this way, but other AWS SDKs may not be"
|
||||
. " able to.", E_USER_WARNING);
|
||||
}
|
||||
|
||||
$appendStream = new AppendStream([
|
||||
$cipherTextStream->createStream()
|
||||
]);
|
||||
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-iv12-tag16-no-kdf
|
||||
//= type=implication
|
||||
//# The client MUST append the GCM auth tag to the ciphertext if the underlying
|
||||
//# crypto provider does not do so automatically.
|
||||
$cipherOptions['Tag'] = $cipherTextStream->getTag();
|
||||
$appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag']));
|
||||
|
||||
return $appendStream;
|
||||
default:
|
||||
throw new CryptoException("Unsupported Cipher used for key commitment messages."
|
||||
. " Found {$cipherOptions["Cipher"]}. Only 'gcm' is supported.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a stream that wraps the plaintext with the proper cipher and
|
||||
* uses the content encryption key (CEK) to encrypt the data when read.
|
||||
*
|
||||
* @param Stream $plaintext Plain-text data to be encrypted using the
|
||||
* materials, algorithm, and data provided.
|
||||
* @param string $cek A content encryption key for use by the stream for
|
||||
* encrypting the plaintext data.
|
||||
* @param array $cipherOptions Options for use in determining the cipher to
|
||||
* be used for encrypting data.
|
||||
* @param string $messageId salt value used for key extraction step in the key
|
||||
* derivation process.
|
||||
* @param AlgorithmSuite $algorithmSuite options used for key commitment
|
||||
*
|
||||
* @return array returns an array with two elements as follows: [commitmentKey, AppendStream]
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
protected function getCommitingEncryptionStream(
|
||||
Stream $plaintext,
|
||||
string $dek,
|
||||
array &$cipherOptions,
|
||||
string $messageId,
|
||||
AlgorithmSuite $algorithmSuite
|
||||
): array
|
||||
{
|
||||
$algorithmSuiteIdAsBytes = pack('n', $algorithmSuite->getId());
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The input info MUST be a concatenation of the algorithm suite ID as bytes followed by the string DERIVEKEY as UTF8 encoded bytes.
|
||||
$derivedEncryptionKeyInfo = $algorithmSuiteIdAsBytes . "DERIVEKEY";
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The input info MUST be a concatenation of the algorithm suite ID as bytes followed by the string COMMITKEY as UTF8 encoded bytes.
|
||||
$commitmentKeyInfo = $algorithmSuiteIdAsBytes . "COMMITKEY";
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The length of the input keying material MUST equal the key derivation
|
||||
//# input length specified by the algorithm suite commit key derivation setting.
|
||||
if (strlen($dek) !== $algorithmSuite->getDerivationInputKeyLengthBytes()) {
|
||||
throw new CryptoException("Input Key Material length exceeds "
|
||||
. "key derivation input length specified by the algorithm suite.");
|
||||
}
|
||||
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key
|
||||
//= type=implication
|
||||
//# The client MUST use HKDF to derive the key commitment value and
|
||||
//# the derived encrypting key as described in [Key Derivation](key-derivation.md).
|
||||
$cek = hash_hkdf(
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The hash function MUST be specified by the algorithm suite commitment settings.
|
||||
$algorithmSuite->getHashingAlgorithm(),
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The input keying material MUST be the plaintext data key (PDK) generated by the key provider.
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The DEK input pseudorandom key MUST be the output from the extract step.
|
||||
$dek,
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The length of the output keying material MUST equal the encryption key length specified by the algorithm suite encryption settings.
|
||||
$algorithmSuite->getDerivationOutputKeyLengthBytes(),
|
||||
$derivedEncryptionKeyInfo,
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The salt MUST be the Message ID with the length defined in the algorithm suite.
|
||||
$messageId
|
||||
);
|
||||
$commitmentKey = hash_hkdf(
|
||||
$algorithmSuite->getHashingAlgorithm(),
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The CK input pseudorandom key MUST be the output from the extract step.
|
||||
$dek,
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# - The length of the output keying material MUST equal the commit key length specified by the supported algorithm suites.
|
||||
$algorithmSuite->getCommitmentOutputKeyLengthBytes(),
|
||||
$commitmentKeyInfo,
|
||||
$messageId
|
||||
);
|
||||
|
||||
switch ($cipherOptions['Cipher']) {
|
||||
// Only 'gcm' is supported for encryption currently
|
||||
case 'gcm':
|
||||
$cipherOptions['TagLength'] = $algorithmSuite->getCipherTagLengthInBytes();
|
||||
$encryptClass = self::$encryptClasses[$algorithmSuite->getCipherName()];
|
||||
|
||||
if (!empty($cipherOptions['Aad'])) {
|
||||
trigger_error("'Aad' has been supplied for content encryption"
|
||||
. " with " . $encryptClass->getAesName() . ". The"
|
||||
. " PHP SDK encryption client can decrypt an object"
|
||||
. " encrypted in this way, but other AWS SDKs may not be"
|
||||
. " able to.", E_USER_NOTICE);
|
||||
}
|
||||
$cipherOptions['Aad'] = isset($cipherOptions['Aad'])
|
||||
? $cipherOptions['Aad'] + $algorithmSuiteIdAsBytes
|
||||
: $algorithmSuiteIdAsBytes;
|
||||
//= ../specification/s3-encryption/key-derivation.md#hkdf-operation
|
||||
//= type=implication
|
||||
//# The client MUST initialize the cipher, or call an AES-GCM encryption API,
|
||||
//# with the derived encryption key, an IV containing only bytes with the value 0x01,
|
||||
//# and the tag length defined in the Algorithm Suite when encrypting or
|
||||
//# decrypting with ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY.
|
||||
$cipherTextStream = new $encryptClass(
|
||||
$plaintext,
|
||||
$cek,
|
||||
$cipherOptions['Iv'],
|
||||
$cipherOptions['Aad'],
|
||||
$cipherOptions['TagLength'],
|
||||
$cipherOptions['KeySize']
|
||||
);
|
||||
|
||||
$appendStream = new AppendStream([
|
||||
$cipherTextStream->createStream()
|
||||
]);
|
||||
//= ../specification/s3-encryption/encryption.md#alg-aes-256-gcm-hkdf-sha512-commit-key
|
||||
//= type=implication
|
||||
//# The client MUST append the GCM auth tag to the ciphertext if the underlying
|
||||
//# crypto provider does not do so automatically.
|
||||
$cipherOptions['Tag'] = $cipherTextStream->getTag();
|
||||
$appendStream->addStream(Psr7\Utils::streamFor($cipherOptions['Tag']));
|
||||
|
||||
return [base64_encode($commitmentKey), $appendStream];
|
||||
default:
|
||||
throw new CryptoException("Unsupported Cipher used for content encryption");
|
||||
}
|
||||
}
|
||||
}
|
||||
159
vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php
vendored
Normal file
159
vendor/aws/aws-sdk-php/src/Crypto/KmsMaterialsProviderV3.php
vendored
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
<?php
|
||||
namespace Aws\Crypto;
|
||||
|
||||
use Aws\Exception\CryptoException;
|
||||
use Aws\Kms\KmsClient;
|
||||
|
||||
/**
|
||||
* Uses KMS to supply materials for encrypting and decrypting data. This
|
||||
* V2 implementation should be used with the V2 encryption clients (i.e.
|
||||
* S3EncryptionClientV2).
|
||||
*/
|
||||
class KmsMaterialsProviderV3 extends MaterialsProviderV3 implements MaterialsProviderInterfaceV3
|
||||
{
|
||||
const WRAP_ALGORITHM_NAME = 'kms+context';
|
||||
private KmsClient $kmsClient;
|
||||
private ?string $kmsKeyId;
|
||||
|
||||
/**
|
||||
* @param KmsClient $kmsClient A KMS Client for use encrypting and
|
||||
* decrypting keys.
|
||||
* @param string $kmsKeyId The private KMS key id to be used for encrypting
|
||||
* and decrypting keys.
|
||||
*/
|
||||
public function __construct(
|
||||
KmsClient $kmsClient,
|
||||
?string $kmsKeyId = null
|
||||
) {
|
||||
$this->kmsClient = $kmsClient;
|
||||
$this->kmsKeyId = $kmsKeyId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getWrapAlgorithmName(): string
|
||||
{
|
||||
return self::WRAP_ALGORITHM_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function decryptCek(
|
||||
string $encryptedCek,
|
||||
array $materialDescription,
|
||||
array $options
|
||||
): string
|
||||
{
|
||||
$options = array_change_key_case($options);
|
||||
$encryptionContext = null;
|
||||
|
||||
// no encryption context was provided we will use the one in the metadata
|
||||
if (!isset($options['@kmsencryptioncontext'])) {
|
||||
$encryptionContext = $materialDescription;
|
||||
} else {
|
||||
// encryption context was passed in, we have to make sure it is an array
|
||||
// and that the reserved keywords were not used
|
||||
if (!is_array($options['@kmsencryptioncontext'])) {
|
||||
throw new CryptoException("'When using @KmsMaterialsProviderV3, it"
|
||||
. " must be an associative array (or empty array).");
|
||||
}
|
||||
|
||||
if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) {
|
||||
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
|
||||
. " key aws:x-amz-cek-alg. This value is reserved for the S3"
|
||||
. " Encryption Client and cannot be set by the user.");
|
||||
}
|
||||
|
||||
if (isset($options['@kmsencryptioncontext']['kms_cmk_id'])) {
|
||||
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
|
||||
. " key kms_cmk_id. This value is reserved for the S3"
|
||||
. " Encryption Client and cannot be set by the user.");
|
||||
}
|
||||
//= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context
|
||||
//= type=implication
|
||||
//# When decrypting using Kms+Context mode, the KmsKeyring MUST validate the provided (request) encryption context with the stored (materials) encryption context.
|
||||
// We are validating the encryption context to match S3EC V2 behavior
|
||||
// Refer to KMSMaterialsHandler in the V2 client for details
|
||||
$materialsDescriptionContextCopy = $materialDescription;
|
||||
unset($materialsDescriptionContextCopy["aws:x-amz-cek-alg"]);
|
||||
unset($materialsDescriptionContextCopy["kms_cmk_id"]);
|
||||
|
||||
$requestEncryptionContext = $options['@kmsencryptioncontext'];
|
||||
//= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context
|
||||
//= type=implication
|
||||
//# The stored encryption context with the two reserved keys removed MUST match the provided encryption context.
|
||||
if ($materialsDescriptionContextCopy !== $requestEncryptionContext) {
|
||||
//= specification/s3-encryption/materials/s3-kms-keyring.md#kms-context
|
||||
//= type=implication
|
||||
//# If the stored encryption context with the two reserved keys removed does not match the provided encryption context, the KmsKeyring MUST throw an exception.
|
||||
throw new CryptoException("Provided encryption context does not match information retrieved from S3");
|
||||
}
|
||||
$encryptionContext = $materialDescription;
|
||||
}
|
||||
$params = [
|
||||
'CiphertextBlob' => $encryptedCek,
|
||||
'EncryptionContext' => $encryptionContext
|
||||
];
|
||||
|
||||
if (empty($options['@kmsallowdecryptwithanycmk'])) {
|
||||
if (empty($this->kmsKeyId)) {
|
||||
throw new CryptoException('KMS CMK ID was not specified and the'
|
||||
. ' operation is not opted-in to attempting to use any valid'
|
||||
. ' CMK it discovers. Please specify a CMK ID, or explicitly'
|
||||
. ' enable attempts to use any valid KMS CMK with the'
|
||||
. ' @KmsAllowDecryptWithAnyCmk option.');
|
||||
}
|
||||
$params['KeyId'] = $this->kmsKeyId;
|
||||
}
|
||||
|
||||
$result = $this->kmsClient->decrypt($params);
|
||||
|
||||
return $result['Plaintext'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function generateCek($keySize, $context, $options): array
|
||||
{
|
||||
if (empty($this->kmsKeyId)) {
|
||||
throw new CryptoException('A KMS key id is required for encryption'
|
||||
. ' with KMS keywrap. Use a KmsMaterialsProviderV2 that has been'
|
||||
. ' instantiated with a KMS key id.');
|
||||
}
|
||||
$options = array_change_key_case($options);
|
||||
if (!isset($options['@kmsencryptioncontext'])
|
||||
|| !is_array($options['@kmsencryptioncontext'])
|
||||
) {
|
||||
throw new CryptoException("'@KmsEncryptionContext' is a"
|
||||
. " required argument when using KmsMaterialsProviderV3, and"
|
||||
. " must be an associative array (or empty array).");
|
||||
}
|
||||
|
||||
if (isset($options['@kmsencryptioncontext']['aws:x-amz-cek-alg'])) {
|
||||
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
|
||||
. " key aws:x-amz-cek-alg. This value is reserved for the S3"
|
||||
. " Encryption Client and cannot be set by the user.");
|
||||
}
|
||||
|
||||
if (isset($options['@kmsencryptioncontext']['kms_cmk_id'])) {
|
||||
throw new CryptoException("Conflict in reserved @KmsEncryptionContext"
|
||||
. " key kms_cmk_id. This value is reserved for the S3"
|
||||
. " Encryption Client and cannot be set by the user.");
|
||||
}
|
||||
$context = array_merge($options['@kmsencryptioncontext'], $context);
|
||||
$result = $this->kmsClient->generateDataKey([
|
||||
'KeyId' => $this->kmsKeyId,
|
||||
'KeySpec' => "AES_{$keySize}",
|
||||
'EncryptionContext' => $context
|
||||
]);
|
||||
|
||||
return [
|
||||
'Plaintext' => $result['Plaintext'],
|
||||
'Ciphertext' => base64_encode($result['CiphertextBlob']),
|
||||
'UpdatedContext' => $context
|
||||
];
|
||||
}
|
||||
}
|
||||
61
vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterfaceV3.php
vendored
Normal file
61
vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderInterfaceV3.php
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
namespace Aws\Crypto;
|
||||
|
||||
interface MaterialsProviderInterfaceV3
|
||||
{
|
||||
/**
|
||||
* Returns if the requested size is supported by AES.
|
||||
*
|
||||
* @param int $keySize Size of the requested key in bits.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSupportedKeySize(int $keySize): bool;
|
||||
|
||||
/**
|
||||
* Returns the wrap algorithm name for this Provider.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getWrapAlgorithmName(): string;
|
||||
|
||||
/**
|
||||
* Takes an encrypted content encryption key (CEK) and material description
|
||||
* for use decrypting the key according to the Provider's specifications.
|
||||
*
|
||||
* @param string $encryptedCek Encrypted key to be decrypted by the Provider
|
||||
* for use decrypting other data.
|
||||
* @param array $materialDescription Material Description for use in
|
||||
* decrypting the CEK.
|
||||
* @param AlgorithmSuite $algorithmSuite AlgorithmSuite for use in decrypting the CEK.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function decryptCek(
|
||||
string $encryptedCek,
|
||||
array $materialDescription,
|
||||
array $options
|
||||
): string;
|
||||
|
||||
/**
|
||||
* @param string $keySize Length of a cipher key in bits for generating a
|
||||
* random content encryption key (CEK).
|
||||
* @param array $context Context map needed for key encryption
|
||||
* @param array $options Additional options to be used in CEK generation
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function generateCek(
|
||||
string $keySize,
|
||||
array $context,
|
||||
array $options
|
||||
): array;
|
||||
|
||||
/**
|
||||
* @param string $openSslName Cipher OpenSSL name to use for generating
|
||||
* an initialization vector.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateIv(string $openSslName): string;
|
||||
}
|
||||
90
vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php
vendored
Normal file
90
vendor/aws/aws-sdk-php/src/Crypto/MaterialsProviderV3.php
vendored
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
namespace Aws\Crypto;
|
||||
|
||||
use Aws\Exception\CryptoException;
|
||||
|
||||
abstract class MaterialsProviderV3 implements MaterialsProviderInterfaceV3
|
||||
{
|
||||
private static array $supportedKeySizes = [
|
||||
256 => true
|
||||
];
|
||||
|
||||
/**
|
||||
* Returns if the requested size is supported by AES.
|
||||
*
|
||||
* @param int $keySize Size of the requested key in bits.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSupportedKeySize(int $keySize): bool
|
||||
{
|
||||
return isset(self::$supportedKeySizes[$keySize]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the wrap algorithm name for this Provider.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract public function getWrapAlgorithmName(): string;
|
||||
|
||||
/**
|
||||
* Takes an encrypted content encryption key (CEK) and material description
|
||||
* for use decrypting the key according to the Provider's specifications.
|
||||
*
|
||||
* @param string $encryptedCek Encrypted key to be decrypted by the Provider
|
||||
* for use decrypting other data.
|
||||
* @param array $materialDescription Material Description for use in
|
||||
* decrypting the CEK.
|
||||
* @param array $options Options for use in decrypting the CEK.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract public function decryptCek(
|
||||
string $encryptedCek,
|
||||
array $materialDescription,
|
||||
array $options
|
||||
): string;
|
||||
|
||||
/**
|
||||
* @param string $keySize Length of a cipher key in bits for generating a
|
||||
* random content encryption key (CEK).
|
||||
* @param array $context Context map needed for key encryption
|
||||
* @param array $options Additional options to be used in CEK generation
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
abstract public function generateCek(
|
||||
string $keySize,
|
||||
array $context,
|
||||
array $options
|
||||
): array;
|
||||
|
||||
/**
|
||||
* @param string $openSslName Cipher OpenSSL name to use for generating
|
||||
* an initialization vector.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateIv(string $openSslName): string
|
||||
{
|
||||
$iv = null;
|
||||
$cstrong = null;
|
||||
|
||||
if ($openSslName === "aes-96-gcm") {
|
||||
$iv = openssl_random_pseudo_bytes(12, $cstrong);
|
||||
} else if ($openSslName === "aes-224-gcm") {
|
||||
$iv = openssl_random_pseudo_bytes(28, $cstrong);
|
||||
} else {
|
||||
$iv = openssl_random_pseudo_bytes(
|
||||
openssl_cipher_iv_length($openSslName),
|
||||
$cstrong
|
||||
);
|
||||
}
|
||||
if (!$cstrong) {
|
||||
throw new CryptoException("No strong cryptographic source available to generate a random IV.");
|
||||
}
|
||||
|
||||
return $iv;
|
||||
}
|
||||
}
|
||||
|
|
@ -16,13 +16,63 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
|
|||
{
|
||||
use HasDataTrait;
|
||||
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# The "x-amz-" prefix denotes that the metadata is owned by an Amazon product
|
||||
//# and MUST be prepended to all S3EC metadata mapkeys.
|
||||
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-key-v2" MUST be present for V2 format objects.
|
||||
const CONTENT_KEY_V2_HEADER = 'x-amz-key-v2';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-3") SHOULD be represented by a constant named "ENCRYPTED_DATA_KEY_V3" or similar in the implementation code.
|
||||
const ENCRYPTED_DATA_KEY_V3 = 'x-amz-3';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-iv" MUST be present for V1 format objects.
|
||||
const IV_HEADER = 'x-amz-iv';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects.
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-matdesc" MUST be present for V2 format objects.
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-iv" MUST be present for V2 format objects.
|
||||
const MATERIALS_DESCRIPTION_HEADER = 'x-amz-matdesc';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-m") SHOULD be represented by a constant named "MAT_DESC_V3" or similar in the implementation code.
|
||||
const MAT_DESC_V3 = 'x-amz-m';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-wrap-alg" MUST be present for V2 format objects.
|
||||
const KEY_WRAP_ALGORITHM_HEADER = 'x-amz-wrap-alg';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-w") SHOULD be represented by a constant named "ENCRYPTED_DATA_KEY_ALGORITHM_V3" or similar in the implementation code.
|
||||
const ENCRYPTED_DATA_KEY_ALGORITHM_V3 = 'x-amz-w';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-cek-alg" MUST be present for V2 format objects.
|
||||
const CONTENT_CRYPTO_SCHEME_HEADER = 'x-amz-cek-alg';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-c") SHOULD be represented by a constant named "CONTENT_CIPHER_V3" or similar in the implementation code.
|
||||
const CONTENT_CIPHER_V3 = 'x-amz-c';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-tag-len" MUST be present for V2 format objects.
|
||||
const CRYPTO_TAG_LENGTH_HEADER = 'x-amz-tag-len';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects.
|
||||
const UNENCRYPTED_CONTENT_LENGTH_HEADER = 'x-amz-unencrypted-content-length';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-t") SHOULD be represented by a constant named "ENCRYPTION_CONTEXT_V3" or similar in the implementation code.
|
||||
const ENCRYPTION_CONTEXT_V3 = 'x-amz-t';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-d") SHOULD be represented by a constant named "KEY_COMMITMENT_V3" or similar in the implementation code.
|
||||
const KEY_COMMITMENT_V3 = 'x-amz-d';
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - This mapkey ("x-amz-i") SHOULD be represented by a constant named "MESSAGE_ID_V3" or similar in the implementation code.
|
||||
const MESSAGE_ID_V3 = 'x-amz-i';
|
||||
|
||||
private static $constants = [];
|
||||
|
||||
|
|
@ -30,6 +80,8 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
|
|||
{
|
||||
if (empty(self::$constants)) {
|
||||
$reflection = new \ReflectionClass(static::class);
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# The "x-amz-meta-" prefix is automatically added by the S3 server and MUST NOT be included in implementation code.
|
||||
foreach (array_values($reflection->getConstants()) as $constant) {
|
||||
self::$constants[$constant] = true;
|
||||
}
|
||||
|
|
@ -45,6 +97,8 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
|
|||
public function offsetSet($name, $value)
|
||||
{
|
||||
$constants = self::getConstantValues();
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#determining-s3ec-object-status
|
||||
//# In general, if there is any deviation from the above format, with the exception of additional unrelated mapkeys, then the S3EC SHOULD throw an exception.
|
||||
if (is_null($name) || !in_array($name, $constants)) {
|
||||
throw new InvalidArgumentException('MetadataEnvelope fields must'
|
||||
. ' must match a predefined offset; use the header constants.');
|
||||
|
|
@ -58,4 +112,96 @@ class MetadataEnvelope implements ArrayAccess, IteratorAggregate, JsonSerializab
|
|||
{
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
public static function isV2Envelope(MetadataEnvelope $envelope): bool
|
||||
{
|
||||
if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::IV_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER])
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function isV1Envelope(MetadataEnvelope $envelope): bool
|
||||
{
|
||||
if (!isset($envelope[MetadataEnvelope::CONTENT_KEY_V2_HEADER])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-matdesc" MUST be present for V1 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-iv" MUST be present for V1 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::IV_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER])
|
||||
|| !isset($envelope[MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//# - The mapkey "x-amz-unencrypted-content-length" SHOULD be present for V1 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::UNENCRYPTED_CONTENT_LENGTH_HEADER])
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function isV3Envelope(MetadataEnvelope $envelope): bool
|
||||
{
|
||||
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - The mapkey "x-amz-3" MUST be present for V3 format objects.
|
||||
if (!isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_V3])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - The mapkey "x-amz-c" MUST be present for V3 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::CONTENT_CIPHER_V3])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - The mapkey "x-amz-d" MUST be present for V3 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::KEY_COMMITMENT_V3])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - The mapkey "x-amz-i" MUST be present for V3 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::MESSAGE_ID_V3])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - The mapkey "x-amz-w" MUST be present for V3 format objects.
|
||||
|| !isset($envelope[MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3])
|
||||
//= ../specification/s3-encryption/data-format/content-metadata.md#content-metadata-mapkeys
|
||||
//= type=implication
|
||||
//# - The mapkey "x-amz-t" SHOULD be present for V3 format objects that use KMS Encryption Context.
|
||||
|| !isset($envelope[MetadataEnvelope::ENCRYPTION_CONTEXT_V3])
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function getV2Fields(): array
|
||||
{
|
||||
return [
|
||||
MetadataEnvelope::CONTENT_KEY_V2_HEADER,
|
||||
MetadataEnvelope::MATERIALS_DESCRIPTION_HEADER,
|
||||
MetadataEnvelope::IV_HEADER,
|
||||
MetadataEnvelope::KEY_WRAP_ALGORITHM_HEADER,
|
||||
MetadataEnvelope::CONTENT_CRYPTO_SCHEME_HEADER,
|
||||
MetadataEnvelope::CRYPTO_TAG_LENGTH_HEADER
|
||||
];
|
||||
}
|
||||
|
||||
public static function getV3Fields(): array
|
||||
{
|
||||
return [
|
||||
MetadataEnvelope::ENCRYPTED_DATA_KEY_V3,
|
||||
MetadataEnvelope::CONTENT_CIPHER_V3,
|
||||
MetadataEnvelope::KEY_COMMITMENT_V3,
|
||||
MetadataEnvelope::MESSAGE_ID_V3,
|
||||
MetadataEnvelope::ENCRYPTED_DATA_KEY_ALGORITHM_V3,
|
||||
MetadataEnvelope::ENCRYPTION_CONTEXT_V3
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createIntegrationWorkflowAsync(array $args = [])
|
||||
* @method \Aws\Result createProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createProfileAsync(array $args = [])
|
||||
* @method \Aws\Result createRecommender(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createRecommenderAsync(array $args = [])
|
||||
* @method \Aws\Result createSegmentDefinition(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createSegmentDefinitionAsync(array $args = [])
|
||||
* @method \Aws\Result createSegmentEstimate(array $args = [])
|
||||
|
|
@ -39,6 +41,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteDomainAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDomainLayout(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDomainLayoutAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDomainObjectType(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDomainObjectTypeAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEventStream(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteEventStreamAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEventTrigger(array $args = [])
|
||||
|
|
@ -53,6 +57,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteProfileObjectAsync(array $args = [])
|
||||
* @method \Aws\Result deleteProfileObjectType(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteProfileObjectTypeAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRecommender(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRecommenderAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSegmentDefinition(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSegmentDefinitionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteWorkflow(array $args = [])
|
||||
|
|
@ -69,6 +75,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getDomainAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainLayout(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainLayoutAsync(array $args = [])
|
||||
* @method \Aws\Result getDomainObjectType(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDomainObjectTypeAsync(array $args = [])
|
||||
* @method \Aws\Result getEventStream(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getEventStreamAsync(array $args = [])
|
||||
* @method \Aws\Result getEventTrigger(array $args = [])
|
||||
|
|
@ -79,10 +87,18 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result getMatches(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMatchesAsync(array $args = [])
|
||||
* @method \Aws\Result getObjectTypeAttributeStatistics(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getObjectTypeAttributeStatisticsAsync(array $args = [])
|
||||
* @method \Aws\Result getProfileHistoryRecord(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProfileHistoryRecordAsync(array $args = [])
|
||||
* @method \Aws\Result getProfileObjectType(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProfileObjectTypeAsync(array $args = [])
|
||||
* @method \Aws\Result getProfileObjectTypeTemplate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProfileObjectTypeTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result getProfileRecommendations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProfileRecommendationsAsync(array $args = [])
|
||||
* @method \Aws\Result getRecommender(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRecommenderAsync(array $args = [])
|
||||
* @method \Aws\Result getSegmentDefinition(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSegmentDefinitionAsync(array $args = [])
|
||||
* @method \Aws\Result getSegmentEstimate(array $args = [])
|
||||
|
|
@ -109,6 +125,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listCalculatedAttributesForProfileAsync(array $args = [])
|
||||
* @method \Aws\Result listDomainLayouts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDomainLayoutsAsync(array $args = [])
|
||||
* @method \Aws\Result listDomainObjectTypes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDomainObjectTypesAsync(array $args = [])
|
||||
* @method \Aws\Result listDomains(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDomainsAsync(array $args = [])
|
||||
* @method \Aws\Result listEventStreams(array $args = [])
|
||||
|
|
@ -119,16 +137,24 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listIdentityResolutionJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listIntegrations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listIntegrationsAsync(array $args = [])
|
||||
* @method \Aws\Result listObjectTypeAttributeValues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listObjectTypeAttributeValuesAsync(array $args = [])
|
||||
* @method \Aws\Result listObjectTypeAttributes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listObjectTypeAttributesAsync(array $args = [])
|
||||
* @method \Aws\Result listProfileAttributeValues(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProfileAttributeValuesAsync(array $args = [])
|
||||
* @method \Aws\Result listProfileHistoryRecords(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProfileHistoryRecordsAsync(array $args = [])
|
||||
* @method \Aws\Result listProfileObjectTypeTemplates(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProfileObjectTypeTemplatesAsync(array $args = [])
|
||||
* @method \Aws\Result listProfileObjectTypes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProfileObjectTypesAsync(array $args = [])
|
||||
* @method \Aws\Result listProfileObjects(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProfileObjectsAsync(array $args = [])
|
||||
* @method \Aws\Result listRecommenderRecipes(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRecommenderRecipesAsync(array $args = [])
|
||||
* @method \Aws\Result listRecommenders(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRecommendersAsync(array $args = [])
|
||||
* @method \Aws\Result listRuleBasedMatches(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRuleBasedMatchesAsync(array $args = [])
|
||||
* @method \Aws\Result listSegmentDefinitions(array $args = [])
|
||||
|
|
@ -141,6 +167,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listWorkflowsAsync(array $args = [])
|
||||
* @method \Aws\Result mergeProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise mergeProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result putDomainObjectType(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putDomainObjectTypeAsync(array $args = [])
|
||||
* @method \Aws\Result putIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result putProfileObject(array $args = [])
|
||||
|
|
@ -149,8 +177,12 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise putProfileObjectTypeAsync(array $args = [])
|
||||
* @method \Aws\Result searchProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise searchProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result startRecommender(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startRecommenderAsync(array $args = [])
|
||||
* @method \Aws\Result startUploadJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startUploadJobAsync(array $args = [])
|
||||
* @method \Aws\Result stopRecommender(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopRecommenderAsync(array $args = [])
|
||||
* @method \Aws\Result stopUploadJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopUploadJobAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
|
|
@ -167,5 +199,7 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateEventTriggerAsync(array $args = [])
|
||||
* @method \Aws\Result updateProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateProfileAsync(array $args = [])
|
||||
* @method \Aws\Result updateRecommender(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRecommenderAsync(array $args = [])
|
||||
*/
|
||||
class CustomerProfilesClient extends AwsClient {}
|
||||
|
|
|
|||
|
|
@ -9,14 +9,20 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteClusterPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteClusterPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getClusterAsync(array $args = [])
|
||||
* @method \Aws\Result getClusterPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getClusterPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getVpcEndpointServiceName(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcEndpointServiceNameAsync(array $args = [])
|
||||
* @method \Aws\Result listClusters(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result putClusterPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putClusterPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result tagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise associateEnvironmentRoleAsync(array $args = [])
|
||||
* @method \Aws\Result associateGovernedTerms(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateGovernedTermsAsync(array $args = [])
|
||||
* @method \Aws\Result batchGetAttributesMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchGetAttributesMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result batchPutAttributesMetadata(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchPutAttributesMetadataAsync(array $args = [])
|
||||
* @method \Aws\Result cancelMetadataGenerationRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelMetadataGenerationRunAsync(array $args = [])
|
||||
* @method \Aws\Result cancelSubscription(array $args = [])
|
||||
|
|
@ -87,6 +91,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteAssetTypeAsync(array $args = [])
|
||||
* @method \Aws\Result deleteConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteConnectionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDataExportConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDataExportConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDataProduct(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteDataProductAsync(array $args = [])
|
||||
* @method \Aws\Result deleteDataSource(array $args = [])
|
||||
|
|
@ -143,6 +149,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getAssetTypeAsync(array $args = [])
|
||||
* @method \Aws\Result getConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getConnectionAsync(array $args = [])
|
||||
* @method \Aws\Result getDataExportConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDataExportConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getDataProduct(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDataProductAsync(array $args = [])
|
||||
* @method \Aws\Result getDataSource(array $args = [])
|
||||
|
|
@ -273,6 +281,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise postLineageEventAsync(array $args = [])
|
||||
* @method \Aws\Result postTimeSeriesDataPoints(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise postTimeSeriesDataPointsAsync(array $args = [])
|
||||
* @method \Aws\Result putDataExportConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putDataExportConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result putEnvironmentBlueprintConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putEnvironmentBlueprintConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result rejectPredictions(array $args = [])
|
||||
|
|
@ -333,6 +343,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateProjectAsync(array $args = [])
|
||||
* @method \Aws\Result updateProjectProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateProjectProfileAsync(array $args = [])
|
||||
* @method \Aws\Result updateRootDomainUnitOwner(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRootDomainUnitOwnerAsync(array $args = [])
|
||||
* @method \Aws\Result updateRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRuleAsync(array $args = [])
|
||||
* @method \Aws\Result updateSubscriptionGrantStatus(array $args = [])
|
||||
|
|
|
|||
|
|
@ -11,6 +11,10 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise applyPendingMaintenanceActionAsync(array $args = [])
|
||||
* @method \Aws\Result batchStartRecommendations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise batchStartRecommendationsAsync(array $args = [])
|
||||
* @method \Aws\Result cancelMetadataModelConversion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelMetadataModelConversionAsync(array $args = [])
|
||||
* @method \Aws\Result cancelMetadataModelCreation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelMetadataModelCreationAsync(array $args = [])
|
||||
* @method \Aws\Result cancelReplicationTaskAssessmentRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelReplicationTaskAssessmentRunAsync(array $args = [])
|
||||
* @method \Aws\Result createDataMigration(array $args = [])
|
||||
|
|
@ -107,10 +111,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeFleetAdvisorSchemasAsync(array $args = [])
|
||||
* @method \Aws\Result describeInstanceProfiles(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeInstanceProfilesAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModel(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeMetadataModelAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModelAssessments(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeMetadataModelAssessmentsAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModelChildren(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeMetadataModelChildrenAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModelConversions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeMetadataModelConversionsAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModelCreations(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeMetadataModelCreationsAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModelExportsAsScript(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeMetadataModelExportsAsScriptAsync(array $args = [])
|
||||
* @method \Aws\Result describeMetadataModelExportsToTarget(array $args = [])
|
||||
|
|
@ -155,6 +165,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeTableStatisticsAsync(array $args = [])
|
||||
* @method \Aws\Result exportMetadataModelAssessment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise exportMetadataModelAssessmentAsync(array $args = [])
|
||||
* @method \Aws\Result getTargetSelectionRules(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getTargetSelectionRulesAsync(array $args = [])
|
||||
* @method \Aws\Result importCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise importCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
|
|
@ -203,6 +215,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startMetadataModelAssessmentAsync(array $args = [])
|
||||
* @method \Aws\Result startMetadataModelConversion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMetadataModelConversionAsync(array $args = [])
|
||||
* @method \Aws\Result startMetadataModelCreation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMetadataModelCreationAsync(array $args = [])
|
||||
* @method \Aws\Result startMetadataModelExportAsScript(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMetadataModelExportAsScriptAsync(array $args = [])
|
||||
* @method \Aws\Result startMetadataModelExportToTarget(array $args = [])
|
||||
|
|
|
|||
10
vendor/aws/aws-sdk-php/src/EKS/EKSClient.php
vendored
10
vendor/aws/aws-sdk-php/src/EKS/EKSClient.php
vendored
|
|
@ -15,6 +15,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createAccessEntryAsync(array $args = [])
|
||||
* @method \Aws\Result createAddon(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAddonAsync(array $args = [])
|
||||
* @method \Aws\Result createCapability(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createCapabilityAsync(array $args = [])
|
||||
* @method \Aws\Result createCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
|
||||
* @method \Aws\Result createEksAnywhereSubscription(array $args = [])
|
||||
|
|
@ -29,6 +31,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteAccessEntryAsync(array $args = [])
|
||||
* @method \Aws\Result deleteAddon(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteAddonAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCapability(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCapabilityAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteEksAnywhereSubscription(array $args = [])
|
||||
|
|
@ -49,6 +53,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeAddonConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result describeAddonVersions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeAddonVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result describeCapability(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapabilityAsync(array $args = [])
|
||||
* @method \Aws\Result describeCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeClusterAsync(array $args = [])
|
||||
* @method \Aws\Result describeClusterVersions(array $args = [])
|
||||
|
|
@ -81,6 +87,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listAddonsAsync(array $args = [])
|
||||
* @method \Aws\Result listAssociatedAccessPolicies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAssociatedAccessPoliciesAsync(array $args = [])
|
||||
* @method \Aws\Result listCapabilities(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listCapabilitiesAsync(array $args = [])
|
||||
* @method \Aws\Result listClusters(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listClustersAsync(array $args = [])
|
||||
* @method \Aws\Result listEksAnywhereSubscriptions(array $args = [])
|
||||
|
|
@ -111,6 +119,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateAccessEntryAsync(array $args = [])
|
||||
* @method \Aws\Result updateAddon(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAddonAsync(array $args = [])
|
||||
* @method \Aws\Result updateCapability(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateCapabilityAsync(array $args = [])
|
||||
* @method \Aws\Result updateClusterConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateClusterConfigAsync(array $args = [])
|
||||
* @method \Aws\Result updateClusterVersion(array $args = [])
|
||||
|
|
|
|||
112
vendor/aws/aws-sdk-php/src/Ec2/Ec2Client.php
vendored
112
vendor/aws/aws-sdk-php/src/Ec2/Ec2Client.php
vendored
|
|
@ -8,7 +8,7 @@ use Aws\Api\ApiProvider;
|
|||
use Aws\PresignUrlMiddleware;
|
||||
|
||||
/**
|
||||
* Client used to interact with Amazon EC2.
|
||||
* Client used to interact with **Amazon EC2**.
|
||||
*
|
||||
* @method \Aws\Result acceptVpcPeeringConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise acceptVpcPeeringConnectionAsync(array $args = [])
|
||||
|
|
@ -502,6 +502,10 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise cancelImageLaunchPermissionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result copyFpgaImage(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise copyFpgaImageAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result copyVolumes(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise copyVolumesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createCapacityManagerDataExport(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createCapacityManagerDataExportAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createCapacityReservation(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createCapacityReservationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createCapacityReservationBySplitting(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -536,12 +540,20 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise createInstanceConnectEndpointAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createInstanceEventWindow(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createInstanceEventWindowAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createInterruptibleCapacityReservationAllocation(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createInterruptibleCapacityReservationAllocationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpam(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamExternalResourceVerificationToken(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamExternalResourceVerificationTokenAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamPool(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamPoolAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamPrefixListResolver(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamPrefixListResolverAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamPrefixListResolverTarget(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamPrefixListResolverTargetAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createIpamResourceDiscoveryAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createIpamScope(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -604,6 +616,10 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise createTransitGatewayConnectAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createTransitGatewayConnectPeer(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createTransitGatewayConnectPeerAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createTransitGatewayMeteringPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createTransitGatewayMeteringPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createTransitGatewayMeteringPolicyEntry(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createTransitGatewayMeteringPolicyEntryAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createTransitGatewayMulticastDomain(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createTransitGatewayMulticastDomainAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createTransitGatewayPeeringAttachment(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -630,10 +646,16 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise createVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createVpcBlockPublicAccessExclusion(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createVpcEncryptionControl(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcEncryptionControlAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createVpcEndpointConnectionNotification(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcEndpointConnectionNotificationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createVpcEndpointServiceConfiguration(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createVpcEndpointServiceConfigurationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result createVpnConcentrator(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise createVpnConcentratorAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteCapacityManagerDataExport(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCapacityManagerDataExportAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteCarrierGateway(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteCarrierGatewayAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteClientVpnEndpoint(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -660,8 +682,14 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteIpamAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamExternalResourceVerificationToken(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIpamExternalResourceVerificationTokenAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamPool(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIpamPoolAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamPrefixListResolver(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIpamPrefixListResolverAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamPrefixListResolverTarget(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIpamPrefixListResolverTargetAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIpamResourceDiscoveryAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteIpamScope(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -720,6 +748,10 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayConnectAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteTransitGatewayConnectPeer(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayConnectPeerAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteTransitGatewayMeteringPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMeteringPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteTransitGatewayMeteringPolicyEntry(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMeteringPolicyEntryAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteTransitGatewayMulticastDomain(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteTransitGatewayMulticastDomainAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteTransitGatewayPeeringAttachment(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -746,10 +778,14 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteVpcBlockPublicAccessExclusion(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteVpcEncryptionControl(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcEncryptionControlAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteVpcEndpointConnectionNotifications(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcEndpointConnectionNotificationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteVpcEndpointServiceConfigurations(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpcEndpointServiceConfigurationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deleteVpnConcentrator(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deleteVpnConcentratorAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deprovisionByoipCidr(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise deprovisionByoipCidrAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result deprovisionIpamByoasn(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -784,10 +820,14 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise describeCapacityBlockStatusAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCapacityBlocks(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapacityBlocksAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCapacityManagerDataExports(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapacityManagerDataExportsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCapacityReservationBillingRequests(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationBillingRequestsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCapacityReservationFleets(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationFleetsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCapacityReservationTopology(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationTopologyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCapacityReservations(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeCapacityReservationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeCarrierGateways(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -844,6 +884,10 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise describeInstanceEventWindowsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeInstanceImageMetadata(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeInstanceImageMetadataAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeInstanceSqlHaHistoryStates(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeInstanceSqlHaHistoryStatesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeInstanceSqlHaStates(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeInstanceSqlHaStatesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeInstanceTopology(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeInstanceTopologyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeInstanceTypeOfferings(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -854,8 +898,14 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise describeIpamByoasnAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamExternalResourceVerificationTokens(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeIpamExternalResourceVerificationTokensAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamPolicies(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeIpamPoliciesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamPools(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeIpamPoolsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamPrefixListResolverTargets(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeIpamPrefixListResolverTargetsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamPrefixListResolvers(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeIpamPrefixListResolversAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamResourceDiscoveries(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeIpamResourceDiscoveriesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeIpamResourceDiscoveryAssociations(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -938,6 +988,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayConnectPeersAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeTransitGatewayConnects(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayConnectsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeTransitGatewayMeteringPolicies(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayMeteringPoliciesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeTransitGatewayMulticastDomains(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeTransitGatewayMulticastDomainsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeTransitGatewayPeeringAttachments(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -970,6 +1022,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise describeVpcBlockPublicAccessExclusionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeVpcBlockPublicAccessOptions(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeVpcBlockPublicAccessOptionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeVpcEncryptionControls(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeVpcEncryptionControlsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeVpcEndpointAssociations(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeVpcEndpointAssociationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeVpcEndpointConnectionNotifications(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -980,6 +1034,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise describeVpcEndpointServiceConfigurationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeVpcEndpointServicePermissions(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeVpcEndpointServicePermissionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result describeVpnConcentrators(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise describeVpnConcentratorsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result detachVerifiedAccessTrustProvider(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise detachVerifiedAccessTrustProviderAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableAddressTransfer(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -988,6 +1044,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise disableAllowedImagesSettingsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableAwsNetworkPerformanceMetricSubscription(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableAwsNetworkPerformanceMetricSubscriptionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableCapacityManager(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableCapacityManagerAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableFastLaunch(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1002,8 +1060,12 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise disableImageDeprecationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableImageDeregistrationProtection(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableImageDeregistrationProtectionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableInstanceSqlHaStandbyDetections(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableInstanceSqlHaStandbyDetectionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableIpamOrganizationAdminAccount(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableIpamOrganizationAdminAccountAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableIpamPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableRouteServerPropagation(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise disableRouteServerPropagationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result disableSerialConsoleAccess(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1050,6 +1112,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise enableAllowedImagesSettingsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableAwsNetworkPerformanceMetricSubscription(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableAwsNetworkPerformanceMetricSubscriptionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableCapacityManager(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableCapacityManagerAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableFastLaunch(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1064,8 +1128,12 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise enableImageDeprecationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableImageDeregistrationProtection(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableImageDeregistrationProtectionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableInstanceSqlHaStandbyDetections(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableInstanceSqlHaStandbyDetectionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableIpamOrganizationAdminAccount(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableIpamOrganizationAdminAccountAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableIpamPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableReachabilityAnalyzerOrganizationSharing(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise enableReachabilityAnalyzerOrganizationSharingAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result enableRouteServerPropagation(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1096,6 +1164,12 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise getAssociatedIpv6PoolCidrsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getAwsNetworkPerformanceData(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getAwsNetworkPerformanceDataAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getCapacityManagerAttributes(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getCapacityManagerAttributesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getCapacityManagerMetricData(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getCapacityManagerMetricDataAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getCapacityManagerMetricDimensions(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getCapacityManagerMetricDimensionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getCapacityReservationUsage(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getCapacityReservationUsageAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getCoipPoolUsage(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1108,10 +1182,14 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise getEbsDefaultKmsKeyIdAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getEbsEncryptionByDefault(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getEbsEncryptionByDefaultAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getEnabledIpamPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getEnabledIpamPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getFlowLogsIntegrationTemplate(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getFlowLogsIntegrationTemplateAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getGroupsForCapacityReservation(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getGroupsForCapacityReservationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getImageAncestry(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getImageAncestryAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getImageBlockPublicAccessState(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getImageBlockPublicAccessStateAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getInstanceMetadataDefaults(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1130,10 +1208,20 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise getIpamDiscoveredPublicAddressesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamDiscoveredResourceCidrs(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamDiscoveredResourceCidrsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPolicyAllocationRules(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPolicyAllocationRulesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPolicyOrganizationTargets(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPolicyOrganizationTargetsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPoolAllocations(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPoolAllocationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPoolCidrs(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPoolCidrsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPrefixListResolverRules(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPrefixListResolverRulesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPrefixListResolverVersionEntries(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPrefixListResolverVersionEntriesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamPrefixListResolverVersions(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamPrefixListResolverVersionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getIpamResourceCidrs(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getIpamResourceCidrsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getLaunchTemplateData(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1164,6 +1252,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise getSubnetCidrReservationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getTransitGatewayAttachmentPropagations(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getTransitGatewayAttachmentPropagationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getTransitGatewayMeteringPolicyEntries(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getTransitGatewayMeteringPolicyEntriesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getTransitGatewayMulticastDomainAssociations(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getTransitGatewayMulticastDomainAssociationsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getTransitGatewayPolicyTableAssociations(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1182,6 +1272,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise getVerifiedAccessEndpointTargetsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getVerifiedAccessGroupPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getVerifiedAccessGroupPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getVpcResourcesBlockingEncryptionEnforcement(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getVpcResourcesBlockingEncryptionEnforcementAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getVpnConnectionDeviceSampleConfiguration(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise getVpnConnectionDeviceSampleConfigurationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result getVpnConnectionDeviceTypes(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1194,6 +1286,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise listImagesInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result listSnapshotsInRecycleBin(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise listSnapshotsInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result listVolumesInRecycleBin(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise listVolumesInRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result lockSnapshot(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise lockSnapshotAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyAddressAttribute(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1236,8 +1330,14 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise modifyInstanceNetworkPerformanceOptionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpam(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyIpamAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpamPolicyAllocationRules(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyIpamPolicyAllocationRulesAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpamPool(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyIpamPoolAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpamPrefixListResolver(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyIpamPrefixListResolverAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpamPrefixListResolverTarget(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyIpamPrefixListResolverTargetAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpamResourceCidr(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyIpamResourceCidrAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyIpamResourceDiscovery(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1268,6 +1368,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise modifyTrafficMirrorSessionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyTransitGateway(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyTransitGatewayAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyTransitGatewayMeteringPolicy(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyTransitGatewayMeteringPolicyAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyTransitGatewayPrefixListReference(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyTransitGatewayPrefixListReferenceAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyTransitGatewayVpcAttachment(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1292,6 +1394,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise modifyVpcBlockPublicAccessExclusionAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyVpcBlockPublicAccessOptions(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyVpcBlockPublicAccessOptionsAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyVpcEncryptionControl(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyVpcEncryptionControlAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyVpcEndpointConnectionNotification(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise modifyVpcEndpointConnectionNotificationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result modifyVpcEndpointServiceConfiguration(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1366,6 +1470,8 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise restoreSnapshotFromRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result restoreSnapshotTier(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise restoreSnapshotTierAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result restoreVolumeFromRecycleBin(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise restoreVolumeFromRecycleBinAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result revokeClientVpnIngress(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise revokeClientVpnIngressAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result searchLocalGatewayRoutes(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
@ -1392,6 +1498,10 @@ use Aws\PresignUrlMiddleware;
|
|||
* @method \GuzzleHttp\Promise\Promise unassignPrivateNatGatewayAddressAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result unlockSnapshot(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise unlockSnapshotAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result updateCapacityManagerOrganizationsAccess(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise updateCapacityManagerOrganizationsAccessAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result updateInterruptibleCapacityReservationAllocation(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise updateInterruptibleCapacityReservationAllocationAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result updateSecurityGroupRuleDescriptionsEgress(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \GuzzleHttp\Promise\Promise updateSecurityGroupRuleDescriptionsEgressAsync(array $args = []) (supported in versions 2016-11-15)
|
||||
* @method \Aws\Result updateSecurityGroupRuleDescriptionsIngress(array $args = []) (supported in versions 2016-11-15)
|
||||
|
|
|
|||
18
vendor/aws/aws-sdk-php/src/Ecr/EcrClient.php
vendored
18
vendor/aws/aws-sdk-php/src/Ecr/EcrClient.php
vendored
|
|
@ -34,10 +34,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteRepositoryCreationTemplateAsync(array $args = [])
|
||||
* @method \Aws\Result deleteRepositoryPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteRepositoryPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSigningConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSigningConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deregisterPullTimeUpdateExclusion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deregisterPullTimeUpdateExclusionAsync(array $args = [])
|
||||
* @method \Aws\Result describeImageReplicationStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeImageReplicationStatusAsync(array $args = [])
|
||||
* @method \Aws\Result describeImageScanFindings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeImageScanFindingsAsync(array $args = [])
|
||||
* @method \Aws\Result describeImageSigningStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeImageSigningStatusAsync(array $args = [])
|
||||
* @method \Aws\Result describeImages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeImagesAsync(array $args = [])
|
||||
* @method \Aws\Result describePullThroughCacheRules(array $args = [])
|
||||
|
|
@ -64,10 +70,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getRegistryScanningConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getRepositoryPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getRepositoryPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getSigningConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSigningConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result initiateLayerUpload(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise initiateLayerUploadAsync(array $args = [])
|
||||
* @method \Aws\Result listImageReferrers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listImageReferrersAsync(array $args = [])
|
||||
* @method \Aws\Result listImages(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listImagesAsync(array $args = [])
|
||||
* @method \Aws\Result listPullTimeUpdateExclusions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPullTimeUpdateExclusionsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result putAccountSetting(array $args = [])
|
||||
|
|
@ -86,6 +98,10 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise putRegistryScanningConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result putReplicationConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putReplicationConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result putSigningConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putSigningConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result registerPullTimeUpdateExclusion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise registerPullTimeUpdateExclusionAsync(array $args = [])
|
||||
* @method \Aws\Result setRepositoryPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise setRepositoryPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result startImageScan(array $args = [])
|
||||
|
|
@ -96,6 +112,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateImageStorageClass(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateImageStorageClassAsync(array $args = [])
|
||||
* @method \Aws\Result updatePullThroughCacheRule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePullThroughCacheRuleAsync(array $args = [])
|
||||
* @method \Aws\Result updateRepositoryCreationTemplate(array $args = [])
|
||||
|
|
|
|||
8
vendor/aws/aws-sdk-php/src/Ecs/EcsClient.php
vendored
8
vendor/aws/aws-sdk-php/src/Ecs/EcsClient.php
vendored
|
|
@ -10,6 +10,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createCapacityProviderAsync(array $args = [])
|
||||
* @method \Aws\Result createCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createClusterAsync(array $args = [])
|
||||
* @method \Aws\Result createExpressGatewayService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createExpressGatewayServiceAsync(array $args = [])
|
||||
* @method \Aws\Result createService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createServiceAsync(array $args = [])
|
||||
* @method \Aws\Result createTaskSet(array $args = [])
|
||||
|
|
@ -22,6 +24,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteCapacityProviderAsync(array $args = [])
|
||||
* @method \Aws\Result deleteCluster(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteClusterAsync(array $args = [])
|
||||
* @method \Aws\Result deleteExpressGatewayService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteExpressGatewayServiceAsync(array $args = [])
|
||||
* @method \Aws\Result deleteService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteServiceAsync(array $args = [])
|
||||
* @method \Aws\Result deleteTaskDefinitions(array $args = [])
|
||||
|
|
@ -38,6 +42,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeClustersAsync(array $args = [])
|
||||
* @method \Aws\Result describeContainerInstances(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeContainerInstancesAsync(array $args = [])
|
||||
* @method \Aws\Result describeExpressGatewayService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeExpressGatewayServiceAsync(array $args = [])
|
||||
* @method \Aws\Result describeServiceDeployments(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeServiceDeploymentsAsync(array $args = [])
|
||||
* @method \Aws\Result describeServiceRevisions(array $args = [])
|
||||
|
|
@ -118,6 +124,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateContainerAgentAsync(array $args = [])
|
||||
* @method \Aws\Result updateContainerInstancesState(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateContainerInstancesStateAsync(array $args = [])
|
||||
* @method \Aws\Result updateExpressGatewayService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateExpressGatewayServiceAsync(array $args = [])
|
||||
* @method \Aws\Result updateService(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateServiceAsync(array $args = [])
|
||||
* @method \Aws\Result updateServicePrimaryTaskSet(array $args = [])
|
||||
|
|
|
|||
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
namespace Aws\ElasticTranscoder;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **Amazon Elastic Transcoder** service.
|
||||
*
|
||||
* @method \Aws\Result cancelJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise cancelJobAsync(array $args = [])
|
||||
* @method \Aws\Result createJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createJobAsync(array $args = [])
|
||||
* @method \Aws\Result createPipeline(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPipelineAsync(array $args = [])
|
||||
* @method \Aws\Result createPreset(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createPresetAsync(array $args = [])
|
||||
* @method \Aws\Result deletePipeline(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePipelineAsync(array $args = [])
|
||||
* @method \Aws\Result deletePreset(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deletePresetAsync(array $args = [])
|
||||
* @method \Aws\Result listJobsByPipeline(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listJobsByPipelineAsync(array $args = [])
|
||||
* @method \Aws\Result listJobsByStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listJobsByStatusAsync(array $args = [])
|
||||
* @method \Aws\Result listPipelines(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPipelinesAsync(array $args = [])
|
||||
* @method \Aws\Result listPresets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listPresetsAsync(array $args = [])
|
||||
* @method \Aws\Result readJob(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise readJobAsync(array $args = [])
|
||||
* @method \Aws\Result readPipeline(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise readPipelineAsync(array $args = [])
|
||||
* @method \Aws\Result readPreset(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise readPresetAsync(array $args = [])
|
||||
* @method \Aws\Result testRole(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise testRoleAsync(array $args = [])
|
||||
* @method \Aws\Result updatePipeline(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePipelineAsync(array $args = [])
|
||||
* @method \Aws\Result updatePipelineNotifications(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePipelineNotificationsAsync(array $args = [])
|
||||
* @method \Aws\Result updatePipelineStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updatePipelineStatusAsync(array $args = [])
|
||||
*/
|
||||
class ElasticTranscoderClient extends AwsClient {}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<?php
|
||||
namespace Aws\ElasticTranscoder\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the Amazon Elastic Transcoder service.
|
||||
*/
|
||||
class ElasticTranscoderException extends AwsException {}
|
||||
|
|
@ -322,8 +322,8 @@ class EndpointDiscoveryMiddleware
|
|||
|
||||
// If no more cached endpoints, make discovery call
|
||||
// if none made within cooldown for given key
|
||||
if (time() - $this->discoveryTimes[$cacheKey]
|
||||
< self::$discoveryCooldown
|
||||
if (isset($this->discoveryTimes[$cacheKey])
|
||||
&& time() - $this->discoveryTimes[$cacheKey] < self::$discoveryCooldown
|
||||
) {
|
||||
|
||||
// If no more cached endpoints and it's required,
|
||||
|
|
|
|||
2
vendor/aws/aws-sdk-php/src/Evs/EvsClient.php
vendored
2
vendor/aws/aws-sdk-php/src/Evs/EvsClient.php
vendored
|
|
@ -19,6 +19,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise disassociateEipFromVlanAsync(array $args = [])
|
||||
* @method \Aws\Result getEnvironment(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getEnvironmentAsync(array $args = [])
|
||||
* @method \Aws\Result getVersions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getVersionsAsync(array $args = [])
|
||||
* @method \Aws\Result listEnvironmentHosts(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEnvironmentHostsAsync(array $args = [])
|
||||
* @method \Aws\Result listEnvironmentVlans(array $args = [])
|
||||
|
|
|
|||
12
vendor/aws/aws-sdk-php/src/Glue/GlueClient.php
vendored
12
vendor/aws/aws-sdk-php/src/Glue/GlueClient.php
vendored
|
|
@ -137,6 +137,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteGlueIdentityCenterConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegrationResourceProperty(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationResourcePropertyAsync(array $args = [])
|
||||
* @method \Aws\Result deleteIntegrationTableProperties(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteIntegrationTablePropertiesAsync(array $args = [])
|
||||
* @method \Aws\Result deleteJob(array $args = [])
|
||||
|
|
@ -271,6 +273,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getMLTransformsAsync(array $args = [])
|
||||
* @method \Aws\Result getMapping(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMappingAsync(array $args = [])
|
||||
* @method \Aws\Result getMaterializedViewRefreshTaskRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMaterializedViewRefreshTaskRunAsync(array $args = [])
|
||||
* @method \Aws\Result getPartition(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPartitionAsync(array $args = [])
|
||||
* @method \Aws\Result getPartitionIndexes(array $args = [])
|
||||
|
|
@ -367,10 +371,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listDevEndpointsAsync(array $args = [])
|
||||
* @method \Aws\Result listEntities(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEntitiesAsync(array $args = [])
|
||||
* @method \Aws\Result listIntegrationResourceProperties(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listIntegrationResourcePropertiesAsync(array $args = [])
|
||||
* @method \Aws\Result listJobs(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listJobsAsync(array $args = [])
|
||||
* @method \Aws\Result listMLTransforms(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMLTransformsAsync(array $args = [])
|
||||
* @method \Aws\Result listMaterializedViewRefreshTaskRuns(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMaterializedViewRefreshTaskRunsAsync(array $args = [])
|
||||
* @method \Aws\Result listRegistries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listRegistriesAsync(array $args = [])
|
||||
* @method \Aws\Result listSchemaVersions(array $args = [])
|
||||
|
|
@ -439,6 +447,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise startMLEvaluationTaskRunAsync(array $args = [])
|
||||
* @method \Aws\Result startMLLabelingSetGenerationTaskRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMLLabelingSetGenerationTaskRunAsync(array $args = [])
|
||||
* @method \Aws\Result startMaterializedViewRefreshTaskRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMaterializedViewRefreshTaskRunAsync(array $args = [])
|
||||
* @method \Aws\Result startTrigger(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startTriggerAsync(array $args = [])
|
||||
* @method \Aws\Result startWorkflowRun(array $args = [])
|
||||
|
|
@ -451,6 +461,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise stopCrawlerAsync(array $args = [])
|
||||
* @method \Aws\Result stopCrawlerSchedule(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopCrawlerScheduleAsync(array $args = [])
|
||||
* @method \Aws\Result stopMaterializedViewRefreshTaskRun(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopMaterializedViewRefreshTaskRunAsync(array $args = [])
|
||||
* @method \Aws\Result stopSession(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise stopSessionAsync(array $args = [])
|
||||
* @method \Aws\Result stopTrigger(array $args = [])
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createConfigAsync(array $args = [])
|
||||
* @method \Aws\Result createDataflowEndpointGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDataflowEndpointGroupAsync(array $args = [])
|
||||
* @method \Aws\Result createDataflowEndpointGroupV2(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDataflowEndpointGroupV2Async(array $args = [])
|
||||
* @method \Aws\Result createEphemeris(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createEphemerisAsync(array $args = [])
|
||||
* @method \Aws\Result createMissionProfile(array $args = [])
|
||||
|
|
@ -29,6 +31,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeEphemerisAsync(array $args = [])
|
||||
* @method \Aws\Result getAgentConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAgentConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getAgentTaskResponseUrl(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getAgentTaskResponseUrlAsync(array $args = [])
|
||||
* @method \Aws\Result getMissionProfileConfig(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMissionProfileConfigAsync(array $args = [])
|
||||
* @method \Aws\Result getDataflowEndpointGroup(array $args = [])
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getInvitationsCountAsync(array $args = [])
|
||||
* @method \Aws\Result getMalwareProtectionPlan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMalwareProtectionPlanAsync(array $args = [])
|
||||
* @method \Aws\Result getMalwareScan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMalwareScanAsync(array $args = [])
|
||||
* @method \Aws\Result getMalwareScanSettings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getMalwareScanSettingsAsync(array $args = [])
|
||||
* @method \Aws\Result getMasterAccount(array $args = [])
|
||||
|
|
@ -123,6 +125,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listInvitationsAsync(array $args = [])
|
||||
* @method \Aws\Result listMalwareProtectionPlans(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMalwareProtectionPlansAsync(array $args = [])
|
||||
* @method \Aws\Result listMalwareScans(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMalwareScansAsync(array $args = [])
|
||||
* @method \Aws\Result listMembers(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listMembersAsync(array $args = [])
|
||||
* @method \Aws\Result listOrganizationAdminAccounts(array $args = [])
|
||||
|
|
@ -137,6 +141,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listThreatIntelSetsAsync(array $args = [])
|
||||
* @method \Aws\Result listTrustedEntitySets(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTrustedEntitySetsAsync(array $args = [])
|
||||
* @method \Aws\Result sendObjectMalwareScan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise sendObjectMalwareScanAsync(array $args = [])
|
||||
* @method \Aws\Result startMalwareScan(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise startMalwareScanAsync(array $args = [])
|
||||
* @method \Aws\Result startMonitoringMembers(array $args = [])
|
||||
|
|
|
|||
24
vendor/aws/aws-sdk-php/src/Iam/IamClient.php
vendored
24
vendor/aws/aws-sdk-php/src/Iam/IamClient.php
vendored
|
|
@ -6,12 +6,16 @@ use Aws\AwsClient;
|
|||
/**
|
||||
* This client is used to interact with the **AWS Identity and Access Management (AWS IAM)** service.
|
||||
*
|
||||
* @method \Aws\Result acceptDelegationRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise acceptDelegationRequestAsync(array $args = [])
|
||||
* @method \Aws\Result addClientIDToOpenIDConnectProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise addClientIDToOpenIDConnectProviderAsync(array $args = [])
|
||||
* @method \Aws\Result addRoleToInstanceProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise addRoleToInstanceProfileAsync(array $args = [])
|
||||
* @method \Aws\Result addUserToGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise addUserToGroupAsync(array $args = [])
|
||||
* @method \Aws\Result associateDelegationRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise associateDelegationRequestAsync(array $args = [])
|
||||
* @method \Aws\Result attachGroupPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise attachGroupPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result attachRolePolicy(array $args = [])
|
||||
|
|
@ -24,6 +28,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createAccessKeyAsync(array $args = [])
|
||||
* @method \Aws\Result createAccountAlias(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createAccountAliasAsync(array $args = [])
|
||||
* @method \Aws\Result createDelegationRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createDelegationRequestAsync(array $args = [])
|
||||
* @method \Aws\Result createGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createGroupAsync(array $args = [])
|
||||
* @method \Aws\Result createInstanceProfile(array $args = [])
|
||||
|
|
@ -106,12 +112,16 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise disableOrganizationsRootCredentialsManagementAsync(array $args = [])
|
||||
* @method \Aws\Result disableOrganizationsRootSessions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disableOrganizationsRootSessionsAsync(array $args = [])
|
||||
* @method \Aws\Result disableOutboundWebIdentityFederation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise disableOutboundWebIdentityFederationAsync(array $args = [])
|
||||
* @method \Aws\Result enableMFADevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise enableMFADeviceAsync(array $args = [])
|
||||
* @method \Aws\Result enableOrganizationsRootCredentialsManagement(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise enableOrganizationsRootCredentialsManagementAsync(array $args = [])
|
||||
* @method \Aws\Result enableOrganizationsRootSessions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise enableOrganizationsRootSessionsAsync(array $args = [])
|
||||
* @method \Aws\Result enableOutboundWebIdentityFederation(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise enableOutboundWebIdentityFederationAsync(array $args = [])
|
||||
* @method \Aws\Result generateCredentialReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise generateCredentialReportAsync(array $args = [])
|
||||
* @method \Aws\Result generateOrganizationsAccessReport(array $args = [])
|
||||
|
|
@ -132,10 +142,14 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getContextKeysForPrincipalPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getCredentialReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCredentialReportAsync(array $args = [])
|
||||
* @method \Aws\Result getDelegationRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDelegationRequestAsync(array $args = [])
|
||||
* @method \Aws\Result getGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGroupAsync(array $args = [])
|
||||
* @method \Aws\Result getGroupPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getGroupPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getHumanReadableSummary(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getHumanReadableSummaryAsync(array $args = [])
|
||||
* @method \Aws\Result getInstanceProfile(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getInstanceProfileAsync(array $args = [])
|
||||
* @method \Aws\Result getLoginProfile(array $args = [])
|
||||
|
|
@ -146,6 +160,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getOpenIDConnectProviderAsync(array $args = [])
|
||||
* @method \Aws\Result getOrganizationsAccessReport(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getOrganizationsAccessReportAsync(array $args = [])
|
||||
* @method \Aws\Result getOutboundWebIdentityFederationInfo(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getOutboundWebIdentityFederationInfoAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result getPolicyVersion(array $args = [])
|
||||
|
|
@ -180,6 +196,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listAttachedRolePoliciesAsync(array $args = [])
|
||||
* @method \Aws\Result listAttachedUserPolicies(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listAttachedUserPoliciesAsync(array $args = [])
|
||||
* @method \Aws\Result listDelegationRequests(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listDelegationRequestsAsync(array $args = [])
|
||||
* @method \Aws\Result listEntitiesForPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listEntitiesForPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result listGroupPolicies(array $args = [])
|
||||
|
|
@ -250,6 +268,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise putUserPermissionsBoundaryAsync(array $args = [])
|
||||
* @method \Aws\Result putUserPolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putUserPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result rejectDelegationRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise rejectDelegationRequestAsync(array $args = [])
|
||||
* @method \Aws\Result removeClientIDFromOpenIDConnectProvider(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise removeClientIDFromOpenIDConnectProviderAsync(array $args = [])
|
||||
* @method \Aws\Result removeRoleFromInstanceProfile(array $args = [])
|
||||
|
|
@ -260,6 +280,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise resetServiceSpecificCredentialAsync(array $args = [])
|
||||
* @method \Aws\Result resyncMFADevice(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise resyncMFADeviceAsync(array $args = [])
|
||||
* @method \Aws\Result sendDelegationToken(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise sendDelegationTokenAsync(array $args = [])
|
||||
* @method \Aws\Result setDefaultPolicyVersion(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise setDefaultPolicyVersionAsync(array $args = [])
|
||||
* @method \Aws\Result setSecurityTokenServicePreferences(array $args = [])
|
||||
|
|
@ -306,6 +328,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateAccountPasswordPolicyAsync(array $args = [])
|
||||
* @method \Aws\Result updateAssumeRolePolicy(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAssumeRolePolicyAsync(array $args = [])
|
||||
* @method \Aws\Result updateDelegationRequest(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateDelegationRequestAsync(array $args = [])
|
||||
* @method \Aws\Result updateGroup(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateGroupAsync(array $args = [])
|
||||
* @method \Aws\Result updateLoginProfile(array $args = [])
|
||||
|
|
|
|||
|
|
@ -9,21 +9,35 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise batchGetInvoiceProfileAsync(array $args = [])
|
||||
* @method \Aws\Result createInvoiceUnit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createInvoiceUnitAsync(array $args = [])
|
||||
* @method \Aws\Result createProcurementPortalPreference(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createProcurementPortalPreferenceAsync(array $args = [])
|
||||
* @method \Aws\Result deleteInvoiceUnit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteInvoiceUnitAsync(array $args = [])
|
||||
* @method \Aws\Result deleteProcurementPortalPreference(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteProcurementPortalPreferenceAsync(array $args = [])
|
||||
* @method \Aws\Result getInvoicePDF(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getInvoicePDFAsync(array $args = [])
|
||||
* @method \Aws\Result getInvoiceUnit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getInvoiceUnitAsync(array $args = [])
|
||||
* @method \Aws\Result getProcurementPortalPreference(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getProcurementPortalPreferenceAsync(array $args = [])
|
||||
* @method \Aws\Result listInvoiceSummaries(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listInvoiceSummariesAsync(array $args = [])
|
||||
* @method \Aws\Result listInvoiceUnits(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listInvoiceUnitsAsync(array $args = [])
|
||||
* @method \Aws\Result listProcurementPortalPreferences(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listProcurementPortalPreferencesAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(array $args = [])
|
||||
* @method \Aws\Result putProcurementPortalPreference(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise putProcurementPortalPreferenceAsync(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 updateInvoiceUnit(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateInvoiceUnitAsync(array $args = [])
|
||||
* @method \Aws\Result updateProcurementPortalPreferenceStatus(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateProcurementPortalPreferenceStatusAsync(array $args = [])
|
||||
*/
|
||||
class InvoicingClient extends AwsClient {}
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise createSuiteDefinitionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteSuiteDefinition(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteSuiteDefinitionAsync(array $args = [])
|
||||
* @method \Aws\Result getEndpoint(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getEndpointAsync(array $args = [])
|
||||
* @method \Aws\Result getDeviceAdvisorEndpoint(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeviceAdvisorEndpointAsync(array $args = [])
|
||||
* @method \Aws\Result getSuiteDefinition(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getSuiteDefinitionAsync(array $args = [])
|
||||
* @method \Aws\Result getSuiteRun(array $args = [])
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
<?php
|
||||
namespace Aws\IoTFleetHub\Exception;
|
||||
|
||||
use Aws\Exception\AwsException;
|
||||
|
||||
/**
|
||||
* Represents an error interacting with the **AWS IoT Fleet Hub** service.
|
||||
*/
|
||||
class IoTFleetHubException extends AwsException {}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<?php
|
||||
namespace Aws\IoTFleetHub;
|
||||
|
||||
use Aws\AwsClient;
|
||||
|
||||
/**
|
||||
* This client is used to interact with the **AWS IoT Fleet Hub** service.
|
||||
* @method \Aws\Result createApplication(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise createApplicationAsync(array $args = [])
|
||||
* @method \Aws\Result deleteApplication(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deleteApplicationAsync(array $args = [])
|
||||
* @method \Aws\Result describeApplication(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeApplicationAsync(array $args = [])
|
||||
* @method \Aws\Result listApplications(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listApplicationsAsync(array $args = [])
|
||||
* @method \Aws\Result listTagsForResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTagsForResourceAsync(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 updateApplication(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateApplicationAsync(array $args = [])
|
||||
*/
|
||||
class IoTFleetHubClient extends AwsClient {}
|
||||
|
|
@ -75,6 +75,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getManagedThingAsync(array $args = [])
|
||||
* @method \Aws\Result getManagedThingCapabilities(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getManagedThingCapabilitiesAsync(array $args = [])
|
||||
* @method \Aws\Result getManagedThingCertificate(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getManagedThingCertificateAsync(array $args = [])
|
||||
* @method \Aws\Result getManagedThingConnectivityData(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getManagedThingConnectivityDataAsync(array $args = [])
|
||||
* @method \Aws\Result getManagedThingMetaData(array $args = [])
|
||||
|
|
|
|||
4
vendor/aws/aws-sdk-php/src/Iot/IotClient.php
vendored
4
vendor/aws/aws-sdk-php/src/Iot/IotClient.php
vendored
|
|
@ -268,8 +268,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise getBucketsAggregationAsync(array $args = [])
|
||||
* @method \Aws\Result getCardinality(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCardinalityAsync(array $args = [])
|
||||
* @method \Aws\Result getCommand(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCommandAsync(array $args = [])
|
||||
* @method \Aws\Result getDeviceCommand(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDeviceCommandAsync(array $args = [])
|
||||
* @method \Aws\Result getCommandExecution(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getCommandExecutionAsync(array $args = [])
|
||||
* @method \Aws\Result getEffectivePolicies(array $args = [])
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeConfigurationRevisionAsync(array $args = [])
|
||||
* @method \Aws\Result describeReplicator(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeReplicatorAsync(array $args = [])
|
||||
* @method \Aws\Result describeTopic(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeTopicAsync(array $args = [])
|
||||
* @method \Aws\Result describeTopicPartitions(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeTopicPartitionsAsync(array $args = [])
|
||||
* @method \Aws\Result describeVpcConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeVpcConnectionAsync(array $args = [])
|
||||
* @method \Aws\Result batchDisassociateScramSecret(array $args = [])
|
||||
|
|
@ -73,6 +77,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise listClientVpcConnectionsAsync(array $args = [])
|
||||
* @method \Aws\Result listVpcConnections(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listVpcConnectionsAsync(array $args = [])
|
||||
* @method \Aws\Result listTopics(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise listTopicsAsync(array $args = [])
|
||||
* @method \Aws\Result rejectClientVpcConnection(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise rejectClientVpcConnectionAsync(array $args = [])
|
||||
* @method \Aws\Result deleteClusterPolicy(array $args = [])
|
||||
|
|
@ -103,6 +109,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateConnectivityAsync(array $args = [])
|
||||
* @method \Aws\Result updateMonitoring(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateMonitoringAsync(array $args = [])
|
||||
* @method \Aws\Result updateRebalancing(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateRebalancingAsync(array $args = [])
|
||||
* @method \Aws\Result updateReplicationInfo(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateReplicationInfoAsync(array $args = [])
|
||||
* @method \Aws\Result updateSecurity(array $args = [])
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise deleteStreamAsync(array $args = [])
|
||||
* @method \Aws\Result deregisterStreamConsumer(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise deregisterStreamConsumerAsync(array $args = [])
|
||||
* @method \Aws\Result describeAccountSettings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeAccountSettingsAsync(array $args = [])
|
||||
* @method \Aws\Result describeLimits(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeLimitsAsync(array $args = [])
|
||||
* @method \Aws\Result describeStream(array $args = [])
|
||||
|
|
@ -70,9 +72,15 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise tagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result untagResource(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise untagResourceAsync(array $args = [])
|
||||
* @method \Aws\Result updateAccountSettings(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateAccountSettingsAsync(array $args = [])
|
||||
* @method \Aws\Result updateMaxRecordSize(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateMaxRecordSizeAsync(array $args = [])
|
||||
* @method \Aws\Result updateShardCount(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateShardCountAsync(array $args = [])
|
||||
* @method \Aws\Result updateStreamMode(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateStreamModeAsync(array $args = [])
|
||||
* @method \Aws\Result updateStreamWarmThroughput(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateStreamWarmThroughputAsync(array $args = [])
|
||||
*/
|
||||
class KinesisClient extends AwsClient {}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise describeSignalingChannelAsync(array $args = [])
|
||||
* @method \Aws\Result describeStream(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeStreamAsync(array $args = [])
|
||||
* @method \Aws\Result describeStreamStorageConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise describeStreamStorageConfigurationAsync(array $args = [])
|
||||
* @method \Aws\Result getDataEndpoint(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise getDataEndpointAsync(array $args = [])
|
||||
* @method \Aws\Result getSignalingChannelEndpoint(array $args = [])
|
||||
|
|
@ -65,5 +67,7 @@ use Aws\AwsClient;
|
|||
* @method \GuzzleHttp\Promise\Promise updateSignalingChannelAsync(array $args = [])
|
||||
* @method \Aws\Result updateStream(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateStreamAsync(array $args = [])
|
||||
* @method \Aws\Result updateStreamStorageConfiguration(array $args = [])
|
||||
* @method \GuzzleHttp\Promise\Promise updateStreamStorageConfigurationAsync(array $args = [])
|
||||
*/
|
||||
class KinesisVideoClient extends AwsClient {}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue