1) $which = argv(1); else { $a->error = 404; return; } $profile = ''; $channel = $a->get_channel(); profile_load($a,$which,$profile); require 'library/openid/provider/provider.php'; function getUserData($handle=null) { if(! local_channel()) { notice( t('Permission denied.') . EOL); get_app()->page['content'] = login(); return false; } // logger('handle: ' . $handle); if($handle) { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_address = '%s' limit 1", dbesc($handle) ); } else { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d", intval(local_channel()) ); } if(! r) return false; $x = q("select * from account where account_id = %d limit 1", intval($r[0]['channel_account_id']) ); if($x) $r[0]['email'] = $x[0]['account_email']; $p = q("select * from profile where is_default = 1 and uid = %d limit 1", intval($r[0]['channel_account_id']) ); $gender = ''; if($p[0]['gender'] == t('Male')) $gender = 'M'; if($p[0]['gender'] == t('Female')) $gender = 'F'; $r[0]['firstName'] = ((strpos($r[0]['channel_name'],' ')) ? substr($r[0]['channel_name'],0,strpos($r[0]['channel_name'],' ')) : $r[0]['channel_name']); $r[0]['lastName'] = ((strpos($r[0]['channel_name'],' ')) ? substr($r[0]['channel_name'],strpos($r[0]['channel_name'],' ')+1) : ''); $r[0]['namePerson'] = $r[0]['channel_name']; $r[0]['pphoto'] = $r[0]['xchan_photo_l']; $r[0]['pphoto16'] = z_root() . '/photo/profile/16/' . $r[0]['channel_id'] . '.jpg'; $r[0]['pphoto32'] = z_root() . '/photo/profile/32/' . $r[0]['channel_id'] . '.jpg'; $r[0]['pphoto48'] = z_root() . '/photo/profile/48/' . $r[0]['channel_id'] . '.jpg'; $r[0]['pphoto64'] = z_root() . '/photo/profile/64/' . $r[0]['channel_id'] . '.jpg'; $r[0]['pphoto80'] = z_root() . '/photo/profile/80/' . $r[0]['channel_id'] . '.jpg'; $r[0]['pphoto128'] = z_root() . '/photo/profile/128/' . $r[0]['channel_id'] . '.jpg'; $r[0]['timezone'] = $r[0]['channel_timezone']; $r[0]['url'] = $r[0]['xchan_url']; $r[0]['language'] = (($x[0]['account_language']) ? $x[0]['account_language'] : 'en'); $r[0]['birthyear'] = ((intval(substr($p[0]['dob'],0,4))) ? intval(substr($p[0]['dob'],0,4)) : ''); $r[0]['birthmonth'] = ((intval(substr($p[0]['dob'],5,2))) ? intval(substr($p[0]['dob'],5,2)) : ''); $r[0]['birthday'] = ((intval(substr($p[0]['dob'],8,2))) ? intval(substr($p[0]['dob'],8,2)) : ''); $r[0]['birthdate'] = (($r[0]['birthyear'] && $r[0]['birthmonth'] && $r[0]['birthday']) ? $p[0]['dob'] : ''); $r[0]['gender'] = $gender; return $r[0]; /* if(isset($_POST['login'],$_POST['password'])) { $login = mysql_real_escape_string($_POST['login']); $password = sha1($_POST['password']); $q = mysql_query("SELECT * FROM Users WHERE login = '$login' AND password = '$password'"); if($data = mysql_fetch_assoc($q)) { return $data; } if($handle) { echo 'Wrong login/password.'; } } if($handle) { ?>
Login:
Password:
t('First Name'), 'namePerson/last' => t('Last Name'), 'namePerson/friendly' => t('Nickname'), 'namePerson' => t('Full Name'), 'contact/internet/email' => t('Email'), 'contact/email' => t('Email'), 'media/image/aspect11' => t('Profile Photo'), 'media/image' => t('Profile Photo'), 'media/image/default' => t('Profile Photo'), 'media/image/16x16' => t('Profile Photo 16px'), 'media/image/32x32' => t('Profile Photo 32px'), 'media/image/48x48' => t('Profile Photo 48px'), 'media/image/64x64' => t('Profile Photo 64px'), 'media/image/80x80' => t('Profile Photo 80px'), 'media/image/128x128' => t('Profile Photo 128px'), 'timezone' => t('Timezone'), 'contact/web/default' => t('Homepage URL'), 'language/pref' => t('Language'), 'birthDate/birthYear' => t('Birth Year'), 'birthDate/birthMonth' => t('Birth Month'), 'birthDate/birthday' => t('Birth Day'), 'birthDate' => t('Birthdate'), 'gender' => t('Gender'), ); return $attrMap; } class MysqlProvider extends LightOpenIDProvider { // See http://openid.net/specs/openid-attribute-properties-list-1_0-01.html // This list contains a few variations of these attributes to maintain // compatibility with legacy clients private $attrMap = array( 'namePerson/first' => 'First Name', 'namePerson/last' => 'Last Name', 'namePerson/friendly' => 'Nickname', 'namePerson' => 'Full Name', 'contact/internet/email' => 'Email', 'contact/email' => 'Email', 'media/image/aspect11' => 'Profile Photo', 'media/image' => 'Profile Photo', 'media/image/default' => 'Profile Photo', 'media/image/16x16' => 'Profile Photo 16px', 'media/image/32x32' => 'Profile Photo 32px', 'media/image/48x48' => 'Profile Photo 48px', 'media/image/64x64' => 'Profile Photo 64px', 'media/image/80x80' => 'Profile Photo 80px', 'media/image/128x128' => 'Profile Photo 128px', 'timezone' => 'Timezone', 'contact/web/default' => 'Homepage URL', 'language/pref' => 'Language', 'birthDate/birthYear' => 'Birth Year', 'birthDate/birthMonth' => 'Birth Month', 'birthDate/birthday' => 'Birth Day', 'birthDate' => 'Birthdate', 'gender' => 'Gender', ); private $attrFieldMap = array( 'namePerson/first' => 'firstName', 'namePerson/last' => 'lastName', 'namePerson/friendly' => 'channel_address', 'namePerson' => 'namePerson', 'contact/internet/email' => 'email', 'contact/email' => 'email', 'media/image/aspect11' => 'pphoto', 'media/image' => 'pphoto', 'media/image/default' => 'pphoto', 'media/image/16x16' => 'pphoto16', 'media/image/32x32' => 'pphoto32', 'media/image/48x48' => 'pphoto48', 'media/image/64x64' => 'pphoto64', 'media/image/80x80' => 'pphoto80', 'media/image/128x128' => 'pphoto128', 'timezone' => 'timezone', 'contact/web/default' => 'url', 'language/pref' => 'language', 'birthDate/birthYear' => 'birthyear', 'birthDate/birthMonth' => 'birthmonth', 'birthDate/birthday' => 'birthday', 'birthDate' => 'birthdate', 'gender' => 'gender', ); function setup($identity, $realm, $assoc_handle, $attributes) { // logger('identity: ' . $identity); // logger('realm: ' . $realm); // logger('assoc_handle: ' . $assoc_handle); // logger('attributes: ' . print_r($attributes,true)); $data = getUserData($assoc_handle); $o .= '
' . '' . '' . '' . "$realm wishes to authenticate you."; if($attributes['required'] || $attributes['optional']) { $o .= " It also requests following information (required fields marked with *):" . ''; } $o .= '
' . ' ' . ' ' . ' ' . '
'; get_app()->page['content'] .= $o; } function checkid($realm, &$attributes) { logger('checkid: ' . $realm); logger('checkid attrs: ' . print_r($attributes,true)); if(isset($_POST['cancel'])) { $this->cancel(); } $data = getUserData(); if(! $data) { return false; } logger('checkid: checkpoint1'); $q = get_pconfig(local_channel(),'openid',$realm); $attrs = array(); if($q) { $attrs = $q; } elseif(isset($_POST['attributes'])) { $attrs = array_keys($_POST['attributes']); } elseif(!isset($_POST['once']) && !isset($_POST['always'])) { return false; } $attributes = array(); foreach($attrs as $attr) { if(isset($this->attrFieldMap[$attr])) { $attributes[$attr] = $data[$this->attrFieldMap[$attr]]; } } if(isset($_POST['always'])) { set_pconfig(local_channel(),'openid',$realm,array_keys($attributes)); } return z_root() . '/id/' . $data['channel_address']; } function assoc_handle() { $channel = get_app()->get_channel(); return z_root() . '/id/' . $channel['channel_address']; } function setAssoc($handle, $data) { logger('setAssoc'); $channel = channelx_by_nick(basename($handle)); if($channel) set_pconfig($channel['channel_id'],'openid','associate',$data); } function getAssoc($handle) { logger('getAssoc: ' . $handle); $channel = channelx_by_nick(basename($handle)); if($channel) return get_pconfig($channel['channel_id'],'openid','associate'); return false; } function delAssoc($handle) { logger('delAssoc'); $channel = channelx_by_nick(basename($handle)); if($channel) return del_pconfig($channel['channel_id'],'openid','associate'); } } $op = new MysqlProvider; $op->server(); }