diff options
Diffstat (limited to 'impattern/im/cgi-bin')
27 files changed, 1263 insertions, 0 deletions
diff --git a/impattern/im/cgi-bin/.gallery.cgi.swo b/impattern/im/cgi-bin/.gallery.cgi.swo Binary files differnew file mode 100644 index 0000000..8e49f67 --- /dev/null +++ b/impattern/im/cgi-bin/.gallery.cgi.swo diff --git a/impattern/im/cgi-bin/.gallery.cgi.swp b/impattern/im/cgi-bin/.gallery.cgi.swp Binary files differnew file mode 100644 index 0000000..f1e8117 --- /dev/null +++ b/impattern/im/cgi-bin/.gallery.cgi.swp diff --git a/impattern/im/cgi-bin/.gallery.cgi.un~ b/impattern/im/cgi-bin/.gallery.cgi.un~ Binary files differnew file mode 100755 index 0000000..0720bde --- /dev/null +++ b/impattern/im/cgi-bin/.gallery.cgi.un~ diff --git a/impattern/im/cgi-bin/.imditherconf.cgi.swo b/impattern/im/cgi-bin/.imditherconf.cgi.swo Binary files differnew file mode 100644 index 0000000..1bbf2e2 --- /dev/null +++ b/impattern/im/cgi-bin/.imditherconf.cgi.swo diff --git a/impattern/im/cgi-bin/.imditherconf.cgi.swp b/impattern/im/cgi-bin/.imditherconf.cgi.swp Binary files differnew file mode 100644 index 0000000..7de91b5 --- /dev/null +++ b/impattern/im/cgi-bin/.imditherconf.cgi.swp diff --git a/impattern/im/cgi-bin/.imditherconf.cgi.un~ b/impattern/im/cgi-bin/.imditherconf.cgi.un~ Binary files differnew file mode 100755 index 0000000..bef4dd6 --- /dev/null +++ b/impattern/im/cgi-bin/.imditherconf.cgi.un~ diff --git a/impattern/im/cgi-bin/.queryTest.cgi.un~ b/impattern/im/cgi-bin/.queryTest.cgi.un~ Binary files differnew file mode 100755 index 0000000..31f6494 --- /dev/null +++ b/impattern/im/cgi-bin/.queryTest.cgi.un~ diff --git a/impattern/im/cgi-bin/.test.cgi.un~ b/impattern/im/cgi-bin/.test.cgi.un~ Binary files differnew file mode 100755 index 0000000..769e9af --- /dev/null +++ b/impattern/im/cgi-bin/.test.cgi.un~ diff --git a/impattern/im/cgi-bin/1.png b/impattern/im/cgi-bin/1.png Binary files differnew file mode 100755 index 0000000..e98ec53 --- /dev/null +++ b/impattern/im/cgi-bin/1.png diff --git a/impattern/im/cgi-bin/db.py b/impattern/im/cgi-bin/db.py new file mode 100755 index 0000000..4da7b83 --- /dev/null +++ b/impattern/im/cgi-bin/db.py @@ -0,0 +1,29 @@ +import MySQLdb +import time + +def now (): + return int(time.mktime(time.localtime())) +class db: + def __init__ (self): + self.conn = None + self.cursor = None + self.connect() + + def connect (self): + self.conn = MySQLdb.connect (host = "127.0.0.1", + user = "asdfus", + passwd = "gTYgT&M6q", + db = "asdfus") + self.cursor = self.conn.cursor () + + def execute (self,sql,args=()): + try: + self.cursor.execute(sql,args) + except MySQLdb.Error, e: + print "Error %d: %s" % (e.args[0], e.args[1]) + # sys.exit (1) + self.connect() + self.cursor.execute(sql,args) + + def lastinsertid (self): + return DB.conn.insert_id() diff --git a/impattern/im/cgi-bin/db.pyc b/impattern/im/cgi-bin/db.pyc Binary files differnew file mode 100755 index 0000000..6347826 --- /dev/null +++ b/impattern/im/cgi-bin/db.pyc diff --git a/impattern/im/cgi-bin/downloader.py b/impattern/im/cgi-bin/downloader.py new file mode 100755 index 0000000..7083b11 --- /dev/null +++ b/impattern/im/cgi-bin/downloader.py @@ -0,0 +1,114 @@ +#!/usr/bin/python +import random +import urllib, urllib2 +urlopen = urllib2.urlopen +Request = urllib2.Request +import sys + +MAX_SIZE = 1024 * 1024 * 1.2 + +###___this somewhat poorly written program basically performs a get request +#you can specify three arguments, the url, the destination path and the filename#that you'll want your file to be called +#these can be specified as argument values from the commandline or as +#values in the mainfunction which is downloader.download(url,filename,destination) +#the destination and filename arguments are optional + + + +url = "" +destination = "" +filename = "" + +def argval(): + global destination + global url + global filename + stuff = sys.argv + lenstuff = len(stuff) + if lenstuff >= 4: + getvalues() + if lenstuff ==3: + print str(lenstuff) + url = sys.argv[-2] + filename = sys.argv[-1] + if lenstuff ==2: + url = sys.argv[-1] + destination = "" + partz = url.split('/') + filename = partz[-1] + if lenstuff ==1: + print 'please provide url' + return None + return url + +def getvalues(): + global url + global destination + global filename + url = sys.argv[-3] + destination = sys.argv[-1] + filename = sys.argv[-2] + if len(filename) == 0: + partz = url.split('/') + filename = partz[-1] + if filename == "" or filename == None: + partz = url.split('/') + filename = partz[-1] + return url + +def browser_request (url,data=None): + headers = { + 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', + 'Accept': '*/*', + } + try: + req = Request(url, data, headers) + response = urlopen(req) + return response + except: + print "ERROR" + sys.stdout.write('there is a problem with the url or an I/O error') + return None + sys.exit() + + +def download(url, filename="",destination=""): + response = browser_request(url) + rawimg = response.read() + if len(rawimg) == 0: + print error("got zero-length file") + sys.stdout.write("file did not exist or was zero-length") + sys.exit() + if len(rawimg) > MAX_SIZE and "asdf.us" not in url: + error = "file too big: max size " + str(MAX_SIZE/1024) + " KB / " + filename + " is " + str(len(rawimg)/1024) + " KB" + print error + sys.stdout.write(error) + sys.exit() + if filename == "": + partz = url.split('/') + filename = partz[-1] + path = "" + if destination == "" or destination == '': + path = filename + else: + path = destination+filename + f = open(path, "w") + f.write(rawimg) + print 'success' + f.close() + finalitems = {} + finalitems['url'] = url + finalitems['filename'] = filename + finalitems['destination'] = destination + return finalitems + +def downloader(): + global url + global destination + global filename + argval() + finalitems = download(url, filename, destination) + return finalitems + +if __name__ == '__main__': + downloader() diff --git a/impattern/im/cgi-bin/downloader.pyc b/impattern/im/cgi-bin/downloader.pyc Binary files differnew file mode 100755 index 0000000..91ba5b0 --- /dev/null +++ b/impattern/im/cgi-bin/downloader.pyc diff --git a/impattern/im/cgi-bin/gallery.cgi b/impattern/im/cgi-bin/gallery.cgi new file mode 100755 index 0000000..0f762eb --- /dev/null +++ b/impattern/im/cgi-bin/gallery.cgi @@ -0,0 +1,474 @@ +#!/usr/bin/python +import os +import cgi +import re + +import random + +import db +db = db.db() + +BASE_HREF = "http://i.asdf.us/im/" +PARAMLIST = "addr start limit name interface random" +LIMIT = 20 + +def get_params (paramlist): + paramkeys = paramlist.split() + form = {} + try: + qs = os.environ['QUERY_STRING'] + except: + qs = "" + if len(qs): + pairs = qs.replace("&", "&").split("&") + for pair in pairs: + k,v = pair.split("=", 1) + form[k] = v + params = {} + for key in paramkeys: + if key in form: + params[key] = sanitize(form[key]) + else: + params[key] = None + return params +def sanitize (str): + return re.sub(r'\W+', '', str) +def get_files (params): + sql = "SELECT * FROM im_cmd " + args = [] + where = [] + + if params['start'] is not None: + where.append("id < %s") + args.append(params['start']) + if params['name'] is not None: + where.append("name=%s") + args.append(params['name']) + if len(where): + sql += "WHERE " + sql += " AND ".join(where) + sql += " " + + if params['random'] is not None: + sql += "ORDER BY RAND() " + else: + sql += "ORDER BY id DESC " + sql += "LIMIT %s" + + if params['limit'] is not None: + args.append( int(params['limit']) ) + else: + args.append( LIMIT ) + db.execute(sql, args) + rows = db.cursor.fetchall () + return rows + +def is_image (img): + if "jpeg" in img: + return True + if "jpg" in img: + return True + if "gif" in img: + return True + if "png" in img: + return True + return False + + +params = get_params(PARAMLIST) + +titlephrase = random.choice([ + 'Keep on pickin\' on..', + 'Pickolaus Pickleby by Charles Pickens!', + 'You pick potato and I pick potahto...', + 'Take your piq!', + 'Show em what you got', + 'I sure know how to pick \'em', + 'Jus pick somethin already!', + 'You can\'t pick your friends...', + 'Select your image my liege', + 'There\'s a time to choose...', + 'gimme a choice! gimme lil\' choice-a-that...', + 'You choose you lose', + 'novels by James CHOICE...', + 'Choose away, chooser-man...', + ]) + +print "Content-type: text/html" +print "Pragma: no-cache" +print +print """ + +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +""" +print "<title>"+titlephrase+"</title>" +print""" +<style type="text/css"> +html,body{width:100%;height:100%;} + """ +if params['interface'] is not None and params['interface'] == "off": + print """ +body + { + background-color: white; + padding: 0; margin: 0; + } +#images + { + margin: 12px 0 0 8px; + } +div, div img + { + padding: 0; margin: 0; + margin-left: -4px; + margin-top: -4px; + } +""" +else: + print """ +body + { + background-color: #eee; + background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.32, rgb(245,238,235)), color-stop(0.66, rgb(252,252,252))); + background-image: -moz-linear-gradient( center bottom, rgb(245,238,235) 32%, rgb(252,252,252) 66%); overflow-y: scroll; + } +""" +print """ +html + { + padding-bottom: 200px; + } +#images + { + width: 100%; + } +#images div + { + width: 200px; + display: inline-block; + } +div img + { + max-width: 200px; + max-height: 200px; + border: 0; + } +#dump + { + position: fixed; + left: 0; + bottom: 10px; + padding: 10px; + width: 100%; + border-bottom: 2px solid #000; + background-color: #f8f8f8; + border-top: 1px solid #888; + } +#dump #rebus + { + clear: right; + width: 90%; + max-height: 700px; + overflow-y: scroll; + background-color: #fff; + padding-bottom: 5px; + border-bottom: 1px solid #ddd; + margin-bottom: 5px; + } +#dump #rebus img + { + display: inline; + max-width: 400px; + max-height: 400px; + margin-right: -4px; + } +#dump #urlz + { + width: 90%; + font-size: 15px; + } +#help + { + position: fixed; + top: 10px; + right: 10px; + cursor: pointer; + text-align: right; + font-family: sans-serif; + } +#help b + { + padding: 5px; + background-color: #f8f4fb; + display: block; + max-width: 160px; + text-align: right; + } +#help b:hover + { + color: cyan; + + } +#help #keys + { + clear: both; + background-color: #f8f8f8; + padding: 5px; + display: none; + width: 120px; + font-size: 12px; + } +#nextpage + { + position: fixed; + right: 160px; + font-family: sans-serif; + top: 10px; + padding: 5px; + background-color: rgba(255,255,255,0.7); + } +#nextpage a + { + color: #33f; + } +.rtlink + { + display: block; + width: 100%; + text-align: right; + } +#d_clip_container + { + display: inline-block; + } +#d_clip_button, #clear + { + font-family: Lucida Sans Unicode, Lucida Grande, sans-serif; + color: #333; + font-size: 13px; + line-height: 13px; + text-align: center; + margin: 2px; padding: 5px; + display: inline-block; + border-top: 1px solid #888; + border-left: 1px solid #888; + border-right: 1px solid #555; + border-bottom: 1px solid #333; + background-image: linear-gradient(bottom, rgb(235,235,235) 0%, rgb(250,250,250) 53%); + background-image: -o-linear-gradient(bottom, rgb(235,235,235) 0%, rgb(250,250,250) 53%); + background-image: -moz-linear-gradient(bottom, rgb(235,235,235) 0%, rgb(250,250,250) 53%); + background-image: -webkit-linear-gradient(bottom, rgb(235,235,235) 0%, rgb(250,250,250) 53%); + background-image: -ms-linear-gradient(bottom, rgb(235,235,235) 0%, rgb(250,250,250) 53%); + background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0, rgb(235,235,235)), color-stop(0.53, rgb(250,250,250))); + } +#d_clip_button.hover, #clear:hover + { + color: #555; + background-image: linear-gradient(bottom, rgb(245,240,245) 0%, rgb(255,255,255) 78%); + background-image: -o-linear-gradient(bottom, rgb(245,240,245) 0%, rgb(255,255,255) 78%); + background-image: -moz-linear-gradient(bottom, rgb(245,240,245) 0%, rgb(255,255,255) 78%); + background-image: -webkit-linear-gradient(bottom, rgb(245,240,245) 0%, rgb(255,255,255) 78%); + background-image: -ms-linear-gradient(bottom, rgb(245,240,245) 0%, rgb(255,255,255) 78%); + background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0, rgb(245,240,245)), color-stop(0.78, rgb(255,255,255))); + } +#d_clip_button.active, #clear:active + { + color: #111; + border-top: 1px solid #333; + border-left: 1px solid #555; + border-right: 1px solid #555; + border-bottom: 1px solid #333; + background-image: linear-gradient(bottom, rgb(194,194,194) 0%, rgb(235,235,235) 53%); + background-image: -o-linear-gradient(bottom, rgb(194,194,194) 0%, rgb(235,235,235) 53%); + background-image: -moz-linear-gradient(bottom, rgb(194,194,194) 0%, rgb(235,235,235) 53%); + background-image: -webkit-linear-gradient(bottom, rgb(194,194,194) 0%, rgb(235,235,235) 53%); + background-image: -ms-linear-gradient(bottom, rgb(194,194,194) 0%, rgb(235,235,235) 53%); + background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0, rgb(194,194,194)), color-stop(0.53, rgb(235,235,235))); + } +</style> + +</head> +<body> +<div id="help"> + <b>key controls</b> + <div id="keys"> + ESC toggle<br/> + C clear<br/> + R reverse<br/> + BACKSPACE delete<br/> + LEFT ARROW newer<br/> + RIGHT ARROW older<br/> + </div> +</div> +<div id="dump"> + <div id="rebus"></div> + <input id="urlz" type="text" /> + <div id="d_clip_container" style="position:relative"> + <div id="d_clip_button">copy</div> + </div> + <button id="clear">clear</button> +</div> +<div id="images"> +""" + + +files = get_files(params) +count = 0 +for f in files: + # url = BASE_HREF + f.replace(" ","%20") + url = BASE_HREF + f[5] + "/" + f[7] + print "<div><img src='%s'/></div>" % (url) +print "</div>" + +lowest_id = files[-1][0] +previous_id = lowest_id + (LIMIT * 2) +back = ["start=%d" % lowest_id, "limit=%d" % LIMIT] +newer = ["start=%d" % previous_id, "limit=%d" % LIMIT] +random_time = [] +if params['name'] is not None: + back.append("name=%s" % params['name']) + newer.append("name=%s" % params['name']) + random_time.append("name=%s" % params['name']) + +newer_QS = "&".join(newer) +back_QS = "&".join(back) +random_time_QS = "&".join(back) +print "<div id='nextpage'>" +print "<a href='?%s'>← newer</a>" % newer_QS; +print "|" +print "<a href='/im/'>editor</a>" +print "|" +print "<a href='?random=1%s'>random</a>" % random_time_QS; +print "|" +print "<a href='?%s'>older →</a>" % back_QS; +print "</div>" +print """ +</body> +<script type="text/javascript"></script> +<script type="text/javascript" src="/js/jquery.js"></script> +<script type="text/javascript" src="/js/ZeroClipboard.js"></script> +<script type="text/javascript" src="http://asdf.us/js/pbembed.js"></script> +<script type="text/javascript"> +ZeroClipboard.setMoviePath( 'http://asdf.us/swf/ZeroClipboard10.swf' ); +var clip = new ZeroClipboard.Client(); +clip.glue( 'd_clip_button' ); +var Dump = + { + pick: function () + { + Dump.pickUrl( $(this).attr("src") ) + }, + pickUrl: function (url) + { + $("#rebus").append ($ ("<img>").attr ("src", url)) + $("#rebus").show() + var theDump = $("#urlz").val() + " " + url + $("#urlz").val( theDump ) + clip.setText( theDump ) + return false + }, + clear: function () + { + $("#rebus").html("") + $("#urlz").val("") + clip.setText("") + }, + backspace: function () + { + $("#rebus img:last").remove() + var urllist = $("#urlz").val().split(" ") + urllist.pop() + $("#urlz").val( urllist.join(" ") ) + }, + reverse: function () + { + urllist = $("#urlz").val().split(" ") + Dump.clear() + for (i in urllist.reverse()) + if (urllist[i]) + Dump.pickUrl(urllist[i]) + }, + showNewer: function() + { + window.location.href = '?"""+newer_QS+"""' + }, + showOlder: function() + { + window.location.href = '?"""+back_QS+"""' + } + } +var Main = + { + editing: false, + kp: function (event) + { + console.log(event.keyCode); + switch (event.keyCode) + { + // BS + case 8: + if (! Main.editing) + Dump.backspace() + return false + // C + case 67: + if (! Main.editing) + Dump.clear() + break + // R + case 82: + if (! Main.editing) + Dump.reverse() + break + // ESC + case 27: + // H + case 72: + if (! Main.editing) + $("#rebus").toggle() + break + // LEFT ARROW + case 37: + if (! Main.editing) + Dump.showNewer() + break + // RIGHT ARROW + case 39: + if (! Main.editing) + Dump.showOlder() + break + } + return true + }, + poll: function () + { + }, + pollCallback: function () + { + }, + init: function () + { + $(document).keydown(Main.kp) + $("#urlz").focus(function(){ Main.editing = true }) + $("#urlz").blur(function(){ Main.editing = false }) + $("#clear").live("click", Dump.clear) + $("#help").click(function(){ $("#keys").toggle() }) + $("div img").live("click", Dump.pick) + Dump.clear() + } + } +""" +if params['interface'] is not None and params['interface'] == "off": + print """ +$("#nextpage,#help,#dump").hide() +$("body").css({"margin": 0, "padding": 0, "overflow": hidden, "background-color": white}) +""" +else: + print "Main.init()" +print """ +</script> +</html> +""" + diff --git a/impattern/im/cgi-bin/imdither.cgi b/impattern/im/cgi-bin/imdither.cgi new file mode 100755 index 0000000..29837ed --- /dev/null +++ b/impattern/im/cgi-bin/imdither.cgi @@ -0,0 +1,145 @@ +#!/usr/bin/python + +import downloader +import time +import re +import cgi +from subprocess import Popen, PIPE, call +from os import stat, path, makedirs +import sys +import sha +BASE_DIR = "" +OTHER_BASE = "" +#BASE_DIR = "/var/www/asdf.us/httpdocs/im/" +#OTHER_BASE = "http://asdf.us/im/" + +print "Content-Type: text/html" +print "" +print "" + +NAMETAG = "imDither" + +MAIN_DIRECTORY = "" +#BIN_CONVERT = "/usr/bin/convert" +#BIN_IDENTIFY = "/usr/bin/identify" +#BIN_COMPOSITE = "/usr/bin/composite" +BIN_CONVERT = "convert" +BIN_IDENTIFY = "identify" +BIN_COMPOSITE = "composite" + +NOW = str(int(time.time())) +MAX_LENGTH_BEFORE_ABRIDGED = 30 +ABBREVIATION = "xx_abridged__" + +################################### +### DEFAULT VALUES HERE +params = { + "url" : "http://asdf.us/im/10/friedeggstresstoy_1321140711_1322282769_pepper.gif", + "ditherType" : "1.png", + "username" : "pepper", + "formatType" : "png", +} +################################### + +form = cgi.FieldStorage() +if form: + for key, value in form.iteritems(): + formValues[key] = params[key] #CHECKME + +class Utils: + def file_size (self, imgFile): + return stat(imgFile)[6] + + def imageDimensions(self, thefile): + ident = Popen([BIN_IDENTIFY, thefile], stdout=PIPE).communicate()[0] + parts = ident.split(" ") + return parts[2].split("x") + + def hash_dir(self, s): + """get a random number-letter pair""" + return sha.new(s).hexdigest()[:2] + + def hexdir(self): + """create a random path name""" + directoryName = utils.hash_dir(NOW) + + dirs = [ + BASE_DIR+directoryName+'/', + OTHER_BASE+directoryName+'/', + ] + ################################### + if not path.exists(directoryName): + makedirs(directoryName) + + + return dirs + + def makeOriginalName(self, params, canvas_type="", nametag_part=""): + if not nametag_part: + nametag_part = NAMETAG + if not canvas_type: + canvastype = params["formatType"] + filename = '%s_%s_%s.%s' % (nametag_part, NOW, params["username"], canvas_type) + return filename + + def sanitize (self,string): + """strip out all non-word characters""" + return re.sub(r'\W+', '', string) + + def makeNameFromFilename(self, params): + parts = params["url"].split("?")[0].split('/') + filename = parts[-1] + name, extension = filename.split('.') + if len(extension) >= 5: + sys.stdout.write('the file is not an image or any standard format') + sys.exit() + if len(name)> MAX_LENGTH_BEFORE_ABRIDGED: + name = ABBREVIATION + sanitized = self.sanitize(name) + thefilename = "%s_%s_%s_%s.%s" % (NAMETAG, NOW, sanitized, params["username"], extension) + return thefilename + +utils = Utils(); + + +class Dither: + def makeCanvas(self, thefile): + call([BIN_CONVERT,"-size", self.dimensions[0]+"x"+self.dimensions[1],"canvas:transparent", thefile]) + def makeMask(self, themask, thedither, thebackground): + """ composite -tile DITHERNAME BACKGROUNDNAME MASKNAME """ + call([BIN_COMPOSITE,"-tile",thedither,thebackground,themask]) + #convert thebg.gif -compose Dst_In null: thefile.gif -matte -layers composite new.gif + call([BIN_CONVERT,themask,"-compose","Dst_In","null:",self.privatepath+self.mainfile,"-matte","-layers","composite",themask]) + # os.system("rm "+thebackground) + def fuseMask(self, themask, theimage): + call([BIN_COMPOSITE,theimage,"-compose","Pin_Light",themask,theimage]) + # os.system("rm "+themask) + def __init__(self, url, thedither, username): + self.mainfile = utils.makeNameFromFilename(params) + filepaths = utils.hexdir() + self.privatepath = filepaths[0] + self.publicpath = filepaths[1] + downloader.download(url, self.mainfile, self.privatepath) + + parts = self.mainfile.split('.') + print parts + if "gif" in parts[-1]: + canvastype = "gif" + else: + canvastype = "png" + + self.canvasfile = "/tmp/"+utils.makeOriginalName(params, canvastype, "canvasfile") + self.dimensions = utils.imageDimensions(self.privatepath+self.mainfile) + self.makeCanvas(self.canvasfile) + self.theMask = "/tmp/"+utils.makeOriginalName(params, canvastype, "maskfile") + #good up to here + self.makeMask(self.theMask, thedither, self.canvasfile) + self.fuseMask(self.theMask, self.privatepath+self.mainfile) + #self.mainfile = self.mainfile.replace(, do something with s3) + print self.privatepath+self.mainfile + print utils.file_size(self.privatepath+self.mainfile) + print 'width: '+self.dimensions[0]+'px' + print 'height: '+self.dimensions[1]+'px' + +if __name__ == "__main__": + newImage = Dither(params["url"], params["ditherType"], params["username"]) diff --git a/impattern/im/cgi-bin/imditherconf.cgi b/impattern/im/cgi-bin/imditherconf.cgi new file mode 100755 index 0000000..8e7b7f2 --- /dev/null +++ b/impattern/im/cgi-bin/imditherconf.cgi @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +from subprocess import * +import re +print "Content-type: text/html\n\n" +DITHERDIR = "/home/pepper/im/imdither/dithers"; + + +def get_ditherfiles(): + filesString = Popen(["ls", DITHERDIR], stdout=PIPE).communicate()[0] + files = filesString.split("\n"); + #javascript = "var ditherfiles = [" + javascript = "[" + for i in files: + if not i: + continue + javascript += "\"%s\", " % (i); + + javascript = javascript[:-2] + javascript += "]"; + return javascript +print get_ditherfiles(); + diff --git a/impattern/im/cgi-bin/imweb/databaser.py b/impattern/im/cgi-bin/imweb/databaser.py new file mode 100755 index 0000000..07b8723 --- /dev/null +++ b/impattern/im/cgi-bin/imweb/databaser.py @@ -0,0 +1,24 @@ +#!/usr/bin/python + +from db import * +import os +DB = db () + +PATH_TO_S3CMD = "/var/www/asdf.us/cgi-bin/im/s3/s3cmd-1.1.0-beta3/s3cmd" +PATH_TO_IMAGES = "/var/www/asdf.us/docs/im" + +global idnumber + +function dbGet(idnumber): + try: + DB.cursor.execute('SELECT dir, newfile, id FROM im_cmd WHERE id='+id) + #sql = "INSERT INTO im_cmd (date,remote_addr,name,dir,newfile,cmd) VALUES(%s,%s,%s,%s,%s,%s)" + #args = (now(), remoteaddress, name, dir, newfile, cmd) + data = cursor.fetchall + print str(data) + except (): + return + +if __name__ == '__main__': + sys.argv[1] = idnumber + dbGet(idnumber)
\ No newline at end of file diff --git a/impattern/im/cgi-bin/imweb/downImg b/impattern/im/cgi-bin/imweb/downImg new file mode 100755 index 0000000..d029477 --- /dev/null +++ b/impattern/im/cgi-bin/imweb/downImg @@ -0,0 +1,55 @@ +#!/usr/bin/python
+
+import cgi
+import downloader
+import fieldstorager
+import sys
+import os
+#import gifchooser
+
+#BASE_DIR = "/var/www/asdf.us/httpdocs/imweb/"
+BASE_DIR = ""
+PARAM_LIST = "texture heightmap"
+#BIN_CONVERT = "/usr/bin/convert"
+BIN_CONVERT = "convert"
+
+print "Content-type: text/plain"
+print ""
+
+form = cgi.FieldStorage()
+newvalues = fieldstorager.fieldstorage(PARAM_LIST, form)
+thekeys = PARAM_LIST.split()
+for key in thekeys:
+ globals()[key] = newvalues[key]
+########################################################
+#test with values here
+texture = "http://i.asdf.us/im/f3/imBreak_1327641897_clifford_1327640637_pepper.png"
+heightmap = "http://dump.fm/images/20120127/1327645413657-dumpfm-pepper-topcomments.png"
+#######################################################
+def uploadit(pictureUrl):
+ if len(pictureUrl) > 3 and "." in pictureUrl:
+ imageparts = pictureUrl.split('.')
+ filetype = imageparts[-1]
+ if "?" in filetype:
+ theparts = filetype.split('?')
+ filetype = theparts[0]
+ if pictureUrl == texture:
+ imagename = "Texture"
+ if pictureUrl == heightmap:
+ imagename = "Heightmap"
+ if "png" in pictureUrl.lower() or "jpg" in pictureUrl.lower() or "jpeg" in pictureUrl.lower() or "gif" in pictureUrl.lower():
+ downloader.download(pictureUrl, (imagename+"."+filetype), BASE_DIR)
+ firstfile = BASE_DIR+imagename+"."+filetype
+ endfile = BASE_DIR+imagename+"."+"jpg"
+ os.system(BIN_CONVERT+" -resize 256x256\! "+firstfile+" "+endfile)
+ if pictureUrl == "Heightmap":
+ os.system(BIN_CONVERT+" colorspace -gray "+" "+endfile+" "+endfile)
+ os.system("rm heightmap.png heightmap.gif texture.png texture.gif")
+ print "upload"+imagename+" successful"
+ return endfile
+ else:
+ print "This is not an acceptable image format for "+imagename
+ return
+uploadit(texture)
+uploadit(heightmap)
+sys.exit()
diff --git a/impattern/im/cgi-bin/imweb/downloader.py b/impattern/im/cgi-bin/imweb/downloader.py new file mode 100755 index 0000000..7083b11 --- /dev/null +++ b/impattern/im/cgi-bin/imweb/downloader.py @@ -0,0 +1,114 @@ +#!/usr/bin/python +import random +import urllib, urllib2 +urlopen = urllib2.urlopen +Request = urllib2.Request +import sys + +MAX_SIZE = 1024 * 1024 * 1.2 + +###___this somewhat poorly written program basically performs a get request +#you can specify three arguments, the url, the destination path and the filename#that you'll want your file to be called +#these can be specified as argument values from the commandline or as +#values in the mainfunction which is downloader.download(url,filename,destination) +#the destination and filename arguments are optional + + + +url = "" +destination = "" +filename = "" + +def argval(): + global destination + global url + global filename + stuff = sys.argv + lenstuff = len(stuff) + if lenstuff >= 4: + getvalues() + if lenstuff ==3: + print str(lenstuff) + url = sys.argv[-2] + filename = sys.argv[-1] + if lenstuff ==2: + url = sys.argv[-1] + destination = "" + partz = url.split('/') + filename = partz[-1] + if lenstuff ==1: + print 'please provide url' + return None + return url + +def getvalues(): + global url + global destination + global filename + url = sys.argv[-3] + destination = sys.argv[-1] + filename = sys.argv[-2] + if len(filename) == 0: + partz = url.split('/') + filename = partz[-1] + if filename == "" or filename == None: + partz = url.split('/') + filename = partz[-1] + return url + +def browser_request (url,data=None): + headers = { + 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', + 'Accept': '*/*', + } + try: + req = Request(url, data, headers) + response = urlopen(req) + return response + except: + print "ERROR" + sys.stdout.write('there is a problem with the url or an I/O error') + return None + sys.exit() + + +def download(url, filename="",destination=""): + response = browser_request(url) + rawimg = response.read() + if len(rawimg) == 0: + print error("got zero-length file") + sys.stdout.write("file did not exist or was zero-length") + sys.exit() + if len(rawimg) > MAX_SIZE and "asdf.us" not in url: + error = "file too big: max size " + str(MAX_SIZE/1024) + " KB / " + filename + " is " + str(len(rawimg)/1024) + " KB" + print error + sys.stdout.write(error) + sys.exit() + if filename == "": + partz = url.split('/') + filename = partz[-1] + path = "" + if destination == "" or destination == '': + path = filename + else: + path = destination+filename + f = open(path, "w") + f.write(rawimg) + print 'success' + f.close() + finalitems = {} + finalitems['url'] = url + finalitems['filename'] = filename + finalitems['destination'] = destination + return finalitems + +def downloader(): + global url + global destination + global filename + argval() + finalitems = download(url, filename, destination) + return finalitems + +if __name__ == '__main__': + downloader() diff --git a/impattern/im/cgi-bin/imweb/fieldstorager.py b/impattern/im/cgi-bin/imweb/fieldstorager.py new file mode 100755 index 0000000..55b00ad --- /dev/null +++ b/impattern/im/cgi-bin/imweb/fieldstorager.py @@ -0,0 +1,21 @@ +#!/usr/bin/python + +def fieldstorage(paramlist, form): + theparams = paramlist.split() + newvalues = {} + for item in theparams: + if item in form: + newvalues[item] = form[item].value + else: + newvalues[item] = None + for item in theparams: + if newvalues[item] is not None: + if 'true' in newvalues[item] or 'True' in newvalues[item]: + if len(newvalues[item]) <= 6: + newvalues[item] = True + elif 'false' in newvalues[item] or 'False' in newvalues[item]: + if len(newvalues[item]) <= 7: + newvalues[item] = False + return newvalues + + diff --git a/impattern/im/cgi-bin/imweb/filenamer.py b/impattern/im/cgi-bin/imweb/filenamer.py new file mode 100755 index 0000000..9b6ef32 --- /dev/null +++ b/impattern/im/cgi-bin/imweb/filenamer.py @@ -0,0 +1,115 @@ +#!/usr/bin/python + +import sys +import os +import re +import time +import string +import urllib +import sha + +#this program takes a url and makes a new filename for it. it also +#splits out the extension. this is important for manipulating images +#it returns a hash, part[0] is the filename and part[1] is the extension +#called like this filenamer.filename(url, nametag, username) + + +thefilename = "" +extension = "" + +nametag = "" +username = "" +url = "" + +def getargs(): + global username + global nametag + global url + args = sys.argv + if len(args) < 2: + return None + if len(args) >= 4: + username = args[-1] + nametag = args[-2] + url = args[-3] + if len(args) == 3: + nametag = args[-1] + url = args[-2] + if len(args) == 2: + url = args[-1] + thereturn = {} + thereturn['url'] = url + thereturn['nametag'] = nametag + thereturn['username'] = username + return thereturn + +def sanitize (str):#this removes pretty much everything but letters(and underscores) from a url + return re.sub(r'\W+', '', str) +#def sanitize (str): +# tmp_str = urllib.unquote(str) +# return re.sub(r'\W+', '', tmp_str) + + + + +def now (): + return int(time.mktime(time.localtime())) + +def spliturl(url): + if len(url) < 3 or '/' not in url: + sys.stdout.write('you have not provided a url') + print 'you have not provided a url' + sys.exit() + parts = url.split('/') + namepart = parts[-1] + importantparts = namepart.split('.') + extension = importantparts[-1] + if "?" in extension: + querysplit = extension.split('?') + extension = querysplit[0] + if len(extension) >= 5: + sys.stdout.write('the file is not an image or any standard format') + print 'the file is not an image or any standard format' + sys.exit + namepart = importantparts[-2] + if len(namepart)>50: + namepart = "xx_abridged__" + sanitized = sanitize(namepart) + salvaged = {} + salvaged['extension'] = extension + salvaged['namepart'] = sanitized + return salvaged + +def prepare(url): + global nametag + global username + time = now() + datestamp = str(time) + parts = spliturl(url) + extension = parts['extension'] + original = parts['namepart'] + thefilename = nametag+'_'+datestamp+"_"+original+"_"+username+'.'+extension + return thefilename + +def filename(url, tag="", usrname=""): + global nametag + global username + if tag == None: + tag = "" + if usrname == None: + usrname = "" + nametag = tag + username = usrname + thefilename = prepare(url) + print thefilename + return thefilename + sys.exit() + + +if __name__ == '__main__': + vars = getargs() + url=vars['url'] + nametag=vars['nametag'] + username = vars['username'] + filename(url,nametag,username) + diff --git a/impattern/im/cgi-bin/imweb/hexdirer.py b/impattern/im/cgi-bin/imweb/hexdirer.py new file mode 100755 index 0000000..af6f60e --- /dev/null +++ b/impattern/im/cgi-bin/imweb/hexdirer.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import sys +import os +import time +import string +import sha +BASE_DIR = "/var/www/asdf.us/httpdocs/im/" +OTHER_BASE = "http://asdf.us/im/" + +#THIS MODULE RETURNS A COMPLETE PATH! ALL YOU HAVE TO DO IS +#SPECIFY THE BASE DIRECTORY +#the hash works like this: +#0 is private path +#1 is the public path + + + +def hash_dir (s): + return sha.new(s).hexdigest()[:2] + +def now (): + return int(time.mktime(time.localtime())) + +def hexdir(): + time = now() + time = str(time) + ending = hash_dir(time) + dirs = [] + dirs.append(BASE_DIR+ending+'/') + dirs.append(OTHER_BASE+ending+'/') + print str(dirs) + return dirs + sys.exit() + +if __name__ == "__main__": + hexdir() + diff --git a/impattern/im/cgi-bin/imweb/saveImg b/impattern/im/cgi-bin/imweb/saveImg new file mode 100755 index 0000000..e76c36a --- /dev/null +++ b/impattern/im/cgi-bin/imweb/saveImg @@ -0,0 +1,48 @@ +#!/usr/bin/python
+
+import hexdirer
+import filenamer
+import cgi
+import fieldstorager
+import base64
+import random
+import sys
+import databaser
+
+print "Content-type: text/plain"
+print ""
+
+nametag = "imWeb"
+#name is the image name
+
+PARAM_LIST = "name username picture"
+form = cgi.FieldStorage()
+newvalues = fieldstorager.fieldstorage(PARAM_LIST, form)
+thekeys = PARAM_LIST.split()
+for key in thekeys:
+ globals()[key] = newvalues[key]
+if username == None:
+ username = ""
+if name == None:
+ name = str(random.randint(0,100))
+############################################################
+#test here
+###########################################################
+try:
+ #the picture is first encoded so we have to decode it
+ picture = base64.b64decode(picture)
+ namepart = filenamer.filename(("/"+name+".png"),username,nametag)
+ filepaths = hexdirer.hexdir()
+ filepaths = ["",""]
+
+ thefile = filepaths[0]+namepart
+ f = open(thefile,'w')
+ for line in picture:
+ f.write(line)
+ f.close()
+
+# databaser.database(filepaths[0],namepart,"imweb capture",username)
+ print "capture successful"
+ print filepaths[1]+namepart
+except:
+ print "sorry, there is a problem with image capture"
diff --git a/impattern/im/cgi-bin/pythonhelloworld.cgi b/impattern/im/cgi-bin/pythonhelloworld.cgi new file mode 100755 index 0000000..cede50f --- /dev/null +++ b/impattern/im/cgi-bin/pythonhelloworld.cgi @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +print "Content-type: text/html\n\n" +print "<html>Hello world!</html>" + diff --git a/impattern/im/cgi-bin/queryTest.cgi b/impattern/im/cgi-bin/queryTest.cgi new file mode 100755 index 0000000..5e6d573 --- /dev/null +++ b/impattern/im/cgi-bin/queryTest.cgi @@ -0,0 +1,9 @@ +#!/usr/bin/perl + +use CGI; +my $cgi = new CGI; +print $cgi->header('text/html'); +print "what's up doc"; +#print( $cgi->param( "test" )); + + diff --git a/impattern/im/cgi-bin/test.cgi b/impattern/im/cgi-bin/test.cgi new file mode 100755 index 0000000..1159090 --- /dev/null +++ b/impattern/im/cgi-bin/test.cgi @@ -0,0 +1,49 @@ +#!/usr/bin/perl + +print "Content-Type: text/html\r\n\r\nHello, world!\n"; +open MYFILE, ">/home8/basedxco/public_html/TESTFILE" or die $!; + + + +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +print MYFILE "this is a test!!!!"; +close(MYFILE); diff --git a/impattern/im/cgi-bin/youtube-dl b/impattern/im/cgi-bin/youtube-dl new file mode 160000 +Subproject fc79158de2779a9f2d3fb16ddfb2878b82693b7 |
