summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ChangeLog1
-rw-r--r--lib/VNDB/DB/Users.pm11
-rw-r--r--lib/VNDB/Handler/Users.pm1
-rw-r--r--lib/VNDB/Util/FormHTML.pm1
-rw-r--r--util/dump.sql3
-rw-r--r--util/updates/update_2.2.sql6
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';
+
+