"""Access control package"""
__version__='$Revision: 1.2 $'[11:-2]
import Globals
from Persistence import Persistent
from Persistence import PersistentMapping
from Acquisition import Implicit
from DocumentTemplate import HTML
from Globals import MessageDialog
from base64 import decodestring
from string import join,strip,split,lower
class SafeDtml(HTML):
"""Lobotomized document template w/no editing"""
def __init__(self,name='',*args,**kw):
f=open('%s/lib/python/AccessControl/%s.dtml' % (SOFTWARE_HOME, name))
s=f.read()
f.close()
args=(self,s,)+args
kw['SOFTWARE_URL']=SOFTWARE_URL
apply(HTML.__init__,args,kw)
manage =None
manage_editDocument=None
manage_editForm =None
manage_edit =None
class User(Implicit, Persistent):
def __init__(self,name=None,password=None,roles=[]):
if name is not None:
self._name =name
self._password=password
self._roles =roles
def __len__(self):
return 1
def __str__(self):
return self._name
def __repr__(self):
return self._name
class SuperUser:
def __init__(self):
try:
f=open('%s/access' % CUSTOMER_HOME, 'r')
d=split(strip(f.readline()),':')
f.close()
self._name =d[0]
self._password=d[1]
self._roles =('manage',)
except:
self._name ='superuser'
self._password='123'
self._roles =('manage',)
def __len__(self):
return 1
def __str__(self):
return self._name
def __repr__(self):
return self._name
su=SuperUser()
class UserFolder(Implicit, Persistent):
""" """
meta_type='User Folder'
id ='UserFolder'
title ='User Folder'
icon ='AccessControl/UserFolder_icon.gif'
isAUserFolder=1
manage =SafeDtml('Generic_manage')
manage_menu=SafeDtml('Generic_manage_menu')
manage_main=SafeDtml('UserFolder_manage_main')
_editForm =SafeDtml('UserFolder_manage_editForm')
index_html =manage_main
manage_options=(
{'icon':'AccessControl/UserFolder_icon.gif', 'label':'Contents',
'action':'manage_main', 'target':'manage_main'},
{'icon':'OFS/Help_icon.gif', 'label':'Help',
'action':'manage_help', 'target':'_new'},
)
def _init(self):
self._data=PersistentMapping()
def __len__(self):
return len(self.userNames())
def parentObject(self):
try: return (self.aq_parent,)
except: return ()
def userNames(self):
return self._data.keys()
def roleNames(self):
return Globals.Bobobase['roles']
def validate(self,request,auth,roles=None):
if lower(auth[:6])!='basic ':
return None
[name,password]=split(decodestring(split(auth)[-1]), ':')
if (name==su._name) and (password==su._password):
return su
try: user=self._data[name]
except: return None
if password!=user._password:
return None
if roles is None:
return user
for role in roles:
if role in user._roles:
return user
return None
def manage_addUser(self,REQUEST,name,password,confirm,roles=[]):
""" """
if self._data.has_key(name):
return MessageDialog(title='Illegal value',
message='An item with the specified name already exists',
action='%s/manage' % REQUEST['PARENT_URL'])
if password!=confirm:
return MessageDialog(title='Illegal value',
message='Password and confirmation do not match',
action='%s/manage' % REQUEST['PARENT_URL'])
self._data[name]=User(name,password,roles)
return self.manage_main(self, REQUEST)
def manage_editForm(self,REQUEST,name):
""" """
try: user=self._data[name]
except: return MessageDialog(title='Illegal value',
message='The specified item does not exist',
action='%s/manage_main' % REQUEST['PARENT_URL'])
name =user._name
pw =user._password
rolelist=map(lambda k, s=user._roles:
k in s and ('