Return WWW-Authenticate header
On invalide credentials return WWW-Authenticate the same way btcd does. Pointed out by @davec in decred/dcrwallet#14
This commit is contained in:
parent
515cbc69ce
commit
aec660c749
1 changed files with 8 additions and 2 deletions
|
@ -119,6 +119,12 @@ type Server struct {
|
||||||
requestShutdownChan chan struct{}
|
requestShutdownChan chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// jsonAuthFail sends a message back to the client if the http auth is rejected.
|
||||||
|
func jsonAuthFail(w http.ResponseWriter) {
|
||||||
|
w.Header().Add("WWW-Authenticate", `Basic realm="btcwallet RPC"`)
|
||||||
|
http.Error(w, "401 Unauthorized.", http.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
// NewServer creates a new server for serving legacy RPC client connections,
|
// NewServer creates a new server for serving legacy RPC client connections,
|
||||||
// both HTTP POST and websocket.
|
// both HTTP POST and websocket.
|
||||||
func NewServer(opts *Options, walletLoader *wallet.Loader, listeners []net.Listener) *Server {
|
func NewServer(opts *Options, walletLoader *wallet.Loader, listeners []net.Listener) *Server {
|
||||||
|
@ -162,7 +168,7 @@ func NewServer(opts *Options, walletLoader *wallet.Loader, listeners []net.Liste
|
||||||
|
|
||||||
if err := server.checkAuthHeader(r); err != nil {
|
if err := server.checkAuthHeader(r); err != nil {
|
||||||
log.Warnf("Unauthorized client connection attempt")
|
log.Warnf("Unauthorized client connection attempt")
|
||||||
http.Error(w, "401 Unauthorized.", http.StatusUnauthorized)
|
jsonAuthFail(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
server.wg.Add(1)
|
server.wg.Add(1)
|
||||||
|
@ -183,7 +189,7 @@ func NewServer(opts *Options, walletLoader *wallet.Loader, listeners []net.Liste
|
||||||
// being missing, immediately terminate the connection.
|
// being missing, immediately terminate the connection.
|
||||||
log.Warnf("Disconnecting improperly authorized " +
|
log.Warnf("Disconnecting improperly authorized " +
|
||||||
"websocket client")
|
"websocket client")
|
||||||
http.Error(w, "401 Unauthorized.", http.StatusUnauthorized)
|
jsonAuthFail(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue