def pingback(request, source, target): source_file = urllib.urlopen(source.split('#')[0]) if source_file.headers.get('error', '') == '404': raise Fault(0x0010, "Target %s not exists" % target) source_page = parser() source_page.feed(source_file.read()) source_file.close() if source_page.title == "": source_page.title = source if target in source_page.hrefs: target_entry = fileFor(request, target) body = '' try: from rssfinder import getFeeds from rssparser import parse baseurl = source.split("#")[0] for feed in getFeeds(baseurl): for item in parse(feed)['items']: if item['link'] == source: if 'title' in item: source_page.title = item['title'] if 'content_encoded' in item: body = item['content_encoded'].strip() if 'description' in item: body = item['description'].strip() or body body = re.compile('<.*?>', re.S).sub('', body) body = re.sub('\s+', ' ', body) body = body[:body.rfind(' ', 0, 250 )][:250] + " ...<br />" except: pass cmt = {'title':source_page.title, \ 'author':'Pingback from %s' % source_page.title, 'pubDate' : str(time.time()), \ 'link': source, 'source' : '', 'description' : body} from comments import writeComment config = request.getConfiguration() data = request.getData() data['entry_list'] = [target_entry] # TODO: Check if comment from the URL exists writeComment(config, data, cmt) return "success pinging %s from %s\n" % (source, target) else: raise Fault(0x0011, "%s does not point to %s" % (target, source))
def pingback(request, source, target): source_file = urllib.urlopen(source.split('#')[0]) if source_file.headers.get('error', '') == '404': raise Fault(0x0010, "Target %s not exists" % target) source_page = parser() source_page.feed(source_file.read()) source_file.close() if source_page.title == "": source_page.title = source if target in source_page.hrefs: target_entry = fileFor(request, target) body = '' try: from rssfinder import getFeeds from rssparser import parse baseurl=source.split("#")[0] for feed in getFeeds(baseurl): for item in parse(feed)['items']: if item['link']==source: if 'title' in item: source_page.title = item['title'] if 'content_encoded' in item: body = item['content_encoded'].strip() if 'description' in item: body = item['description'].strip() or body body=re.compile('<.*?>',re.S).sub('',body) body=re.sub('\s+',' ',body) body=body[:body.rfind(' ',0,250)][:250] + " ...<br />" except: pass cmt = {'title':source_page.title, \ 'author':'Pingback from %s' % source_page.title, 'pubDate' : str(time.time()), \ 'link': source, 'source' : '', 'description' : body} from comments import writeComment config = request.getConfiguration() data = request.getData() data['entry_list'] = [ target_entry ] # TODO: Check if comment from the URL exists writeComment(config, data, cmt) return "success pinging %s from %s\n" % (source, target) else: raise Fault(0x0011, "%s does not point to %s" % (target, source))
def save_comment(request, cmt_data): """Call the comments plugin to finish handling the comment data. This code is mostly copied from comments.cb_prepare, but it was not exposed in the way it needed to be in order to re-use it. @param request: The current request @type request: Pyblosxom request object @param cmt_data: The comment data @type cmt_data: {str:str} """ from comments import add_dont_follow, massage_link, sanitize, writeComment config = request.getConfiguration() enc = config['blog_encoding'] for k, v in cmt_data.iteritems(): if type(v) is type(''): cmt_data[k] = v.decode(enc) openid_url = cmt_data['url'] body = add_dont_follow(sanitize(cmt_data['body']), config) cmt_time = time.time() w3cdate = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(cmt_time)) date = time.strftime('%a %d %b %Y', time.gmtime(cmt_time)) cdict = { 'title': cmt_data['title'], 'pubDate': str(cmt_time), 'w3cdate': w3cdate, 'cmt_date': date, 'link': massage_link(cmt_data.get('url', openid_url)), 'source': '', 'email': cmt_data.get('email', ''), 'description': body, 'author': cmt_data.get('author', openid_url), 'openid_url': openid_url, } data = request.getData() data["comment_message"] = writeComment(request, config, data, cdict, enc)
def save_comment(request, cmt_data): """Call the comments plugin to finish handling the comment data. This code is mostly copied from comments.cb_prepare, but it was not exposed in the way it needed to be in order to re-use it. @param request: The current request @type request: Pyblosxom request object @param cmt_data: The comment data @type cmt_data: {str:str} """ from comments import add_dont_follow, massage_link, sanitize, writeComment config = request.getConfiguration() enc = config['blog_encoding'] for k, v in cmt_data.iteritems(): if type(v) is type(''): cmt_data[k] = v.decode(enc) openid_url = cmt_data['url'] body = add_dont_follow(sanitize(cmt_data['body']), config) cmt_time = time.time() w3cdate = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(cmt_time)) date = time.strftime('%a %d %b %Y', time.gmtime(cmt_time)) cdict = {'title': cmt_data['title'], 'pubDate': str(cmt_time), 'w3cdate': w3cdate, 'cmt_date': date, 'link': massage_link(cmt_data.get('url', openid_url)), 'source': '', 'email': cmt_data.get('email', ''), 'description': body, 'author': cmt_data.get('author', openid_url), 'openid_url': openid_url, } data = request.getData() data["comment_message"] = writeComment(request, config, data, cdict, enc)
def pingback(request, source, target): logger = tools.getLogger() logger.info("pingback started") source_file = urllib.urlopen(source.split('#')[0]) if source_file.headers.get('error', '') == '404': raise Fault(0x0010, "Target %s not exists" % target) source_page = parser() source_page.feed(source_file.read()) source_file.close() if source_page.title == "": source_page.title = source if target in source_page.hrefs: target_entry = fileFor(request, target) body = '' try: from rssfinder import getFeeds from rssparser import parse baseurl=source.split("#")[0] for feed in getFeeds(baseurl): for item in parse(feed)['items']: if item['link']==source: if 'title' in item: source_page.title = item['title'] if 'content_encoded' in item: body = item['content_encoded'].strip() if 'description' in item: body = item['description'].strip() or body body=re.compile('<.*?>',re.S).sub('',body) body=re.sub('\s+',' ',body) body=body[:body.rfind(' ',0,250)][:250] + " ...<br />" except: pass cmt = {'title':source_page.title, \ 'author':'Pingback from %s' % source_page.title, 'pubDate' : str(time.time()), \ 'link': source, 'source' : '', 'description' : body} # run anti-spam plugins argdict = { "request": request, "comment": cmt } reject = tools.run_callback("trackback_reject", argdict, donefunc=lambda x:x != 0) if ((isinstance(reject, tuple) or isinstance(reject, list)) and len(reject) == 2): reject_code, reject_message = reject else: reject_code, reject_message = reject, "Pingback rejected." if reject_code == 1: raise Fault(0x0031, reject_message) from comments import writeComment config = request.getConfiguration() data = request.getData() data['entry_list'] = [ target_entry ] # TODO: Check if comment from the URL exists writeComment(request, config, data, cmt, config['blog_encoding']) return "success pinging %s from %s\n" % (target, source) else: raise Fault(0x0011, "%s does not point to %s" % (source, target))
def cb_handle(args): """ @param args: a dict of plugin arguments @type args: dict """ request = args['request'] pyhttp = request.getHttp() config = request.getConfiguration() urltrigger = config.get('trackback_urltrigger', '/trackback') logger = tools.getLogger() path_info = pyhttp['PATH_INFO'] if path_info.startswith(urltrigger): response = request.getResponse() response.addHeader("Content-type", "text/xml") form = request.getForm() message = "A trackback must have at least a URL field (see http://www.sixapart.com/pronet/docs/trackback_spec )" if form.has_key("url"): from comments import decode_form encoding = config.get('blog_encoding', 'iso-8859-1') decode_form(form, encoding) import time cdict = { 'title': form.getvalue('title', ''), 'author': form.getvalue('blog_name', ''), 'pubDate': str(time.time()), 'link': form['url'].value, 'source': form.getvalue('blog_name', ''), 'description': form.getvalue('excerpt', ''), 'ipaddress': pyhttp.get('REMOTE_ADDR', ''), 'type': 'trackback' } argdict = {"request": request, "comment": cdict} reject = tools.run_callback("trackback_reject", argdict, donefunc=lambda x: x != 0) if ((isinstance(reject, tuple) or isinstance(reject, list)) and len(reject) == 2): reject_code, reject_message = reject else: reject_code, reject_message = reject, "Trackback rejected." if reject_code == 1: print >> response, tb_bad_response % reject_message return 1 from Pyblosxom.entries.fileentry import FileEntry from Pyblosxom.pyblosxom import Request from Pyblosxom.pyblosxom import PyBlosxom datadir = config['datadir'] from comments import writeComment try: import os pi = path_info.replace(urltrigger, '') path = os.path.join(datadir, pi[1:]) data = request.getData() ext = tools.what_ext(data['extensions'].keys(), path) entry = FileEntry(request, '%s.%s' % (path, ext), datadir) data = {} data['entry_list'] = [entry] # Format Author cdict['author'] = 'Trackback from %s' % form.getvalue( 'blog_name', '') writeComment(request, config, data, cdict, encoding) print >> response, tb_good_response except OSError: message = 'URI ' + path_info + " doesn't exist" logger.error(message) print >> response, tb_bad_response % message else: logger.error(message) print >> response, tb_bad_response % message # no further handling is needed return 1 else: return 0
def cb_handle(args): request = args['request'] pyhttp = request.get_http() config = request.get_configuration() urltrigger = config.get('trackback_urltrigger', '/trackback') logger = tools.get_logger() path_info = pyhttp['PATH_INFO'] if path_info.startswith(urltrigger): response = request.get_response() response.add_header("Content-type", "text/xml") form = request.get_form() message = ("A trackback must have at least a URL field (see " "http://www.sixapart.com/pronet/docs/trackback_spec)") if "url" in form: from comments import decode_form encoding = config.get('blog_encoding', 'iso-8859-1') decode_form(form, encoding) import time cdict = {'title': form.getvalue('title', ''), 'author': form.getvalue('blog_name', ''), 'pubDate': str(time.time()), 'link': form['url'].value, 'source': form.getvalue('blog_name', ''), 'description': form.getvalue('excerpt', ''), 'ipaddress': pyhttp.get('REMOTE_ADDR', ''), 'type': 'trackback' } argdict = {"request": request, "comment": cdict} reject = tools.run_callback("trackback_reject", argdict, donefunc=lambda x: x != 0) if isinstance(reject, (tuple, list)) and len(reject) == 2: reject_code, reject_message = reject else: reject_code, reject_message = reject, "Trackback rejected." if reject_code == 1: print >> response, tb_bad_response % reject_message return 1 from Pyblosxom.entries.fileentry import FileEntry datadir = config['datadir'] from comments import writeComment try: import os pi = path_info.replace(urltrigger, '') path = os.path.join(datadir, pi[1:]) data = request.get_data() ext = tools.what_ext(data['extensions'].keys(), path) entry = FileEntry(request, '%s.%s' % (path, ext), datadir) data = {} data['entry_list'] = [entry] # Format Author cdict['author'] = ( 'Trackback from %s' % form.getvalue('blog_name', '')) writeComment(request, config, data, cdict, encoding) print >> response, tb_good_response except OSError: message = 'URI ' + path_info + " doesn't exist" logger.error(message) print >> response, tb_bad_response % message else: logger.error(message) print >> response, tb_bad_response % message # no further handling is needed return 1 return 0
def cb_handle(args): request = args["request"] pyhttp = request.get_http() config = request.get_configuration() urltrigger = config.get("trackback_urltrigger", "/trackback") logger = tools.get_logger() path_info = pyhttp["PATH_INFO"] if path_info.startswith(urltrigger): response = request.get_response() response.add_header("Content-type", "text/xml") form = request.get_form() message = ( "A trackback must have at least a URL field (see " "http://www.sixapart.com/pronet/docs/trackback_spec)" ) if "url" in form: from comments import decode_form encoding = config.get("blog_encoding", "iso-8859-1") decode_form(form, encoding) import time cdict = { "title": form.getvalue("title", ""), "author": form.getvalue("blog_name", ""), "pubDate": str(time.time()), "link": form["url"].value, "source": form.getvalue("blog_name", ""), "description": form.getvalue("excerpt", ""), "ipaddress": pyhttp.get("REMOTE_ADDR", ""), "type": "trackback", } argdict = {"request": request, "comment": cdict} reject = tools.run_callback("trackback_reject", argdict, donefunc=lambda x: x != 0) if isinstance(reject, (tuple, list)) and len(reject) == 2: reject_code, reject_message = reject else: reject_code, reject_message = reject, "Trackback rejected." if reject_code == 1: print >> response, tb_bad_response % reject_message return 1 from Pyblosxom.entries.fileentry import FileEntry datadir = config["datadir"] from comments import writeComment try: import os pi = path_info.replace(urltrigger, "") path = os.path.join(datadir, pi[1:]) data = request.get_data() ext = tools.what_ext(data["extensions"].keys(), path) entry = FileEntry(request, "%s.%s" % (path, ext), datadir) data = {} data["entry_list"] = [entry] # Format Author cdict["author"] = "Trackback from %s" % form.getvalue("blog_name", "") writeComment(request, config, data, cdict, encoding) print >> response, tb_good_response except OSError: message = "URI " + path_info + " doesn't exist" logger.error(message) print >> response, tb_bad_response % message else: logger.error(message) print >> response, tb_bad_response % message # no further handling is needed return 1 return 0
def cb_handle(args): """ @param args: a dict of plugin arguments @type args: dict """ request = args['request'] pyhttp = request.getHttp() config = request.getConfiguration() urltrigger = config.get('commentAPI_urltrigger','/commentAPI') path_info = pyhttp['PATH_INFO'] if path_info.startswith(urltrigger): try: from Pyblosxom.entries.fileentry import FileEntry import os, sys pi = path_info.replace(urltrigger,'') if pi == '': sys.exit("<html><body>CommentAPI.cgi expects to receive an RSS item on standard input</body></html>") datadir = config['datadir'] path = os.path.join(datadir, pi[1:]) data = request.getData() filename = '' ext = tools.what_ext(data['extensions'].keys(),path) filename = os.path.normpath('%s.%s' % (path, ext)) entry = FileEntry(request, filename, datadir ) data = {} data['entry_list'] = [ entry ] commentString = sys.stdin.read() if commentString == None: sys.exit("<html><body>CommentAPI expects to receive an RSS item on standard input</body></html>") try: from xml.dom.minidom import parseString from xml.parsers.expat import ExpatError commentDOM = parseString(commentString) except ExpatError, ee: sys.exit("<html><body>The RSS Item you supplied could not be parsed.\nThe error occured at line %d, column %d</body></html>" % (ee.lineno,ee.offset)) def dictFromDOM(dom, data, field, default=''): """ Fill in a field in dict with the content of a element in the dom TODO: epydoc """ value = dom.getElementsByTagName(field) if len(value) == 1: data[field] = value[0].firstChild.data else: data[field] = default # use dictFromDOM to fill in a dict with the stuff in the comment cdict = {} dictFromDOM(commentDOM, cdict, 'title') dictFromDOM(commentDOM, cdict, 'author') dictFromDOM(commentDOM, cdict, 'link') dictFromDOM(commentDOM, cdict, 'source') # force an integer data stamp -- not in keeping with RFC 822, # but neither is RSS import time cdict['pubDate'] = str(time.time()) dictFromDOM(commentDOM, cdict, 'description') # must be done after plugin initialization from comments import writeComment # write the comment (in the dict) writeComment(request, config, data, cdict, config['blog_encoding']) print "Content-Type: text/plain\n" print "OK" except OSError: print "Content-Type: text/plain\n" print "An Error Occurred"
def cb_handle(args): """ @param args: a dict of plugin arguments @type args: dict """ request = args['request'] pyhttp = request.getHttp() config = request.getConfiguration() urltrigger = config.get('trackback_urltrigger', '/trackback') path_info = pyhttp['PATH_INFO'] if path_info.startswith(urltrigger): print "Content-type: text/xml" print form = cgi.FieldStorage() message = "not trackback" if form.has_key("title") and form.has_key("excerpt") and \ form.has_key("url") and form.has_key("blog_name"): import time cdict = { 'title': form['title'].value, \ 'author': 'Trackback from %s' % form['blog_name'].value, \ 'pubDate' : str(time.time()), \ 'link' : form['url'].value, \ 'source' : form['blog_name'].value, \ 'description' : form['excerpt'].value } from Pyblosxom.entries.fileentry import FileEntry from Pyblosxom.Request import Request from Pyblosxom.pyblosxom import PyBlosxom datadir = config['datadir'] from comments import writeComment try: import os pi = path_info.replace(urltrigger, '') path = os.path.join(datadir, pi[1:]) data = request.getData() ext = tools.what_ext(data['extensions'].keys(), path) entry = FileEntry(request, '%s.%s' % (path, ext), datadir) data = {} data['entry_list'] = [entry] writeComment(config, data, cdict) print tb_good_response except OSError: message = 'URI ' + path_info + " doesn't exist" tools.log(message) print tb_bad_response % message else: tools.log(message) print tb_bad_response % message import sys sys.stdout.flush() # no further handling is needed return 1 else: return 0
def cb_handle(args): """ @param args: a dict of plugin arguments @type args: dict """ request = args['request'] pyhttp = request.getHttp() config = request.getConfiguration() urltrigger = config.get('trackback_urltrigger','/trackback') logger = tools.getLogger() path_info = pyhttp['PATH_INFO'] if path_info.startswith(urltrigger): response = request.getResponse() response.addHeader("Content-type", "text/xml") form = request.getForm() message = "A trackback must have at least a URL field (see http://www.sixapart.com/pronet/docs/trackback_spec )" if form.has_key("url"): from comments import decode_form decode_form(form, config['blog_encoding']) import time cdict = { 'title': form.getvalue('title', ''), \ 'author': 'Trackback from %s' % form.getvalue('blog_name', ''), \ 'pubDate' : str(time.time()), \ 'link' : form['url'].value, \ 'source' : form.getvalue('blog_name', ''), \ 'description' : form.getvalue('excerpt', '') } argdict = { "request": request, "comment": cdict } reject = tools.run_callback("trackback_reject", argdict, donefunc=lambda x:x != 0) if ((isinstance(reject, tuple) or isinstance(reject, list)) and len(reject) == 2): reject_code, reject_message = reject else: reject_code, reject_message = reject, "Trackback rejected." if reject_code == 1: print >> response, tb_bad_response % reject_message return 1 from Pyblosxom.entries.fileentry import FileEntry from Pyblosxom.pyblosxom import Request from Pyblosxom.pyblosxom import PyBlosxom datadir = config['datadir'] from comments import writeComment try: import os pi = path_info.replace(urltrigger,'') path = os.path.join(datadir, pi[1:]) data = request.getData() ext = tools.what_ext(data['extensions'].keys(), path) entry = FileEntry(request, '%s.%s' % (path, ext), datadir ) data = {} data['entry_list'] = [ entry ] writeComment(request, config, data, cdict, config['blog_encoding']) print >> response, tb_good_response except OSError: message = 'URI '+path_info+" doesn't exist" logger.error(message) print >> response, tb_bad_response % message else: logger.error(message) print >> response, tb_bad_response % message # no further handling is needed return 1 else: return 0
def cb_handle(args): """ @param args: a dict of plugin arguments @type args: dict """ request = args['request'] pyhttp = request.getHttp() config = request.getConfiguration() urltrigger = config.get('trackback_urltrigger','/trackback') path_info = pyhttp['PATH_INFO'] if path_info.startswith(urltrigger): print "Content-type: text/xml" print form = cgi.FieldStorage() message = "not trackback" if form.has_key("title") and form.has_key("excerpt") and \ form.has_key("url") and form.has_key("blog_name"): import time cdict = { 'title': form['title'].value, \ 'author': 'Trackback from %s' % form['blog_name'].value, \ 'pubDate' : str(time.time()), \ 'link' : form['url'].value, \ 'source' : form['blog_name'].value, \ 'description' : form['excerpt'].value } from Pyblosxom.entries.fileentry import FileEntry from Pyblosxom.Request import Request from Pyblosxom.pyblosxom import PyBlosxom datadir = config['datadir'] from comments import writeComment try: import os pi = path_info.replace(urltrigger,'') path = os.path.join(datadir, pi[1:]) data = request.getData() ext = tools.what_ext(data['extensions'].keys(), path) entry = FileEntry(request, '%s.%s' % (path, ext), datadir ) data = {} data['entry_list'] = [ entry ] writeComment(config, data, cdict) print tb_good_response except OSError: message = 'URI '+path_info+" doesn't exist" tools.log(message) print tb_bad_response % message else: tools.log(message) print tb_bad_response % message import sys sys.stdout.flush() # no further handling is needed return 1 else: return 0