diff options
Diffstat (limited to 'pbserver.py')
| -rwxr-xr-x | pbserver.py | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/pbserver.py b/pbserver.py new file mode 100755 index 0000000..82198ab --- /dev/null +++ b/pbserver.py @@ -0,0 +1,182 @@ +#!/usr/bin/python2.7 +from bottle import route, run, post, request + +from gradient import Gradient +from imgrid import Imgrid +from breaker import Breaker +from s3config import AWS_SECRET_ACCESS_KEY, AWS_ACCESS_KEY_ID, BUCKET_NAME + + +import os +import sys +import db +import s3 +import mimetypes +import sha +from subprocess import call, Popen, PIPE +import simplejson as json +BIN_IDENTIFY = "/usr/bin/identify" + +#try: +# DB = db.db () +#except Exception as e: +# sys.stderr.write("Could not connect to db:\n{}".format(e)) +# sys.exit(1); +BASE_URL = "http://i.asdf.us" + +def hashdir(filename): + return sha.new(filename).hexdigest()[:2] + +def file_size (filepath): + try: + return os.stat(file)[6] + except Exception as e: + sys.stderr.write(str(e)) + raise; + +def bin_identify (filepath): + ident = Popen([BIN_IDENTIFY, filepath], stdout=PIPE).communicate()[0] + partz = ident.split(" ") + width,height = partz[2].split("x") + return width, height + + +def cleanup(filepath): + try: + call(['rm', filepath]) + except Exception as e: + sys.stderr.write(str(e)) + raise + +def moveToS3(filename,objectname): + conn = s3.AWSAuthConnection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) + filedata = open(filename, 'rb').read() + content_type = mimetypes.guess_type(filename)[0] + try: + conn.put(BUCKET_NAME, objectname, s3.S3Object(filedata), + { + 'x-amz-acl': 'public-read', + 'Content-Type': content_type or 'text/plain', + 'x-amz-storage-class': 'REDUCED_REDUNDANCY' + } + ); + except Exception as e: + sys.stderr.write(str(e)) + raise + +def insert_cmd (date, remote_addr, username, url, directory, oldfile, newfile, cmd, dataobj, tag): + try: + sql = "INSERT INTO im_cmd " + sql += "(date, remote_addr, name, url, dir, oldfile, newfile, cmd, dataobj, tag) " + sql += "VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" + #or "NULL" + args = (now(), remote_addr, username, url, directory, oldfile, newfile, cmd, dataobj, tag) + #args = (now(), os.environ['REMOTE_ADDR'], name, url, dir, oldfile, newfile, " ".join(cmd),dataobj) + DB.execute(sql, args) + except Exception as e: + sys.stderr.write(str(e)) + return + +@post('/gradient') +def gradient(): + try: + im = Gradient(request.forms) + im.create(); + directory = hashdir(im.filename) + dimensions = bin_identify(im.filepath) + objectname = "{}/{}".format(directory, im.filename) +# s3move(im.filepath, objectname) + return(im.filepath, objectname) +# return "{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}".format( +# insert_cmd( +# im.now, +# request.environ.get('REMOTE_ADDR'), +# im.params['username'] or "NULL", +# "NULL", +# directory, +# "NULL", +# im.filename, +# ";".join(im.commands), +# json.dumps(im.params), +# im.tag, +# ) + return json.loads({ + 'url' : "{}/{}".format(BASE_URL, objectname) + 'size' : file_size(im.filepath), + 'width' : "{}px".format(dimensions[0]), + 'height' : "{}px".format(dimensions[1]), + }) + #URL, FILESIZE, WIDTH, HEIGHT to replace index.html + except Exception as e: + sys.stderr.write(str(e)) + raise; + +@post('/imgrid') +def imgrid(): + try: + im = Imgrid(request.forms) + im.create(); + directory = hashdir(im.filename) + dimensions = bin_identify(im.filepath) + objectname = "{}/{}".format(directory, im.filename) +# s3move(im.filepath, objectname) + return(im.filepath, objectname) +# return "{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}".format( +# insert_cmd( +# im.now, +# request.environ.get('REMOTE_ADDR'), +# im.params['username'] or "NULL", +# im.params.imageinstead or im.params.bgimage or im.params.planebgimage or "NULL", +# directory, +# "NULL", +# im.filename, +# ";".join(im.commands), +# json.dumps(im.params), +# im.tag, +# ) + return json.loads({ + 'url' : "{}/{}".format(BASE_URL, objectname) + 'size' : file_size(im.filepath), + 'width' : "{}px".format(dimensions[0]), + 'height' : "{}px".format(dimensions[1]), + }) + #URL, FILESIZE, WIDTH, HEIGHT to replace main.js + except Exception as e: + sys.stderr.write(str(e)) + raise; + +@post('/breaker') +def breaker(): + try: + im = Breaker(request.forms) + im.create(); + directory = hashdir(im.filename) + dimensions = bin_identify(im.filepath) + objectname = "{}/{}".format(directory, im.filename) +# s3move(im.filepath, objectname) + return(im.filepath, objectname) +# return "{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}".format( +# insert_cmd( +# im.now, +# request.environ.get('REMOTE_ADDR'), +# im.params['username'] or "NULL", +# im.params['url'], +# directory, +# "NULL", +# im.filename, +# ";".join(im.commands), +# json.dumps(im.params), +# im.tag, +# ) + return json.loads({ + 'url' : "{}/{}".format(BASE_URL, objectname) + 'size' : file_size(im.filepath), + 'width' : "{}px".format(dimensions[0]), + 'height' : "{}px".format(dimensions[1]), + }) + #URL, FILESIZE, WIDTH, HEIGHT to replace main.js make sure you use px + except Exception as e: + sys.stderr.write(str(e)) + raise; + +run(host='0.0.0.0', port=8999, debug=True) |
