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