...
1
21
22 package fosite
23
24 import (
25 "net/http"
26 )
27
28 func (f *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) {
29
30 wh := rw.Header()
31 rh := resp.GetHeader()
32 for k := range rh {
33 wh.Set(k, rh.Get(k))
34 }
35
36 wh.Set("Cache-Control", "no-store")
37 wh.Set("Pragma", "no-cache")
38
39 redir := ar.GetRedirectURI()
40 switch rm := ar.GetResponseMode(); rm {
41 case ResponseModeFormPost:
42
43 rw.Header().Add("Content-Type", "text/html;charset=UTF-8")
44 WriteAuthorizeFormPostResponse(redir.String(), resp.GetParameters(), GetPostFormHTMLTemplate(*f), rw)
45 return
46 case ResponseModeQuery, ResponseModeDefault:
47
48 q := redir.Query()
49 rq := resp.GetParameters()
50 for k := range rq {
51 q.Set(k, rq.Get(k))
52 }
53 redir.RawQuery = q.Encode()
54 sendRedirect(redir.String(), rw)
55 return
56 case ResponseModeFragment:
57
58
59 redir.Fragment = ""
60
61 u := redir.String()
62 fr := resp.GetParameters()
63 if len(fr) > 0 {
64 u = u + "#" + fr.Encode()
65 }
66 sendRedirect(u, rw)
67 return
68 default:
69 if f.ResponseModeHandler().ResponseModes().Has(rm) {
70 f.ResponseModeHandler().WriteAuthorizeResponse(rw, ar, resp)
71 return
72 }
73 }
74 }
75
76
77
78
79
80
81 func sendRedirect(url string, rw http.ResponseWriter) {
82 rw.Header().Set("Location", url)
83 rw.WriteHeader(http.StatusSeeOther)
84 }
85
View as plain text