Upgrade phpCAS
[piwik-CASLogin.git] / CAS / CAS / ProxyChain / AllowedList.php
1 <?php
2
3 /**
4  * Licensed to Jasig under one or more contributor license
5  * agreements. See the NOTICE file distributed with this work for
6  * additional information regarding copyright ownership.
7  *
8  * Jasig licenses this file to you under the Apache License,
9  * Version 2.0 (the "License"); you may not use this file except in
10  * compliance with the License. You may obtain a copy of the License at:
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  * PHP Version 5
21  *
22  * @file     CAS/ProxyChain/AllowedList.php
23  * @category Authentication
24  * @package  PhpCAS
25  * @author   Adam Franco <afranco@middlebury.edu>
26  * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
27  * @link     https://wiki.jasig.org/display/CASC/phpCAS
28  */
29
30
31 /**
32  * ProxyChain is a container for storing chains of valid proxies that can
33  * be used to validate proxied requests to a service
34  *
35  * @class    CAS_ProxyChain_AllowedList
36  * @category Authentication
37  * @package  PhpCAS
38  * @author   Adam Franco <afranco@middlebury.edu>
39  * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
40  * @link     https://wiki.jasig.org/display/CASC/phpCAS
41  */
42
43 class CAS_ProxyChain_AllowedList
44 {
45
46     private $_chains = array();
47
48     /**
49      * Check whether proxies are allowed by configuration
50      *
51      * @return bool
52      */
53     public function isProxyingAllowed()
54     {
55         return (count($this->_chains) > 0);
56     }
57
58     /**
59      * Add a chain of proxies to the list of possible chains
60      *
61      * @param CAS_ProxyChain_Interface $chain A chain of proxies
62      *
63      * @return void
64      */
65     public function allowProxyChain(CAS_ProxyChain_Interface $chain)
66     {
67         $this->_chains[] = $chain;
68     }
69
70     /**
71      * Check if the proxies found in the response match the allowed proxies
72      *
73      * @param array $proxies list of proxies to check
74      *
75      * @return bool whether the proxies match the allowed proxies
76      */
77     public function isProxyListAllowed(array $proxies)
78     {
79         phpCAS::traceBegin();
80         if (empty($proxies)) {
81             phpCAS::trace("No proxies were found in the response");
82             phpCAS::traceEnd(true);
83             return true;
84         } elseif (!$this->isProxyingAllowed()) {
85             phpCAS::trace("Proxies are not allowed");
86             phpCAS::traceEnd(false);
87             return false;
88         } else {
89             $res = $this->contains($proxies);
90             phpCAS::traceEnd($res);
91             return $res;
92         }
93     }
94
95     /**
96      * Validate the proxies from the proxy ticket validation against the
97      * chains that were definded.
98      *
99      * @param array $list List of proxies from the proxy ticket validation.
100      *
101      * @return if any chain fully matches the supplied list
102      */
103     public function contains(array $list)
104     {
105         phpCAS::traceBegin();
106         $count = 0;
107         foreach ($this->_chains as $chain) {
108             phpCAS::trace("Checking chain ". $count++);
109             if ($chain->matches($list)) {
110                 phpCAS::traceEnd(true);
111                 return true;
112             }
113         }
114         phpCAS::trace("No proxy chain matches.");
115         phpCAS::traceEnd(false);
116         return false;
117     }
118 }
119 ?>