Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

/prog/reader webserver

Name: Anonymous 2012-06-16 7:27

IyEvYmluL2Jhc2gKc2V0IC1lCnNldCAtbyBwaXBlZmFpbAoKREFUQUJBU0U9InByb2cuZGIiClBST0dTQ1JBUEVfQ01ETElORT0oIi4vcHJvZ3NjcmFwZS5w
eSIgIi0tbm8tcHJvZ3Jlc3MiICIkREFUQUJBU0UiKQpCSU5EX1RPPSJsb2NhbGhvc3QiClBPUlQ9IjgwMDAiCk1BWFJFU1VMVFM9IjEwMCIKCmRuPSIvZGV2
L251bGwiCnNlbGY9IiQocmVhZGxpbmsgLWYgIiQwIikiCmNkICIkKGRpcm5hbWUgIiRzZWxmIikiCgppZ25vcmVmYWlsKCl7ICIkQCI7cmV0dXJuO30KZXNj
YXBlaHRtbCgpeyBzZWQgLWUncy88LyZsdDsvZztzLz4vJmd0Oy9nO3MvJi8mYW1wOy9nO3MvIi8mcXVvdDsvZzsnO30KaHR0cCgpIHsKICAgIGxvY2FsIHN0
YXR1cwogICAgaWYgWyAkIyA9IDEgXTsgdGhlbgogICAgICAgIHN0YXR1cz0iMjAwIE9LIgogICAgZWxzZQogICAgICAgIHN0YXR1cz0iJDIiCiAgICBmaQog
ICAgZWNobyAtZSAiSFRUUC8xLjAgJHN0YXR1c1xuQ29udGVudC1UeXBlOiAkMVxuIgp9CmhhbmRsZXIoKSB7CiAgICBsb2NhbCBxPSIkKGVjaG8gIiQxIiB8
IGN1dCAtZCcgJyAtZjIpIgogICAgCiAgICBjYXNlICIkcSIgaW4KICAgICAgICAvKQogICAgICAgICAgICBpbmRleC1oYW5kbGVyCiAgICAgICAgICAgIHJl
dHVybgogICAgICAgICAgICA7OwogICAgICAgIC9xLyopCiAgICAgICAgICAgIHNlYXJjaC1oYW5kbGVyICIke3E6M30iCiAgICAgICAgICAgIHJldHVybgog
ICAgICAgICAgICA7OwogICAgICAgIC91cGRhdGUpCiAgICAgICAgICAgIHVwZGF0ZS1oYW5kbGVyCiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICA7
OwogICAgICAgIC91cGRhdGUtc3RhdHVzKQogICAgICAgICAgICB1cGRhdGUtc3RhdHVzLWhhbmRsZXIKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAg
IDs7CiAgICAgICAgKikKICAgICAgICAgICAgaHR0cCAidGV4dC9wbGFpbiIgIjQwMyBGb3JiaWRkZW4iCiAgICAgICAgICAgIGVjaG8gIkZ1Y2sgeW91LiIK
ICAgICAgICAgICAgOzsKICAgIGVzYWMKfQpwYWdlLWhlYWRlcigpIHsKICAgIGh0dHAgInRleHQvaHRtbCIKICAgIGlmIFsgLW4gIiQxIiBdOyB0aGVuCiAg
ICAgICAgRElTQUJMRUQ9InJlYWRvbmx5PSdyZWFkb25seSciCiAgICBmaQogICAgZWNobyAiCjxodG1sPjxoZWFkPgo8bGluayByZWw9J3N0eWxlc2hlZXQn
IGhyZWY9J2h0dHA6Ly9kaXMuNGNoYW4ub3JnL3NraW4vd29ybGQ0Y2gvZ2xvYmFsLmNzcycvPgo8bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J2h0dHA6
Ly9kaXMuNGNoYW4ub3JnL3NraW4vd29ybGQ0Y2gvMGNoLmNzcycgbWVkaWE9J3NjcmVlbicgLz4KJDIKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KI3Nie21h
cmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlcjoxcHggc29saWQgIzAwMDA5MDt3aWR0aDo5
MCU7ZGlzcGxheTpibG9jazt9CiNzYmR7YmFja2dyb3VuZC1jb2xvcjojZGZkZmRmO3dpZHRoOjEwMCU7cGFkZGluZzoxMHB4O30KYm9keXtwYWRkaW5nOjBw
eDttYXJnaW46MHB4O30KI3J7YmFja2dyb3VuZC1jb2xvcjojZWZlZmVmO3BhZGRpbmc6MTBweDt9Cjwvc3R5bGU+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZh
c2NyaXB0Jz4KZnVuY3Rpb24gRShzKXtyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocyk7fQpmdW5jdGlvbiBzdWJtaXQoKXsKICB2YXIgeD1FKCdz
YicpLnZhbHVlOwogIGlmKHg9PScsdXBkYXRlJyl7CiAgICBkb2N1bWVudC5sb2NhdGlvbj0nL3VwZGF0ZSc7CiAgICByZXR1cm47fQogIGRvY3VtZW50Lmxv
Y2F0aW9uPScvcS8nK2VuY29kZVVSSUNvbXBvbmVudCh4KTt9CmZ1bmN0aW9uIGluaXRzYigpewogIEUoJ3NiJykuZm9jdXMoKTsKICB2YXIgeD1kb2N1bWVu
dC5sb2NhdGlvbi50b1N0cmluZygpOwogIHZhciBpPXguc2VhcmNoKCcvcS8nKTsKICBpZihpPT0tMSlyZXR1cm47CiAgRSgnc2InKS52YWx1ZT1kZWNvZGVV
UklDb21wb25lbnQoeC5zdWJzdHJpbmcoaSszKSk7fQo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0nc2JkJz48aW5wdXQgdHlwZT0ndGV4dCcg
aWQ9J3NiJyB2YWx1ZT0nJDEnIG9ua2V5cHJlc3M9J2lmKGV2ZW50LmtleUNvZGU9PTEzKXN1Ym1pdCgpOycgJERJU0FCTEVEIG9ubG9hZD0naW5pdHNiKCkn
IC8+PC9kaXY+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5pbml0c2IoKTs8L3NjcmlwdD4KIgp9CmluZGV4LWhhbmRsZXIoKSB7CiAgICBwYWdl
LWhlYWRlcgogICAgZWNobyAiPGRpdiBpZD0ncic+PHA+UHJvdGlwczo8L3A+PHVsPjxsaT5Vc2UgY29tbWFzIHRvIHNlcGFyYXRlIHlvdXIgc2VhcmNoIHN0
cmluZ3M8L2xpPiIKICAgIGVjaG8gIjxsaT5UbyB1cGRhdGUgeW91ciBwcm9nc2NyYXBlIGRiLCB0eXBlIGluIFwiLHVwZGF0ZVwiLjwvbGk+IgogICAgZWNo
byAiPGxpPlRvIHNlZSB0aGUgbGF0ZXN0IHBvc3RzLCBqdXN0IHN1Ym1pdCBhbiBlbXB0eSBzdHJpbmcuPC9saT48L3VsPjwvZGl2PjwvYm9keT48L2h0bWw+
Igp9CnNlYXJjaC1oYW5kbGVyKCkgewogICAgcGFnZS1oZWFkZXIKICAgIGVjaG8gIjxkaXYgaWQ9J3InPiIKICAgIGVjaG8gLW4gIiQxIiB8IHB5dGhvbiAt
YyAiCmltcG9ydCBzeXMsc3FsaXRlMyxkYXRldGltZSx1cmxsaWI7ZGI9c3FsaXRlMy5jb25uZWN0KCcke0RBVEFCQVNFfScpO2M9ZGIuY3Vyc29yKCkKdD1m
aWx0ZXIobGVuLG1hcChsYW1iZGEgczpcIiUlJXMlJVwiJXMsdXJsbGliLnVucXVvdGVfcGx1cyhzeXMuc3RkaW4ucmVhZCgpKS5kZWNvZGUoJ3V0Zi04Jyku
c3BsaXQoJywnKSkpCnE9dSdTRUxFQ1QgdGhyZWFkLGlkLGF1dGhvcix0cmlwLHRpbWUsYm9keSBGUk9NIHBvc3RzIFdIRVJFIDE9MScgKyB1JyBBTkQgYm9k
eSBMSUtFID8nKmxlbih0KSArIHUnIE9SREVSIEJZIHRpbWUgREVTQyBMSU1JVCAkTUFYUkVTVUxUUycKZm9yIHIgaW4gYy5leGVjdXRlKHEsdCk6CiB0aHJl
YWQsaWQsYXV0aG9yLHRyaXAsdGltZSxib2R5PXIKIHByaW50ICh1XCI8ZGl2IGNsYXNzPSdwb3N0IG9kZCc+PGgzPjxzcGFuIGNsYXNzPSdwb3N0bnVtJz48
YSBocmVmPSdodHRwOi8vZGlzLjRjaGFuLm9yZy9yZWFkL3Byb2cvJWQvJWQsLSc+JWQ8L2E+IDwvc3Bhbj48c3BhbiBjbGFzcz0ncG9zdGluZm8nPjxzcGFu
IGNsYXNzPSduYW1lbGFiZWwnPiBOYW1lOiA8L3NwYW4+PHNwYW4gY2xhc3M9J3Bvc3Rlcm5hbWUnPiVzPC9zcGFuPjxzcGFuIGNsYXNzPSdwb3N0ZXJ0cmlw
Jz4lczwvc3Bhbj4gOiA8c3BhbiBjbGFzcz0ncG9zdGVyZGF0ZSc+JXM8L3NwYW4+IDxzcGFuIGNsYXNzPSdpZCc+IDwvc3Bhbj48L3NwYW4+PC9oMz48Ymxv
Y2txdW90ZT4lczwvYmxvY2txdW90ZT48L2Rpdj5cIiAlICh0aHJlYWQsaWQsaWQsYXV0aG9yIGlmIGlzaW5zdGFuY2UoYXV0aG9yLHVuaWNvZGUpIGVsc2Ug
dSdOVUxMJyx0cmlwIGlmIGlzaW5zdGFuY2UodHJpcCx1bmljb2RlKSBlbHNlIHUnJyxkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUpLnN0
cmZ0aW1lKHUnJUYgJVQnKSBpZiBpc2luc3RhbmNlKHRpbWUsaW50KSBvciBpc2luc3RhbmNlKHRpbWUsbG9uZykgZWxzZSAnTlVMTCcsYm9keS5yZXBsYWNl
KHUnPGEgaHJlZj1cInJlYWQvcHJvZy8nLCc8YSBocmVmPVwiLy9kaXMuNGNoYW4ub3JnL3JlYWQvcHJvZy8nKSkpLmVuY29kZSgndXRmLTgnKQoiIDI+L2Rl
di9udWxsIHx8IHRydWUKICAgIGVjaG8gIjwvZGl2PjwvYm9keT48L2h0bWw+Igp9CnVwZGF0ZS1oYW5kbGVyKCkgewogICAgaWYgbWtkaXIgIiRwcm9nc2Ny
YXBlX2xvY2siOyB0aGVuICgKICAgICAgICAgICAgIiR7UFJPR1NDUkFQRV9DTURMSU5FW0BdfSIgPiAiJHByb2dzY3JhcGVfb3V0cHV0X2ZpbGUiIHx8IHRy
dWUKICAgICAgICAgICAgcm1kaXIgIiRwcm9nc2NyYXBlX2xvY2siOykgPCRkbiA+JGRuIDI+JGRuICYKICAgIGZpCiAgICAKICAgIGVjaG8gLWUgIkhUVFAv
MS4xIDIwMCBva1xuUmVmcmVzaDogMDsgdXJsPS91cGRhdGUtc3RhdHVzXG4iCn0KcHJpbnQtdXBkYXRlLXN0YXR1cygpIHsKICAgIGVjaG8gIjxkaXYgaWQ9
J3InPjxwcmU+IgogICAgaWdub3JlZmFpbCBjYXQgIiRwcm9nc2NyYXBlX291dHB1dF9maWxlIiB8IGVzY2FwZWh0bWwgfCBzZWQgLWUncyNcbiM8YnIvPiNn
JwogICAgZWNobyAiPC9wcmU+PC9kaXY+PC9ib2R5PjwvaHRtbD4iCn0KdXBkYXRlLXN0YXR1cy1oYW5kbGVyKCkgewogICAgaWYgWyAtZCAiJHByb2dzY3Jh
cGVfbG9jayIgXTsgdGhlbgogICAgICAgIHBhZ2UtaGVhZGVyICJ1cGRhdGluZyBkYXRhYmFzZSwgcGxlYXNlIHdhaXQuLi4iICI8bWV0YSBodHRwLWVxdWl2
PSdyZWZyZXNoJyBjb250ZW50PVwiMTtVUkw9Jy91cGRhdGUtc3RhdHVzJ1wiID4iCiAgICBlbHNlCiAgICAgICAgcGFnZS1oZWFkZXIKICAgIGZpCiAgICAK
ICAgIHByaW50LXVwZGF0ZS1zdGF0dXMKfQppZiBbICIke19fQ0FMTEVEX0JZX1NPQ0FUfSIgPSAiZGVmaW5pdGVseSIgXTsgdGhlbgogICAgdD0iJHtfX0NB
TExFRF9CWV9TT0NBVF9ESVJ9IgogICAgcHJvZ3NjcmFwZV9vdXRwdXRfZmlsZT0iJHQvcHJvZ3NjcmFwZV9vdXRwdXQiCiAgICBwcm9nc2NyYXBlX2xvY2s9
IiR0L3Byb2dzY3JhcGVfbG9jayIKICAgIHJlYWQgZmlyc3RsaW5lCiAgICBlY2hvICIkZmlyc3RsaW5lIiA+JjIKICAgIGhhbmRsZXIgIiRmaXJzdGxpbmUi
CmVsc2UKICAgIHQ9IiQobWt0ZW1wIC1kKSIKICAgIGVudiBfX0NBTExFRF9CWV9TT0NBVD1kZWZpbml0ZWx5IF9fQ0FMTEVEX0JZX1NPQ0FUX0RJUj0iJHQi
IHNvY2F0IC1kIC1iIDI1NiBUQ1AtTElTVEVOOiIkUE9SVCIsYmluZD0iJEJJTkRfVE8iLGZvcmsscmV1c2VhZGRyIEVYRUM6IiRzZWxmIgpmaQo=

