eyre: don't lose redirect upon failing login
If we failed the password check, the login page served to us would never
include any redirect details, even if they were there in the original request.
Now we simply (attempt to) parse out the redirect field a little earlier.
?~ parsed
(return-static-data-on-duct 400 'text/html' (login-page ~ our))
::
+ =/ redirect=(unit @t) (get-header:http 'redirect' u.parsed)
?~ password=(get-header:http 'password' u.parsed)
- (return-static-data-on-duct 400 'text/html' (login-page ~ our))
+ (return-static-data-on-duct 400 'text/html' (login-page redirect our))
:: check that the password is correct
::
?. =(u.password code)
- (return-static-data-on-duct 400 'text/html' (login-page ~ our))
+ (return-static-data-on-duct 400 'text/html' (login-page redirect our))
:: mint a unique session cookie
::
=/ session=@uv
=- out(moves [- moves.out])
[duct %pass /sessions/expire %b %wait expires-at]
::
- ?~ redirect=(get-header:http 'redirect' u.parsed)
+ ?~ redirect
%- handle-response
:* %start
:- status-code=200
