HandleHTTP handle all routes, used for proxying them to controller
|
func ( s * Server ) HandleHTTP ( w http . ResponseWriter , req * http . Request ) {
log . Println ( "Proxying to" , s . Proxy )
tempURL , _ := url . Parse ( s . Proxy )
req . URL . Host = tempURL . Host
req . URL . Scheme = tempURL . Scheme
req . URL . Path = strings . Replace ( req . URL . Path , APIPrefix , s . ProxyPrefix , 1 )
req . Host = tempURL . Host
resp , err := s . Transport . RoundTrip ( req )
if err != nil {
http . Error ( w , err . Error ( ) , http . StatusServiceUnavailable )
return
}
defer func ( ) {
err := resp . Body . Close ( )
if err != nil {
log . Println ( "Unable to close response body" )
}
} ( )
copyHeader ( w . Header ( ) , resp . Header )
w . WriteHeader ( resp . StatusCode )
_ , err = io . Copy ( w , resp . Body )
if err != nil {
log . Println ( "Error copying response body" )
}
}
func copyHeader ( dst , src http . Header ) {
for k , vv := range src {
for _ , v := range vv {
dst . Add ( k , v )
}
}
}
|