OpenID library installed
[living-lab-site.git] / application / libraries / Auth / OpenID / KVForm.php
1 <?php
2
3 /**
4  * OpenID protocol key-value/comma-newline format parsing and
5  * serialization
6  *
7  * PHP versions 4 and 5
8  *
9  * LICENSE: See the COPYING file included in this distribution.
10  *
11  * @access private
12  * @package OpenID
13  * @author JanRain, Inc. <openid@janrain.com>
14  * @copyright 2005-2008 Janrain, Inc.
15  * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
16  */
17
18 /**
19  * Container for key-value/comma-newline OpenID format and parsing
20  */
21 class Auth_OpenID_KVForm {
22     /**
23      * Convert an OpenID colon/newline separated string into an
24      * associative array
25      *
26      * @static
27      * @access private
28      */
29     static function toArray($kvs, $strict=false)
30     {
31         $lines = explode("\n", $kvs);
32
33         $last = array_pop($lines);
34         if ($last !== '') {
35             array_push($lines, $last);
36             if ($strict) {
37                 return false;
38             }
39         }
40
41         $values = array();
42
43         for ($lineno = 0; $lineno < count($lines); $lineno++) {
44             $line = $lines[$lineno];
45             $kv = explode(':', $line, 2);
46             if (count($kv) != 2) {
47                 if ($strict) {
48                     return false;
49                 }
50                 continue;
51             }
52
53             $key = $kv[0];
54             $tkey = trim($key);
55             if ($tkey != $key) {
56                 if ($strict) {
57                     return false;
58                 }
59             }
60
61             $value = $kv[1];
62             $tval = trim($value);
63             if ($tval != $value) {
64                 if ($strict) {
65                     return false;
66                 }
67             }
68
69             $values[$tkey] = $tval;
70         }
71
72         return $values;
73     }
74
75     /**
76      * Convert an array into an OpenID colon/newline separated string
77      *
78      * @static
79      * @access private
80      */
81     static function fromArray($values)
82     {
83         if ($values === null) {
84             return null;
85         }
86
87         ksort($values);
88
89         $serialized = '';
90         foreach ($values as $key => $value) {
91             if (is_array($value)) {
92                 list($key, $value) = array($value[0], $value[1]);
93             }
94
95             if (strpos($key, ':') !== false) {
96                 return null;
97             }
98
99             if (strpos($key, "\n") !== false) {
100                 return null;
101             }
102
103             if (strpos($value, "\n") !== false) {
104                 return null;
105             }
106             $serialized .= "$key:$value\n";
107         }
108         return $serialized;
109     }
110 }
111