xref: /plugin/authssocas/vendor/apereo/phpcas/source/CAS/ProxiedService/Abstract.php (revision d10b5556242e78d8a430c323b91984ec16415a46)
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/Abstract.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 implements common methods for ProxiedService implementations included
32*d10b5556SXylle * with phpCAS.
33*d10b5556SXylle *
34*d10b5556SXylle * @class    CAS_ProxiedService_Abstract
35*d10b5556SXylle * @category Authentication
36*d10b5556SXylle * @package  PhpCAS
37*d10b5556SXylle * @author   Adam Franco <afranco@middlebury.edu>
38*d10b5556SXylle * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
39*d10b5556SXylle * @link     https://wiki.jasig.org/display/CASC/phpCAS
40*d10b5556SXylle */
41*d10b5556SXylleabstract class CAS_ProxiedService_Abstract
42*d10b5556SXylleimplements CAS_ProxiedService, CAS_ProxiedService_Testable
43*d10b5556SXylle{
44*d10b5556SXylle
45*d10b5556SXylle    /**
46*d10b5556SXylle     * The proxy ticket that can be used when making service requests.
47*d10b5556SXylle     * @var string $_proxyTicket;
48*d10b5556SXylle     */
49*d10b5556SXylle    private $_proxyTicket;
50*d10b5556SXylle
51*d10b5556SXylle    /**
52*d10b5556SXylle     * Register a proxy ticket with the Proxy that it can use when making requests.
53*d10b5556SXylle     *
54*d10b5556SXylle     * @param string $proxyTicket proxy ticket
55*d10b5556SXylle     *
56*d10b5556SXylle     * @return void
57*d10b5556SXylle     * @throws InvalidArgumentException If the $proxyTicket is invalid.
58*d10b5556SXylle     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
59*d10b5556SXylle     *         already been initialized/set.
60*d10b5556SXylle     */
61*d10b5556SXylle    public function setProxyTicket ($proxyTicket)
62*d10b5556SXylle    {
63*d10b5556SXylle        if (empty($proxyTicket)) {
64*d10b5556SXylle            throw new CAS_InvalidArgumentException(
65*d10b5556SXylle                'Trying to initialize with an empty proxy ticket.'
66*d10b5556SXylle            );
67*d10b5556SXylle        }
68*d10b5556SXylle        if (!empty($this->_proxyTicket)) {
69*d10b5556SXylle            throw new CAS_OutOfSequenceException(
70*d10b5556SXylle                'Already initialized, cannot change the proxy ticket.'
71*d10b5556SXylle            );
72*d10b5556SXylle        }
73*d10b5556SXylle        $this->_proxyTicket = $proxyTicket;
74*d10b5556SXylle    }
75*d10b5556SXylle
76*d10b5556SXylle    /**
77*d10b5556SXylle     * Answer the proxy ticket to be used when making requests.
78*d10b5556SXylle     *
79*d10b5556SXylle     * @return string
80*d10b5556SXylle     * @throws CAS_OutOfSequenceException If called before a proxy ticket has
81*d10b5556SXylle     * already been initialized/set.
82*d10b5556SXylle     */
83*d10b5556SXylle    protected function getProxyTicket ()
84*d10b5556SXylle    {
85*d10b5556SXylle        if (empty($this->_proxyTicket)) {
86*d10b5556SXylle            throw new CAS_OutOfSequenceException(
87*d10b5556SXylle                'No proxy ticket yet. Call $this->initializeProxyTicket() to aquire the proxy ticket.'
88*d10b5556SXylle            );
89*d10b5556SXylle        }
90*d10b5556SXylle
91*d10b5556SXylle        return $this->_proxyTicket;
92*d10b5556SXylle    }
93*d10b5556SXylle
94*d10b5556SXylle    /**
95*d10b5556SXylle     * @var CAS_Client $_casClient;
96*d10b5556SXylle     */
97*d10b5556SXylle    private $_casClient;
98*d10b5556SXylle
99*d10b5556SXylle    /**
100*d10b5556SXylle     * Use a particular CAS_Client->initializeProxiedService() rather than the
101*d10b5556SXylle     * static phpCAS::initializeProxiedService().
102*d10b5556SXylle     *
103*d10b5556SXylle     * This method should not be called in standard operation, but is needed for unit
104*d10b5556SXylle     * testing.
105*d10b5556SXylle     *
106*d10b5556SXylle     * @param CAS_Client $casClient cas client
107*d10b5556SXylle     *
108*d10b5556SXylle     * @return void
109*d10b5556SXylle     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
110*d10b5556SXylle     * already been initialized/set.
111*d10b5556SXylle     */
112*d10b5556SXylle    public function setCasClient (CAS_Client $casClient)
113*d10b5556SXylle    {
114*d10b5556SXylle        if (!empty($this->_proxyTicket)) {
115*d10b5556SXylle            throw new CAS_OutOfSequenceException(
116*d10b5556SXylle                'Already initialized, cannot change the CAS_Client.'
117*d10b5556SXylle            );
118*d10b5556SXylle        }
119*d10b5556SXylle
120*d10b5556SXylle        $this->_casClient = $casClient;
121*d10b5556SXylle    }
122*d10b5556SXylle
123*d10b5556SXylle    /**
124*d10b5556SXylle     * Fetch our proxy ticket.
125*d10b5556SXylle     *
126*d10b5556SXylle     * Descendent classes should call this method once their service URL is available
127*d10b5556SXylle     * to initialize their proxy ticket.
128*d10b5556SXylle     *
129*d10b5556SXylle     * @return void
130*d10b5556SXylle     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
131*d10b5556SXylle     * already been initialized.
132*d10b5556SXylle     */
133*d10b5556SXylle    protected function initializeProxyTicket()
134*d10b5556SXylle    {
135*d10b5556SXylle        if (!empty($this->_proxyTicket)) {
136*d10b5556SXylle            throw new CAS_OutOfSequenceException(
137*d10b5556SXylle                'Already initialized, cannot initialize again.'
138*d10b5556SXylle            );
139*d10b5556SXylle        }
140*d10b5556SXylle        // Allow usage of a particular CAS_Client for unit testing.
141*d10b5556SXylle        if (empty($this->_casClient)) {
142*d10b5556SXylle            phpCAS::initializeProxiedService($this);
143*d10b5556SXylle        } else {
144*d10b5556SXylle            $this->_casClient->initializeProxiedService($this);
145*d10b5556SXylle        }
146*d10b5556SXylle    }
147*d10b5556SXylle
148*d10b5556SXylle}
149*d10b5556SXylle?>
150