confirm email addresses
darcs-hash:20080620051536-5ed1f-231e427832dd20c861eb7a6dc1171315e90f455b.gz
This commit is contained in:
parent
8ecd2a6b1d
commit
bf0be3ddb7
70
actions/confirmemail.php
Normal file
70
actions/confirmemail.php
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Laconica - a distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2008, Controlez-Vous, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
|
class ConfirmemailAction extends Action {
|
||||||
|
|
||||||
|
function handle($args) {
|
||||||
|
parent::handle($args);
|
||||||
|
if (!common_logged_in()) {
|
||||||
|
common_set_returnto($this->self_url());
|
||||||
|
common_redirect(common_local_url('login'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$code = $this->trimmed('code');
|
||||||
|
if (!$code) {
|
||||||
|
$this->client_error(_t('No confirmation code.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$confirm_email = Confirm_email::staticGet('code', $code);
|
||||||
|
if (!$confirm_email) {
|
||||||
|
$this->client_error(_t('Confirmation code not found.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$cur = common_current_user();
|
||||||
|
if ($cur->id != $confirm_email->user_id) {
|
||||||
|
$this->client_error(_t('That confirmation code is not for you!'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($cur->email == $confirm_email->email) {
|
||||||
|
$this->client_error(_t('That email address is already confirmed.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$cur->query('BEGIN');
|
||||||
|
$orig_user = clone($cur);
|
||||||
|
$cur->email = $confirm_email->email;
|
||||||
|
$result = $cur->update($orig_user);
|
||||||
|
if (!$result) {
|
||||||
|
$this->server_error(_t('Error setting email address.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$result = $confirm_email->delete();
|
||||||
|
if (!$result) {
|
||||||
|
$this->server_error(_t('Error deleting code.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$cur->query('COMMIT');
|
||||||
|
common_show_header(_t('Confirm E-mail Address'));
|
||||||
|
common_element('p', NULL,
|
||||||
|
_t('The email address "') . $cur->email .
|
||||||
|
_t('" has been confirmed for your account.'));
|
||||||
|
common_show_footer(_t('Confirm E-mail Address'));
|
||||||
|
}
|
||||||
|
}
|
@ -89,8 +89,11 @@ class RegisterAction extends Action {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function register_user($nickname, $password, $email) {
|
function register_user($nickname, $password, $email) {
|
||||||
# TODO: wrap this in a transaction!
|
|
||||||
$profile = new Profile();
|
$profile = new Profile();
|
||||||
|
|
||||||
|
$profile->query('BEGIN');
|
||||||
|
|
||||||
$profile->nickname = $nickname;
|
$profile->nickname = $nickname;
|
||||||
$profile->profileurl = common_profile_url($nickname);
|
$profile->profileurl = common_profile_url($nickname);
|
||||||
$profile->created = DB_DataObject_Cast::dateTime(); # current time
|
$profile->created = DB_DataObject_Cast::dateTime(); # current time
|
||||||
@ -103,15 +106,34 @@ class RegisterAction extends Action {
|
|||||||
$user->id = $id;
|
$user->id = $id;
|
||||||
$user->nickname = $nickname;
|
$user->nickname = $nickname;
|
||||||
$user->password = common_munge_password($password, $id);
|
$user->password = common_munge_password($password, $id);
|
||||||
$user->email = $email;
|
|
||||||
$user->created = DB_DataObject_Cast::dateTime(); # current time
|
$user->created = DB_DataObject_Cast::dateTime(); # current time
|
||||||
$user->uri = common_mint_tag('user:'.$id);
|
$user->uri = common_mint_tag('user:'.$id);
|
||||||
|
|
||||||
$result = $user->insert();
|
$result = $user->insert();
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
# Try to clean up...
|
return FALSE;
|
||||||
$profile->delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($email) {
|
||||||
|
$confirm = new Confirm_email();
|
||||||
|
$confirm->code = common_good_random(16);
|
||||||
|
$confirm->user_id = $user->id;
|
||||||
|
$confirm->email = $email;
|
||||||
|
|
||||||
|
$result = $confirm->insert();
|
||||||
|
if (!$result) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile->query('COMMIT');
|
||||||
|
|
||||||
|
if ($email) {
|
||||||
|
mail_confirm_address($code,
|
||||||
|
$profile->nickname,
|
||||||
|
$email);
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
classes/Confirm_email.php
Normal file
23
classes/Confirm_email.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Table Definition for confirm_email
|
||||||
|
*/
|
||||||
|
require_once 'DB/DataObject.php';
|
||||||
|
|
||||||
|
class Confirm_email extends DB_DataObject
|
||||||
|
{
|
||||||
|
###START_AUTOCODE
|
||||||
|
/* the code below is auto generated do not remove the above tag */
|
||||||
|
|
||||||
|
public $__table = 'confirm_email'; // table name
|
||||||
|
public $code; // varchar(32) primary_key not_null
|
||||||
|
public $user_id; // int(4) not_null
|
||||||
|
public $email; // varchar(255) not_null
|
||||||
|
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
|
||||||
|
|
||||||
|
/* Static get */
|
||||||
|
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Confirm_email',$k,$v); }
|
||||||
|
|
||||||
|
/* the code above is auto generated do not remove the tag below */
|
||||||
|
###END_AUTOCODE
|
||||||
|
}
|
@ -16,6 +16,15 @@ width = K
|
|||||||
height = K
|
height = K
|
||||||
url = U
|
url = U
|
||||||
|
|
||||||
|
[confirm_email]
|
||||||
|
code = 130
|
||||||
|
user_id = 129
|
||||||
|
email = 130
|
||||||
|
modified = 384
|
||||||
|
|
||||||
|
[confirm_email__keys]
|
||||||
|
code = K
|
||||||
|
|
||||||
[consumer]
|
[consumer]
|
||||||
consumer_key = 130
|
consumer_key = 130
|
||||||
seed = 130
|
seed = 130
|
||||||
|
@ -145,7 +145,7 @@ create table oid_nonces (
|
|||||||
UNIQUE (server_url(255), timestamp, salt)
|
UNIQUE (server_url(255), timestamp, salt)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
create table confirmemail (
|
create table confirm_email (
|
||||||
code varchar(32) not null primary key comment 'good random code',
|
code varchar(32) not null primary key comment 'good random code',
|
||||||
user_id integer not null comment 'user who requested confirmation' references user (id),
|
user_id integer not null comment 'user who requested confirmation' references user (id),
|
||||||
email varchar(255) not null comment 'email address for password recovery etc.',
|
email varchar(255) not null comment 'email address for password recovery etc.',
|
||||||
|
@ -68,4 +68,11 @@ class Action { // lawsuit
|
|||||||
common_debug("User error '$code' on '$action': $msg", __FILE__);
|
common_debug("User error '$code' on '$action': $msg", __FILE__);
|
||||||
common_user_error($msg, $code);
|
common_user_error($msg, $code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function self_url() {
|
||||||
|
$action = $this->trimmed('action');
|
||||||
|
$args = $this->args;
|
||||||
|
unset($args['action']);
|
||||||
|
return common_local_url($action, $args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,3 +80,4 @@ require_once(INSTALLDIR.'/classes/Profile.php');
|
|||||||
require_once(INSTALLDIR.'/classes/Remote_profile.php');
|
require_once(INSTALLDIR.'/classes/Remote_profile.php');
|
||||||
require_once(INSTALLDIR.'/classes/Subscription.php');
|
require_once(INSTALLDIR.'/classes/Subscription.php');
|
||||||
require_once(INSTALLDIR.'/classes/User.php');
|
require_once(INSTALLDIR.'/classes/User.php');
|
||||||
|
require_once(INSTALLDIR.'/classes/Confirm_email.php');
|
||||||
|
28
lib/mail.php
28
lib/mail.php
@ -54,4 +54,30 @@ function mail_notify_from() {
|
|||||||
return $config['site']['name'] . ' <noreply@'.$config['site']['server'].'>';
|
return $config['site']['name'] . ' <noreply@'.$config['site']['server'].'>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# For confirming an email address
|
||||||
|
|
||||||
|
function mail_confirm_address($code, $nickname, $address) {
|
||||||
|
$recipients = $address;
|
||||||
|
$headers['From'] = mail_notify_from();
|
||||||
|
$headers['To'] = $nickname . ' <' . $address . '>';
|
||||||
|
$headers['Subject'] = _t('Email address confirmation');
|
||||||
|
|
||||||
|
$body = "Hey, $nickname.";
|
||||||
|
$body .= "\n\n";
|
||||||
|
$body .= 'Someone just entered this email address on ' . common_config('site', 'name') . '.';
|
||||||
|
$body .= "\n\n";
|
||||||
|
$body .= 'If it was you, and you want to confirm your entry, use the URL below:';
|
||||||
|
$body .= "\n\n";
|
||||||
|
$body .= "\t".common_local_url('confirmemail',
|
||||||
|
array('code' => $code));
|
||||||
|
$body .= "\n\n";
|
||||||
|
$body .= 'If not, just ignore this message.';
|
||||||
|
$body .= "\n\n";
|
||||||
|
$body .= 'Thanks for your time, ';
|
||||||
|
$body .= "\n";
|
||||||
|
$body .= common_config('site', 'name');
|
||||||
|
$body .= "\n";
|
||||||
|
|
||||||
|
mail_send($recipients, $headers, $body);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user