Auth_OpenID_Encoder::encode PHP Method

encode() public method

Encode an {@link Auth_OpenID_ServerResponse} and return an {@link Auth_OpenID_WebResponse}.
public encode ( $response )
    function encode($response)
    {
        $cls = $this->responseFactory;
        $encode_as = $response->whichEncoding();
        if ($encode_as == Auth_OpenID_ENCODE_KVFORM) {
            $wr = new $cls(null, null, $response->encodeToKVForm());
            if (is_a($response, 'Auth_OpenID_ServerError')) {
                $wr->code = AUTH_OPENID_HTTP_ERROR;
            }
        } else {
            if ($encode_as == Auth_OpenID_ENCODE_URL) {
                $location = $response->encodeToURL();
                $wr = new $cls(AUTH_OPENID_HTTP_REDIRECT, array('location' => $location));
            } else {
                if ($encode_as == Auth_OpenID_ENCODE_HTML_FORM) {
                    $wr = new $cls(AUTH_OPENID_HTTP_OK, array(), $response->toHTML());
                } else {
                    return new Auth_OpenID_EncodingError($response);
                }
            }
        }
        /* Allow the response to carry a custom error code (ex: for Association errors) */
        if (isset($response->code)) {
            $wr->code = $response->code;
        }
        return $wr;
    }

Usage Example

Example #1
0
	/**
	 * Sign an {@link Auth_OpenID_ServerResponse} and return an
	 * {@link Auth_OpenID_WebResponse}.
	 */
	function encode(&$response)
	{
		// the isinstance is a bit of a kludge... it means there isn't
		// really an adapter to make the interfaces quite match.
		if (!is_a($response, 'Auth_OpenID_ServerError') &&
		$response->needsSigning()) {

			if (!$this->signatory) {
				return new Auth_OpenID_ServerError(null,
                                       "Must have a store to sign request");
			}

			if ($response->fields->hasKey(Auth_OpenID_OPENID_NS, 'sig')) {
				return new Auth_OpenID_AlreadySigned($response);
			}
			$response = $this->signatory->sign($response);
		}

		return parent::encode($response);
	}
Auth_OpenID_Encoder