mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-12-23 19:22:45 +01:00
httpserver: Add favicon support.
This commit is contained in:
parent
e5e2db15b2
commit
eaf6877700
@ -1097,6 +1097,9 @@ registerGlobalValue(supybot.servers.http, 'keepAlive',
|
||||
registerGlobalValue(supybot.servers.http, 'robots',
|
||||
registry.String('', _("""Determines the content of the robots.txt file,
|
||||
served on the server to search engine.""")))
|
||||
registerGlobalValue(supybot.servers.http, 'favicon',
|
||||
registry.String('', _("""Determines the path of the file served as
|
||||
favicon to browsers.""")))
|
||||
|
||||
|
||||
###
|
||||
|
@ -31,6 +31,7 @@
|
||||
An embedded and centralized HTTP server for Supybot's plugins.
|
||||
"""
|
||||
|
||||
import os
|
||||
import cgi
|
||||
from threading import Event, Thread
|
||||
from cStringIO import StringIO
|
||||
@ -86,6 +87,8 @@ class SupyHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||
callback = SupyIndex()
|
||||
elif self.path == '/robots.txt':
|
||||
callback = RobotsTxt()
|
||||
elif self.path == '/favicon.ico':
|
||||
callback = Favicon()
|
||||
else:
|
||||
subdir = self.path.split('/')[1]
|
||||
try:
|
||||
@ -200,11 +203,44 @@ class RobotsTxt(SupyHTTPServerCallback):
|
||||
def doGet(self, handler, path):
|
||||
response = conf.supybot.servers.http.robots().replace('\\n', '\n')
|
||||
handler.send_response(200)
|
||||
self.send_header('Content_type', 'text/html')
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.send_header('Content-Length', len(response))
|
||||
self.end_headers()
|
||||
self.wfile.write(response)
|
||||
|
||||
class Favicon(SupyHTTPServerCallback):
|
||||
"""Services the favicon.ico file to browsers."""
|
||||
name = 'favicon'
|
||||
defaultResponse = _('Request not handled')
|
||||
def doGet(self, handler, path):
|
||||
file_path = conf.supybot.servers.http.favicon()
|
||||
found = False
|
||||
if file_path:
|
||||
try:
|
||||
icon = open(file_path, 'r')
|
||||
found = True
|
||||
except IOError:
|
||||
pass
|
||||
if found:
|
||||
response = icon.read()
|
||||
filename = file_path.rsplit(os.sep, 1)[1]
|
||||
if '.' in filename:
|
||||
ext = filename.rsplit('.', 1)[1]
|
||||
else:
|
||||
ext = 'ico'
|
||||
# I have no idea why, but this headers are already sent.
|
||||
# self.send_header('Content-Length', len(response))
|
||||
# self.send_header('Content-type', 'image/' + ext)
|
||||
# self.end_headers()
|
||||
self.wfile.write(response)
|
||||
else:
|
||||
response = _('No favicon set.')
|
||||
handler.send_response(404)
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.send_header('Content-Length', len(response))
|
||||
self.end_headers()
|
||||
self.wfile.write(response)
|
||||
|
||||
httpServer = None
|
||||
|
||||
def startServer():
|
||||
|
Loading…
Reference in New Issue
Block a user