More referrer fixes

db4
Slava Pestov 2008-09-22 17:15:59 -05:00
parent 977dd43d46
commit 18a44674f2
4 changed files with 16 additions and 10 deletions

View File

@ -1,7 +1,7 @@
IN: furnace.tests
USING: http.server.dispatchers http.server.responses
USING: http http.server.dispatchers http.server.responses
http.server furnace tools.test kernel namespaces accessors
io.streams.string ;
io.streams.string urls ;
TUPLE: funny-dispatcher < dispatcher ;
: <funny-dispatcher> funny-dispatcher new-dispatcher ;
@ -33,3 +33,9 @@ M: base-path-check-responder call-responder*
[ "<input type='hidden' name='foo' value='&amp;&amp;&amp;'/>" ]
[ [ "&&&" "foo" hidden-form-field ] with-string-writer ]
unit-test
[ f ] [ <request> request [ referrer ] with-variable ] unit-test
[ t ] [ URL" http://foo" dup url [ same-host? ] with-variable ] unit-test
[ f ] [ f URL" http://foo" url [ same-host? ] with-variable ] unit-test

View File

@ -89,17 +89,19 @@ M: object modify-form drop ;
] }
} case ;
: referrer ( -- referrer )
: referrer ( -- referrer/f )
#! Typo is intentional, its in the HTTP spec!
"referer" request get header>> at
>url ensure-port [ remap-port ] change-port ;
dup [ >url ensure-port [ remap-port ] change-port ] when ;
: user-agent ( -- user-agent )
"user-agent" request get header>> at "" or ;
: same-host? ( url -- ? )
url get
[ [ protocol>> ] [ host>> ] [ port>> ] tri 3array ] bi@ = ;
dup [
url get
[ [ protocol>> ] [ host>> ] [ port>> ] tri 3array ] bi@ =
] when ;
: cookie-client-state ( key request -- value/f )
swap get-cookie dup [ value>> ] when ;

View File

@ -14,4 +14,4 @@ M: referrer-check call-responder*
[ 2drop 403 "Bad referrer" <trivial-response> ] if ;
: <check-form-submissions> ( responder -- responder' )
[ same-host? post-request? not or ] <referrer-check> ;
[ post-request? [ same-host? ] [ drop f ] if ] <referrer-check> ;

View File

@ -212,15 +212,13 @@ PRIVATE>
[ [ host>> ] [ port>> ] bi <inet> ] [ protocol>> ] bi
secure-protocol? [ <secure> ] when ;
ERROR: no-protocol-found protocol ;
: protocol-port ( protocol -- port )
{
{ "http" [ 80 ] }
{ "https" [ 443 ] }
{ "feed" [ 80 ] }
{ "ftp" [ 21 ] }
[ no-protocol-found ]
[ drop f ]
} case ;
: ensure-port ( url -- url' )