--- trac-0.9.6-ja-1/trac/Notify.py 2006-02-16 10:47:21.000000000 +0900 +++ trac-0.9.6-ja-1kai/trac/Notify.py 2006-07-30 12:26:12.000000000 +0900 @@ -20,9 +20,12 @@ from trac.web.clearsilver import HDFWrapper from trac.web.main import populate_hdf +import re +import socket import md5 import time import smtplib +from email.Header import Header class Notify: @@ -74,6 +77,8 @@ server = None email_map = None template_name = None + reporter_name = '' + reporter_email = '' def __init__(self, env): Notify.__init__(self, env) @@ -117,6 +122,17 @@ if self.user_name: self.server.login(self.user_name, self.password) + def modifyNotification(self , authname , reporter_name_ , reporter_email): + if self.env.config.getbool('notification', 'use_reporter_name'): + if reporter_name_: + self.reporter_name = reporter_name_ + elif authname: + self.reporter_name = authname + + if self.env.config.getbool('notification', 'use_reporter_email'): + if reporter_email: + self.reporter_email = reporter_email + def send(self, rcpt, mime_headers={}): from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText @@ -132,11 +148,25 @@ msg['X-Trac-Project'] = projname msg['X-URL'] = self.config.get('project','url') msg['Subject'] = Header(self.subject, 'utf-8') - msg['From'] = '%s <%s>' % (projname, self.from_email) + + display_name = projname + from_email_ = self.from_email + if self.env.config.getbool('notification', 'use_reporter_name') and \ + self.reporter_name: + display_name = self.reporter_name + + if self.env.config.getbool('notification', 'use_reporter_email') and \ + self.reporter_email: + from_email_ = self.reporter_email + + msg['From'] = '%s <%s>' % (Header(display_name, 'utf-8'), from_email_) msg['Sender'] = self.from_email msg['Reply-To'] = self.replyto_email msg['To'] = rcpt - msg['Date'] = formatdate() + if self.config.getbool('notification', 'use_localtime'): + msg['Date'] = formatdate(time.time(),True) + else: + msg['Date'] = formatdate() for hdr in mime_headers.keys(): msg[hdr] = mime_headers[hdr] self.env.log.debug("Sending SMTP notification to %s on port %d" @@ -301,6 +331,11 @@ emails = [] for recipient in recipients: if recipient.find('@') >= 0: + p = re.compile('([^<]*)\s*(<.+>)') + m = p.match(recipient) + if m: + recipient = '%s %s' % \ + (Header(m.group(1), 'utf-8'), m.group(2)) emails.append(recipient) elif self.email_map.has_key(recipient): emails.append(self.email_map[recipient]) @@ -312,12 +347,20 @@ result.append(e) return result + def get_message_id_host(self): + if self.config.getbool('notification', 'use_fqdn4message_id'): + fqdn = socket.getfqdn() + if fqdn: + return fqdn + + return self.from_email[self.from_email.find('@') + 1:] + def get_message_id(self, rcpt, modtime=0): """Generate a predictable, but sufficiently unique message ID.""" s = '%s.%08d.%d.%s' % (self.config.get('project', 'url'), int(self.ticket.id), modtime, rcpt) dig = md5.new(s).hexdigest() - host = self.from_email[self.from_email.find('@') + 1:] + host = self.get_message_id_host() msgid = '<%03d.%s@%s>' % (len(s), dig, host) return msgid --- trac-0.9.6-ja-1/trac/ticket/web_ui.py 2006-02-16 10:59:33.000000000 +0900 +++ trac-0.9.6-ja-1kai/trac/ticket/web_ui.py 2006-07-30 12:26:12.000000000 +0900 @@ -139,6 +139,8 @@ # Notify try: tn = TicketNotifyEmail(self.env) + tn.modifyNotification(req.authname, \ + req.session.get('name', None), req.session.get('email', None)) tn.notify(ticket, newticket=True) except Exception, e: self.log.exception("Failure sending notification on creation of " @@ -347,6 +349,8 @@ try: tn = TicketNotifyEmail(self.env) + tn.modifyNotification(req.authname, \ + req.session.get('name', None), req.session.get('email', None)) tn.notify(ticket, newticket=False, modtime=now) except Exception, e: self.log.exception("Failure sending notification on change to " --- trac-0.9.6-ja-1/trac/web/TrustedAuth.py 1970-01-01 09:00:00.000000000 +0900 +++ trac-0.9.6-ja-1kai/trac/web/TrustedAuth.py 2006-07-30 12:26:12.000000000 +0900 @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# +# This is adhoc auth?-module under tracd. +# +# If you are using tracd and external proxy(ex. mod_proxy) with some auth +# method, the access for tracd is already authorized. +# +# TrustedAuth regard the user as already trusted. +# The user extraced from Authorization field. +# +# Author: tckz +# + +from trac import util, __version__ +from trac.web.api import Request +from trac.web.cgi_frontend import TracFieldStorage + +import urllib2 + +try: + from base64 import b64decode +except ImportError: + from base64 import decodestring as b64decode + + +class TrustedAuth: + def __init__(self, dummy, realm): + self.realm = realm + + def send_auth_request(self, req): + req.send_response(401) + req.end_headers() + + def parse_auth_header(self, authorization): + values = {} + for value in urllib2.parse_http_list(authorization): + n, v = value.split('=', 1) + if v[0] == '"' and v[-1] == '"': + values[n] = v[1:-1] + else: + values[n] = v + return values + + def do_auth(self, req): + if not 'Authorization' in req.headers: + self.send_auth_request(req) + return None + + user = "" + if req.headers['Authorization'].startswith('Basic'): + auth = req.headers['Authorization'][len('Basic')+1:] + auth = b64decode(auth).split(':') + if len(auth) == 2: + user, password = auth + elif req.headers['Authorization'].startswith('Digest'): + auth = self.parse_auth_header(req.headers['Authorization'][7:]) + if auth.has_key('username'): + user = auth['username'] + else: + self.send_auth_request(req) + + if user == "": + self.send_auth_request(req) + return None + + return user + --- trac-0.9.6-ja-1/trac/web/auth.py 2006-01-09 16:48:09.000000000 +0900 +++ trac-0.9.6-ja-1kai/trac/web/auth.py 2006-07-30 12:26:12.000000000 +0900 @@ -64,7 +64,8 @@ def get_navigation_items(self, req): if req.authname and req.authname != 'anonymous': yield ('metanav', 'login', '%s としてログイン中' % req.authname) - yield ('metanav', 'logout', + if not self.config.getbool('trac' , 'must_login'): + yield ('metanav', 'logout', Markup('ログアウト' % escape(self.env.href.logout()))) else: --- trac-0.9.6-ja-1/trac/web/standalone.py 2006-01-09 16:48:09.000000000 +0900 +++ trac-0.9.6-ja-1kai/trac/web/standalone.py 2006-07-30 12:26:12.000000000 +0900 @@ -288,7 +288,8 @@ return req.remote_user = None - if path_info == '/login': + if path_info == '/login' or \ + env.config.getbool('trac' , 'must_login') : auth = self.server.auths.get(project_name) or \ self.server.auths.get('*') if not auth: --- trac-0.9.6-ja-1/scripts/tracd 2005-12-02 10:10:17.000000000 +0900 +++ trac-0.9.6-ja-1kai/scripts/tracd 2006-07-30 12:29:56.000000000 +0900 @@ -16,6 +16,7 @@ # Author: Jonas Borgstrm from trac.web.standalone import BasicAuth, DigestAuth, TracHTTPServer +from trac.web.TrustedAuth import * import getopt import locale @@ -56,6 +57,7 @@ try: opts, args = getopt.getopt(sys.argv[1:], "a:p:b:de:", ["auth=", "port=", "hostname=","daemonize", + "trusted-auth=", "env-parent-dir=", "basic-auth="]) except getopt.GetoptError, e: print e @@ -66,6 +68,8 @@ add_auth(auths, a, DigestAuth) if o == '--basic-auth': add_auth(auths, a, BasicAuth) + if o == '--trusted-auth': + add_auth(auths, a, TrustedAuth) if o in ("-p", "--port"): port = int(a) elif o in ("-b", "--hostname"):