1*d10b5556SXylle<?php 2*d10b5556SXylle 3*d10b5556SXylle/** 4*d10b5556SXylle * Licensed to Jasig under one or more contributor license 5*d10b5556SXylle * agreements. See the NOTICE file distributed with this work for 6*d10b5556SXylle * additional information regarding copyright ownership. 7*d10b5556SXylle * 8*d10b5556SXylle * Jasig licenses this file to you under the Apache License, 9*d10b5556SXylle * Version 2.0 (the "License"); you may not use this file except in 10*d10b5556SXylle * compliance with the License. You may obtain a copy of the License at: 11*d10b5556SXylle * 12*d10b5556SXylle * http://www.apache.org/licenses/LICENSE-2.0 13*d10b5556SXylle * 14*d10b5556SXylle * Unless required by applicable law or agreed to in writing, software 15*d10b5556SXylle * distributed under the License is distributed on an "AS IS" BASIS, 16*d10b5556SXylle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17*d10b5556SXylle * See the License for the specific language governing permissions and 18*d10b5556SXylle * limitations under the License. 19*d10b5556SXylle * 20*d10b5556SXylle * PHP Version 7 21*d10b5556SXylle * 22*d10b5556SXylle * @file CAS/ProxiedService/Http/Post.php 23*d10b5556SXylle * @category Authentication 24*d10b5556SXylle * @package PhpCAS 25*d10b5556SXylle * @author Adam Franco <afranco@middlebury.edu> 26*d10b5556SXylle * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 27*d10b5556SXylle * @link https://wiki.jasig.org/display/CASC/phpCAS 28*d10b5556SXylle */ 29*d10b5556SXylle 30*d10b5556SXylle/** 31*d10b5556SXylle * This class is used to make proxied service requests via the HTTP POST method. 32*d10b5556SXylle * 33*d10b5556SXylle * Usage Example: 34*d10b5556SXylle * 35*d10b5556SXylle * try { 36*d10b5556SXylle * $service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_POST); 37*d10b5556SXylle * $service->setUrl('http://www.example.com/path/'); 38*d10b5556SXylle * $service->setContentType('text/xml'); 39*d10b5556SXylle * $service->setBody('<?xml version="1.0"?'.'><methodCall><methodName>example.search</methodName></methodCall>'); 40*d10b5556SXylle * $service->send(); 41*d10b5556SXylle * if ($service->getResponseStatusCode() == 200) 42*d10b5556SXylle * return $service->getResponseBody(); 43*d10b5556SXylle * else 44*d10b5556SXylle * // The service responded with an error code 404, 500, etc. 45*d10b5556SXylle * throw new Exception('The service responded with an error.'); 46*d10b5556SXylle * 47*d10b5556SXylle * } catch (CAS_ProxyTicketException $e) { 48*d10b5556SXylle * if ($e->getCode() == PHPCAS_SERVICE_PT_FAILURE) 49*d10b5556SXylle * return "Your login has timed out. You need to log in again."; 50*d10b5556SXylle * else 51*d10b5556SXylle * // Other proxy ticket errors are from bad request format 52*d10b5556SXylle * // (shouldn't happen) or CAS server failure (unlikely) so lets just 53*d10b5556SXylle * // stop if we hit those. 54*d10b5556SXylle * throw $e; 55*d10b5556SXylle * } catch (CAS_ProxiedService_Exception $e) { 56*d10b5556SXylle * // Something prevented the service request from being sent or received. 57*d10b5556SXylle * // We didn't even get a valid error response (404, 500, etc), so this 58*d10b5556SXylle * // might be caused by a network error or a DNS resolution failure. 59*d10b5556SXylle * // We could handle it in some way, but for now we will just stop. 60*d10b5556SXylle * throw $e; 61*d10b5556SXylle * } 62*d10b5556SXylle * 63*d10b5556SXylle * @class CAS_ProxiedService_Http_Post 64*d10b5556SXylle * @category Authentication 65*d10b5556SXylle * @package PhpCAS 66*d10b5556SXylle * @author Adam Franco <afranco@middlebury.edu> 67*d10b5556SXylle * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 68*d10b5556SXylle * @link https://wiki.jasig.org/display/CASC/phpCAS 69*d10b5556SXylle */ 70*d10b5556SXylleclass CAS_ProxiedService_Http_Post 71*d10b5556SXylleextends CAS_ProxiedService_Http_Abstract 72*d10b5556SXylle{ 73*d10b5556SXylle 74*d10b5556SXylle /** 75*d10b5556SXylle * The content-type of this request 76*d10b5556SXylle * 77*d10b5556SXylle * @var string $_contentType 78*d10b5556SXylle */ 79*d10b5556SXylle private $_contentType; 80*d10b5556SXylle 81*d10b5556SXylle /** 82*d10b5556SXylle * The body of the this request 83*d10b5556SXylle * 84*d10b5556SXylle * @var string $_body 85*d10b5556SXylle */ 86*d10b5556SXylle private $_body; 87*d10b5556SXylle 88*d10b5556SXylle /** 89*d10b5556SXylle * Set the content type of this POST request. 90*d10b5556SXylle * 91*d10b5556SXylle * @param string $contentType content type 92*d10b5556SXylle * 93*d10b5556SXylle * @return void 94*d10b5556SXylle * @throws CAS_OutOfSequenceException If called after the Request has been sent. 95*d10b5556SXylle */ 96*d10b5556SXylle public function setContentType ($contentType) 97*d10b5556SXylle { 98*d10b5556SXylle if ($this->hasBeenSent()) { 99*d10b5556SXylle throw new CAS_OutOfSequenceException( 100*d10b5556SXylle 'Cannot set the content type, request already sent.' 101*d10b5556SXylle ); 102*d10b5556SXylle } 103*d10b5556SXylle 104*d10b5556SXylle $this->_contentType = $contentType; 105*d10b5556SXylle } 106*d10b5556SXylle 107*d10b5556SXylle /** 108*d10b5556SXylle * Set the body of this POST request. 109*d10b5556SXylle * 110*d10b5556SXylle * @param string $body body to set 111*d10b5556SXylle * 112*d10b5556SXylle * @return void 113*d10b5556SXylle * @throws CAS_OutOfSequenceException If called after the Request has been sent. 114*d10b5556SXylle */ 115*d10b5556SXylle public function setBody ($body) 116*d10b5556SXylle { 117*d10b5556SXylle if ($this->hasBeenSent()) { 118*d10b5556SXylle throw new CAS_OutOfSequenceException( 119*d10b5556SXylle 'Cannot set the body, request already sent.' 120*d10b5556SXylle ); 121*d10b5556SXylle } 122*d10b5556SXylle 123*d10b5556SXylle $this->_body = $body; 124*d10b5556SXylle } 125*d10b5556SXylle 126*d10b5556SXylle /** 127*d10b5556SXylle * Add any other parts of the request needed by concrete classes 128*d10b5556SXylle * 129*d10b5556SXylle * @param CAS_Request_RequestInterface $request request interface class 130*d10b5556SXylle * 131*d10b5556SXylle * @return void 132*d10b5556SXylle */ 133*d10b5556SXylle protected function populateRequest (CAS_Request_RequestInterface $request) 134*d10b5556SXylle { 135*d10b5556SXylle if (empty($this->_contentType) && !empty($this->_body)) { 136*d10b5556SXylle throw new CAS_ProxiedService_Exception( 137*d10b5556SXylle "If you pass a POST body, you must specify a content type via " 138*d10b5556SXylle .get_class($this).'->setContentType($contentType).' 139*d10b5556SXylle ); 140*d10b5556SXylle } 141*d10b5556SXylle 142*d10b5556SXylle $request->makePost(); 143*d10b5556SXylle if (!empty($this->_body)) { 144*d10b5556SXylle $request->addHeader('Content-Type: '.$this->_contentType); 145*d10b5556SXylle $request->addHeader('Content-Length: '.strlen($this->_body)); 146*d10b5556SXylle $request->setPostBody($this->_body); 147*d10b5556SXylle } 148*d10b5556SXylle } 149*d10b5556SXylle 150*d10b5556SXylle 151*d10b5556SXylle} 152*d10b5556SXylle?> 153