1818use ZEROSPAM \Framework \SDK \Client \Exception \SDKException ;
1919use ZEROSPAM \Framework \SDK \Client \Exception \TooManyRetriesException ;
2020use ZEROSPAM \Framework \SDK \Client \Middleware \IMiddleware ;
21+ use ZEROSPAM \Framework \SDK \Client \Middleware \IPreRequestMiddleware ;
2122use ZEROSPAM \Framework \SDK \Config \IOAuthConfiguration ;
2223use ZEROSPAM \Framework \SDK \Request \Api \IRequest ;
2324use ZEROSPAM \Framework \SDK \Request \Type \RequestType ;
@@ -56,7 +57,11 @@ class OAuthClient implements IOAuthClient
5657 /**
5758 * @var \ZEROSPAM\Framework\SDK\Client\Middleware\IMiddleware[][]
5859 */
59- private $ middlewares ;
60+ private $ postRequestMiddlewares = [];
61+ /**
62+ * @var IPreRequestMiddleware[]
63+ */
64+ private $ preRequestMiddlewares = [];
6065
6166 /**
6267 * OauthClient constructor.
@@ -87,12 +92,26 @@ public function registerMiddleware(IMiddleware $middleware): IOAuthClient
8792 {
8893 $ middleware ->setClient ($ this );
8994 foreach ($ middleware ::statusCode () as $ statusCode ) {
90- $ this ->middlewares [$ statusCode ][] = $ middleware ;
95+ $ this ->postRequestMiddlewares [$ statusCode ][] = $ middleware ;
9196 }
9297
9398 return $ this ;
9499 }
95100
101+ /**
102+ * Register a pre request middleware
103+ *
104+ * @param IPreRequestMiddleware $middleware
105+ *
106+ * @return IOAuthClient
107+ */
108+ public function registerPreRequestMiddleware (IPreRequestMiddleware $ middleware ): IOAuthClient
109+ {
110+ $ this ->preRequestMiddlewares [get_class ($ middleware )] = $ middleware ;
111+
112+ return $ this ;
113+ }
114+
96115 /**
97116 * Unregister the middleware.
98117 *
@@ -106,26 +125,40 @@ public function unregisterMiddleware(IMiddleware $middleware): IOAuthClient
106125 {
107126 $ middlewareClass = get_class ($ middleware );
108127 foreach ($ middleware ::statusCode () as $ statusCode ) {
109- if (!isset ($ this ->middlewares [$ statusCode ])) {
128+ if (!isset ($ this ->postRequestMiddlewares [$ statusCode ])) {
110129 continue ;
111130 }
112131 $ result = array_filter (
113- $ this ->middlewares [$ statusCode ],
132+ $ this ->postRequestMiddlewares [$ statusCode ],
114133 function (IMiddleware $ currMiddleware ) use ($ middlewareClass ) {
115134 return get_class ($ currMiddleware ) != $ middlewareClass ;
116135 }
117136 );
118137
119138 if (empty ($ result )) {
120- unset($ this ->middlewares [$ statusCode ]);
139+ unset($ this ->postRequestMiddlewares [$ statusCode ]);
121140 } else {
122- $ this ->middlewares [$ statusCode ] = $ result ;
141+ $ this ->postRequestMiddlewares [$ statusCode ] = $ result ;
123142 }
124143 }
125144
126145 return $ this ;
127146 }
128147
148+ /**
149+ * UnRegister a pre request middleware
150+ *
151+ * @param IPreRequestMiddleware $middleware
152+ *
153+ * @return IOAuthClient
154+ */
155+ public function unregisterPreRequestMiddleware (IPreRequestMiddleware $ middleware ): IOAuthClient
156+ {
157+ unset($ this ->preRequestMiddlewares [get_class ($ middleware )]);
158+
159+ return $ this ;
160+ }
161+
129162 /**
130163 * Refresh token.
131164 */
@@ -153,6 +186,9 @@ public function getToken(): AccessToken
153186 */
154187 public function processRequest (IRequest $ request ): IResponse
155188 {
189+ foreach ($ this ->preRequestMiddlewares as $ middleware ) {
190+ $ middleware ->handle ($ request );
191+ }
156192 $ request ->incrementTries ();
157193
158194 $ headers = $ this ->configuration ->getProvider ()->getHeaders ($ this ->token );
@@ -168,8 +204,8 @@ public function processRequest(IRequest $request): IResponse
168204 $ response = $ this ->guzzleClient ->request ($ request ->httpType ()->getValue (), $ request ->toUri (), $ options );
169205 $ parsedData = JSONParsing::responseToJson ($ response );
170206
171- if (isset ($ this ->middlewares [$ response ->getStatusCode ()])) {
172- foreach ($ this ->middlewares [$ response ->getStatusCode ()] as $ middleware ) {
207+ if (isset ($ this ->postRequestMiddlewares [$ response ->getStatusCode ()])) {
208+ foreach ($ this ->postRequestMiddlewares [$ response ->getStatusCode ()] as $ middleware ) {
173209 $ parsedData = $ middleware ->handle ($ request , $ response , $ parsedData );
174210 }
175211 }
@@ -180,12 +216,12 @@ public function processRequest(IRequest $request): IResponse
180216 $ response = $ e ->getResponse ();
181217 $ this ->processThrottleData ($ response );
182218
183- if (!isset ($ this ->middlewares [$ response ->getStatusCode ()])) {
219+ if (!isset ($ this ->postRequestMiddlewares [$ response ->getStatusCode ()])) {
184220 throw new SDKException ($ e ->getMessage (), $ e ->getCode (), $ e );
185221 }
186222 $ parsedData = JSONParsing::responseToJson ($ response );
187223
188- foreach ($ this ->middlewares [$ response ->getStatusCode ()] as $ middleware ) {
224+ foreach ($ this ->postRequestMiddlewares [$ response ->getStatusCode ()] as $ middleware ) {
189225 $ parsedData = $ middleware ->handle ($ request , $ response , $ parsedData );
190226 }
191227 } catch (RequestException $ e ) {
@@ -200,7 +236,7 @@ public function processRequest(IRequest $request): IResponse
200236 }
201237
202238 /**
203- * @var BaseResponse
239+ * @var $data BaseResponse
204240 */
205241 $ data = $ request ->processResponse ($ parsedData );
206242
0 commit comments