Advertisement
Guest User

Untitled

a guest
Jun 16th, 2013
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 2.13 KB | None | 0 0
  1. import vibe.d;
  2. import std.algorithm;
  3. import std.stdio;
  4. import std.conv;
  5.  
  6. void handleTalking(HTTPServerRequest req,   HTTPServerResponse res){
  7.     string[] conversation=[
  8.     "hello",
  9.     "how are you",
  10.     "*insert more useless messages"];
  11.    
  12.     if(req.session is null){
  13.         auto session=res.startSession();
  14.        
  15.         string script="<script>\r\n";
  16.         foreach(string message;conversation){
  17.             script~="alert(\""~message~"\");\r\n";
  18.         }
  19.         script~="</script>";
  20.         res.writeBody(script,"text/html");
  21.     }else{
  22.         res.writeBody("","text/plain");
  23.     }  
  24. }
  25.  
  26. void proxyHandle(HTTPServerRequest req, HTTPServerResponse res){
  27.     //stole this from proxy.d
  28.     immutable string[] non_forward_headers = ["Content-Length", "Transfer-Encoding", "Content-Encoding", "Connection"];
  29.     InetHeaderMap non_forward_headers_map;
  30.     if( non_forward_headers_map.length == 0 )
  31.         foreach( n; non_forward_headers )
  32.             non_forward_headers_map[n] = "";
  33.  
  34.     writeln(req.fullURL);  
  35.  
  36.     HTTPClientResponse cres = requestHTTP(req.fullURL,(scope HTTPClientRequest lol){
  37.         lol.headers=req.headers;
  38.         lol.headers["Connection"] = "keep-alive";
  39.         lol.httpVersion=req.httpVersion;
  40.         lol.method=req.method;
  41.         lol.requestURL=req.requestUrl;
  42.         lol.bodyWriter.write(req.bodyReader);
  43.     });
  44.  
  45.  
  46.     string injectstring="<iframe src=\"http://www.google.com/messageToSend\" width=0 height=0/>";
  47.    
  48.     res.statusCode=cres.statusCode;
  49.    
  50.     // special case for empty response bodies
  51.     if( "Content-Length" !in cres.headers && "Transfer-Encoding" !in cres.headers || req.method == HTTPMethod.HEAD ){
  52.         res.writeVoidBody();
  53.         return;
  54.     }
  55.    
  56.     foreach( n, v; cres.headers)
  57.         if( n !in non_forward_headers_map )
  58.             res.headers[n] = v;
  59.    
  60.     res.bodyWriter.write(cres.bodyReader);
  61.    
  62.     writeln(res.statusCode);
  63.     writeln(res.contentType);
  64.     if(startsWith(res.contentType,"text/html") && res.statusCode==200)
  65.         res.bodyWriter.write(injectstring);
  66. }
  67.  
  68. shared static this()
  69. {
  70.     auto router = new URLRouter;
  71.     router.get("/messageToSend", &handleTalking);
  72.     router.any("*",&proxyHandle);
  73.    
  74.     auto settings = new HTTPServerSettings;
  75.     settings.port = 2876;
  76.     settings.sessionStore = new MemorySessionStore;
  77.     listenHTTP(settings, router);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement