5
5
"net"
6
6
"net/http"
7
7
"net/url"
8
+ "time"
8
9
)
9
10
10
11
type TokenResponse struct {
@@ -27,6 +28,8 @@ func (h *HandlerWithContext) ServeHTTP(w http.ResponseWriter, r *http.Request) {
27
28
if r .URL .Path == "/auth" {
28
29
token := r .URL .Query ().Get ("token" )
29
30
h .resultChan <- TokenResponse {token : token , err : nil }
31
+ _ , _ = fmt .Fprintf (w , "<html><head><script>alert('goobers')</script></head></html>" )
32
+
30
33
h .Server .Stop ()
31
34
}
32
35
}
@@ -37,6 +40,11 @@ func NewServer(authURL url.URL, addr string, handler http.Handler) *Server {
37
40
httpServer : & http.Server {
38
41
Addr : addr ,
39
42
Handler : handler ,
43
+
44
+ ReadTimeout : 1 * time .Second ,
45
+ WriteTimeout : 1 * time .Second ,
46
+ IdleTimeout : 30 * time .Second ,
47
+ ReadHeaderTimeout : 2 * time .Second ,
40
48
},
41
49
resultChan : make (chan TokenResponse ),
42
50
stopChan : make (chan struct {}),
@@ -47,21 +55,25 @@ func NewServer(authURL url.URL, addr string, handler http.Handler) *Server {
47
55
48
56
func (s * Server ) Start () {
49
57
go func () {
50
- fmt .Printf ("HTTP server listening on %s\n " , s .httpServer .Addr )
58
+ _ , _ = fmt .Printf ("HTTP server listening on %s\n " , s .httpServer .Addr )
51
59
if err := s .httpServer .ListenAndServe (); err != http .ErrServerClosed {
52
60
s .resultChan <- TokenResponse {token : "" , err : err }
53
61
}
54
62
}()
55
63
}
56
64
57
65
func (s * Server ) Stop () {
58
- s .httpServer .Close ()
66
+ err := s .httpServer .Close ()
67
+ if err != nil {
68
+ _ , _ = fmt .Printf ("Unable to stop HTTP Server" )
69
+ }
70
+
59
71
close (s .stopChan )
60
72
}
61
73
62
74
func (s * Server ) Wait () {
63
75
<- s .stopChan
64
- fmt .Println ("HTTP server stopped." )
76
+ _ , _ = fmt .Println ("HTTP server stopped." )
65
77
}
66
78
67
79
func getListenAddr (port int ) string {
@@ -70,7 +82,6 @@ func getListenAddr(port int) string {
70
82
71
83
func getServer (authURL url.URL ) (* Server , error ) {
72
84
port , err := getAvailablePort ()
73
-
74
85
if err != nil {
75
86
return & Server {}, err
76
87
}
@@ -79,20 +90,21 @@ func getServer(authURL url.URL) (*Server, error) {
79
90
80
91
server .Start ()
81
92
82
- server .authURL .Query ().Add ("callback" , server .GenerateCallbackPath ())
93
+ values := server .authURL .Query ()
94
+ values .Add ("callback" , server .GenerateCallbackPath ())
95
+
96
+ server .authURL .RawQuery = values .Encode ()
83
97
84
98
return server , nil
85
99
}
86
100
87
101
func getAvailablePort () (int , error ) {
88
102
addr , err := net .ResolveTCPAddr ("tcp" , "127.0.0.1:0" )
89
-
90
103
if err != nil {
91
104
return 0 , err
92
105
}
93
106
94
107
l , err := net .ListenTCP ("tcp" , addr )
95
-
96
108
if err != nil {
97
109
return 0 , err
98
110
}
0 commit comments