Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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 7
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 bool 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
?>