From 90b601c3dd037c698621a030c57e4e42162b085f Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 17 Nov 2010 20:35:50 -0800 Subject: [PATCH] openid registration --- mod/openid.php | 31 +++++++++++++++++++++++++++++++ mod/register.php | 32 +++++++++++++++++++++++++++----- view/register.tpl | 11 +++++++++++ view/theme/default/style.css | 17 +++++++++++++++-- 4 files changed, 84 insertions(+), 7 deletions(-) diff --git a/mod/openid.php b/mod/openid.php index 6c1edd72e2..443d839fa1 100644 --- a/mod/openid.php +++ b/mod/openid.php @@ -11,6 +11,37 @@ function openid_content(&$a) { if($openid->validate()) { + if(x($_SESSION,'register')) { + unset($_SESSION['register']); + $args = ''; + $attr = $openid->getAttributes(); + if(is_array($attr) && count($attr)) { + foreach($attr as $k => $v) { + if($k === 'namePerson/friendly') + $nick = notags(trim($v)); + if($k === 'namePerson/first') + $first = notags(trim($v)); + if($k === 'namePerson') + $args .= '&username=' . notags(trim($v)); + if($k === 'contact/email') + $args .= '&email=' . notags(trim($v)); + } + } + if($nick) + $args .= '&nickname=' . $nick; + elseif($first) + $args .= '&nickname=' . $first; + + $args .= '&openid_url=' . notags(trim($_SESSION['openid'])); + if($a->config['register_policy'] != REGISTER_CLOSED) + goaway($a->get_baseurl() . '/register' . $args); + else + goaway($a->get_baseurl()); + + // NOTREACHED + } + + $r = q("SELECT * FROM `user` WHERE `openid` = '%s' AND `blocked` = 0 AND `verified` = 1 LIMIT 1", dbesc($_SESSION['openid']) ); diff --git a/mod/register.php b/mod/register.php index 30666405c6..407bda73ee 100644 --- a/mod/register.php +++ b/mod/register.php @@ -36,8 +36,24 @@ function register_post(&$a) { $nickname = notags(trim($_POST['nickname'])); if(x($_POST,'email')) $email = notags(trim($_POST['email'])); + if(x($_POST,'openid_url')) + $openid_url = notags(trim($_POST['openid_url'])); + if((! x($username)) || (! x($email)) || (! x($nickname))) { + if($openid_url) { + $_SESSION['register'] = 1; + $_SESSION['openid'] = $openid_url; + require_once('library/openid.php'); + $openid = new LightOpenID; + $openid->identity = $openid_url; + $openid->returnUrl = $a->get_baseurl() . '/openid'; + $openid->required = array('namePerson/friendly', 'contact/email', 'namePerson'); + $openid->optional = array('namePerson/first'); + goaway($openid->authUrl()); + // NOTREACHED + } + notice( t('Please enter the required information.') . EOL ); return; } @@ -118,12 +134,13 @@ function register_post(&$a) { $spkey = openssl_pkey_get_details($sres); $spubkey = $spkey["key"]; - $r = q("INSERT INTO `user` ( `username`, `password`, `email`, `nickname`, + $r = q("INSERT INTO `user` ( `username`, `password`, `email`, `openid`, `nickname`, `pubkey`, `prvkey`, `spubkey`, `sprvkey`, `verified`, `blocked` ) - VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )", + VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )", dbesc($username), dbesc($new_password_encoded), dbesc($email), + dbesc($openid_url), dbesc($nickname), dbesc($pubkey), dbesc($prvkey), @@ -307,9 +324,10 @@ function register_content(&$a) { return; } - $username = ((x($_POST,'username')) ? $_POST['username'] : ((x($_GET,'username')) ? $_GET['username'] : '')); - $email = ((x($_POST,'email')) ? $_POST['email'] : ((x($_GET,'email')) ? $_GET['email'] : '')); - $nickname = ((x($_POST,'nickname')) ? $_POST['nickname'] : ((x($_GET,'nickname')) ? $_GET['nickname'] : '')); + $username = ((x($_POST,'username')) ? $_POST['username'] : ((x($_GET,'username')) ? $_GET['username'] : '')); + $email = ((x($_POST,'email')) ? $_POST['email'] : ((x($_GET,'email')) ? $_GET['email'] : '')); + $openid_url = ((x($_POST,'openid_url')) ? $_POST['openid_url'] : ((x($_GET,'openid_url')) ? $_GET['openid_url'] : '')); + $nickname = ((x($_POST,'nickname')) ? $_POST['nickname'] : ((x($_GET,'nickname')) ? $_GET['nickname'] : '')); $o = load_view_file("view/register.tpl"); $o = replace_macros($o, array( @@ -317,6 +335,10 @@ function register_content(&$a) { '$registertext' =>((x($a->config,'register_text')) ? '
' . $a->config['register_text'] . '
' : "" ), + '$fillwith' => t('You may ' . "\x28" . 'optionally' . "\x29" . ' fill in this form via OpenID by supplying your OpenID and clicking ') . "'" . t('Register') . "'", + '$fillext' => t('If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'), + '$oidlabel' => t('Your OpenID ' . "\x28" . 'optional' . "\x29" . ': '), + '$openid' => $openid_url, '$namelabel' => t('Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '), '$addrlabel' => t('Your Email Address: '), '$nickdesc' => t('Choose a profile nickname. This must begin with a text character. Your global profile locator will then be \'nickname@$sitename\'.'), diff --git a/view/register.tpl b/view/register.tpl index 0dcf19442a..10f7f0222c 100644 --- a/view/register.tpl +++ b/view/register.tpl @@ -4,6 +4,17 @@ $registertext + +

$fillwith

+

$fillext

+ +
+ + +
+
+ +
diff --git a/view/theme/default/style.css b/view/theme/default/style.css index 8b2f2310f5..de5c19ee32 100644 --- a/view/theme/default/style.css +++ b/view/theme/default/style.css @@ -47,6 +47,9 @@ input:hover { background-position: 0 50%; padding-left: 18px; } +.openid:hover { + background-color: #0CBEFE !important; +} option { background-color: #ECD6D2; @@ -334,8 +337,11 @@ footer { margin-left: 20px; margin-right: 20px; } +#register-fill-ext { + margin-bottom: 25px; +} -#label-register-name, #label-register-email, #label-register-nickname { +#label-register-name, #label-register-email, #label-register-nickname, #label-register-openid { float: left; width: 350px; margin-top: 10px; @@ -347,9 +353,16 @@ footer { width: 150px; } -#register-name-end, #register-email-end, #register-nickname-end, #register-submit-end { +#register-openid { + float: left; + margin-top: 10px; + width: 130px; +} + +#register-name-end, #register-email-end, #register-nickname-end, #register-submit-end, #register-openid-end { clear: both; } + #register-nickname-desc { margin-top: 30px; width: 650px;