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

Do it [SchemeBBS]

Name: Anonymous 2015-05-25 10:11

Can we fucking wake up here sheeple? We need a SchemeBBS. We need to restore all of prog.db in it. This regex crap the admin does is no good right now for the job.

Name: Anonymous 2015-06-21 16:07

>>164
He'll be back eventually.

Name: THE TERMINATOR 2015-06-21 21:18

Nice dubs >>166-san.

Name: >>15-san 2015-06-22 19:29

>>159
Hah that's great!

Name: Anonymous 2015-06-23 5:29

The VPS I started hosting for >>15-san's project is still up but he hasn't connected to it in 2 weeks.

Name: Anonymous 2015-06-23 15:59

>>169
i can put the server back on it for testing ill get on the irc

Name: dubzbot 2015-06-24 3:16

Adding all dubs to the block chain.

11 Name: Anonymous : 2015-05-26 14:45
Let's discuss BBS design for a bit here. Having plain text threads that posts get appended to is simply god-awful. Why not have each individual post get its own file?
-------------------
22 Name: Anonymous : 2015-05-26 18:43
>>20
And making a script that interacts with said API would be the rite of passage for every potential /prog/lodite? Great! I've always wanted this place to be filled with appers and web devs!
-------------------
33 Name: Anonymous : 2015-05-26 20:14
>>13
CL-BBS (/clēbs/)
Do you also pronounce NNTP "neenootup"? Moron.
-------------------
44 Name: Anonymous : 2015-05-28 10:12
If you actually get dubs, someone post em so I can check em please
-------------------
55 Name: Anonymous : 2015-06-08 13:02
nice1--preddy nice
-------------------
66 Name: >>50,53 : 2015-06-08 19:40
I checked it into the Fossil repo, under schemebbs-fcgi/ (didn't want to cramp the style of the Racket-only guys).

I do not claim to be an EXPERT PROGRAMMER. Comments and derision are welcome.

>>43,65
I'd love to but I need to spin up a VPS that I can lock down (and attempt to separate from everything I have my name attached to) first.
-------------------
77 Name: Anonymous : 2015-06-15 18:44
>>76
That wasn't indefinite though.
-------------------
88 Name: Anonymous : 2015-06-16 01:29
>>86
Check my rule 88
-------------------
99 Name: Anonymous : 2015-06-16 19:48
>>96
Also, moderation is shit. The moderator is no better than the ones he moderates, no less evil, in fact often moreso, because his vileness is amplified by the power he possesses.
-------------------
111 Name: Anonymous : 2015-06-16 22:43
implying immoral activity harms society

- child porn is "immoral"
- medicine requires child porn to study child anatomy
- medicine is "immoral"

- human genome contains information to produce child porn
- human genome is "immoral"
-------------------
122 Name: Anonymous : 2015-06-17 15:17
>>121
The Talmud is a Jewish literary collection of teachings, laws, and interpretations based on the Old Testament Torah.
-------------------
133 Name: Anonymous : 2015-06-18 21:56
>>132
some parts of it probably will

This is unacceptable, obviously
-------------------
144 Name: Anonymous : 2015-06-19 04:12
>>143
oh shut up
-------------------
155 Name: Anonymous : 2015-06-19 10:06
>>154
p much, so what's on for the weekend?
-------------------
166 Name: Anonymous : 2015-06-21 16:07
>>164
He'll be back eventually.

-------------------
d1bc99abd2334730be764110cdd0160bd53c09acdffb4cd423ac96051420564a

Name: Anonymous 2015-07-01 18:37

Please enjoy yourselves.

torify curl --data "(posts> 0)" hz27w5o3zlhptx7v.onion/schemebbs

Name: Anonymous 2015-07-02 23:58

Here's a read only client in Python 2.7.

I even used Xarn's sexpcode module: https://github.com/Cairnarvon/sexpcode.py

You have to compile the wrapper to use term output instead of html. I also had to add "m" to the lexer/parser declaration in term.h.

's <post id>' to read a post. 'r' to reload. 'l' to show the list again. 'q' to quit.

Python is shit at running everywhere and i'm not going to do any packaging but it should be easy enough to figure out what the problem is if you are really trying to use this.

from sexpdata import loads, Symbol
from sexpcode import sexpcode
import colorama
from colorama import Fore, init as cinit
from datetime import datetime
from pager import page
import requests
import re
from prompt_toolkit.shortcuts import get_input
from prompt_toolkit.history import History

SBBS_URL = 'http://hz27w5o3zlhptx7v.onion/schemebbs'

class Post(object):
def __init__(self):
self.id = False
self.date = False
self.reply = False
self.body = ""
self.title = ""
self.replies = []

def req(q):
r = requests.post(SBBS_URL, data=q)
return r.text

def iter_from_post_str(in_str):
for s in re.finditer('([^\n]+)?\n', in_str):
yield s.group(0)

def post_dict(post_sexp):
post = Post()
for couple in post_sexp:
if type(couple[0]) is Symbol:
sym = couple[0].value()
if sym == "id":
post.id = couple[2]
if sym == "date":
post.date = datetime.fromtimestamp(couple[2])
if sym == "reply":
val = couple[2]
if type(val) is Symbol:
if val.value() == "#f":
post.reply = False
else:
post.reply = int(val)
if sym == "post":
post.body = sexpcode(couple[2])
post.title = unicode(post.body.split('\n')[0])
if len(post.title) > 50:
post.title = post.title[:50]
return post

def load(all_posts):
post_txt = req("(posts> 0)")
loaded = 0
for o in loads(post_txt):
post_obj = post_dict(o)
if post_obj.id is not False:
if post_obj.id not in all_posts:
all_posts[post_obj.id] = post_obj
loaded += 1

if post_obj.reply is not False:
all_posts[post_obj.reply].replies.append(post_obj)

print(Fore.GREEN + str(loaded) + " post(s) loaded" + Fore.RESET)

def show(post_obj):
page(iter_from_post_str(post_obj.body))

def show_tree(all_posts):
shown = []
for k, v in all_posts.iteritems():
if k not in shown:
print_post_summary(v)
if len(v.replies) > 0:
for reply in v.replies:
print_post_summary(reply)
shown.append(reply.id)
print "\n"

def print_post_summary(post):
print post.id, ": ", post.title, Fore.RESET, " - ", post.date

def main():
cinit()
history = History()
all_posts = {}
exiting = False

print('doing initial loading...')
load(all_posts)
show_tree(all_posts)
while not exiting:
INPUT = get_input(message=u"sbbs> ", history=history)

if INPUT == 'exit' or INPUT == "e" or INPUT == "quit" or INPUT == "q":
exiting = True

if INPUT == 'r' or INPUT == 'reload':
load(all_posts)

if INPUT == 'l' or INPUT == 'list':
show_tree(all_posts)

showmatch = re.match('^(show|s)\s+([0-9]*)$', INPUT)
if showmatch:
post_to_show = all_posts[int(showmatch.group(2))]
show(post_to_show)

if __name__ == '__main__':
main()


I am a shit programmer. why am i even posting this garbage

Name: Anonymous 2015-07-03 0:18

oh yeah you save it in a file and use torify:
$ torify python schemebbs_client.py
if that wasn't obvious

Name: Anonymous 2015-07-03 17:12

I guess its time to bump this thread

Name: Anonymous 2015-07-04 1:03

bampu pantsu

Name: Anonymous 2015-07-04 1:42

lucky sevens

Name: Anonymous 2015-07-06 21:58

Uhh, so yeah, prog.db? Where can a fella get a copy of that?

Name: Anonymous 2015-07-06 22:59

Name: Anonymous 2015-07-07 19:15

I found a torrent on the Internet Archive labeled 2014-04-18. It's a 64mb file. I'm definitely reconsidering restoring it onto schemebbs-fcgiTM

Name: Anonymous 2015-07-08 23:31

I added a front page (http://hz27w5o3zlhptx7v.onion/) and started on a read-only JavaScript client. My python client can make posts now but it is a mess so I am not going to show it again.

Name: Anonymous 2015-07-09 1:24

bampu pantsu

Name: Anonymous 2015-07-09 8:46

>>172,174
Use torsocks ``please''!

Name: Anonymous 2015-07-09 14:52

>>183
OK sure. Why is it that the torsocks 'homepage' seems to have disappeared from the Internet?

All these documents/guides I am reading keep referencing it and it goes to a dead Google code repo, which forwards to the Tor project hosted gitweb that has no docs.

The Tor wiki is in pretty bad shape, I only realized I was reading deprecated documentation after reading your post.

Name: Anonymous 2015-07-10 1:37

>>184

After reading man torify, it just says torify calls torsocks and
torsocks is an improved wrapper that explicitly rejects UDP, safely resolves DNS lookups and properly socksifies your TCP connections.
When they say torsocks is improved, I just don't want to be using what it was an improvement upon.

Name: Anonymous 2015-07-11 20:23

>>178
I have it, I'll post it sometime soon

Name: Anonymous 2015-07-15 15:42

>>186
Here it is, its name is "prog-20130813130608.db".

Oh, it seems you can find it at >>179.

Not related, but pomf.se is over.

Name: Anonymous 2015-07-15 15:48

>>179 gives a 403 for me. Did you mean to add a link to your post

I found a random copy on the internet but i haven't looked at it yet. It's marked 2014 something something.

Name: Anonymous 2015-07-15 15:57

>>187
nevermind I have that file.

It's full of fucking html though. I'm not even completely clear on why I'm restoring this in the first place? I guess I could write a thing to convert the HTML and do like the most recent 500 threads or something. Doing all of it seems overkill

Name: Anonymous 2015-07-15 17:39

>>189
Be aware there's a lot of malformed html due to bbcode glitching. It's all over /prog/ and to a somewhat lesser extent /lounge/.

Name: Anonymous 2015-07-15 18:16

And the parser got all fucked up and confused in a few threads. thread /1 is a good example of it fucking up.

Name: Anonymous 2015-07-16 3:57

>>187
uguu.se
No SSL unfortunately

Name: Anonymous 2015-07-16 15:54

I'll write a perl script to parse this board later

Name: Anonymous 2015-07-16 16:02

>>193
For what purpose

Might as well just set it up so that new progrider posts show up on schemebbs and vice versa

Admin-sama justifiably blocked all Tor exit nodes so my server would have to connect directly to post into progrider threads

I'd like to believe xe wouldn't doxx me

Name: Admin 2015-07-17 1:46

>>194
If you want I can just set up a hidden service address for the board and give only you the link for server-side sync purposes. I'll probably at least put up a read-only hidden service address for this in case ICANN pulls more bullshit in the future.

Name: Anonymous 2015-07-17 1:49

>>179
Use the following: https://progrider.org/files/archives/

The bbs. subdomain points to a different directory structure now.

Name: Anonymous 2015-07-17 7:47

It would be pretty 1337 if this forum became pure deep web.

Name: Anonymous 2015-10-24 16:14

The server went down because I got kicked out of my house, thanks to the 2 or 3 of you (?) that posted.

Might try to rehost soon, it will have a new URL obviously

Name: Anonymous 2016-07-11 5:48

(stopping the dubsfaggot from dubsbumping)

Name: Anonymous 2016-07-11 5:48

(stopping the dubsfaggot from dubsbumping)

Name: Anonymous 2016-11-07 0:29

SchemeBBSTM is back baby!

http://hz27w5o3zlhptx7v.onion/

Now with working read-only javashit client, including {b.sup s}{u e}{sup x}{i.u p}{sup c}{b.u o}{sub d}{u e} (sexpcode) rendering support! Write a client
to post today! Take back your programming discussion from the endless political drivel, with SchemeBBSTM.

Name: /twatter/ 2016-11-07 1:29

>>201
you almost got doubs

Name: Anonymous 2016-11-07 3:23

>>198,199,200

le pedophile sage

Name: Anonymous 2016-11-07 4:35

pls no more spam ;_;

Name: Anonymous 2016-11-07 4:42

making a client

Name: guile scheme 2016-11-07 23:41

[code];; torsocks guile this.scm

(use-modules (web client)
(web response)
(ice-9 receive))

(define (print p) (write p) (newline))

(define schemebbs-endpoint "http://hz27w5o3zlhptx7v.onion/schemebbs")

(define (schemebbs query)
(let ((query-string (with-output-to-string (lambda () (write query)))))
(receive (response body)
(http-post schemebbs-endpoint #:body query-string)
(unless (= 200 (response-code response))
(error "bad http response code" (response-code response)))
(with-input-from-string body read))))

(let ((v (schemebbs '(version))))
(unless (= 1 v)
(error "Unknown version of schemebbs" v)))

(print (schemebbs '(version)))
(print (schemebbs '(get 0)))
;; (print (schemebbs '(posts> 0)))
[/code[

Name: Anonymous 2016-11-08 23:31

Does anybody remember from w4ch prog where there was a game engine that you use Lisp to program it? The programmer was associated to the GNU project. I'm trying to remember what was the title of the game engine.

Name: Anonymous 2016-11-09 1:17

Name: Anonymous 2016-11-09 8:18

Name: Anonymous 2016-11-09 13:02

>>207
I remember something with guile and sdl.

Name: Anonymous 2016-11-09 20:51

>>208-210
It was Sly. Thanks for reminding me.

Name: Anonymous 2016-11-10 3:32

_____ __ ____ ____ _____
/ ___/_____/ /_ ___ ____ ___ ___ / __ )/ __ ) ___/
\__ \/ ___/ __ \/ _ \/ __ `__ \/ _ \/ __ / __ \__ \
___/ / /__/ / / / __/ / / / / / __/ /_/ / /_/ /__/ /
/____/\___/_/ /_/\___/_/ /_/ /_/\___/_____/_____/____/

Name: Anonymous 2016-11-10 6:06

OKAY HERE IS A PROGRAM THAT YOU CAN RUN PERIODICALLY TO GET ALL THE LATESTS SCHEMEBBS DATA IN SEXPSON FORMAT. SOMEBODY NEEDS TO WRITE A TEXT BASED USER INTERFACE THAHT LETS YOU SEE ALL THE NEWEST THREADS, AND BE ABLE TO OPEN A TRHEAD TO READ AND REPLY TO IT.

;; torsocks guile this.scm

(use-modules (web client)
(web response)
(ice-9 receive))

(define (print p) (write p) (newline))

(define schemebbs-endpoint "http://hz27w5o3zlhptx7v.onion/schemebbs")

(define (schemebbs query)
(let ((query-string (with-output-to-string (lambda () (write query)))))
(receive (response body)
(http-post schemebbs-endpoint #:body query-string)
(unless (= 200 (response-code response))
(error "bad http response code" (response-code response)))
(with-input-from-string body read))))

(let ((v (schemebbs '(version))))
(unless (>= v 2)
(error "I only work with version 2 or higher" v)))

(print (schemebbs '(version)))
(print (schemebbs '(get 0)))
;;(print (schemebbs '(posts> 0)))

(define db-max 0)
(define db #f)

(when (access? "db.scm" F_OK)
(with-input-from-file "db.scm"
(lambda ()
(set! db-max (read))
(set! db '())
(let loop ((thing (read)))
(if (eof-object? thing)
#t
(begin (set! db (cons thing db))
(loop (read))))))))

(print `(reading in the new posts since ,db-max))

(define newest-posts (schemebbs `(posts>= ,(+ 1 db-max))))

(print newest-posts)

(for-each (lambda (new)
(let ((new-id (cdr (assoc 'id new))))
(when (> new-id db-max)
(set! db-max new-id))))
newest-posts)

(print `(got new posts up to ,db-max saving...))

(with-output-to-file "db.scm"
(lambda ()
(print db-max)
(when db
(for-each print db))
(for-each print newest-posts)))

(print 'done)

Name: Anonymous 2016-11-10 14:48

I'M NOT DOWNLOADING TOR FOR THIS

Name: Anonymous 2016-11-10 19:10

>>214
I'M NOT GONNA PAY FOR A DOMAIN

Name: Anonymous 2016-11-10 23:35

>>214
that's good we don't want people like you on it

Name: Anonymous 2016-11-10 23:35

>>215
is that why you're using tor? .ga and .ml have free registration

Name: Anonymous 2016-11-12 3:10

>>217
i'd have to pay to not have my identity attached to a bunch of stuff your average /prog/ says

Name: Anonymous 2016-11-12 23:51

any poop huffers writing clients?

Name: Anonymous 2016-11-13 8:20

****WARNING*****
***TRIPS INCOMING***

Name: Anonymous 2016-11-13 8:45

>>41
Clojure is not a LISP.

Name: Anonymous 2016-11-13 8:50

check em

Name: Anonymous 2016-11-13 14:04

>>222

holy cow

Name: Anonymous 2016-11-13 19:18

epic trips :D:DD::::::DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

Name: Anonymous 2016-11-15 22:44

WHY NO CLIENT YET?

Name: Anonymous 2016-11-16 1:24

>>225
BECAUSE YOU HAVEN'T WRITTEN IT!

Name: Anonymous 2016-11-16 5:42

>>226
I wrote the guile code above to get it started . someone needs to do the next part for it to be a collabortion

Name: WE NEED TO GO DEEPER 2016-11-17 4:07

If I hosted an i2p based interface would people use it?

Name: Anonymous 2016-11-17 5:18

Name: Anonymous 2016-11-18 17:27

>>228
1. Is the server going to be up 24/7
2. Can it it compete with /progrider/ ( not everyone has i2p)
3. How you will handle spam(there are no IPs and identities are temporary)?

Name: Anonymous 2016-11-20 3:10

>>230
1. I can't guarantee anything, but if traffic isn't too high I don't see why I couldn't keep it up 24/7
2. I am not trying to compete, I figured I could just set up an interface that routed peoples posts to the onion site
3. Not sure about this one, if it gets too bad I might implement a captcha type thing.
If I do though, it will probably be like the /prog/ fossil repo, so people can still post without images or javascript.

Name: Anonymous 2016-11-20 6:40

>>228
No thanks, I don't run Java.

Name: Anonymous 2016-11-20 17:02

>>232
I was looking at my system earlier, and almost 2/3rds of all proccesses running were some java shit spawned from i2p, and just having the i2p daemon running adds about a fourth to my memory use.
Its pretty fucked.
I still prefer i2p over tor, though. Theres less edgy kids who think that being on the DEEP WEB makes them cool, plus support for torrenting.

Name: Anonymous 2016-11-21 2:06

>>232,233 Actually there is no need to use Java, use https://github.com/PurpleI2P/i2pd

Name: Anonymous 2016-11-21 8:54

>>232
*tips fedora*

Name: Anonymous 2016-11-21 8:55

SOMEONE

TAKE >>213
ANTD MAKE A GUI

Name: Anonymous 2016-11-22 5:09

>>236

Do it yourself

Name: Anonymous 2016-11-22 11:34

All right /prog/riders, its here:

Introducing THE OFFICIALnot really /prog/ PHPshit SLOWER THAN All FUCK SCHEME-BBS WEB BASED INTERFACE, AND I2P FRONTEND

Currently up and running at http://t6aaazt7qrlw5z2ehlyddwxooc2jutmd5frxy2nq3v43dkuunnnq.b32.i2p/prog/
http://www.progrider.i2p/prog/ should be up soon.

So this script consists of three files, but they can definitely be combined into one. I am shit at PHP and this was just to get it up and running. Feel free to make improvements.

The first is main.php, which generates index.html, gets a list of all the threads, and provides a dialog for making a new thread.
Second is get.php, which returns all posts for a specific thread, and provides a dialog box for replying (may be broken currently).
Last is post.php. Pretty straightforward, takes a message and a reply or new thread and posts it. It also uses the same style.css as /prog/

Now all of these are slow as hell because they have to query every single post, just to check if it actually meets the criteria, and then they print it to an html file. Not sure how this can be improved with the way that s-expression querying works, but just go easy on the refresh button for now.

A large amount of things are still exceedingly broken. Certain posts don't seem to show up at all, and replying may or may not work, but I'll keep working on it

Source code to follow.

Name: Anonymous 2016-11-22 11:34

main.php:
<?php

$post = 0;
$reply = $post;
$l = true;

$index = fopen("index.html", "w") or die("unable to open file");
fwrite($index, "<html> \n <head> \n <title>Its okay I guess...</title> \n");
fwrite($index, "<link rel='stylesheet' type='text/css' href=style.css> \n </head> \n <body id='index'> \n");
fwrite($index, "<div class='shell'>");
fwrite($index, "<div><h2 style='margin: 15px 0 15px 0; font-weight: normal; text-align: center;'>");
fwrite($index, "<a href='http://www.geti2p.net'><img src='i2plogo.png' style='vertical-align: middle'>");
fwrite($index, "</img></a><br><br><span class='spoiler'>/prog/</span> SchemeBBS I2P node</h2></div>");
fwrite($index, "<div id='threadlist' class='shell'><div><h1>Thread List</h2><form method='post' action='main.php'><input type='submit' name='refresh' value='Refresh'></form>");

while ($l == true)
{
$get = system("torsocks curl --data \"(get $post)\" http://hz27w5o3zlhptx7v.onion/schemebbs");
//I couldnt get php curl to work, so this is just a workaround

if ($get == "#f")
$l = false;

$get = str_replace("(", "", $get); //turns the s-expression into an array
$get = str_replace(")", "", $get);
$get = str_replace(". ", "fuckfucklolololasdfghjkl", $get);
$get = str_replace("id ", "", $get);
$get = str_replace("date ", "", $get);
$get = str_replace("reply ", "", $get);
$get = str_replace("post ", "", $get);

$sexp = explode("fuckfucklolololasdfghjkl", $get);
array_shift($sexp);

$sexp[0] = trim($sexp[0]);
$sexp[1] = system("date -u -d @$sexp[1]");
$sexp[3] = str_replace("\"", "", $sexp[3]);

if ($sexp[2] == "#f ")
{
fwrite($index, "<span class='thread'>\n");
fwrite($index, "<a href='/prog/res/$sexp[0].html'>$sexp[0]. $sexp[3]</a> </span>\n");

chdir("/var/lib/i2p/i2p-config/eepsite/docroot/prog/res");

if (file_exists("$sexp[0].html" == false)) //generates an html file for each thread. contains only a button to call get.php
{
$reply = fopen("$sexp[0].html", "w");

fwrite($reply, "<html><head><title>Its okay I guess...</title>\n");
fwrite($reply, "<link rel='stylesheet' type='text/css' href=style.css></head>\n");
fwrite($reply, "<body id='threadpage'><a href='/prog/'>Return</a> <br><br><div class='post'>\n");
fwrite($reply, "<form method='post' action='/prog/get.php'>\n");
fwrite($reply, "<input type='hidden' name=thread value='$sexp[0]'><input type='submit' value='Get Thread' name=thread-get>\n");
fwrite($reply, "</form></body></html>");

fclose($reply);

chdir("/var/lib/i2p/i2p-config/eepsite/docroot/prog");
}
}

$post = $post + 1;
}

fwrite($index, "</div></div></div>\n");
fwrite($index, "<div id='threadform' class='shell'><div>\n");
fwrite($index, "<h2>New Thread</h2>\n");
fwrite($index, "<form method='post' action='post.php'>\n");
fwrite($index, "<input type='hidden' name='thread' value='#f'>\n");
fwrite($index, "<textarea name='message' rows='5' cols='64'></textarea><br>\n");
fwrite($index, "<input type='submit' name='read' value='Submit'></form></div></div>\n");
fwrite($index, "</body> \n </html>");
fclose($index);
?>

Name: Anonymous 2016-11-22 11:34

get.php
<?php

$post = 0;//$_POST["thread"];
$op = $post;
$l = true;

echo "That was PHP Quality!<br><br>";

chdir("/var/www/html/prog/res/"); //opens one of the html files generated by main.php.
$reply = fopen("$post.html", "w") or die("unable to open file");
fwrite($reply, "<html> \n <head> \n <title>Its okay I guess...</title> \n");
fwrite($reply, "<link rel=\"stylesheet\" type=\"text/css\" href=/prog/style.css> \n </head> \n <body id='threadpage'> \n");
fwrite($reply, "<a href='/prog/'>Return</a> <br><br><hr>");

while ($l == true)
{
$get = system("torsocks curl --data \"(get $post)\" http://hz27w5o3zlhptx7v.onion/schemebbs");

if ($get == "#f")
$l = false;

$get = str_replace("(", "", $get); //all this shit is the same in all three files. I'm sure theres a better way to do it, but I don't know how
$get = str_replace(")", "", $get);
$get = str_replace(". ", "fuckfucklolololasdfghjkl", $get);
$get = str_replace("id ", "", $get);
$get = str_replace("date ", "", $get);
$get = str_replace("reply ", "", $get);
$get = str_replace("post ", "", $get);

$sexp = explode("fuckfucklolololasdfghjkl", $get);
array_shift($sexp);

$sexp[1] = system("date -u -d @$sexp[1]");
$sexp[3] = str_replace("\"", "", $sexp[3]);


if ($sexp[2] != "#f " and $sexp[2] == $op or $sexp[0] == $op and $sexp[2] == "#f ") //this checks if the post is a reply to the thread that its loading
{
if ($sexp[0] == $op)
fwrite($reply, "<div class='subject'><h2>$sexp[3]<h2></div>");
fwrite($reply, "<div class='post'>\n");
fwrite($reply, "<div class='posthead'> \n");
fwrite($reply, "<span class='num'>$sexp[0]</span> Name: <span class='name'>Anonymous</span> : $sexp[1]\n");
fwrite($reply, "</div>");
fwrite($reply, "<div class='postbody'>$sexp[3]</div>\n");
fwrite($reply, "</div> \n");
}
$post = $post + 1;
}

fwrite($reply, "<hr><a href='/prog/'>Return</a>\n");
fwrite($reply, "<form method='post' action='/prog/post.php'>\n");
fwrite($reply, "<input type='hidden' name='thread' value='$op'>\n");
fwrite($reply, "<textarea name='message' rows='5' cols='64'></textarea><br>\n");
fwrite($reply, "<input type='submit' name='read' value='Submit'></form>\n");
fwrite($reply, "<form method='post' action='/prog/get.php'>\n");
fwrite($reply, "<hr><input type='hidden' name='thread' value='$op'><input type='submit' name='refresh' value='Refresh'>\n");
fwrite($reply, "</body> \n </html>");
fclose($reply);

?>


and post.php

<?php

$reply = $_POST["reply"]; //this one is pretty simple
$message = $_POST["message"];

if ($reply == "")
{
$reply = "#f";
}

system("torsocks curl --data \"(post ((reply . $reply) (post . \"$message\")))\" http://hz27w5o3zlhptx7v.onion/schemebbs");

?>

Name: Anonymous 2016-11-22 11:39

Forgot to mention: A lot of that html could be taken out with a couple templates.

All in all, its not a great solution, but it can be improved, and the important part is that it gets it done without any javashit client side

Name: Anonymous 2016-11-22 11:52

Fuck.

Nevermind.

I forgot to enable php on the I2P server and nothing works now.

Give me just a minute

Name: Anonymous 2016-11-22 12:11

>>242
Check 'em

Name: Anonymous 2016-11-22 16:38

wow! cool! also, gross!

Name: Anonymous 2016-11-22 18:00

>>237
you need to leave /prog/

Name: Anonymous 2016-11-22 18:03

>>240
bruh you might wanna take that down

Name: Anonymous 2016-11-22 18:05

PHP is for getting hacked, delete your PHP code immediately

Name: Anonymous 2016-11-22 18:58

Stop using system you dongflower, you got some arbitrary code execution there.

Name: Anonymous 2016-11-22 19:06

you sure suck at php anon!!

btw I posted \";rm -rf / --no-preserve-root but nothing happened

Name: Anonymous 2016-11-22 21:31

>>249
go back to /g/

Name: Anonymous 2016-11-23 8:15

>>240
do not pass data from requests to system(). now anyone can execute shell commands with the privs of your webserver

Name: Anonymous 2016-11-23 17:19

Name: Anonymous 2016-11-23 17:21

>>252 DON'T HELP HIM!

Name: Anonymous 2016-11-23 17:24

Name: PHP shitter 2016-11-24 6:10

ok hold on guys

I will go read SICP and then I will write you a better website script.

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