1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE> [99s-extend] Rewriting URLs
</TITLE>
<LINK REL="Index" HREF="index.html" >
<LINK REL="made" HREF="mailto:extend%40lists.ninenines.eu?Subject=Re%3A%20%5B99s-extend%5D%20Rewriting%20URLs&In-Reply-To=%3C1422309249.26262.15.camel%40gmail.com%3E">
<META NAME="robots" CONTENT="index,nofollow">
<style type="text/css">
pre {
white-space: pre-wrap; /* css-2.1, curent FF, Opera, Safari */
}
</style>
<META http-equiv="Content-Type" content="text/html; charset=us-ascii">
<LINK REL="Previous" HREF="000498.html">
<LINK REL="Next" HREF="000502.html">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H1>[99s-extend] Rewriting URLs</H1>
<B>Paul Dickson</B>
<A HREF="mailto:extend%40lists.ninenines.eu?Subject=Re%3A%20%5B99s-extend%5D%20Rewriting%20URLs&In-Reply-To=%3C1422309249.26262.15.camel%40gmail.com%3E"
TITLE="[99s-extend] Rewriting URLs">pdtwonotes at gmail.com
</A><BR>
<I>Mon Jan 26 22:54:09 CET 2015</I>
<P><UL>
<LI>Previous message: <A HREF="000498.html">[99s-extend] Rewriting URLs
</A></li>
<LI>Next message: <A HREF="000502.html">[99s-extend] Rewriting URLs
</A></li>
<LI> <B>Messages sorted by:</B>
<a href="date.html#501">[ date ]</a>
<a href="thread.html#501">[ thread ]</a>
<a href="subject.html#501">[ subject ]</a>
<a href="author.html#501">[ author ]</a>
</LI>
</UL>
<HR>
<!--beginarticle-->
<PRE>On Mon, 2015-01-26 at 11:26 +0100, Loïc Hoguin wrote:
><i> You have to change path_info too if your middleware is after the router.
</I>><i>
</I>I have added that. My cowboy:start_http parameters include this:
{middlewares, [cowboy_router, bz_libmap, cowboy_handler]}
which I think means bz_libmap will get called on *every* request. This
seems to work. Among the dispatch rules is this line:
{"/music/[...]", cowboy_static, {dir, "", ""}},
so any request starting with "/music/ will do a standard file fetch.
But due to the middlewares setup, bz_libmap will get a chance to
look at it first.
bz_libmap checks the path to see if it starts with "/music/", and if
not, it just returns {ok,Req,Env} and lets processing proceed normally.
This works, and other dispatch rules take care of it, usually fetching
files from priv_dir.
But if bz_libmap sees "/music/" at the start of the URL it transforms
the URL into something else, an absolute filename typically of an mp3
file. This is what I want cowboy_static to process. Hopefully, this
does not run through the dispatch rules again.
bz_libmap computes a new path and a new path_info and sets them with a
cowboy_req:set call. I am not sure what path_info should look like at
this point, because the path is no longer covered by any of the dispatch
rules. I do not want it to be, as that would allow a browser to fetch
any file in the file system, unchecked.
But what happens is any attempts to fetch /music/Anything result in a
status 400 error.
The other approach I was considering was to make my own handler, based
on cowboy_static, that does the URL/File transformation internally. But
even that might not be right, since it eventually upgrades to
cowboy_rest and there is more processing after that. This approach
seems inelegant.
The actual only call to file:open I found in all of cowboy is in
cowboy_spdy.
</PRE>
<!--endarticle-->
<HR>
<P><UL>
<!--threads-->
<LI>Previous message: <A HREF="000498.html">[99s-extend] Rewriting URLs
</A></li>
<LI>Next message: <A HREF="000502.html">[99s-extend] Rewriting URLs
</A></li>
<LI> <B>Messages sorted by:</B>
<a href="date.html#501">[ date ]</a>
<a href="thread.html#501">[ thread ]</a>
<a href="subject.html#501">[ subject ]</a>
<a href="author.html#501">[ author ]</a>
</LI>
</UL>
<hr>
<a href="https://lists.ninenines.eu/listinfo/extend">More information about the Extend
mailing list</a><br>
</body></html>
|