cleanup of mod_zregister, basic functionality working - new accounts getting stored.

This commit is contained in:
friendica 2012-08-15 21:56:04 -07:00
parent 2358a220ba
commit 77b334efbc
3 changed files with 75 additions and 59 deletions

View File

@ -11,21 +11,17 @@ function create_account($arr) {
// Required: { email, password } // Required: { email, password }
$a = get_app(); $result = array('success' => false, 'email' => '', 'password' => '', 'message' => '');
$result = array('success' => false, 'user' => null, 'password' => '', 'message' => '');
$using_invites = get_config('system','invitation_only'); $using_invites = get_config('system','invitation_only');
$num_invites = get_config('system','number_invites'); $num_invites = get_config('system','number_invites');
$invite_id = ((x($arr,'invite_id')) ? notags(trim($arr['invite_id'])) : ''); $invite_id = ((x($arr,'invite_id')) ? notags(trim($arr['invite_id'])) : '');
$email = ((x($arr,'email')) ? notags(trim($arr['email'])) : ''); $email = ((x($arr,'email')) ? notags(trim($arr['email'])) : '');
$password = ((x($arr,'password')) ? trim($arr['password']) : ''); $password = ((x($arr,'password')) ? trim($arr['password']) : '');
$password2 = ((x($arr,'password2')) ? trim($arr['password2']) : ''); $password2 = ((x($arr,'password2')) ? trim($arr['password2']) : '');
$parent = ((x($arr,'parent')) ? intval($arr['parent']) : 0 ); $parent = ((x($arr,'parent')) ? intval($arr['parent']) : 0 );
$flags = ((x($arr,'account_flags')) ? intval($arr['account_flags']) : ACCOUNT_OK);
$blocked = ((x($arr,'blocked')) ? intval($arr['blocked']) : 0);
$verified = ((x($arr,'verified')) ? intval($arr['verified']) : 0);
if($using_invites) { if($using_invites) {
if(! $invite_id) { if(! $invite_id) {
@ -50,17 +46,20 @@ function create_account($arr) {
if((! valid_email($email)) || (! validate_email($email))) if((! valid_email($email)) || (! validate_email($email)))
$result['message'] .= t('Not a valid email address.') . EOL; $result['message'] .= t('Not a valid email address.') . EOL;
$r = q("select account_email, account_password from account where email = '%s' limit 1",
if(strlen($result['message'])) { if(strlen($result['message'])) {
return $result; return $result;
} }
$password_encoded = hash('whirlpool',$password); $password_encoded = hash('whirlpool',$password);
$result['password'] = $new_password;
$r = q("INSERT INTO account $r = q("INSERT INTO account
( account_parent, account_password, account_email, account_language, ( account_parent, account_password, account_email, account_language,
account_created, account_flags, account_roles, account_expires, account_created, account_flags, account_roles, account_expires,
@ -69,7 +68,7 @@ function create_account($arr) {
intval($parent), intval($parent),
dbesc($password_encoded), dbesc($password_encoded),
dbesc($email), dbesc($email),
dbesc($a->language), dbesc(get_best_language()),
dbesc(datetime_convert()), dbesc(datetime_convert()),
dbesc($flags), dbesc($flags),
dbesc(0), dbesc(0),
@ -77,8 +76,16 @@ function create_account($arr) {
dbesc($default_service_class) dbesc($default_service_class)
); );
if(! $r) {
logger('create_account: DB INSERT failed.');
$result['message'] = t('Failed to store account information.');
return($result);
}
$result['success'] = true; $result['success'] = true;
$result['email'] = $email;
$result['password'] = $password;
return $result; return $result;
} }

View File

@ -6,18 +6,28 @@ function zregister_init(&$a) {
$cmd = ((argc() > 1) ? argv(1) : ''); $cmd = ((argc() > 1) ? argv(1) : '');
if($cmd === 'email_check.json') { if($cmd === 'email_check.json') {
$result = array('error' => false, 'message' => ''); $result = array('error' => false, 'message' => '');
$email = $_REQUEST['email']; $email = $_REQUEST['email'];
if(! strlen($email))
json_return_and_die($result);
if(! allowed_email($email))
$result['message'] = t('Your email domain is not among those allowed on this site');
if((! valid_email($email)) || (! validate_email($email))) if((! valid_email($email)) || (! validate_email($email)))
$result['message'] .= t('Not a valid email address') . EOL; $result['message'] .= t('Not a valid email address') . EOL;
elseif(! allowed_email($email))
$result['message'] = t('Your email domain is not among those allowed on this site');
else {
$r = q("select account_email from account where account_email = '%s' limit 1",
dbesc($email)
);
if(count($r)) {
$result['message'] .= t('Your email address is already registered at this site.');
}
}
if($result['message']) if($result['message'])
$result['error'] = true; $result['error'] = true;
json_return_and_die($result); json_return_and_die($result);
} }
@ -75,50 +85,47 @@ EOT;
function zregister_post(&$a) { function zregister_post(&$a) {
$verified = 0;
$blocked = 1;
$arr = array('post' => $_POST);
call_hooks('zregister_post', $arr);
$max_dailies = intval(get_config('system','max_daily_registrations')); $max_dailies = intval(get_config('system','max_daily_registrations'));
if($max_dailies) { if($max_dailies) {
$r = q("select count(*) as total from account where account_created > UTC_TIMESTAMP - INTERVAL 1 day"); $r = q("select count(*) as total from account where account_created > UTC_TIMESTAMP - INTERVAL 1 day");
if($r && $r[0]['total'] >= $max_dailies) { if($r && $r[0]['total'] >= $max_dailies) {
notice( t('Maximum daily site registrations exceeded. Please try again tomorrow.') . EOL);
return; return;
} }
} }
switch(get_config('system','register_policy')) { if(! x($_POST,'tos')) {
notice( t('Please indicate acceptance of the Terms of Service. Registration failed.') . EOL);
return;
}
case REGISTER_OPEN: $policy = get_config('system','register_policy');
$blocked = 0;
$verified = 0;
break;
case REGISTER_APPROVE: switch($policy) {
$blocked = 0;
$verified = 0;
break;
default: case REGISTER_OPEN:
case REGISTER_CLOSED: $flags = ACCOUNT_UNVERIFIED;
// TODO check against service class and fix this line break;
if((! x($_SESSION,'authenticated') && (! x($_SESSION,'administrator')))) {
notice( t('Permission denied.') . EOL ); case REGISTER_APPROVE:
return; $flags = ACCOUNT_UNVERIFIED | ACCOUNT_BLOCKED;
} break;
$blocked = 1;
$verified = 0; default:
break; case REGISTER_CLOSED:
// TODO check against service class and fix this line
// if((! x($_SESSION,'authenticated') && (! x($_SESSION,'administrator')))) {
// notice( t('Permission denied.') . EOL );
// return;
// }
$flags = ACCOUNT_UNVERIFIED | ACCOUNT_BLOCKED;
break;
} }
require_once('include/account.php'); require_once('include/account.php');
$arr = $_POST; $arr = $_POST;
$arr['account_flags'] = $flags;
$arr['blocked'] = $blocked;
$arr['verified'] = $verified;
$result = create_account($arr); $result = create_account($arr);
@ -134,7 +141,7 @@ function zregister_post(&$a) {
$invite_id = ((x($_POST,'invite_id')) ? notags(trim($_POST['invite_id'])) : ''); $invite_id = ((x($_POST,'invite_id')) ? notags(trim($_POST['invite_id'])) : '');
if( $a->config['register_policy'] == REGISTER_OPEN ) { if($policy == REGISTER_OPEN ) {
if($using_invites && $invite_id) { if($using_invites && $invite_id) {
q("delete * from register where hash = '%s' limit 1", dbesc($invite_id)); q("delete * from register where hash = '%s' limit 1", dbesc($invite_id));
@ -143,12 +150,11 @@ function zregister_post(&$a) {
$email_tpl = get_intltext_template("register_open_eml.tpl"); $email_tpl = get_intltext_template("register_open_eml.tpl");
$email_tpl = replace_macros($email_tpl, array( $email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'], '$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(), '$siteurl' => $a->get_baseurl(),
'$username' => $user['username'], '$email' => $user['email'],
'$email' => $user['email'], '$password' => $result['password'],
'$password' => $result['password'], ));
'$uid' => $user['uid'] ));
$res = mail($user['email'], sprintf(t('Registration details for %s'), $a->config['sitename']), $res = mail($user['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
$email_tpl, $email_tpl,
@ -156,13 +162,12 @@ function zregister_post(&$a) {
. 'Content-type: text/plain; charset=UTF-8' . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' ); . 'Content-transfer-encoding: 8bit' );
if($res) { if($res) {
info( t('Registration successful. Please check your email for further instructions.') . EOL ) ; info( t('Registration successful. Please check your email for validation instructions.') . EOL ) ;
goaway(z_root()); goaway(z_root());
} }
} }
elseif($a->config['register_policy'] == REGISTER_APPROVE) { elseif($policy == REGISTER_APPROVE) {
if(! strlen($a->config['admin_email'])) { if(! strlen($a->config['admin_email'])) {
notice( t('Your registration can not be processed.') . EOL); notice( t('Your registration can not be processed.') . EOL);
@ -229,7 +234,7 @@ function zregister_post(&$a) {
function zregister_content(&$a) { function zregister_content(&$a) {
if((! local_user()) && ($a->config['register_policy'] == REGISTER_CLOSED)) { if(get_config('system','register_policy') == REGISTER_CLOSED) {
notice("Permission denied." . EOL); notice("Permission denied." . EOL);
return; return;
} }
@ -260,6 +265,7 @@ function zregister_content(&$a) {
else else
$label_tos = sprintf( t('I am over 13 years of age and accept the %s for this website'), $toslink); $label_tos = sprintf( t('I am over 13 years of age and accept the %s for this website'), $toslink);
$enable_tos = 1 - intval(get_config('system','no_termsofservice'));
$email = ((x($_REQUEST,'email')) ? $_REQUEST['email'] : "" ); $email = ((x($_REQUEST,'email')) ? $_REQUEST['email'] : "" );
$password = ((x($_REQUEST,'password')) ? $_REQUEST['password'] : "" ); $password = ((x($_REQUEST,'password')) ? $_REQUEST['password'] : "" );
@ -281,7 +287,7 @@ function zregister_content(&$a) {
'$label_pass1' => t('Choose a password'), '$label_pass1' => t('Choose a password'),
'$label_pass2' => t('Please re-enter your password'), '$label_pass2' => t('Please re-enter your password'),
'$label_tos' => $label_tos, '$label_tos' => $label_tos,
'$enable_tos' => $enable_tos,
'$email' => $email, '$email' => $email,
'$pass1' => $password, '$pass1' => $password,
'$pass2' => $password2, '$pass2' => $password2,

View File

@ -10,7 +10,7 @@
<p id="register-invite-desc">$invite_desc</p> <p id="register-invite-desc">$invite_desc</p>
<label for="zregister-invite" id="label-zregister-invite" class="zregister-label">$label_invite</label> <label for="zregister-invite" id="label-zregister-invite" class="zregister-label">$label_invite</label>
<input type="text" maxlength="72" size="32" name="invite_id" id="zregister-invite" class="zregister-input" value="$invite_id" > <input type="text" maxlength="72" size="32" name="invite_id" id="zregister-invite" class="zregister-input" value="$invite_id" />
</div> </div>
<div id="zregister-invite-feedback" class="zregister-feedback"></div> <div id="zregister-invite-feedback" class="zregister-feedback"></div>
<div id="zregister-invite-end" class="zregister-field-end"></div> <div id="zregister-invite-end" class="zregister-field-end"></div>
@ -19,25 +19,28 @@
<label for="zregister-email" id="label-zregister-email" class="zregister-label" >$label_email</label> <label for="zregister-email" id="label-zregister-email" class="zregister-label" >$label_email</label>
<input type="text" maxlength="72" size="32" name="email" id="zregister-email" class="zregister-input" value="$email" > <input type="text" maxlength="72" size="32" name="email" id="zregister-email" class="zregister-input" value="$email" />
<div id="zregister-email-feedback" class="zregister-feedback"></div> <div id="zregister-email-feedback" class="zregister-feedback"></div>
<div id="zregister-email-end" class="zregister-field-end"></div> <div id="zregister-email-end" class="zregister-field-end"></div>
<label for="zregister-password" id="label-zregister-password" class="zregister-label" >$label_pass1</label> <label for="zregister-password" id="label-zregister-password" class="zregister-label" >$label_pass1</label>
<input type="password" maxlength="72" size="32" name="password" id="zregister-password" class="zregister-input" value="$pass1" > <input type="password" maxlength="72" size="32" name="password" id="zregister-password" class="zregister-input" value="$pass1" />
<div id="zregister-password-feedback" class="zregister-feedback"></div> <div id="zregister-password-feedback" class="zregister-feedback"></div>
<div id="zregister-password-end" class="zregister-field-end"></div> <div id="zregister-password-end" class="zregister-field-end"></div>
<label for="zregister-password2" id="label-zregister-password2" class="zregister-label" >$label_pass2</label> <label for="zregister-password2" id="label-zregister-password2" class="zregister-label" >$label_pass2</label>
<input type="password" maxlength="72" size="32" name="password2" id="zregister-password2" class="zregister-input" value="$pass2" > <input type="password" maxlength="72" size="32" name="password2" id="zregister-password2" class="zregister-input" value="$pass2" />
<div id="zregister-password2-feedback" class="zregister-feedback"></div> <div id="zregister-password2-feedback" class="zregister-feedback"></div>
<div id="zregister-password2-end" class="zregister-field-end"></div> <div id="zregister-password2-end" class="zregister-field-end"></div>
{{ if $enable_tos }}
<input type="checkbox" name="tos" id="zregister-tos" value="1" > <input type="checkbox" name="tos" id="zregister-tos" value="1" />
<label for="zregister-tos" id="label-zregister-tos">$label_tos</label> <label for="zregister-tos" id="label-zregister-tos">$label_tos</label>
<div id="zregister-tos-feedback" class="zregister-feedback"></div> <div id="zregister-tos-feedback" class="zregister-feedback"></div>
<div id="zregister-tos-end" class="zregister-field-end"></div> <div id="zregister-tos-end" class="zregister-field-end"></div>
{{ else }}
<input type="hidden" name="tos" value="1" />
{{ endif }}
<input type="submit" name="submit" id="zregister-submit-button" value="$submit" /> <input type="submit" name="submit" id="zregister-submit-button" value="$submit" />
<div id="zregister-submit-end" class="zregister-field-end"></div> <div id="zregister-submit-end" class="zregister-field-end"></div>