@@ -2,41 +2,49 @@ shared singleton Class constructor()
22
33Function getResponse ($request : 4D.IncomingMessage) : 4D.OutgoingMessage
44
5- var $response : 4D.OutgoingMessage:= 4D.OutgoingMessage.new()
5+ var $outgoingResponse : 4D.OutgoingMessage:= 4D.OutgoingMessage.new()
6+ var $errorBody : Text
67 If ($request# Null)
78
8- var $responseBody : Blob
99 var $state : Text:= cs .Tools .me .getURLParameterValue ($request .url; "state" )
1010 var $redirectURI : Text:= ($request .urlPath .length > 0) ? "/" + $request .urlPath [0 ]+ "/@" : $request .url
1111 var $options : Object:= {state: $state ; redirectURI: $redirectURI }
12+ var $response : Object:= {}
1213
1314 If (Value type ($request .urlQuery )= Is object)
1415 $options .result := OB Copy ($request .urlQuery ; ck shared)
1516 End if
1617
17- If (_authorize ($options ; - > $responseBody ))
18+ If (_authorize ($options ; $response ))
1819
19- $response .setStatus (200 )
20- $response .setBody ($responseBody )
21- $response .setHeader ("Content-Type" ; "text/html" )
20+ // If the response contains a redirect URL, we send a 302 Temporary Redirect
21+ If ((Value type ($response .redirectURL )= Is text) && (Length ($response .redirectURL )> 0))
22+ $outgoingResponse .setStatus (302 ) // Temporary redirect
23+ $outgoingResponse .setHeader ("Location" ; String ($response .redirectURL ))
24+ Else
25+ $outgoingResponse .setStatus ($response .status)
26+ $outgoingResponse .setBody ($response .body)
27+ $outgoingResponse .setHeader ("Content-Type" ; $response .contentType)
28+ End if
2229 Else
2330
2431 // Send a 403 status line
2532 // This is not strictly necessary, but it makes it clear that the request was forbidden
2633 // and not just a 404 Not Found
27- $response . setStatus ( 403 )
28- var $errorBody : Text := "<html><body><h1> 403 Forbidden</h1><p>Access denied</p></body></html>"
29- $response .setBody ($errorBody )
30- $response .setHeader ("Content-Type" ; "text/html" )
34+ $errorBody := cs . Tools . me . buildPageFromTemplate ( Localized string ( "OAuth2_Response_Title" ); " 403 Forbidden" ; "Access denied." )
35+ $outgoingResponse . setStatus ( 403 )
36+ $outgoingResponse .setBody ($errorBody )
37+ $outgoingResponse .setHeader ("Content-Type" ; "text/html" )
3138
3239 End if
3340 Else
3441 var $error : Object:= cs .Tools .me .makeError (9 ; {which: "request (4D.IncomingMessage)" ; function: "OAuth2Authorization.getResponse" })
3542
36- $response .setStatus (500 )
37- $response .setBody ("Internal Server Error:\r\n\r\n " + JSON Stringify ($error ; * ))
38- $response .setHeader ("Content-Type" ; "text/plain" )
43+ $errorBody := cs .Tools .me .buildPageFromTemplate (Localized string ("OAuth2_Response_Title" ); "500 Internal Server Error" ; JSON Stringify ($error ; * ))
44+ $outgoingResponse .setStatus (500 )
45+ $outgoingResponse .setBody ($errorBody )
46+ $outgoingResponse .setHeader ("Content-Type" ; "text/plain" )
3947 End if
40- $response .setHeader ("X-Request-Handler" ; String (OB Class (This ).name ))
48+ $outgoingResponse .setHeader ("X-Request-Handler" ; String (OB Class (This ).name ))
4149
42- return $response
50+ return $outgoingResponse
0 commit comments