mirror of
https://github.com/e1ven/Robohash.git
synced 2025-06-23 21:35:02 +00:00
Merge pull request #7 from SamSaffron/master
Gravatar hates query strings, it nukes them, so support a second way of passing options
This commit is contained in:
commit
ab353e655c
66
webfront.py
66
webfront.py
@ -215,7 +215,32 @@ class MainHandler(tornado.web.RequestHandler):
|
|||||||
|
|
||||||
class ImgHandler(tornado.web.RequestHandler):
|
class ImgHandler(tornado.web.RequestHandler):
|
||||||
def get(self,string=None):
|
def get(self,string=None):
|
||||||
|
|
||||||
|
# gravatar is picky, it hates quers strings, allow us to fake them by using a uri
|
||||||
|
# /abc.png/s_100x100/set_any = /abc.png?set=any&s=100x100
|
||||||
|
#
|
||||||
|
# we use underscore as a replacement for = and / as a replacement for [&?]
|
||||||
|
|
||||||
|
args = self.request.arguments.copy()
|
||||||
|
|
||||||
|
for k in args.keys():
|
||||||
|
v = args[k]
|
||||||
|
if type(v) is list:
|
||||||
|
if len(v) > 0:
|
||||||
|
args[k] = args[k][0]
|
||||||
|
else:
|
||||||
|
args[k] = ""
|
||||||
|
|
||||||
|
split = string.split('/')
|
||||||
|
if len(split) > 0:
|
||||||
|
string = split[0]
|
||||||
|
|
||||||
|
if len(split) > 1:
|
||||||
|
for str in split[1::]:
|
||||||
|
b = str.encode('ascii','ignore').split('_')
|
||||||
|
if len(b) == 2:
|
||||||
|
args[b[0]] = b[1]
|
||||||
|
|
||||||
colors = ['blue','brown','green','grey','orange','pink','purple','red','white','yellow']
|
colors = ['blue','brown','green','grey','orange','pink','purple','red','white','yellow']
|
||||||
sets = ['set1','set2','set3']
|
sets = ['set1','set2','set3']
|
||||||
bgsets = ['bg1','bg2']
|
bgsets = ['bg1','bg2']
|
||||||
@ -225,8 +250,8 @@ class ImgHandler(tornado.web.RequestHandler):
|
|||||||
string = self.request.remote_ip
|
string = self.request.remote_ip
|
||||||
# string = urllib.quote_plus(string)
|
# string = urllib.quote_plus(string)
|
||||||
|
|
||||||
if "ignoreext" in self.request.arguments:
|
if "ignoreext" in args:
|
||||||
client_ignoreext = tornado.escape.xhtml_escape(self.get_argument("ignoreext"))
|
client_ignoreext = tornado.escape.xhtml_escape(args["ignoreext"])
|
||||||
else:
|
else:
|
||||||
client_ignoreext = None
|
client_ignoreext = None
|
||||||
|
|
||||||
@ -249,8 +274,6 @@ class ImgHandler(tornado.web.RequestHandler):
|
|||||||
#Create 10 hashes. This should be long enough for the current crop of variables.
|
#Create 10 hashes. This should be long enough for the current crop of variables.
|
||||||
#This is probably not insecure, sicne we'd be modding anyway. This just spreads it out more.
|
#This is probably not insecure, sicne we'd be modding anyway. This just spreads it out more.
|
||||||
r.createHashes(11)
|
r.createHashes(11)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Now, customize the request if possible.
|
#Now, customize the request if possible.
|
||||||
client_color = ""
|
client_color = ""
|
||||||
@ -258,10 +281,9 @@ class ImgHandler(tornado.web.RequestHandler):
|
|||||||
client_bgset = ""
|
client_bgset = ""
|
||||||
sizex = 300
|
sizex = 300
|
||||||
sizey = 300
|
sizey = 300
|
||||||
|
|
||||||
|
|
||||||
if "size" in self.request.arguments:
|
if "size" in args:
|
||||||
sizelist = self.get_argument("size").split(tornado.escape.xhtml_escape("x"),3)
|
sizelist = args["size"].split(tornado.escape.xhtml_escape("x"),3)
|
||||||
if ((int(sizelist[0]) > 0) and (int(sizelist[0]) < 4096)):
|
if ((int(sizelist[0]) > 0) and (int(sizelist[0]) < 4096)):
|
||||||
sizex = int(sizelist[0])
|
sizex = int(sizelist[0])
|
||||||
if ((int(sizelist[0]) > 0) and (int(sizelist[0]) < 4096)):
|
if ((int(sizelist[0]) > 0) and (int(sizelist[0]) < 4096)):
|
||||||
@ -269,13 +291,13 @@ class ImgHandler(tornado.web.RequestHandler):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if "gravatar" in self.request.arguments:
|
if "gravatar" in args:
|
||||||
if tornado.escape.xhtml_escape(self.get_argument("gravatar")) == 'yes':
|
if tornado.escape.xhtml_escape(args["gravatar"]) == 'yes':
|
||||||
default = "404"
|
default = "404"
|
||||||
# construct the url
|
# construct the url
|
||||||
gravatar_url = "https://secure.gravatar.com/avatar/" + hashlib.md5(string.lower()).hexdigest() + "?"
|
gravatar_url = "https://secure.gravatar.com/avatar/" + hashlib.md5(string.lower()).hexdigest() + "?"
|
||||||
gravatar_url += urllib.urlencode({'default':default, 'size':str(sizey)})
|
gravatar_url += urllib.urlencode({'default':default, 'size':str(sizey)})
|
||||||
if tornado.escape.xhtml_escape(self.get_argument("gravatar")) == 'hashed':
|
if tornado.escape.xhtml_escape(args["gravatar"]) == 'hashed':
|
||||||
string = urllib.quote(string)
|
string = urllib.quote(string)
|
||||||
default = "404"
|
default = "404"
|
||||||
# construct the url
|
# construct the url
|
||||||
@ -288,18 +310,18 @@ class ImgHandler(tornado.web.RequestHandler):
|
|||||||
except:
|
except:
|
||||||
badGravatar = True
|
badGravatar = True
|
||||||
|
|
||||||
if "set" in self.request.arguments:
|
if "set" in args:
|
||||||
if tornado.escape.xhtml_escape(self.get_argument("set")) == 'any':
|
if tornado.escape.xhtml_escape(args["set"]) == 'any':
|
||||||
client_set = sets[r.hasharray[1] % len(sets) ]
|
client_set = sets[r.hasharray[1] % len(sets) ]
|
||||||
if self.get_argument("set") in sets:
|
if args["set"] in sets:
|
||||||
client_set = tornado.escape.xhtml_escape(self.get_argument("set"))
|
client_set = tornado.escape.xhtml_escape(args["set"])
|
||||||
else:
|
else:
|
||||||
#If no set specified, you get set 1
|
#If no set specified, you get set 1
|
||||||
client_set = "set1"
|
client_set = "set1"
|
||||||
|
|
||||||
##Let people define multiple sets, so I can add more.
|
##Let people define multiple sets, so I can add more.
|
||||||
if "sets" in self.request.arguments:
|
if "sets" in args:
|
||||||
newsets = tornado.escape.xhtml_escape(self.get_argument("sets")).split(",");
|
newsets = tornado.escape.xhtml_escape(args["sets"]).split(",");
|
||||||
replaceset = []
|
replaceset = []
|
||||||
for s in newsets:
|
for s in newsets:
|
||||||
if s in sets:
|
if s in sets:
|
||||||
@ -309,13 +331,13 @@ class ImgHandler(tornado.web.RequestHandler):
|
|||||||
if client_set == 'set1':
|
if client_set == 'set1':
|
||||||
client_set = colors[r.hasharray[0] % len(colors) ]
|
client_set = colors[r.hasharray[0] % len(colors) ]
|
||||||
|
|
||||||
if "color" in self.request.arguments:
|
if "color" in args:
|
||||||
if self.get_argument("color") in colors:
|
if args["color"] in colors:
|
||||||
client_set = tornado.escape.xhtml_escape(self.get_argument("color"))
|
client_set = tornado.escape.xhtml_escape(args["color"])
|
||||||
|
|
||||||
if "bgset" in self.request.arguments:
|
if "bgset" in args:
|
||||||
if self.get_argument("bgset") in bgsets:
|
if args["bgset"] in bgsets:
|
||||||
client_bgset = tornado.escape.xhtml_escape(self.get_argument("bgset"))
|
client_bgset = tornado.escape.xhtml_escape(args["bgset"])
|
||||||
else:
|
else:
|
||||||
client_bgset = bgsets[r.hasharray[2] % len(bgsets) ]
|
client_bgset = bgsets[r.hasharray[2] % len(bgsets) ]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user