in auth/login.go [146:191]
func handleCodeResponse(ln net.Listener, stateCheck string) (string, error) {
conn, err := ln.Accept()
if err != nil {
return "", err
}
srvConn := httputil.NewServerConn(conn, nil)
defer srvConn.Close()
req, err := srvConn.Read()
if err != nil {
return "", err
}
code := req.URL.Query().Get("code")
state := req.URL.Query().Get("state")
resp := &http.Response{
StatusCode: 200,
Proto: "HTTP/1.1",
ProtoMajor: 1,
ProtoMinor: 1,
Close: true,
ContentLength: -1, // designates unknown length
}
defer srvConn.Write(req, resp)
// If the code couldn't be obtained, inform the user via the browser and
// return an error.
// TODO i18n?
if code == "" {
err := fmt.Errorf("Code not present in response: %s", req.URL.String())
resp.Body = getResponseBody("ERROR: Authentication code not present in response.")
return "", err
}
if state != stateCheck {
err := fmt.Errorf("Invalid State")
resp.StatusCode = 400
resp.Body = getResponseBody("ERROR: State parameter is invalid.")
return "", err
}
resp.Body = getResponseBody("Success! You may now close your browser.")
return code, nil
}