1 #**************************************************************************
2 # Copyright (C) 2009 by Michael Andreen <harvATruinDOTnu> *
4 # This program is free software; you can redistribute it and/or modify *
5 # it under the terms of the GNU General Public License as published by *
6 # the Free Software Foundation; either version 2 of the License, or *
7 # (at your option) any later version. *
9 # This program is distributed in the hope that it will be useful, *
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 # GNU General Public License for more details. *
14 # You should have received a copy of the GNU General Public License *
15 # along with this program; if not, write to the *
16 # Free Software Foundation, Inc., *
17 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
18 #**************************************************************************/
20 package NDIRC::Commands::Usermgm;
27 use MooseX::MethodAttributes;
30 : Help(syntax: .+user username [pnick] | username must be alphanum characters, if no pnick is given then it will be set to the same as username)
34 my ($self,$c,$msg) = @_;
35 my ($nick,$pnick) = $msg =~ /^(\w+)(?: ([^.\s]+))?$/ or die 'ARGS';
40 my $host = "$pnick.users.netgamers.org";
41 my ($username,$hostname,$p_nick) = $dbh->selectrow_array(q{
42 SELECT username, hostmask,pnick
43 FROM users WHERE username ILIKE ? OR hostmask ILIKE ? OR pnick ILIKE ?
44 },undef,$nick,$host,$pnick);
46 if (defined $username){
47 $c->reply("<b>$username ($p_nick)</b> already exists with host: <b>$hostname</b>");
50 INSERT INTO users (username,hostmask,pnick,password) VALUES(?,?,?,'')
51 },undef,$nick,$host,$pnick);
52 $c->reply("Added <b>$nick(/$pnick)</b> with host: <b>$host</b>");
57 : Help(syntax: .-user nick | nick must be alphanum characters, if no pnick is given then it will be set to nick)
59 : ACL(irc_deactivateuser)
61 my ($self,$c,$msg) = @_;
63 my ($nick) = $msg =~ /^(\S+)$/ or die 'ARGS';
66 my $f = $dbh->prepare(q{SELECT uid,username FROM users WHERE username ILIKE ?});
68 my ($uid,$username) = $f->fetchrow();
71 my $updated = $dbh->do(q{
72 UPDATE users SET hostmask = ?, password = '' WHERE uid = ?
73 },undef,$username,$uid);
75 my $groups = $dbh->do(q{DELETE FROM groupmembers WHERE uid = ?},undef,$uid);
77 $c->reply("<b>$username</b> has been deactivated. Removed from $groups groups.");
79 $c->reply("Something went wrong when trying to modify <b>$username</b>");
81 }elsif ($f->rows == 0){
82 $c->reply("No hit, maybe spelling mistake, or add % as wildcard");
84 $c->reply("More than 1 user matched, please refine the search");
90 : Help(syntax: .chattr username [-]flags | % can be used for wildcards \%arro% will match barrow, if a - is given then flags will be removed, otherwise added)
93 my ($self,$c,$msg) = @_;
95 my ($nick, $flags) = $msg =~ /^(\S+) ((\+|-)?\w+)$/ or die 'ARGS';
98 my $f = $dbh->prepare(q{SELECT uid,username FROM users WHERE username ILIKE ?});
100 my $user = $f->fetchrow_hashref;
103 if ($flags =~ /^(-)/){
104 $update = $dbh->prepare(q{
105 DELETE FROM groupmembers WHERE uid = $1 AND
106 gid IN (SELECT gid FROM groups WHERE flag = ANY($2))
109 $update = $dbh->prepare(q{
110 INSERT INTO groupmembers (uid,gid) (SELECT $1,gid FROM groups
111 WHERE flag = ANY($2) AND gid NOT IN (SELECT gid FROM groupmembers WHERE uid = $1))
114 my @flags = split /\W*/,$flags;
115 $update->execute($user->{uid},\@flags);
116 $update = $dbh->prepare(q{
118 FROM (SELECT uid,flag FROM groupmembers NATURAL JOIN groups ORDER BY uid,flag ) g
121 $flags = $dbh->selectrow_array($update,undef,$user->{uid});
122 $c->reply("Flags for <b>$user->{username}</b> are now: $flags");
123 }elsif ($f->rows == 0){
124 $c->reply("No hit, maybe spelling mistake, or add % as wildcard");
126 $c->reply("More than 1 user matched, please refine the search");
132 : Help(syntax: .whois [username] | % can be used for wildcards \%arro% will match barrow. If no username is given then all flags will be listed)
136 my ($self,$c,$msg) = @_;
137 my ($nick) = $msg =~ /^(\S+)?$/ or die 'ARGS';
141 my ($flags) = $dbh->selectrow_array(q{
142 SELECT TRIM(', ' FROM concat(flag||':'||groupname||', ')) FROM groups
144 $c->reply("Current flags: $flags");
148 my $f = $dbh->prepare(q{
149 SELECT username, pnick, hostmask, concat(flag) AS flags
151 LEFT OUTER JOIN (SELECT uid,flag FROM groupmembers
152 NATURAL JOIN groups ORDER BY uid,flag ) g USING (uid)
153 WHERE username ILIKE ?
154 GROUP BY username,pnick,hostmask LIMIT 5
157 while (my $user = $f->fetchrow_hashref){
158 $c->reply("<b>$user->{username} (/$user->{pnick})</b> flags: ($user->{flags}) host: $user->{hostmask}");
161 $c->reply("No hit, maybe spelling mistake, or add % as wildcard");