summaryrefslogtreecommitdiff
path: root/pbserver.py
diff options
context:
space:
mode:
Diffstat (limited to 'pbserver.py')
-rwxr-xr-xpbserver.py182
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)