1
2
3
4
5
6
7
8
9
10
11 """ Portal class
12
13 $Id: ZentinelPortal.py,v 1.17 2004/04/08 15:35:25 edahl Exp $
14 """
15
16 import urllib, urlparse
17 import re
18
19 import Globals
20
21 from zExceptions import Redirect
22 from AccessControl import getSecurityManager, ClassSecurityInfo
23
24 from Products.Sessions.BrowserIdManager import constructBrowserIdManager
25 from Products.Sessions.SessionDataManager import constructSessionDataManager
26
27 from Products.CMFCore.PortalObject import PortalObjectBase
28 from Products.CMFCore.utils import getToolByName
29
30 from Products.Zuul.interfaces import ICatalogTool
31 from Products.ZenUtils import Security, Time
32 from Products.ZenUtils.Utils import prepId
33 from Products.ZenUtils.deprecated import deprecated
34 from Products.ZenUI3.browser.interfaces import IErrorMessage
35
36 from ZenossSecurity import *
37
38 from Products.AdvancedQuery import MatchGlob, Eq, Or
41 """
42 The *only* function this class should have is to help in the setup
43 of a new ZentinelPortal. It should not assist in the functionality at all.
44 """
45 meta_type = 'ZentinelPortal'
46
47 _properties = (
48 {'id':'title', 'type':'string'},
49 {'id':'description', 'type':'text'},
50 )
51 title = ''
52 description = ''
53
54 security = ClassSecurityInfo()
55
58
61
64
65 security.declareProtected(ZEN_COMMON, 'searchDevices')
66 @deprecated
68 """Returns the concatenation of a device name, ip and mac
69 search on the list of devices.
70 """
71
72 zcatalog = self.dmd.Devices.deviceSearch
73 glob = queryString.rstrip('*') + '*'
74 idGlob = MatchGlob('id', glob)
75 titleGlob = MatchGlob('titleOrId', glob)
76 idOrTitleQuery = Or(idGlob,titleGlob)
77 query = Or(idOrTitleQuery, Eq('getDeviceIp', queryString))
78 additionalQuery = self._additionalQuery()
79 if additionalQuery:
80 query = And( query, additionalQuery )
81 brains = zcatalog.evalAdvancedQuery(query)
82 if REQUEST and len(brains) == 1:
83 raise Redirect(urllib.quote(brains[0].getPrimaryId))
84 if additionalQuery:
85 idGlob = And( idGlob, additionalQuery )
86 brains += self.dmd.Networks.ipSearch.evalAdvancedQuery(idGlob)
87 return [ b.getObject() for b in brains ]
88
89 security.declareProtected(ZEN_COMMON, 'searchComponents')
90 @deprecated
113
114 security.declareProtected(ZEN_COMMON, 'dotNetProxy')
115 - def dotNetProxy(self, path='', params={}, REQUEST=None):
116 """
117 Logs in to Zenoss.net using the user's credentials and retrieves data,
118 thereby putting it in the current domain
119 """
120 session = self.dmd.ZenUsers.getUserSettings().getDotNetSession()
121 response = session.open(path.lstrip('/'))
122 if response:
123 data = response.read()
124 headers = response.headers.dict
125 url = response.geturl()
126 response.close()
127 else:
128 return response
129 localbase = 'http://localhost:8080/zport/dotNetProxy?path='
130 allrefs = re.compile(r"""(href *= *["']|src *= *["'])(.*?)(["'])""")
131 proxyrefs = re.compile(
132 r"""((<a[^<>]*?|location\.)href *= *["'])(.*?)(['"])""")
133
134 def mod_rewrite(matchobj):
135 start, path, end = matchobj.groups()
136 if not path.startswith('javascript'):
137 path = urlparse.urljoin(url, path)
138 return start + path + end
139
140 def make_proxied(matchobj):
141 start, trash, path, end = matchobj.groups()
142 path = path.replace(session.base_url, localbase)
143 return start + path + end
144
145 data = re.sub(allrefs, mod_rewrite, data)
146 data = re.sub(proxyrefs, make_proxied, data)
147 for header in headers:
148 REQUEST.RESPONSE.setHeader(header, headers[header])
149 return data
150
158
159
161 """Check to see of a user has a role.
162 """
163 if obj is None: obj = self
164 user = getSecurityManager().getUser()
165 if user: return user.has_role(role, obj)
166
167
169 """Check to see of a user has a permission.
170 """
171 if obj is None: obj = self
172 user = getSecurityManager().getUser()
173 if user: return user.has_permission(perm, obj)
174
177
181
185
187 """
188 On first run, log us in as admin automatically.
189
190 This is done via a proxy form with hidden fields, so that the browser
191 doesn't ask to save the password (which will be changed on the next
192 screen).
193 """
194 if not self.dmd._rq:
195 return """
196 <form id="_proxy_form">
197 <input type="hidden" name="__ac_name"/>
198 <input type="hidden" name="__ac_password"/>
199 <input type="hidden" name="came_from" value="/zport/dmd/quickstart"/>
200 </form>
201 <script>
202 var origform=document.forms[0];
203 var newform = document.getElementById('_proxy_form');
204 newform.__ac_name.value = 'admin';
205 newform.__ac_password.value = 'zenoss';
206 newform.action = origform.action;
207 newform.method = origform.method;
208 newform.submit()
209 </script>
210 """
211
212
213 Globals.InitializeClass(ZentinelPortal)
217
218 klass = ZentinelPortal
219
224
225
227 p.manage_addProduct['MailHost'].manage_addMailHost(
228 'MailHost', smtp_host='localhost')
229
230
235
236
242
243
247
248
250
251 mp = p.manage_permission
252 mp(ZEN_CHANGE_SETTINGS,[ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
253 mp(ZEN_CHANGE_DEVICE, [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
254 mp(ZEN_CHANGE_DEVICE_PRODSTATE,
255 [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
256 mp(ZEN_MANAGE_DMD, [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
257 mp(ZEN_DELETE, [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
258 mp(ZEN_DELETE_DEVICE, [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
259 mp(ZEN_ADD, [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
260 mp(ZEN_VIEW, [ZEN_USER_ROLE, ZEN_MANAGER_ROLE,
261 MANAGER_ROLE, OWNER_ROLE])
262 mp(ZEN_COMMON, ["Authenticated", ZEN_USER_ROLE, ZEN_MANAGER_ROLE,
263 MANAGER_ROLE, OWNER_ROLE], 1)
264
265
266 mp(ZEN_MANAGE_EVENTMANAGER,
267 [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
268 mp(ZEN_MANAGE_EVENTS,
269 [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
270 mp(ZEN_SEND_EVENTS,
271 [ZEN_MANAGER_ROLE, OWNER_ROLE, MANAGER_ROLE,], 1)
272
273 mp(ZEN_CHANGE_ALERTING_RULES,
274 [ZEN_MANAGER_ROLE, MANAGER_ROLE, OWNER_ROLE], 1)
275 mp(ZEN_CHANGE_ADMIN_OBJECTS, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
276 mp(ZEN_CHANGE_EVENT_VIEWS, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
277 mp(ZEN_ADMIN_DEVICE, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
278 mp(ZEN_MANAGE_DEVICE, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
279 mp(ZEN_ZPROPERTIES_EDIT, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
280 mp(ZEN_ZPROPERTIES_VIEW,
281 [ZEN_MANAGER_ROLE, MANAGER_ROLE, ZEN_USER_ROLE], 1)
282 mp(ZEN_EDIT_LOCAL_TEMPLATES, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
283 mp(ZEN_RUN_COMMANDS, [ZEN_USER_ROLE, ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
284 mp(ZEN_DEFINE_COMMANDS_EDIT, [MANAGER_ROLE], 1)
285 mp(ZEN_DEFINE_COMMANDS_VIEW,
286 [ZEN_MANAGER_ROLE, MANAGER_ROLE, ZEN_USER_ROLE], 1)
287 mp(ZEN_MAINTENANCE_WINDOW_EDIT, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
288 mp(ZEN_MAINTENANCE_WINDOW_VIEW,
289 [ZEN_MANAGER_ROLE, MANAGER_ROLE, ZEN_USER_ROLE], 1)
290 mp(ZEN_ADMINISTRATORS_EDIT, [ZEN_MANAGER_ROLE, MANAGER_ROLE], 1)
291 mp(ZEN_ADMINISTRATORS_VIEW,
292 [ZEN_MANAGER_ROLE, MANAGER_ROLE, ZEN_USER_ROLE], 1)
293
294
295
297 from Products.CMFCore.DirectoryView import addDirectoryViews
298 ps = getToolByName(p, 'portal_skins')
299 addDirectoryViews(ps, 'skins', globals())
300 ps.manage_addProduct['OFSP'].manage_addFolder(id='custom')
301 ps.addSkinSelection('Basic', "custom, zenmodel", make_default=1)
302 p.setupCurrentSkin()
303
304
306 """build a session manager and brower id manager for zport"""
307 constructBrowserIdManager(p, cookiepath="/zport")
308 constructSessionDataManager(p, "session_data_manager",
309 title="Session Data Manager",
310 path='/temp_folder/session_data')
311
312
313 - def setup(self, p, create_userfolder):
323
324
325 - def create(self, parent, id, create_userfolder):
333
334
335 - def setupDefaultProperties(self, p, title, description,
336 email_from_address, email_from_name,
337 validate_email,
338 ):
344
345
346 manage_addZentinelPortal = Globals.HTMLFile('dtml/addPortal', globals())
347 manage_addZentinelPortal.__name__ = 'addPortal'
348
349 -def manage_addZentinelPortal(obj, id="zport", title='Zentinel Portal',
350 description='',
351 create_userfolder=True,
352 email_from_address='postmaster@localhost',
353 email_from_name='Portal Administrator',
354 validate_email=0, RESPONSE=None):
367