server {
    listen 80;

    resolver ${RESOLVER} ipv6=off;

    location /_matrix/push/v1/notify {
        set $target '';
        if ($request_method = GET ) {
            return 200 '{"gateway":"matrix"}';
        }
        access_by_lua_block {
            local cjson = require("cjson")
            ngx.req.read_body()
            local body = ngx.req.get_body_data()
            local parsedBody = cjson.decode(body)
            ngx.var.target = parsedBody["notification"]["devices"][1]["pushkey"]
            ngx.req.set_body_data(body)
        }
        proxy_set_header Content-Type application/json;
        proxy_set_header Host $host;
        proxy_pass $target;
        proxy_ssl_server_name on;
    }

    location /UP {
        access_by_lua_block{
            local json = require("cjson")
            ngx.req.read_body()
            local req = ngx.req.get_body_data()
            local newreq = { ["message"] = req }
            local body = json.encode(newreq)
            ngx.req.set_body_data(body)
        }

        proxy_set_header  Content-Type application/json;
        proxy_set_header  Host $host;
        proxy_pass        ${GOTIFY_URL}/message;
        proxy_ssl_server_name on;
    }
}