ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
SReg.php
Go to the documentation of this file.
1<?php
2
45require_once 'Auth/OpenID/Message.php';
46require_once 'Auth/OpenID/Extension.php';
47
48// The data fields that are listed in the sreg spec
51 'fullname' => 'Full Name',
52 'nickname' => 'Nickname',
53 'dob' => 'Date of Birth',
54 'email' => 'E-mail Address',
55 'gender' => 'Gender',
56 'postcode' => 'Postal Code',
57 'country' => 'Country',
58 'language' => 'Language',
59 'timezone' => 'Time Zone');
60
65function Auth_OpenID_checkFieldName($field_name)
66{
68
69 if (!in_array($field_name, array_keys($Auth_OpenID_sreg_data_fields))) {
70 return false;
71 }
72 return true;
73}
74
75// URI used in the wild for Yadis documents advertising simple
76// registration support
77define('Auth_OpenID_SREG_NS_URI_1_0', 'http://openid.net/sreg/1.0');
78
79// URI in the draft specification for simple registration 1.1
80// <http://openid.net/specs/openid-simple-registration-extension-1_1-01.html>
81define('Auth_OpenID_SREG_NS_URI_1_1', 'http://openid.net/extensions/sreg/1.1');
82
83// This attribute will always hold the preferred URI to use when
84// adding sreg support to an XRDS file or in an OpenID namespace
85// declaration.
86define('Auth_OpenID_SREG_NS_URI', Auth_OpenID_SREG_NS_URI_1_1);
87
89
97function Auth_OpenID_supportsSReg($endpoint)
98{
99 return ($endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_1) ||
100 $endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_0));
101}
102
125 static function _getSRegNS($message)
126 {
127 $alias = null;
128 $found_ns_uri = null;
129
130 // See if there exists an alias for one of the two defined
131 // simple registration types.
132 foreach (array(Auth_OpenID_SREG_NS_URI_1_1,
133 Auth_OpenID_SREG_NS_URI_1_0) as $sreg_ns_uri) {
134 $alias = $message->namespaces->getAlias($sreg_ns_uri);
135 if ($alias !== null) {
136 $found_ns_uri = $sreg_ns_uri;
137 break;
138 }
139 }
140
141 if ($alias === null) {
142 // There is no alias for either of the types, so try to
143 // add one. We default to using the modern value (1.1)
144 $found_ns_uri = Auth_OpenID_SREG_NS_URI_1_1;
145 if ($message->namespaces->addAlias(Auth_OpenID_SREG_NS_URI_1_1,
146 'sreg') === null) {
147 // An alias for the string 'sreg' already exists, but
148 // it's defined for something other than simple
149 // registration
150 return null;
151 }
152 }
153
154 return $found_ns_uri;
155 }
156}
157
170
171 var $ns_alias = 'sreg';
172
176 static function build($required=null, $optional=null,
177 $policy_url=null,
178 $sreg_ns_uri=Auth_OpenID_SREG_NS_URI,
179 $cls='Auth_OpenID_SRegRequest')
180 {
181 $obj = new $cls();
182
183 $obj->required = array();
184 $obj->optional = array();
185 $obj->policy_url = $policy_url;
186 $obj->ns_uri = $sreg_ns_uri;
187
188 if ($required) {
189 if (!$obj->requestFields($required, true, true)) {
190 return null;
191 }
192 }
193
194 if ($optional) {
195 if (!$obj->requestFields($optional, false, true)) {
196 return null;
197 }
198 }
199
200 return $obj;
201 }
202
216 static function fromOpenIDRequest($request, $cls='Auth_OpenID_SRegRequest')
217 {
218
219 $obj = call_user_func_array(array($cls, 'build'),
220 array(null, null, null, Auth_OpenID_SREG_NS_URI, $cls));
221
222 // Since we're going to mess with namespace URI mapping, don't
223 // mutate the object that was passed in.
224 $m = $request->message;
225
226 $obj->ns_uri = $obj->_getSRegNS($m);
227 $args = $m->getArgs($obj->ns_uri);
228
229 if ($args === null || Auth_OpenID::isFailure($args)) {
230 return null;
231 }
232
233 $obj->parseExtensionArgs($args);
234
235 return $obj;
236 }
237
262 function parseExtensionArgs($args, $strict=false)
263 {
264 foreach (array('required', 'optional') as $list_name) {
265 $required = ($list_name == 'required');
266 $items = Auth_OpenID::arrayGet($args, $list_name);
267 if ($items) {
268 foreach (explode(',', $items) as $field_name) {
269 if (!$this->requestField($field_name, $required, $strict)) {
270 if ($strict) {
271 return false;
272 }
273 }
274 }
275 }
276 }
277
278 $this->policy_url = Auth_OpenID::arrayGet($args, 'policy_url');
279
280 return true;
281 }
282
288 {
289 return array_merge($this->required, $this->optional);
290 }
291
296 {
297 return count($this->allRequestedFields());
298 }
299
303 function contains($field_name)
304 {
305 return (in_array($field_name, $this->required) ||
306 in_array($field_name, $this->optional));
307 }
308
320 function requestField($field_name,
321 $required=false, $strict=false)
322 {
323 if (!Auth_OpenID_checkFieldName($field_name)) {
324 return false;
325 }
326
327 if ($strict) {
328 if ($this->contains($field_name)) {
329 return false;
330 }
331 } else {
332 if (in_array($field_name, $this->required)) {
333 return true;
334 }
335
336 if (in_array($field_name, $this->optional)) {
337 if ($required) {
338 unset($this->optional[array_search($field_name,
339 $this->optional)]);
340 } else {
341 return true;
342 }
343 }
344 }
345
346 if ($required) {
347 $this->required[] = $field_name;
348 } else {
349 $this->optional[] = $field_name;
350 }
351
352 return true;
353 }
354
366 function requestFields($field_names, $required=false, $strict=false)
367 {
368 if (!is_array($field_names)) {
369 return false;
370 }
371
372 foreach ($field_names as $field_name) {
373 if (!$this->requestField($field_name, $required, $strict=$strict)) {
374 return false;
375 }
376 }
377
378 return true;
379 }
380
390 {
391 $args = array();
392
393 if ($this->required) {
394 $args['required'] = implode(',', $this->required);
395 }
396
397 if ($this->optional) {
398 $args['optional'] = implode(',', $this->optional);
399 }
400
401 if ($this->policy_url) {
402 $args['policy_url'] = $this->policy_url;
403 }
404
405 return $args;
406 }
407}
408
418
419 var $ns_alias = 'sreg';
420
422 $sreg_ns_uri=Auth_OpenID_SREG_NS_URI)
423 {
424 if ($data === null) {
425 $this->data = array();
426 } else {
427 $this->data = $data;
428 }
429
430 $this->ns_uri = $sreg_ns_uri;
431 }
432
445 static function extractResponse($request, $data)
446 {
447 $obj = new Auth_OpenID_SRegResponse();
448 $obj->ns_uri = $request->ns_uri;
449
450 foreach ($request->allRequestedFields() as $field) {
451 $value = Auth_OpenID::arrayGet($data, $field);
452 if ($value !== null) {
453 $obj->data[$field] = $value;
454 }
455 }
456
457 return $obj;
458 }
459
474 static function fromSuccessResponse($success_response, $signed_only=true)
475 {
477
478 $obj = new Auth_OpenID_SRegResponse();
479 $obj->ns_uri = $obj->_getSRegNS($success_response->message);
480
481 if ($signed_only) {
482 $args = $success_response->getSignedNS($obj->ns_uri);
483 } else {
484 $args = $success_response->message->getArgs($obj->ns_uri);
485 }
486
487 if ($args === null || Auth_OpenID::isFailure($args)) {
488 return null;
489 }
490
491 foreach ($Auth_OpenID_sreg_data_fields as $field_name => $desc) {
492 if (in_array($field_name, array_keys($args))) {
493 $obj->data[$field_name] = $args[$field_name];
494 }
495 }
496
497 return $obj;
498 }
499
501 {
502 return $this->data;
503 }
504
505 // Read-only dictionary interface
506 function get($field_name, $default=null)
507 {
508 if (!Auth_OpenID_checkFieldName($field_name)) {
509 return null;
510 }
511
512 return Auth_OpenID::arrayGet($this->data, $field_name, $default);
513 }
514
515 function contents()
516 {
517 return $this->data;
518 }
519}
520
521
Auth_OpenID_registerNamespaceAlias($namespace_uri, $alias)
Registers a (namespace URI, alias) mapping in a global namespace alias map.
Definition: Message.php:77
const Auth_OpenID_SREG_NS_URI_1_1
Definition: SReg.php:81
Auth_OpenID_supportsSReg($endpoint)
Does the given endpoint advertise support for simple registration?
Definition: SReg.php:97
global $Auth_OpenID_sreg_data_fields
Import message and extension internals.
Definition: SReg.php:49
Auth_OpenID_checkFieldName($field_name)
Check to see that the given value is a valid simple registration data field name.
Definition: SReg.php:65
const Auth_OpenID_SREG_NS_URI
Definition: SReg.php:86
const Auth_OpenID_SREG_NS_URI_1_0
Definition: SReg.php:77
static _getSRegNS($message)
Extract the simple registration namespace URI from the given OpenID message.
Definition: SReg.php:125
static fromOpenIDRequest($request, $cls='Auth_OpenID_SRegRequest')
Create a simple registration request that contains the fields that were requested in the OpenID reque...
Definition: SReg.php:216
getExtensionArgs()
Get a dictionary of unqualified simple registration arguments representing this request.
Definition: SReg.php:389
static build($required=null, $optional=null, $policy_url=null, $sreg_ns_uri=Auth_OpenID_SREG_NS_URI, $cls='Auth_OpenID_SRegRequest')
Initialize an empty simple registration request.
Definition: SReg.php:176
parseExtensionArgs($args, $strict=false)
Parse the unqualified simple registration request parameters and add them to this object.
Definition: SReg.php:262
contains($field_name)
Was this field in the request?
Definition: SReg.php:303
requestFields($field_names, $required=false, $strict=false)
Add the given list of fields to the request.
Definition: SReg.php:366
requestField($field_name, $required=false, $strict=false)
Request the specified field from the OpenID user.
Definition: SReg.php:320
wereFieldsRequested()
Have any simple registration fields been requested?
Definition: SReg.php:295
allRequestedFields()
A list of all of the simple registration fields that were requested, whether they were required or op...
Definition: SReg.php:287
getExtensionArgs()
Get the string arguments that should be added to an OpenID message for this extension.
Definition: SReg.php:500
Auth_OpenID_SRegResponse($data=null, $sreg_ns_uri=Auth_OpenID_SREG_NS_URI)
Definition: SReg.php:421
static extractResponse($request, $data)
Take a C{L{SRegRequest}} and a dictionary of simple registration values and create a C{L{SRegResponse...
Definition: SReg.php:445
static fromSuccessResponse($success_response, $signed_only=true)
Create a C{L{SRegResponse}} object from a successful OpenID library response (C{L{openid....
Definition: SReg.php:474
static arrayGet($arr, $key, $fallback=null)
Convenience function for getting array values.
Definition: OpenID.php:242
static isFailure($thing)
Return true if $thing is an Auth_OpenID_FailureResponse object; false if not.
Definition: OpenID.php:118
$data