1
# gozerbot/jsonusers.py
5
""" bot's users in JSON file. NOT USED AT THE MOMENT. """
7
__copyright__ = 'this file is in the public domain'
13
from gozerbot.datadir import datadir
14
from gozerbot.utils.log import rlog
15
from gozerbot.utils.generic import stripident, stripidents
16
from gozerbot.utils.exception import handle_exception, exceptionmsg
17
from gozerbot.utils.generic import die, stripped
18
from gozerbot.persist.persist import Persist
19
from gozerbot.utils.lazydict import LazyDict
20
from gozerbot.config import config
23
import re, types, os, time
37
class JsonUser(LazyDict):
39
""" LazyDict representing a user. """
41
def __init__(self, name="", userhosts=[], perms=[], permits=[], status=[], email=[], d=None):
43
LazyDict.__init__(self)
45
self.userhosts = userhosts
47
self.permits = permits
51
LazyDict.__init__(self, d)
53
class JsonUsers(Persist):
55
""" class representing all users. """
57
def __init__(self, filename, ddir=None):
58
self.datadir = ddir or datadir
59
Persist.__init__(self, filename)
62
self.users = self.data
66
""" get all users. """
69
for userdata in self.data.values():
70
result.append(JsonUser(d=userdata))
76
""" return nr of users. """
78
return len(self.users)
82
""" get names of all users. """
85
for user in self.all():
86
result.append(user.name)
89
def byname(self, name):
90
""" return user by name. """
92
return JsonUser(d=self.users[name])
96
def merge(self, name, userhost):
97
""" add userhosts to user with name """
98
user = self.byname(name)
100
user.userhosts.append(userhost)
102
rlog(10, 'users', "%s merged with %s" % (userhost, name))
105
def usersearch(self, userhost):
106
""" search for users with a userhost like the one specified """
108
for udata in self.users.values():
109
user = JsonUser(d=udata)
110
if userhost in user.userhosts:
111
result.append((user.name, user.userhost))
114
def getuser(self, userhost):
115
for userdata in self.users.values():
116
user = JsonUser(d=userdata)
117
if userhost in user.userhosts:
121
def exist(self, name):
122
""" see if user with <name> exists """
123
return self.byname(name)
125
def allowed(self, userhost, perms, log=True):
126
""" check if user with userhosts is allowed to execute perm command """
127
if not type(perms) == types.ListType:
132
user = self.getuser(userhost)
134
rlog(10, 'users', '%s userhost denied' % userhost)
137
uperms = set(user.perms)
139
intersection = sperms.intersection(uperms)
140
res = list(intersection) or None
142
rlog(10, 'users', "%s perm %s denied" % (userhost, str(perms)))
145
def permitted(self, userhost, who, what):
146
""" check if (who,what) is in users permit list """
147
user = self.getuser(userhost)
150
if '%s %s' % (who, what) in user.permits:
154
def status(self, userhost, status):
155
""" check if user with <userhost> has <status> set """
156
user = self.getuser(userhost)
159
if status.upper() in user.statuses:
163
def gotuserhost(self, name, userhost):
164
""" check if user has userhost """
165
user = self.byname(name)
166
return userhost in user.userhosts
168
def gotperm(self, name, perm):
169
""" check if user had permission """
170
user = self.byname(name)
172
return perm.upper() in user.perms
174
def gotpermit(self, name, permit):
175
""" check if user permits something. permit is a (who, what) tuple """
176
user = self.byname(name)
178
return '%s %s' % permit in user.permits
180
def gotstatus(self, name, status):
181
""" check if user has status """
182
user = self.byname(name)
183
return status.upper() in user.statuses
186
def getname(self, userhost):
187
""" get name of user belonging to <userhost> """
188
user = self.getuser(userhost)
192
def gethosts(self, userhost):
193
""" return the userhosts of the user associated with the specified userhost """
194
user = self.getuser(userhost)
196
return user.userhosts
198
def getemail(self, userhost):
199
""" return the email of the specified userhost """
200
user = self.getuser(userhost)
205
def getperms(self, userhost):
206
""" return permission of user"""
207
user = self.getuser(userhost)
211
def getpermits(self, userhost):
212
""" return permits of the specified userhost"""
213
user = self.getuser(userhost)
217
def getstatuses(self, userhost):
220
return the list of statuses for the specified userhost.
224
user = self.getuser(userhost)
228
def getuserhosts(self, name):
231
return the userhosts associated with the specified user.
235
user = self.byname(name)
238
return user.userhosts
240
def getuseremail(self, name):
247
user = self.byname(name)
253
def getuserperms(self, name):
256
return permission of user.
260
user = self.byname(name)
264
def getuserpermits(self, name):
267
return permits of user.
271
user = self.byname(name)
276
def getuserstatuses(self, name):
279
return the list of statuses for the specified user.
283
user = self.byname(name)
288
def getpermusers(self, perm):
291
return all users that have the specified perm.
297
for userdata in self.users.values():
298
user = JsonUser(d=userdata)
300
if perm.upper() in user.perms:
301
result.append(user.name)
305
def getstatususers(self, status):
308
return all users that have the specified status.
314
for userdata in self.users.values():
315
user = JsonUser(d=userdata)
317
if status in user.status:
318
result.append(user.name)
323
def setemail(self, name, email):
330
user = self.byname(name)
333
user.email.remove(email)
336
user.email.insert(0, email)
342
def add(self, name, userhosts, perms):
349
if type(userhosts) != types.ListType:
350
rlog(10, 'jsonusers', 'i need a list of userhosts')
353
if not os.path.isdir(self.datadir + os.sep + 'users'):
354
os.mkdir(self.datadir + os.sep + 'users')
356
if not os.path.isdir(self.datadir + os.sep + 'users' + os.sep + name):
357
os.mkdir(self.datadir + os.sep + 'users' + os.sep + name)
359
user = self.byname(name)
364
newuser = JsonUser(name=name)
365
newuser.userhosts.extend(userhosts)
366
newuser.perms.extend(perms)
367
self.users[name] = newuser
369
except Exception, ex:
370
rlog(10, 'jsonusers', str(ex))
373
rlog(10, 'users', '%s %s %s added to user database' % (name, \
378
def addemail(self, userhost, email):
381
add an email address to the userhost.
385
user = self.getuser(userhost)
388
user.email.append(email)
390
rlog(10, 'users', '%s (%s) added to email' % (email, userhost))
393
def addperm(self, userhost, perm):
396
add the specified perm to the userhost.
400
user = self.getuser(userhost)
403
user.perms.append(perm.upper())
405
rlog(10, 'users', '%s perm %s added' % (userhost, perm))
408
def addpermit(self, userhost, permit):
411
add the given (who, what) permit to the given userhost.
415
user = self.getuser(userhost)
418
#p = '%s %s' % permit
419
user.permits.append(permit)
421
rlog(10, 'users', '%s permit %s added' % (userhost, p))
424
def addstatus(self, userhost, status):
427
add status to given userhost.
431
user = self.getuser(userhost)
434
user.status.append(status.upper())
436
rlog(10, 'users', '%s status %s added' % (name, status))
439
def adduserhost(self, name, userhost):
446
user = self.byname(name)
449
user = self.users[name] = User(name=name)
451
user.userhosts.append(userhost)
453
rlog(10, 'users', '%s (%s) added to userhosts' % (name, userhost))
456
def adduseremail(self, name, email):
459
add email to specified user.
463
user = self.byname(name)
466
user.email.append(email)
468
rlog(10, 'users', '%s email %s added' % (name, email))
471
def adduserperm(self, name, perm):
478
user = self.byname(name)
482
user.perms.append(perm)
484
rlog(10, 'users', '%s perm %s added' % (name, perm))
487
def adduserpermit(self, name, permit):
490
add (who, what) permit tuple to sepcified user.
494
user = self.byname(name)
498
user.permits.append(p)
500
rlog(10, 'users', '%s permit %s added' % (name, p))
503
def adduserstatus(self, name, status):
506
add status to given user.
513
user.status.append(status.upper())
515
rlog(10, 'users', '%s status %s added' % (name, status))
518
def addpermall(self, perm):
521
add permission to all users.
525
for user in self.users.values():
526
user.perms.append(perm.upper())
532
def delemail(self, userhost, email):
535
delete email from userhost.
539
user = self.getuser(userhost)
543
if email in user.emails:
544
user.emails.remove(email)
548
def delperm(self, userhost, perm):
551
delete perm from userhost.
555
user = self.getuser(userhost)
563
def delpermit(self, userhost, permit):
566
delete permit from userhost.
570
user = self.getuser(userhost)
575
if p in user.permits:
576
user.permits.remove(p)
580
def delstatus(self, userhost, status):
583
delete status from userhost.
587
user = self.getuser(userhost)
592
if st in user.status:
593
user.status.remove(st)
597
def delete(self, name):
600
delete user with name.
608
def deluserhost(self, name, userhost):
611
delete the userhost entry.
615
user = self.byname(name)
619
if userhost in user.userhosts:
620
user.userhosts.remove(userhost)
622
rlog(10, 'users', '%s userhost %s deleted' % (name, userhost))
625
def deluseremail(self, name, email):
632
user = self.byname(name)
636
if email in user.email:
637
user.email.remove(email)
639
rlog(10, 'users', '%s email %s deleted' % (name, email))
642
def deluserperm(self, name, perm):
649
user = self.byname(name)
657
rlog(10, 'users', '%s perm %s deleted' % (name, p))
660
def deluserpermit(self, name, permit):
667
user = self.byname(name)
672
if p in user.permits:
673
user.permits.remove(p)
675
rlog(10, 'users', '%s permit %s deleted' % (name, p))
678
def deluserstatus(self, name, status):
681
delete the status from the given user.
685
user = self.byname(name)
690
if st in user.status:
691
user.status.remove(status)
693
rlog(10, 'users', '%s status %s deleted' % (name, st))
696
def delallemail(self, name):
699
Delete all emails for the specified user.
703
user = self.byname(name)
708
rlog(10, 'users', '%s emails deleted' % (name, ))
711
def delpermall(self, perm):
714
delete permission from all users.
718
for user in self.users.values():
719
if user.name != 'owner':
725
def make_owner(self, userhosts):
728
see if owner already has a user account if not merge otherwise add.
735
if type(userhosts) != types.ListType:
736
owner.append(userhosts)
740
for userhost in owner:
741
username = self.getname(unicode(userhost))
745
if not self.merge('owner', unicode(userhost)):
746
self.add('owner', [unicode(userhost), ], ['USER', 'OPER'])
b'\\ No newline at end of file'