Name: Anonymous 2012-06-16 16:53

#!/bin/bash
set -e
set -o pipefail

DATABASE="prog.db"
PROGSCRAPE_CMDLINE=("./progscrape.py" "--no-progress" "$DATABASE")
BIND_TO="localhost"
PORT="8000"
MAXRESULTS="100"

dn="/dev/null"
self="$(readlink -f "$0")"
cd "$(dirname "$self")"

ignorefail(){ "$@";return;}
escapehtml(){ sed -e's/</</g;s/>/>/g;s/&/&/g;s/"/"/g;';}
http() {
    local status
    if [ $# = 1 ]; then
        status="200 OK"
    else
        status="$2"
    fi
    echo -e "HTTP/1.0 $status\nContent-Type: $1\n"
}
handler() {
    local q="$(echo "$1" | cut -d' ' -f2)"
   
    case "$q" in
        /)
            index-handler
            return
            ;;
        /q/*)
            search-handler "${q:3}"
            return
            ;;
        /update)
            update-handler
            return
            ;;
        /update-status)
            update-status-handler
            return
            ;;
        *)
            http "text/plain" "403 Forbidden"
            echo "Fuck you."
            ;;
    esac
}
page-header() {
    http "text/html"
    if [ -n "$1" ]; then
        DISABLED="readonly='readonly'"
    fi
    echo "
<html><head>
<link rel='stylesheet' href='http://dis.4chan.org/skin/world4ch/global.css'/>
<link rel='stylesheet' href='http://dis.4chan.org/skin/world4ch/0ch.css' media='screen' />
$2
<style type='text/css'>
#sb{margin-left:auto;margin-right:auto;background-color:#ffffff;border:1px solid #000090;width:90%;display:block;}
#sbd{background-color:#dfdfdf;width:100%;padding:10px;}
body{padding:0px;margin:0px;}
#r{background-color:#efefef;padding:10px;}
</style>
<script type='text/javascript'>
function E(s){return document.getElementById(s);}
function submit(){
  var x=E('sb').value;
  if(x==',update'){
    document.location='/update';
    return;}
  document.location='/q/'+encodeURIComponent(x);}
function initsb(){
  E('sb').focus();
  var x=document.location.toString();
  var i=x.search('/q/');
  if(i==-1)return;
  E('sb').value=decodeURIComponent(x.substring(i+3));}
</script>
</head>
<body>
<div id='sbd'><input type='text' id='sb' value='$1' onkeypress='if(event.keyCode==13)submit();' $DISABLED onload='initsb()' /></div>
<script type='text/javascript'>initsb();</script>
"
}
index-handler() {
    page-header
    echo "<div id='r'><p>Protips:</p><ul><li>Use commas to separate your search strings</li>"
    echo "<li>To update your progscrape db, type in \",update\".</li>"
    echo "<li>To see the latest posts, just submit an empty string.</li></ul></div></body></html>"
}
search-handler() {
    page-header
    echo "<div id='r'>"
    echo -n "$1" | python -c "
import sys,sqlite3,datetime,urllib;db=sqlite3.connect('${DATABASE}');c=db.cursor()
t=filter(len,map(lambda s:\"%%%s%%\"%s,urllib.unquote_plus(sys.stdin.read()).decode('utf-8').split(',')))
q=u'SELECT thread,id,author,trip,time,body FROM posts WHERE 1=1' + u' AND body LIKE ?'*len(t) + u' ORDER BY time DESC LIMIT $MAXRESULTS'
for r in c.execute(q,t):
 thread,id,author,trip,time,body=r
 print (u\"<div class='post odd'><h3><span class='postnum'><a href='http://dis.4chan.org/read/prog/%d/%d,-'>%d</a> </span><span class='postinfo'><span class='namelabel'> Name: </span><span class='postername'>%s</span><span class='postertrip'>%s</span> : <span class='posterdate'>%s</span> <span class='id'> </span></span></h3><blockquote>%s</blockquote></div>\" % (thread,id,id,author if isinstance(author,unicode) else u'NULL',trip if isinstance(trip,unicode) else u'',datetime.datetime.fromtimestamp(time).strftime(u'%F %T') if isinstance(time,int) or isinstance(time,long) else 'NULL',body.replace(u'<a href=\"read/prog/','<a href=\"//dis.4chan.org/read/prog/'))).encode('utf-8')
" 2>/dev/null || true
    echo "</div></body></html>"
}
update-handler() {
    if mkdir "$progscrape_lock"; then (
            "${PROGSCRAPE_CMDLINE[@]}" > "$progscrape_output_file" || true
            rmdir "$progscrape_lock";) <$dn >$dn 2>$dn &
    fi
   
    echo -e "HTTP/1.1 200 ok\nRefresh: 0; url=/update-status\n"
}
print-update-status() {
    echo "<div id='r'><pre>"
    ignorefail cat "$progscrape_output_file" | escapehtml | sed -e's#\n#<br/>#g'
    echo "</pre></div></body></html>"
}
update-status-handler() {
    if [ -d "$progscrape_lock" ]; then
        page-header "updating database, please wait..." "<meta http-equiv='refresh' content=\"1;URL='/update-status'\" >"
    else
        page-header
    fi
   
    print-update-status
}
if [ "${__CALLED_BY_SOCAT}" = "definitely" ]; then
    t="${__CALLED_BY_SOCAT_DIR}"
    progscrape_output_file="$t/progscrape_output"
    progscrape_lock="$t/progscrape_lock"
    read firstline
    echo "$firstline" >&2
    handler "$firstline"
else
    t="$(mktemp -d)"
    env __CALLED_BY_SOCAT=definitely __CALLED_BY_SOCAT_DIR="$t" socat -d -b 256 TCP-LISTEN:"$PORT",bind="$BIND_TO",fork,reuseaddr EXEC:"$self"
fi

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List