1
2
3
4
5 """ bots users for mysql interface"""
6
7 __copyright__ = 'this file is in the public domain'
8
9 from gozerbot.generic import rlog
10 from gozerbot.db import db
11 import types
12
14
15 """ users class """
16
19
21 """ return nr of users """
22 result = self.db.execute(""" SELECT DISTINCT COUNT(*) FROM userhosts \
23 """)
24 if result:
25 return result[0][0]
26
28 """ return permission of user"""
29 name = self.getname(userhost)
30 if not name:
31 return ['ANON', ]
32 result = self.db.execute(""" SELECT perm FROM perms WHERE name = %s \
33 """, name)
34 res = []
35 for i in result:
36 res.append(i[0])
37 return res
38
40 """ see if user with <name> exists """
41 name = name.lower()
42 result = self.db.execute(""" SELECT name,userhost FROM userhosts WHERE \
43 name = %s """, name)
44 return result
45
47 """ get name of user belonging to <userhost> """
48 if not userhost:
49 rlog(10, 'dbusers', 'no userhost provided')
50 return
51 result = self.db.execute(""" SELECT name FROM userhosts WHERE \
52 userhost LIKE %s """, userhost)
53 if result:
54 return result[0][0]
55
56 - def add(self, name, userhosts, perms):
57 """ add an user """
58 if type(userhosts) != types.ListType:
59 rlog(10, 'dbusers', 'i need a list of userhosts')
60 return 0
61 for i in userhosts:
62 self.adduserhost(name, i)
63 for i in perms:
64 self.addperm(name, i)
65 rlog(10, 'users', '%s added to user database' % name)
66 return 1
67
69 """ add userhost """
70 name = name.lower()
71 res = None
72 result = self.db.execute(""" INSERT INTO userhosts(name, userhost) \
73 values(%s, %s) """, (name, userhost))
74 if result:
75 res = 1
76 rlog(10, 'users', '%s (%s) added to userhosts' % (name, userhost))
77 return res
78
80 """ add permission """
81 name = name.lower()
82 perm = perm.upper()
83 res = None
84 result = self.db.execute(""" INSERT INTO perms(name, perm) \
85 values(%s, %s) """, (name, perm))
86 if result:
87 res = 1
88 rlog(10, 'users', '%s perm %s added' % (name, perm))
89 return res
90
92 """ add permission """
93 name = name.lower()
94 perm = perm.upper()
95 result = self.db.execute(""" DELETE FROM perms WHERE name = %s AND \
96 perm = %s """, (name, perm))
97 if result:
98 rlog(10, 'users', '%s perm %s deleted' % (name, perm))
99 return result
100
102 """ check if (who,what) is in users permit list """
103 name = self.getname(userhost)
104 res = None
105 if name:
106 result = self.db.execute(""" SELECT permit FROM permits WHERE \
107 name = %s """, name)
108 if result:
109 for i in result:
110 if "%s %s" % (who, what) == i[0]:
111 res = 1
112 return res
113
115 """ get names of all users """
116 res = []
117 result = self.db.execute(""" SELECT DISTINCT name FROM userhosts """)
118 if result:
119 for i in result:
120 res.append(i[0])
121 return res
122
123 - def merge(self, name, userhost):
124 """ add userhosts to user with name """
125 name = name.lower()
126 if not self.exist(name):
127 return 0
128 res = None
129 result = self.db.execute(""" INSERT INTO userhosts(userhost, name) \
130 VALUES (%s, %s) """, (userhost, name))
131 if result:
132 res = 1
133 return res
134
136 """ delete user with name """
137 name = name.lower()
138 res = None
139 nr1 = self.db.execute(""" DELETE FROM userhosts WHERE name = %s \
140 """, name)
141 nr2 = self.db.execute(""" DELETE FROM perms WHERE name = %s \
142 """, name)
143 if nr1 and nr2:
144 res = 1
145 return res
146
147 - def status(self, userhost, status):
148 """ check if user with <userhost> has <status> set """
149 name = self.getname(userhost)
150 res = None
151 if name:
152 status = status.upper()
153 result = self.db.execute(""" SELECT status FROM statuses WHERE \
154 name = %s """, name)
155 if result:
156 for i in result:
157 if status == i[0]:
158 res = 1
159 return res
160
162 """ check if user had permission """
163 name = name.lower()
164 perm = perm.upper()
165 result = self.db.execute(""" SELECT perm FROM perms WHERE \
166 name = %s """, name)
167 if result:
168 for i in result:
169 if i[0] == perm:
170 return True
171
173 """ check if user has status """
174 name = name.lower()
175 status = status.upper()
176 result = self.db.execute(""" SELECT status FROM statuses WHERE \
177 name = %s """, name)
178 if result:
179 for i in result:
180 if status == i[0]:
181 return True
182
184 """ check if user has userhost """
185 name = name.lower()
186 result = self.db.execute(""" SELECT userhost FROM userhosts WHERE \
187 name = %s """, name)
188 if result:
189 for i in result:
190 if i[0] == userhost:
191 return True
192
194 """ check if user permits something """
195 name = name.lower()
196 result = self.db.execute(""" SELECT permit FROM permits WHERE \
197 name = %s """, name)
198 if result:
199 for i in result:
200 if "%s %s" % permit == i[0]:
201 return True
202
203 - def allowed(self, userhost, perms, log=True):
204 """ check if user with userhosts is allowed to execute perm command """
205 if not type(perms) == types.ListType:
206 perms = [perms, ]
207 if 'ANY' in perms:
208 return 1
209 res = None
210 name = self.getname(userhost)
211 if not name:
212 if log:
213 rlog(10, 'users', '%s userhost denied' % userhost)
214 return res
215 result = self.db.execute(""" SELECT perm FROM perms WHERE \
216 name = %s """, name)
217 if result:
218 for i in result:
219 if i[0] in perms:
220 res = 1
221 if not res:
222 if log:
223 rlog(10, 'users', "%s perm %s denied" % (userhost, perms))
224 return res
225
227 """ get email of user """
228 name = name.lower()
229 email = None
230 email = self.db.execute(""" SELECT email FROM email WHERE name = %s \
231 """, name)
232 if email:
233 return email[0][0]
234
236 """ set email of user """
237 res = 0
238 try:
239 result = self.db.execute(""" INSERT INTO email(name, email) \
240 VALUES (%s, %s) """, (name, email))
241 except:
242 try:
243 result = self.db.execute(""" UPDATE email SET email = %s \
244 WHERE name = %s """, (email, name))
245 except:
246 pass
247 if result:
248 res = 1
249 return res
250
252 """ add permission to all users """
253 perm = perm.upper()
254 for i in self.names():
255 try:
256 self.addperm(i, perm)
257 except:
258 pass
259
261 """ delete permission from all users """
262 perm = perm.upper()
263 for i in self.names():
264 try:
265 self.delperm(i, perm)
266 except:
267 pass
268