Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import vibe.d;
- import std.algorithm;
- import std.stdio;
- import std.conv;
- void handleTalking(HTTPServerRequest req, HTTPServerResponse res){
- string[] conversation=[
- "hello",
- "how are you",
- "*insert more useless messages"];
- if(req.session is null){
- auto session=res.startSession();
- string script="<script>\r\n";
- foreach(string message;conversation){
- script~="alert(\""~message~"\");\r\n";
- }
- script~="</script>";
- res.writeBody(script,"text/html");
- }else{
- res.writeBody("","text/plain");
- }
- }
- void proxyHandle(HTTPServerRequest req, HTTPServerResponse res){
- //stole this from proxy.d
- immutable string[] non_forward_headers = ["Content-Length", "Transfer-Encoding", "Content-Encoding", "Connection"];
- InetHeaderMap non_forward_headers_map;
- if( non_forward_headers_map.length == 0 )
- foreach( n; non_forward_headers )
- non_forward_headers_map[n] = "";
- writeln(req.fullURL);
- HTTPClientResponse cres = requestHTTP(req.fullURL,(scope HTTPClientRequest lol){
- lol.headers=req.headers;
- lol.headers["Connection"] = "keep-alive";
- lol.httpVersion=req.httpVersion;
- lol.method=req.method;
- lol.requestURL=req.requestUrl;
- lol.bodyWriter.write(req.bodyReader);
- });
- string injectstring="<iframe src=\"http://www.google.com/messageToSend\" width=0 height=0/>";
- res.statusCode=cres.statusCode;
- // special case for empty response bodies
- if( "Content-Length" !in cres.headers && "Transfer-Encoding" !in cres.headers || req.method == HTTPMethod.HEAD ){
- res.writeVoidBody();
- return;
- }
- foreach( n, v; cres.headers)
- if( n !in non_forward_headers_map )
- res.headers[n] = v;
- res.bodyWriter.write(cres.bodyReader);
- writeln(res.statusCode);
- writeln(res.contentType);
- if(startsWith(res.contentType,"text/html") && res.statusCode==200)
- res.bodyWriter.write(injectstring);
- }
- shared static this()
- {
- auto router = new URLRouter;
- router.get("/messageToSend", &handleTalking);
- router.any("*",&proxyHandle);
- auto settings = new HTTPServerSettings;
- settings.port = 2876;
- settings.sessionStore = new MemorySessionStore;
- listenHTTP(settings, router);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement