OSDN Git Service

Model::Users: create() now take passwd argument, and change error handling with set_e...
authorhylom <hylom@users.sourceforge.jp>
Tue, 28 Mar 2017 16:02:55 +0000 (01:02 +0900)
committerhylom <hylom@users.sourceforge.jp>
Tue, 28 Mar 2017 16:03:44 +0000 (01:03 +0900)
src/newslash_web/lib/Newslash/Model/Users.pm

index ef391e0..a232957 100644 (file)
@@ -695,32 +695,36 @@ HASH
 =cut
 
 sub create {
-    my ($self, $nickname, $email, $opts) = @_;
+    my ($self, $nickname, $email, $passwd, $opts) = @_;
     return if $self->check_readonly;
     $opts ||= {};
 
     # check: nickname is given?
     if ($nickname =~ m/\A\s+\z/) {
-        return { error => ERROR_NICKNAME_NOT_GIVEN };
+        $self->set_error("nicknake not given", ERROR_NICKNAME_NOT_GIVEN);
+        return;
     }
 
     my $matchname = $self->_nickname_to_matchname($nickname);
 
     # check: email is valid?
     if (!Email::Valid->address($email)) {
-        return { error => ERROR_INVALID_ADDRESS };
+        $self->set_error("invalid address", ERROR_INVALID_ADDRESS);
+        return;
     }
 
     # check: nickname already exists?
     my $user = $self->select(nickname => $nickname);
     if ($user) {
-        return { error => ERROR_USER_EXISTS };
+        $self->set_error("user exists", ERROR_USER_EXISTS);
+        return;
     }
 
     # check: mail already registered?
     $user = $self->select(email => $email);
     if ($user) {
-        return { error => ERROR_MAIL_REGISTERED };
+        $self->set_error("Mail registered", ERROR_MAIL_REGISTERED);
+        return;
     }
 
     # start transaction
@@ -729,7 +733,6 @@ sub create {
     my $sth;
 
     # create user and set temporary password
-    my $passwd = $self->random_password;
     my $enc_passwd = $self->encrypt_password($passwd, '');
     $sql = <<"EOSQL";
 INSERT INTO users (uid, realemail, nickname, matchname,  seclev,  passwd) 
@@ -741,7 +744,8 @@ EOSQL
     if (!$uid) {
         $dbh->rollback;
         $self->disconnect_db;
-        return { error => ERROR_INSERT_USER_FAILED };
+        $self->set_error('insert user failed', ERROR_INSERT_USER_FAILED);
+        return;
     }
 
     # create users_info, etc.
@@ -752,18 +756,20 @@ INSERT INTO users_info (uid, lastaccess, created_at, bio)
 EOSQL
     $result = $dbh->do($sql, undef, $uid, '');
     if (!$result) {
+        $self->set_error($dbh->errstr, $dbh->err);
         $dbh->rollback;
         $self->disconnect_db;
-        return { error => ERROR_DO_SQL };
+        return;
     }
 
     for my $table (qw{users_prefs users_comments users_hits users_class}) {
         $sql = "INSERT INTO $table (uid) VALUES (?)";
         $result = $dbh->do($sql, undef, $uid);
         if (!$result) {
+            $self->set_error($dbh->errstr, $dbh->err);
             $dbh->rollback;
             $self->disconnect_db;
-            return { error => ERROR_DO_SQL };
+            return;
         }
     }
 
@@ -773,16 +779,17 @@ INSERT INTO users_index (uid, story_never_topic, slashboxes, story_always_topic)
 EOSQL
     $result = $dbh->do($sql, undef, $uid, '', '', '');
     if (!$result) {
+        $self->set_error($dbh->errstr, $dbh->err);
         $dbh->rollback;
         $self->disconnect_db;
-        return { error => ERROR_DO_SQL };
+        return;
     }
 
     # finish
     $dbh->commit;
     $self->disconnect_db;
 
-    return { error => 0, uid => $uid, password => $passwd };
+    return $uid;
 }
 
 =head2 clearRookie($uid, $time)