1
2
3
4
5
6
7
8
9
10
11
12
13
14 import types
15
16 from random import choice
17
18 from Globals import DTMLFile
19 from Globals import InitializeClass
20 from AccessControl import ClassSecurityInfo
21 from AccessControl import getSecurityManager
22 from Acquisition import aq_base
23 from Products.PluggableAuthService import interfaces
24 from zExceptions import Unauthorized
25 from DateTime import DateTime
26
27 from Products.ZenEvents.ActionRule import ActionRule
28 from Products.ZenEvents.CustomEventView import CustomEventView
29 from Products.ZenRelations.RelSchema import *
30 from Products.ZenUtils import Time
31 from Products.ZenUtils.Utils import unused, prepId
32 from Products.ZenUtils import DotNetCommunication
33 from Products.ZenWidgets import messaging
34
35 from ZenossSecurity import *
36 from ZenModelRM import ZenModelRM
37 from Products.ZenUtils import Utils
38
39 from email.MIMEText import MIMEText
40 import socket
41
42 UserSettingsId = "ZenUsers"
43
50
51
52 -def rolefilter(r): return r not in ("Anonymous", "Authenticated", "Owner")
53
55 """Manage zenoss user folders.
56 """
57 security = ClassSecurityInfo()
58
59 meta_type = "UserSettingsManager"
60
61
62
63 sub_meta_types = ("UserSettings",)
64
65 factory_type_information = (
66 {
67 'id' : 'UserSettingsManager',
68 'meta_type' : 'UserSettingsManager',
69 'description' : """Base class for all devices""",
70 'icon' : 'UserSettingsManager.gif',
71 'product' : 'ZenModel',
72 'factory' : 'manage_addUserSettingsManager',
73 'immediate_view' : 'manageUserFolder',
74 'actions' :
75 (
76 { 'id' : 'settings'
77 , 'name' : 'Settings'
78 , 'action' : '../editSettings'
79 , 'permissions' : ( ZEN_MANAGE_DMD, )
80 },
81 { 'id' : 'manage'
82 , 'name' : 'Commands'
83 , 'action' : '../dataRootManage'
84 , 'permissions' : (ZEN_MANAGE_DMD,)
85 },
86 { 'id' : 'users'
87 , 'name' : 'Users'
88 , 'action' : 'manageUserFolder'
89 , 'permissions' : ( ZEN_MANAGE_DMD, )
90 },
91 { 'id' : 'packs'
92 , 'name' : 'ZenPacks'
93 , 'action' : '../ZenPackManager/viewZenPacks'
94 , 'permissions' : ( ZEN_MANAGE_DMD, )
95 },
96 { 'id' : 'jobs'
97 , 'name' : 'Jobs'
98 , 'action' : '../joblist'
99 , 'permissions' : ( "Manage DMD", )
100 },
101 { 'id' : 'menus'
102 , 'name' : 'Menus'
103 , 'action' : '../editMenus'
104 , 'permissions' : ( ZEN_MANAGE_DMD, )
105 },
106 { 'id' : 'portlets'
107 , 'name' : 'Portlets'
108 , 'action' : '../editPortletPerms'
109 , 'permissions' : ( ZEN_MANAGE_DMD, )
110 },
111 { 'id' : 'daemons'
112 , 'name' : 'Daemons'
113 , 'action' : '../../About/zenossInfo'
114 , 'permissions' : ( ZEN_MANAGE_DMD, )
115 },
116 { 'id' : 'versions'
117 , 'name' : 'Versions'
118 , 'action' : '../../About/zenossVersions'
119 , 'permissions' : ( ZEN_MANAGE_DMD, )
120 },
121 { 'id' : 'backups'
122 , 'name' : 'Backups'
123 , 'action' : '../backupInfo'
124 , 'permissions' : ( ZEN_MANAGE_DMD, )
125 },
126 )
127 },
128 )
129
130
132 """Return list user settings objects.
133 """
134
135
136 users = self.objectValues(spec="UserSettings")
137 users.sort(lambda a,b:cmp(a.id, b.id))
138 return users
139
141 """Return list user settings objects.
142 """
143 groups = self.objectValues(spec="GroupSettings")
144 groups.sort(lambda a,b:cmp(a.id, b.id))
145 return groups
146
148 """Return list of all zenoss usernames.
149 """
150 filt = lambda x: x not in filtNames
151 return [ u.id for u in self.getAllUserSettings() if filt(u.id) ]
152
154 """Return list of all zenoss usernames.
155 """
156 filt = lambda x: x not in filtNames
157 return [ g.id for g in self.getAllGroupSettings() if filt(g.id) ]
158
160 """Return list of Users wrapped in their settings folder.
161 """
162 users = []
163 for uset in self.objectValues(spec="UserSettings"):
164 user = self.acl_users.getUser(uset.id)
165 if user: users.append(user.__of__(uset))
166 return users
167
168
170 """Return a user object. If userid is not passed return current user.
171 """
172 if userid is None:
173 user = getSecurityManager().getUser()
174 else:
175 user = self.acl_users.getUser(userid)
176 if user: return user.__of__(self.acl_users)
177
178
183
185 """Return a user folder. If userid is not passed return current user.
186 """
187 user=None
188 if userid is None:
189 user = getSecurityManager().getUser()
190 userid = user.getId()
191 if not userid: raise Unauthorized
192 folder = self._getOb(userid,None)
193 if not folder and userid:
194 ufolder = UserSettings(userid)
195 self._setObject(ufolder.getId(), ufolder)
196 folder = self._getOb(userid)
197 if not user:
198 user = self.getUser(userid)
199 if user:
200
201 psheets = user.listPropertysheets()
202 psheets.reverse()
203 for ps in map(lambda ps: user.getPropertysheet(ps), psheets):
204 props = {}
205 for id in ps.propertyIds():
206 props[id] = ps.getProperty(id)
207 ufolder.updatePropsFromDict(props)
208 folder.changeOwnership(user)
209 folder.manage_setLocalRoles(userid, ("Owner",))
210 return folder
211
212
219
220
230
237
238
239 security.declareProtected(ZEN_MANAGE_DMD, 'manage_addUser')
240 - def manage_addUser(self, userid, password=None,roles=("ZenUser",),
241 REQUEST=None,**kw):
286
287
289 """ Generate a valid password.
290 """
291
292 chars = 'ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789'
293 return ''.join( [ choice(chars) for i in range(6) ] )
294
295
296 security.declareProtected(ZEN_MANAGE_DMD, 'manage_changeUser')
297 - def manage_changeUser(self, userid, password=None, sndpassword=None,
298 roles=None, domains=None, REQUEST=None, **kw):
337
338
339 security.declareProtected(ZEN_MANAGE_DMD, 'manage_deleteUsers')
383
384
385 security.declareProtected(ZEN_MANAGE_DMD, 'manage_addGroup')
387 """Add a zenoss group to the system and set its default properties.
388 """
389 if not groupid: return
390 try:
391 self.acl_users.groupManager.addGroup(groupid)
392 self.acl_users.ZCacheable_invalidate()
393 except KeyError: pass
394 self.getGroupSettings(groupid)
395 if REQUEST:
396 messaging.IMessageSender(self).sendToBrowser(
397 'Group Added',
398 'Group "%s" has been created.' % groupid
399 )
400 return self.callZenScreen(REQUEST)
401
402
403 security.declareProtected(ZEN_MANAGE_DMD, 'manage_deleteGroups')
405 """ Delete a zenoss group from the system
406 """
407 gm = self.acl_users.groupManager
408 if type(groupids) in types.StringTypes:
409 groupids = [groupids]
410 for groupid in groupids:
411 if self._getOb(groupid): self._delObject(groupid)
412 try:
413 gm.removeGroup(groupid)
414 self.acl_users.ZCacheable_invalidate()
415 except KeyError: pass
416 if REQUEST:
417 messaging.IMessageSender(self).sendToBrowser(
418 'Groups Deleted',
419 "Groups were deleted: %s." % (', '.join(groupids))
420 )
421 return self.callZenScreen(REQUEST)
422
423
424 security.declareProtected(ZEN_MANAGE_DMD, 'manage_addUsersToGroups')
448
449
450 security.declareProtected(ZEN_MANAGE_DMD, 'manage_emailTestAdmin')
460
461
462 security.declareProtected(ZEN_MANAGE_DMD, 'manage_pagerTestAdmin')
464 ''' Do pager test for given user
465 '''
466 userSettings = self.getUserSettings(userid)
467 msg = userSettings.manage_pagerTest()
468 if msg:
469 messaging.IMessageSender(self).sendToBrowser('Pager Test', msg)
470 if REQUEST:
471 return self.callZenScreen(REQUEST)
472
473
475 """Delete orphaned user folders.
476 """
477 userfolders = self._getOb(UserSettingsId)
478 userids = self.acl_users.getUserNames()
479 for fid in userfolders.objectIds():
480 if fid not in userids:
481 userfolders._delObject(fid)
482 self.acl_users.ZCacheable_invalidate()
483
484
486 """Get list of all roles without Anonymous and Authenticated.
487 """
488 return filter(rolefilter, self.valid_roles())
489
490
493
494
495
502
503
504 addUserSettings = DTMLFile('dtml/addUserSettings',globals())
505
506
508 """zenoss user folder has users preferences.
509 """
510
511 meta_type = "UserSettings"
512
513 sub_meta_types = ("ActionRule",)
514
515 email = ""
516 pager = ""
517 defaultPageSize = 40
518 defaultEventPageSize = 30
519 defaultAdminRole = "ZenUser"
520 defaultAdminLevel = 1
521 oncallStart = 0
522 oncallEnd = 0
523 escalationMinutes = 0
524 dashboardState = ''
525 netMapStartObject = ''
526 eventConsoleRefresh = True
527 zenossNetUser = ''
528 zenossNetPassword = ''
529
530 _properties = ZenModelRM._properties + (
531 {'id':'email', 'type':'string', 'mode':'w'},
532 {'id':'pager', 'type':'string', 'mode':'w'},
533 {'id':'defaultPageSize', 'type':'int', 'mode':'w'},
534 {'id':'defaultEventPageSize', 'type':'int', 'mode':'w'},
535 {'id':'defaultAdminRole', 'type':'string', 'mode':'w'},
536 {'id':'defaultAdminLevel', 'type':'int', 'mode':'w'},
537 {'id':'oncallStart', 'type':'int', 'mode':'w'},
538 {'id':'oncallEnd', 'type':'int', 'mode':'w'},
539 {'id':'escalationMinutes', 'type':'int', 'mode':'w'},
540 {'id':'dashboardState', 'type':'string', 'mode':'w'},
541 {'id':'netMapStartObject', 'type':'string', 'mode':'w'},
542 {'id':'eventConsoleRefresh', 'type':'boolean', 'mode':'w'},
543 {'id':'zenossNetUser', 'type':'string', 'mode':'w'},
544 {'id':'zenossNetPassword', 'type':'string', 'mode':'w'},
545 )
546
547
548 _relations = (
549 ("adminRoles", ToMany(ToOne, "Products.ZenModel.AdministrativeRole",
550 "userSetting")),
551 ("messages", ToManyCont(ToOne,
552 "Products.ZenWidgets.PersistentMessage.PersistentMessage",
553 "messageQueue")),
554 )
555
556
557 factory_type_information = (
558 {
559 'immediate_view' : 'editUserSettings',
560 'actions' :
561 (
562 {'name' : 'Edit',
563 'action' : 'editUserSettings',
564 'permissions' : (ZEN_CHANGE_SETTINGS,),
565 },
566 {'name' : 'Administered Objects',
567 'action' : 'administeredDevices',
568 'permissions' : (ZEN_CHANGE_ADMIN_OBJECTS,)
569 },
570 {'name' : 'Event Views',
571 'action' : 'editEventViews',
572
573 'permissions' : (ZEN_CHANGE_SETTINGS,),
574 },
575 {'name' : 'Alerting Rules',
576 'action' : 'editActionRules',
577 'permissions' : (ZEN_CHANGE_ALERTING_RULES,),
578 },
579 )
580 },
581 )
582
583 security = ClassSecurityInfo()
584
585 security.declareProtected('View', 'zentinelTabs')
587 """Return a list of hashs that define the screen tabs for this object.
588 [{'name':'Name','action':'template','selected':False},...]
589 """
590 tabs = super(UserSettings, self).zentinelTabs(templateName)
591
592 if self.hasNoGlobalRoles():
593 return tabs[:-1]
594 return tabs
595
597 """This user doesn't have global roles. Used to limit access
598 """
599 return self.id != 'admin' and len(self.getUserRoles()) == 0
600
611
612
614 """Return group settings objects for user
615 """
616 user = self.getUser(self.id)
617 if user:
618 return self.acl_users._getGroupsForPrincipal(user)
619 return ()
620
621
622 security.declareProtected(ZEN_CHANGE_SETTINGS, 'updatePropsFromDict')
624 props = self.propertyIds()
625 for k, v in propdict.items():
626 if k in props: setattr(self,k,v)
627
628
630 """Can the current user edit this settings object.
631 """
632 currentUser = getSecurityManager().getUser()
633
634
635 if currentUser.has_role("Manager"):
636 return True
637
638
639 thisUser = self.acl_users.getUser(self.id)
640 if thisUser is None:
641 return False
642
643
644 if currentUser.has_role("ZenManager") \
645 and not thisUser.has_role("Manager"):
646 return True
647
648
649 if thisUser.getUserName() == currentUser.getUserName():
650 return True
651
652 return False
653
654
655 security.declareProtected(ZEN_CHANGE_SETTINGS, 'manage_resetPassword')
657 """
658 Reset a password.
659 """
660 email = self.email.strip()
661 if not email:
662 messaging.IMessageSender(self).sendToBrowser(
663 'Password Reset Failed',
664 'Cannot send password reset email; user has no'+
665 ' email address.',
666 priority=messaging.WARNING
667 )
668 return self.callZenScreen(self.REQUEST)
669
670 newpw = self.generatePassword()
671 body = """
672 Your Zenoss password has been reset at %s's request.
673
674 Your new password is: %s
675 """ % (self.getUser().getId(), newpw)
676 msg = MIMEText(body)
677 msg['Subject'] = 'Zenoss Password Reset Request'
678 msg['From'] = self.dmd.getEmailFrom()
679 msg['To'] = email
680 msg['Date'] = DateTime().rfc822()
681 result, errorMsg = Utils.sendEmail(msg, self.dmd.smtpHost,
682 self.dmd.smtpPort,
683 self.dmd.smtpUseTLS, self.dmd.smtpUser,
684 self.dmd.smtpPass)
685 if result:
686 userManager = self.acl_users.userManager
687 try:
688 userManager.updateUserPassword(self.id, newpw)
689 except KeyError:
690 self.getPhysicalRoot().acl_users.userManager.updateUserPassword(
691 self.id, newpw)
692 messaging.IMessageSender(self).sendToBrowser(
693 'Password reset',
694 'An email with a new password has been sent.'
695 )
696 loggedInUser = self.REQUEST['AUTHENTICATED_USER']
697
698
699
700 if loggedInUser.getUserName() == self.id:
701 self.acl_users.logout(self.REQUEST)
702 else:
703 messaging.IMessageSender(self).sendToBrowser(
704 'Password reset failed',
705 'Unable to send password reset email: %s' % errorMsg,
706 priority=messaging.WARNING
707 )
708 return self.callZenScreen(self.REQUEST)
709
710
711 security.declareProtected(ZEN_CHANGE_SETTINGS, 'manage_editUserSettings')
712 - def manage_editUserSettings(self, oldpassword=None, password=None,
713 sndpassword=None, roles=None, groups=None,
714 domains=None, REQUEST=None, **kw):
715 """Update user settings.
716 """
717
718 user = self.acl_users.getUser(self.id)
719 if not user:
720 user = self.getPhysicalRoot().acl_users.getUser(self.id)
721 if not user:
722 if REQUEST:
723 messaging.IMessageSender(self).sendToBrowser(
724 'Error',
725 'User %s not found.' % self.id,
726 priority=messaging.WARNING
727 )
728 return self.callZenScreen(REQUEST)
729 else:
730 return
731
732
733 curuser = self.getUser().getId()
734 if curuser=='admin':
735 verify_usr_mgr = self.getPhysicalRoot().acl_users.userManager
736 else:
737 verify_usr_mgr = self.acl_users.userManager
738
739 if not oldpassword or not verify_usr_mgr.authenticateCredentials(
740 {'login':curuser, 'password':oldpassword}):
741 if REQUEST:
742 messaging.IMessageSender(self).sendToBrowser(
743 'Error',
744 'Confirmation password is empty or invalid. Please'+
745 ' confirm your password for security reasons.',
746 priority=messaging.WARNING
747 )
748 return self.callZenScreen(REQUEST)
749 else:
750 raise ValueError("Current password is incorrect.")
751
752
753 roleManager = self.acl_users.roleManager
754 origRoles = filter(rolefilter, user.getRoles())
755
756 if not self.has_role('Manager') and roles and 'Manager' in roles:
757 if REQUEST:
758 messaging.IMessageSender(self).sendToBrowser(
759 'Error',
760 'Only Managers can make more Managers.',
761 priority=messaging.WARNING
762 )
763 return self.callZenScreen(REQUEST)
764 else:
765 return
766
767 if not self.has_role('Manager') and origRoles and \
768 'Manager' in origRoles:
769
770 if REQUEST:
771 messaging.IMessageSender(self).sendToBrowser(
772 'Error',
773 'Only Managers can modify other Managers.',
774 priority=messaging.WARNING
775 )
776 return self.callZenScreen(REQUEST)
777 else:
778 return
779
780
781 if roles != origRoles and self.isManager():
782 from sets import Set as set
783
784 removeRoles = list(set(origRoles).difference(set(roles)))
785 for role in removeRoles:
786 roleManager.removeRoleFromPrincipal(role, self.id)
787
788 addRoles = list(set(roles).difference(set(origRoles)))
789 for role in addRoles:
790 roleManager.assignRoleToPrincipal(role, self.id)
791
792
793 groupManager = self.acl_users.groupManager
794 origGroups = groupManager.getGroupsForPrincipal(user)
795
796 if groups != origGroups and self.isManager():
797
798 try:
799 set()
800 except NameError:
801 from sets import Set as set
802
803 removeGroups = set(origGroups).difference(set(groups))
804 for groupid in removeGroups:
805 groupManager.removePrincipalFromGroup(user.getId(), groupid)
806
807 addGroups = set(groups).difference(set(origGroups))
808 for groupid in addGroups:
809 try:
810 groupManager.addPrincipalToGroup(user.getId(), groupid)
811 except KeyError:
812
813 pass
814
815
816 if domains:
817 msg = 'Zenoss does not currently manage domains for users.'
818 raise NotImplementedError(msg)
819
820
821 if REQUEST:
822 kw = REQUEST.form
823 self.manage_changeProperties(**kw)
824
825
826 if self.id=='admin':
827 userManager = self.getPhysicalRoot().acl_users.userManager
828 else:
829 userManager = self.acl_users.userManager
830 if password:
831 if password.find(':') >= 0:
832 if REQUEST:
833 messaging.IMessageSender(self).sendToBrowser(
834 'Error',
835 'Passwords cannot contain a ":". Password not updated.',
836 priority=messaging.WARNING
837 )
838 return self.callZenScreen(REQUEST)
839 else:
840 raise ValueError("Passwords cannot contain a ':' ")
841 elif password != sndpassword:
842 if REQUEST:
843 messaging.IMessageSender(self).sendToBrowser(
844 'Error',
845 'Passwords did not match. Password not updated.',
846 priority=messaging.WARNING
847 )
848 return self.callZenScreen(REQUEST)
849 else:
850 raise ValueError("Passwords don't match")
851 else:
852 try: userManager.updateUserPassword(self.id, password)
853 except KeyError:
854 self.getPhysicalRoot().acl_users.userManager.updateUserPassword(
855 self.id, password)
856 if REQUEST:
857 loggedInUser = REQUEST['AUTHENTICATED_USER']
858
859
860
861 if loggedInUser.getUserName() == self.id:
862 self.acl_users.logout(REQUEST)
863
864 self.acl_users.ZCacheable_invalidate()
865
866
867 if REQUEST:
868 messaging.IMessageSender(self).sendToBrowser(
869 'Settings Saved',
870 Time.SaveMessage()
871 )
872 return self.callZenScreen(REQUEST)
873 else:
874 return user
875
876 security.declareProtected(ZEN_CHANGE_ALERTING_RULES, 'manage_addActionRule')
893
896
897 security.declareProtected(ZEN_CHANGE_EVENT_VIEWS,
898 'manage_addCustomEventView')
915
916
917 security.declareProtected(ZEN_CHANGE_ADMIN_OBJECTS,
918 'manage_addAdministrativeRole')
921 "Add a Admin Role to this device"
922 unused(role)
923 mobj = None
924 if not name:
925 name = REQUEST.deviceName
926 if type == 'device':
927 mobj =self.getDmdRoot("Devices").findDevice(name)
928 else:
929 try:
930 root = type.capitalize()+'s'
931 if type == "deviceClass":
932 mobj = self.getDmdRoot("Devices").getOrganizer(name)
933 else:
934 mobj = self.getDmdRoot(root).getOrganizer(name)
935 except KeyError: pass
936 if not mobj:
937 if REQUEST:
938 messaging.IMessageSender(self).sendToBrowser(
939 'Error',
940 "%s %s not found"%(type.capitalize(),name),
941 priority=messaging.WARNING
942 )
943 return self.callZenScreen(REQUEST)
944 else: return
945 roleNames = [ r.id for r in mobj.adminRoles() ]
946 if self.id in roleNames:
947 if REQUEST:
948 messaging.IMessageSender(self).sendToBrowser(
949 'Error',
950 (("Administrative Role for %s %s "
951 "for user %s already exists.") % (type, name, self.id)),
952 priority=messaging.WARNING
953 )
954 return self.callZenScreen(REQUEST)
955 else: return
956 mobj.manage_addAdministrativeRole(self.id)
957 if REQUEST:
958 messaging.IMessageSender(self).sendToBrowser(
959 'Role Added',
960 ("Administrative Role for %s %s for user %s added" %
961 (type, name, self.id))
962 )
963 return self.callZenScreen(REQUEST)
964
965
966 security.declareProtected(ZEN_CHANGE_ADMIN_OBJECTS,
967 'manage_editAdministrativeRoles')
991
992
993 security.declareProtected(ZEN_CHANGE_ADMIN_OBJECTS,
994 'manage_deleteAdministrativeRole')
1011
1012
1013 security.declareProtected(ZEN_CHANGE_SETTINGS, 'getAllAdminRoles')
1015 """Return all admin roles for this user and its groups
1016 """
1017 ars = self.adminRoles()
1018 for group in self.getUser().getGroups():
1019 gs = self.getGroupSettings(group)
1020 ars.extend(gs.adminRoles())
1021 return ars
1022
1023
1024 security.declareProtected(ZEN_CHANGE_SETTINGS, 'manage_emailTest')
1026 ''' Send a test email to the given userid.
1027 '''
1028 destSettings = self.getUserSettings(self.getId())
1029 destAddresses = destSettings.getEmailAddresses()
1030 msg = None
1031 if destAddresses:
1032 fqdn = socket.getfqdn()
1033 thisUser = self.getUser()
1034 srcId = thisUser.getId()
1035 self.getUserSettings(srcId)
1036 srcAddress = self.dmd.getEmailFrom()
1037
1038 body = ('This is a test message sent by %s' % srcId +
1039 ' from the Zenoss installation on %s.' % fqdn)
1040 emsg = MIMEText(body)
1041 emsg['Subject'] = 'Zenoss Email Test'
1042 emsg['From'] = srcAddress
1043 emsg['To'] = ', '.join(destAddresses)
1044 emsg['Date'] = DateTime().rfc822()
1045 result, errorMsg = Utils.sendEmail(emsg, self.dmd.smtpHost,
1046 self.dmd.smtpPort,
1047 self.dmd.smtpUseTLS, self.dmd.smtpUser,
1048 self.dmd.smtpPass)
1049 if result:
1050 msg = 'Test email sent to %s' % ', '.join(destAddresses)
1051 else:
1052 msg = 'Test failed: %s' % errorMsg
1053 else:
1054 msg = 'Test email not sent, user has no email address.'
1055 if REQUEST:
1056 messaging.IMessageSender(self).sendToBrowser(
1057 'Email Test',
1058 msg.replace("'", "\\'")
1059 )
1060 return self.callZenScreen(REQUEST)
1061 else:
1062 return msg
1063
1064
1065 security.declareProtected(ZEN_CHANGE_SETTINGS, 'manage_pagerTest')
1067 ''' Send a test page
1068 '''
1069 destSettings = self.getUserSettings(self.getId())
1070 destPagers = [ x.strip() for x in
1071 (destSettings.getPagerAddresses() or []) ]
1072 msg = None
1073 fqdn = socket.getfqdn()
1074 srcId = self.getUser().getId()
1075 testMsg = ('Test sent by %s' % srcId +
1076 ' from the Zenoss installation on %s.' % fqdn)
1077 for destPager in destPagers:
1078 result, errorMsg = Utils.sendPage(destPager, testMsg,
1079 self.dmd.pageCommand)
1080 if result:
1081 msg = 'Test page sent to %s' % ', '.join(destPagers)
1082 else:
1083 msg = 'Test failed: %s' % errorMsg
1084 break
1085 if not destPagers:
1086 msg = 'Test page not sent, user has no pager number.'
1087 if REQUEST:
1088 messaging.IMessageSender(self).sendToBrowser(
1089 'Pager Test', msg)
1090 return self.callZenScreen(REQUEST)
1091 else:
1092 return msg
1093
1095 """patch to export all user configuration
1096 """
1097 for o in self.objectValues():
1098 if hasattr(aq_base(o), 'exportXml'):
1099 o.exportXml(ofile, ignorerels)
1100
1102 if self.pager.strip():
1103 return [self.pager.strip()]
1104 return []
1105
1110
1120
1122
1123 meta_type = 'GroupSettings'
1124
1125 factory_type_information = (
1126 {
1127 'immediate_view' : 'editGroupSettings',
1128 'actions' :
1129 (
1130 {'name' : 'Edit',
1131 'action' : 'editGroupSettings',
1132 'permissions' : (ZEN_CHANGE_SETTINGS,),
1133 },
1134 {'name' : 'Administered Objects',
1135 'action' : 'administeredDevices',
1136 'permissions' : (ZEN_CHANGE_ADMIN_OBJECTS,)
1137 },
1138 {'name' : 'Event Views',
1139 'action' : 'editEventViews',
1140
1141 'permissions' : (ZEN_CHANGE_SETTINGS,),
1142 },
1143 {'name' : 'Alerting Rules',
1144 'action' : 'editActionRules',
1145 'permissions' : (ZEN_CHANGE_ALERTING_RULES,),
1146 },
1147 )
1148 },
1149 )
1150
1151 security = ClassSecurityInfo()
1152
1154 return self.zport.acl_users.groupManager
1155
1156
1158 """This is a group we never have roles. This is set to false so that
1159 fuctionality that would normally be taken away for a restricted user is
1160 left in.
1161 """
1162 return False
1163
1164
1165 security.declareProtected(ZEN_MANAGE_DMD, 'manage_addUsersToGroup')
1179
1180 security.declareProtected(ZEN_MANAGE_DMD, 'manage_deleteUserFromGroup')
1182 self._getG().removePrincipalFromGroup( userid, self.id )
1183
1184 security.declareProtected(ZEN_MANAGE_DMD, 'manage_deleteUsersFromGroup')
1196
1200
1202 return [ u[0] for u in self._getG().listAssignedPrincipals(self.id) ]
1203
1206
1212
1218
1219
1220 InitializeClass(UserSettingsManager)
1221 InitializeClass(UserSettings)
1222