summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e577571)
raw | patch | inline | side by side (parent: e577571)
author | rochecompaan <rochecompaan@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Thu, 20 Dec 2001 15:43:01 +0000 (15:43 +0000) | ||
committer | rochecompaan <rochecompaan@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Thu, 20 Dec 2001 15:43:01 +0000 (15:43 +0000) |
. Multilink properties are now displayed as comma separated values in
a textbox
. The add user link is now only visible to the admin user
. Modified the mail gateway to reject submissions from unknown
addresses if ANONYMOUS_ACCESS is denied
git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@479 57a73879-2fb5-44c3-a270-3262357dd7e2
a textbox
. The add user link is now only visible to the admin user
. Modified the mail gateway to reject submissions from unknown
addresses if ANONYMOUS_ACCESS is denied
git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@479 57a73879-2fb5-44c3-a270-3262357dd7e2
diff --git a/roundup/cgi_client.py b/roundup/cgi_client.py
index c8e1fef6699c13615b57b525dfcfe7275284b6f0..5a78b17cd3677cc040ac5043b5a6750cde15ca3f 100644 (file)
--- a/roundup/cgi_client.py
+++ b/roundup/cgi_client.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: cgi_client.py,v 1.85 2001-12-20 06:13:24 rochecompaan Exp $
+# $Id: cgi_client.py,v 1.86 2001-12-20 15:43:01 rochecompaan Exp $
__doc__ = """
WWW request handler (also used in the stand-alone server).
else:
user_info = _('<a href="login">Login</a>')
if self.user is not None:
- add_links = _('''
+ if self.user == 'admin':
+ add_links = _('''
| Add
<a href="newissue">Issue</a>,
<a href="newuser">User</a>
+''')
+ else:
+ add_links = _('''
+| Add
+<a href="newissue">Issue</a>
''')
else:
add_links = ''
else:
user_info = _('<a href="login">Login</a>')
if self.user is not None:
- add_links = _('''
+ if self.user == 'admin':
+ add_links = _('''
| Add
<a href="newissue">Issue</a>,
<a href="newsupport">Support</a>,
<a href="newuser">User</a>
+''')
+ else:
+ add_links = _('''
+| Add
+<a href="newissue">Issue</a>,
+<a href="newsupport">Support</a>,
''')
else:
add_links = ''
#
# $Log: not supported by cvs2svn $
+# Revision 1.85 2001/12/20 06:13:24 rochecompaan
+# Bugs fixed:
+# . Exception handling in hyperdb for strings-that-look-like numbers got
+# lost somewhere
+# . Internet Explorer submits full path for filename - we now strip away
+# the path
+# Features added:
+# . Link and multilink properties are now displayed sorted in the cgi
+# interface
+#
# Revision 1.84 2001/12/18 15:30:30 rochecompaan
# Fixed bugs:
# . Fixed file creation and retrieval in same transaction in anydbm
index ea2981f56a320997b38bb3e329d6e09e0598f358..f0d12d492b5afe7f80b3207b0f8454d347914c33 100644 (file)
--- a/roundup/htmltemplate.py
+++ b/roundup/htmltemplate.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: htmltemplate.py,v 1.48 2001-12-20 06:13:24 rochecompaan Exp $
+# $Id: htmltemplate.py,v 1.49 2001-12-20 15:43:01 rochecompaan Exp $
__doc__ = """
Template engine.
elif isinstance(propclass, hyperdb.Multilink):
list = linkcl.list()
list.sort(sortfunc)
- height = height or min(len(list), 7)
- l = ['<select multiple name="%s" size="%s">'%(property, height)]
k = linkcl.labelprop()
- for optionid in list:
- option = linkcl.get(optionid, k)
- s = ''
- if optionid in value:
- s = 'selected '
- if showid:
- lab = '%s%s: %s'%(propclass.classname, optionid, option)
+ l = []
+ # special treatment for nosy list
+ if property == 'nosy':
+ input_value = []
+ else:
+ input_value = value
+ for v in value:
+ lab = linkcl.get(v, k)
+ if property != 'nosy':
+ l.append('<a href="issue%s">%s: %s</a>'%(v,v,lab))
else:
- lab = option
- if size is not None and len(lab) > size:
- lab = lab[:size-3] + '...'
- l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab))
- l.append('</select>')
- s = '\n'.join(l)
+ input_value.append(lab)
+ if size is None:
+ size = '10'
+ l.insert(0,'<input name="%s" size="%s" value="%s">'%(property,
+ size, ','.join(input_value)))
+ s = "<br>\n".join(l)
else:
s = 'Plain: bad propclass "%s"'%propclass
return s
#
# $Log: not supported by cvs2svn $
+# Revision 1.48 2001/12/20 06:13:24 rochecompaan
+# Bugs fixed:
+# . Exception handling in hyperdb for strings-that-look-like numbers got
+# lost somewhere
+# . Internet Explorer submits full path for filename - we now strip away
+# the path
+# Features added:
+# . Link and multilink properties are now displayed sorted in the cgi
+# interface
+#
# Revision 1.47 2001/11/26 22:55:56 richard
# Feature:
# . Added INSTANCE_NAME to configuration - used in web and email to identify
diff --git a/roundup/mailgw.py b/roundup/mailgw.py
index f533c755f4ddac8026463f29c36157c1c0f20ac7..9b3c1411deba5bcf8935fa6aa1b2439f23dab116 100644 (file)
--- a/roundup/mailgw.py
+++ b/roundup/mailgw.py
an exception, the original message is bounced back to the sender with the
explanatory message given in the exception.
-$Id: mailgw.py,v 1.44 2001-12-18 15:30:34 rochecompaan Exp $
+$Id: mailgw.py,v 1.45 2001-12-20 15:43:01 rochecompaan Exp $
'''
class MailUsageError(ValueError):
pass
+class UnAuthorized(Exception):
+ """ Access denied """
+
class Message(mimetools.Message):
''' subclass mimetools.Message so we can retrieve the parts of the
message...
m.append('\n\nMail Gateway Help\n=================')
m.append(fulldoc)
m = self.bounce_message(message, sendto, m)
+ except UnAuthorized, value:
+ # just inform the user that he is not authorized
+ sendto = [sendto[0][1]]
+ m = ['']
+ m.append(str(value))
+ m = self.bounce_message(message, sendto, m)
except:
# bounce the message back to the sender with the error message
sendto = [sendto[0][1]]
#
# handle the users
#
- author = self.db.uidFromAddress(message.getaddrlist('from')[0])
+
+ # Don't create users if ANONYMOUS_ACCESS is denied
+ if self.ANONYMOUS_ACCESS == 'deny':
+ create = 0
+ else:
+ create = 1
+ author = self.db.uidFromAddress(message.getaddrlist('from')[0],
+ create=create)
+ if not author:
+ raise UnAuthorized, '''
+You are not a registered user.
+
+Unknown address: %s
+'''%message.getaddrlist('from')[0][1]
+
# reopen the database as the author
username = self.db.user.get(author, 'username')
self.db = self.instance.open(username)
#
# $Log: not supported by cvs2svn $
+# Revision 1.44 2001/12/18 15:30:34 rochecompaan
+# Fixed bugs:
+# . Fixed file creation and retrieval in same transaction in anydbm
+# backend
+# . Cgi interface now renders new issue after issue creation
+# . Could not set issue status to resolved through cgi interface
+# . Mail gateway was changing status back to 'chatting' if status was
+# omitted as an argument
+#
# Revision 1.43 2001/12/15 19:39:01 rochecompaan
# Oops.
#
diff --git a/roundup/roundupdb.py b/roundup/roundupdb.py
index 50cd90c4dcca11d9a69076be33364dba63e56d3a..603e608ed35f13f0d2a1733f149f1a9172c1f4b2 100644 (file)
--- a/roundup/roundupdb.py
+++ b/roundup/roundupdb.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: roundupdb.py,v 1.34 2001-12-17 03:52:48 richard Exp $
+# $Id: roundupdb.py,v 1.35 2001-12-20 15:43:01 rochecompaan Exp $
__doc__ = """
Extending hyperdb with types specific to issue-tracking.
users = self.user.stringFind(username=address)
# couldn't match address or username, so create a new user
- return self.user.create(username=address, address=address,
- realname=realname)
+ if create:
+ return self.user.create(username=address, address=address,
+ realname=realname)
+ else:
+ return 0
_marker = []
# XXX: added the 'creator' faked attribute
#
# $Log: not supported by cvs2svn $
+# Revision 1.34 2001/12/17 03:52:48 richard
+# Implemented file store rollback. As a bonus, the hyperdb is now capable of
+# storing more than one file per node - if a property name is supplied,
+# the file is called designator.property.
+# I decided not to migrate the existing files stored over to the new naming
+# scheme - the FileClass just doesn't specify the property name.
+#
# Revision 1.33 2001/12/16 10:53:37 richard
# take a copy of the node dict so that the subsequent set
# operation doesn't modify the oldvalues structure
index 72c2cbb629851ac3c97b07c36eb58b4ffa45718e..ac2acc7aa76ab90843a035d47b742314f231325b 100644 (file)
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: interfaces.py,v 1.9 2001-11-26 23:00:53 richard Exp $
+# $Id: interfaces.py,v 1.10 2001-12-20 15:43:01 rochecompaan Exp $
import instance_config
from roundup import cgi_client, mailgw
ISSUE_TRACKER_EMAIL = instance_config.ISSUE_TRACKER_EMAIL
ADMIN_EMAIL = instance_config.ADMIN_EMAIL
MAILHOST = instance_config.MAILHOST
+ ANONYMOUS_ACCESS = instance_config.ANONYMOUS_ACCESS
#
# $Log: not supported by cvs2svn $
+# Revision 1.9 2001/11/26 23:00:53 richard
+# This config stuff is getting to be a real mess...
+#
# Revision 1.8 2001/10/22 03:25:01 richard
# Added configuration for:
# . anonymous user access and registration (deny/allow)
index bfe9269a36bf5170aa79c751dc17323739d66956..8f84e668a8af384da6cadd2f2be62e94516edd81 100644 (file)
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: interfaces.py,v 1.13 2001-11-26 23:00:53 richard Exp $
+# $Id: interfaces.py,v 1.14 2001-12-20 15:43:01 rochecompaan Exp $
import instance_config
from roundup import cgi_client, mailgw
ISSUE_TRACKER_EMAIL = instance_config.ISSUE_TRACKER_EMAIL
ADMIN_EMAIL = instance_config.ADMIN_EMAIL
MAILHOST = instance_config.MAILHOST
+ ANONYMOUS_ACCESS = instance_config.ANONYMOUS_ACCESS
#
# $Log: not supported by cvs2svn $
+# Revision 1.13 2001/11/26 23:00:53 richard
+# This config stuff is getting to be a real mess...
+#
# Revision 1.12 2001/10/22 03:25:01 richard
# Added configuration for:
# . anonymous user access and registration (deny/allow)