diff options
-rw-r--r-- | lib/ChangeLog | 1 | ||||
-rw-r--r-- | lib/VNDB/DB/Users.pm | 11 | ||||
-rw-r--r-- | lib/VNDB/Handler/Users.pm | 1 | ||||
-rw-r--r-- | lib/VNDB/Util/FormHTML.pm | 1 | ||||
-rw-r--r-- | util/dump.sql | 3 | ||||
-rw-r--r-- | util/updates/update_2.2.sql | 6 |
6 files changed, 19 insertions, 4 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog index 79e961c1..2fa336a1 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -4,6 +4,7 @@ - Revised the media list - Added a checkbox to releases to indicate a patch - VN popularity ranking + - Limit account creation to one account in 24 hours per IP address 2.1 - 2008-12-29 - Skin support diff --git a/lib/VNDB/DB/Users.pm b/lib/VNDB/DB/Users.pm index 188fb4d8..3a327197 100644 --- a/lib/VNDB/DB/Users.pm +++ b/lib/VNDB/DB/Users.pm @@ -8,7 +8,7 @@ use Exporter 'import'; our @EXPORT = qw|dbUserGet dbUserEdit dbUserAdd dbUserDel|; -# %options->{ username passwd mail order uid results page what } +# %options->{ username passwd mail order uid ip registered results page what } # what: stats sub dbUserGet { my $s = shift; @@ -35,6 +35,10 @@ sub dbUserGet { 'id = ?' => $o{uid} ) : (), !$o{uid} && !$o{username} ? ( 'id > 0' => 1 ) : (), + $o{ip} ? ( + 'ip = ?' => $o{ip} ) : (), + $o{registered} ? ( + 'registered > ?' => $o{registered} ) : (), ); my @select = ( @@ -77,10 +81,11 @@ sub dbUserEdit { } -# username, md5(pass), mail +# username, md5(pass), mail, [ip] sub dbUserAdd { my($s, @o) = @_; - $s->dbExec(q|INSERT INTO users (username, passwd, mail, registered) VALUES(?, decode(?, 'hex'), ?, ?)|, @o, time); + $s->dbExec(q|INSERT INTO users (username, passwd, mail, ip, registered) VALUES(?, decode(?, 'hex'), ?, ?, ?)|, + @o[0..2], $o[3]||$s->reqIP, time); } diff --git a/lib/VNDB/Handler/Users.pm b/lib/VNDB/Handler/Users.pm index aea9d56a..4cd359f0 100644 --- a/lib/VNDB/Handler/Users.pm +++ b/lib/VNDB/Handler/Users.pm @@ -239,6 +239,7 @@ sub register { push @{$frm->{_err}}, 'passmatch' if $frm->{usrpass} ne $frm->{usrpass2}; push @{$frm->{_err}}, 'usrexists' if $frm->{usrname} eq 'anonymous' || !$frm->{_err} && $self->dbUserGet(username => $frm->{usrname})->[0]{id}; push @{$frm->{_err}}, 'mailexists' if !$frm->{_err} && $self->dbUserGet(mail => $frm->{mail})->[0]{id}; + push @{$frm->{_err}}, 'oneaday' if !$frm->{_err} && $self->dbUserGet(ip => $self->reqIP, registered => time-24*3600)->[0]{id}; if(!$frm->{_err}) { $self->dbUserAdd($frm->{usrname}, md5_hex($frm->{usrpass}), $frm->{mail}); diff --git a/lib/VNDB/Util/FormHTML.pm b/lib/VNDB/Util/FormHTML.pm index ff23682d..f08c733e 100644 --- a/lib/VNDB/Util/FormHTML.pm +++ b/lib/VNDB/Util/FormHTML.pm @@ -50,6 +50,7 @@ my %formerr_exeptions = ( mailexists => 'Someone already registered with that email address', noimage => 'Image must be in JPEG or PNG format', toolarge => 'Image is too large, only 50kB allowed', + oneaday => 'You can only register one account from the same IP within 24 hours', ); diff --git a/util/dump.sql b/util/dump.sql index afbbc622..f23d6d62 100644 --- a/util/dump.sql +++ b/util/dump.sql @@ -187,7 +187,8 @@ CREATE TABLE users ( c_votes integer NOT NULL DEFAULT 0, c_changes integer NOT NULL DEFAULT 0, skin varchar(128) NOT NULL DEFAULT '', - customcss text NOT NULL DEFAULT '' + customcss text NOT NULL DEFAULT '', + ip inet NOT NULL DEFAULT '0.0.0.0' ); -- vn diff --git a/util/updates/update_2.2.sql b/util/updates/update_2.2.sql index c3419b2d..d16c4bf0 100644 --- a/util/updates/update_2.2.sql +++ b/util/updates/update_2.2.sql @@ -28,3 +28,9 @@ $$ LANGUAGE plpgsql; SELECT update_vnpopularity(); + + +-- store the IP address used to register +ALTER TABLE users ADD COLUMN ip inet NOT NULL DEFAULT '0.0.0.0'; + + |