@@ -66,7 +66,7 @@ public function __construct(CredentialsInterface $credentials, $options = array(
6666 $ this ->setHttpClient ($ client );
6767
6868 //make sure we know how to use the credentials
69- if (!($ credentials instanceof Basic) AND !($ credentials instanceof OAuth)){
69+ if (!($ credentials instanceof Basic) && !( $ credentials instanceof SharedSecret) && !($ credentials instanceof OAuth)){
7070 throw new \RuntimeException ('unknown credentials type: ' . get_class ($ credentials ));
7171 }
7272
@@ -117,38 +117,21 @@ public function setFactory(FactoryInterface $factory)
117117 return $ this ;
118118 }
119119
120- /**
121- * Get the secret used for request signing.
122- *
123- * The client uses it internally to sign outbound requests, but webhooks can be checked
124- * using the same secret.
125- *
126- * @return string
127- */
128- public function getSignatureSecret ()
129- {
130- if ($ this ->credentials instanceof SharedSecret){
131- return $ this ->credentials ['shared_secret ' ];
132- }
133-
134- throw new \RuntimeException ('can only get signature secret when using ` ' . SharedSecret::class . '` credentials` ' );
135- }
136-
137120 /**
138121 * @param RequestInterface $request
139122 * @param Signature $signature
140123 * @return RequestInterface
141124 */
142- public function signRequest (RequestInterface $ request )
125+ public static function signRequest (RequestInterface $ request, SharedSecret $ credentials )
143126 {
144127 switch ($ request ->getHeaderLine ('content-type ' )){
145128 case 'application/json ' :
146129 $ body = $ request ->getBody ();
147130 $ body ->rewind ();
148131 $ content = $ body ->getContents ();
149132 $ params = json_decode ($ content , true );
150- $ params ['api_key ' ] = $ this -> credentials ['api_key ' ];
151- $ signature = new Signature ($ params , $ this -> getSignatureSecret () );
133+ $ params ['api_key ' ] = $ credentials ['api_key ' ];
134+ $ signature = new Signature ($ params , $ credentials [ ' shared_secret ' ] );
152135 $ body ->rewind ();
153136 $ body ->write (json_encode ($ signature ->getSignedParams ()));
154137 break ;
@@ -158,24 +141,57 @@ public function signRequest(RequestInterface $request)
158141 $ content = $ body ->getContents ();
159142 $ params = [];
160143 parse_str ($ content , $ params );
161- $ params ['api_key ' ] = $ this -> credentials ['api_key ' ];
162- $ signature = new Signature ($ params , $ this -> getSignatureSecret () );
144+ $ params ['api_key ' ] = $ credentials ['api_key ' ];
145+ $ signature = new Signature ($ params , $ credentials [ ' shared_secret ' ] );
163146 $ params = $ signature ->getSignedParams ();
164147 $ body ->rewind ();
165148 $ body ->write (http_build_query ($ params , null , '& ' ));
166149 break ;
167150 default :
168151 $ query = [];
169152 parse_str ($ request ->getUri ()->getQuery (), $ query );
170- $ query ['api_key ' ] = $ this -> credentials ['api_key ' ];
171- $ signature = new Signature ($ query , $ this -> getSignatureSecret () );
153+ $ query ['api_key ' ] = $ credentials ['api_key ' ];
154+ $ signature = new Signature ($ query , $ credentials [ ' shared_secret ' ] );
172155 $ request = $ request ->withUri ($ request ->getUri ()->withQuery (http_build_query ($ signature ->getSignedParams ())));
173156 break ;
174157 }
175158
176159 return $ request ;
177160 }
178161
162+ public static function authRequest (RequestInterface $ request , Basic $ credentials )
163+ {
164+ switch ($ request ->getHeaderLine ('content-type ' )){
165+ case 'application/json ' :
166+ $ body = $ request ->getBody ();
167+ $ body ->rewind ();
168+ $ content = $ body ->getContents ();
169+ $ params = json_decode ($ content , true );
170+ $ params = array_merge ($ params , $ credentials ->asArray ());
171+ $ body ->rewind ();
172+ $ body ->write (json_encode ($ params ));
173+ break ;
174+ case 'application/x-www-form-urlencoded ' :
175+ $ body = $ request ->getBody ();
176+ $ body ->rewind ();
177+ $ content = $ body ->getContents ();
178+ $ params = [];
179+ parse_str ($ content , $ params );
180+ $ params = array_merge ($ params , $ credentials ->asArray ());
181+ $ body ->rewind ();
182+ $ body ->write (http_build_query ($ params , null , '& ' ));
183+ break ;
184+ default :
185+ $ query = [];
186+ parse_str ($ request ->getUri ()->getQuery (), $ query );
187+ $ query = array_merge ($ query , $ credentials ->asArray ());
188+ $ request = $ request ->withUri ($ request ->getUri ()->withQuery (http_build_query ($ query )));
189+ break ;
190+ }
191+
192+ return $ request ;
193+ }
194+
179195 /**
180196 * Wraps the HTTP Client, creates a new PSR-7 request adding authentication, signatures, etc.
181197 *
@@ -186,12 +202,9 @@ public function send(\Psr\Http\Message\RequestInterface $request)
186202 {
187203 //also an instance of Basic, so checked first
188204 if ($ this ->credentials instanceof SharedSecret){
189- $ request = $ this -> signRequest ($ request );
205+ $ request = self :: signRequest ($ request, $ this -> credentials );
190206 } elseif ($ this ->credentials instanceof Basic){
191- $ query = [];
192- parse_str ($ request ->getUri ()->getQuery (), $ query );
193- $ query = array_merge ($ query , $ this ->credentials ->asArray ());
194- $ request = $ request ->withUri ($ request ->getUri ()->withQuery (http_build_query ($ query )));
207+ $ request = self ::authRequest ($ request , $ this ->credentials );
195208 }
196209
197210 //todo: add oauth support
0 commit comments