Skip to content

Instantly share code, notes, and snippets.

@minitech
Created April 30, 2013 18:44

Revisions

  1. minitech created this gist Apr 30, 2013.
    67 changes: 67 additions & 0 deletions unsyntax.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    with(evil()) {
    get /user
    (response) (
    response.write("Hello, world!")
    )

    post /user
    (response) (
    response.write("Unauthorized!")
    )

    serve(8080)
    }

    function evil() {
    var state = 0;
    var method;
    var path;
    var argumentName;
    var responses = {};

    return Proxy.create({
    getPropertyDescriptor: function(name) {
    if(name === "serve") {
    return {value: function(port) {
    return require("http").createServer(function(req, res) {
    var content = responses[req.method] && responses[req.method][req.url];

    if(!content) {
    res.writeHead(404, {"Content-Type": "text/html"});
    res.end("<h1>404 Not Found</h1>");
    return;
    }

    res.writeHead(200, {"Content-Type": "text/html"});
    res.end(content);
    }).listen(port);
    }};
    }

    switch(state / 2 | 0) {
    case 0:
    method = name.toUpperCase();
    state++;
    return {value: 1};
    case 1:
    path = "/" + name;
    state++;
    return {value: function() {
    return function(content) {
    if(!responses[method]) responses[method] = {};
    responses[method][path] = content;
    state = 0;
    };
    }};
    case 2:
    argumentName = name;
    state++;
    return {value: null};
    case 3:
    if(name === argumentName) {
    return {value: {write: function(x) { return x; }}};
    }
    }
    }
    });
    };