42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
// +build !go1.4
 | 
						|
 | 
						|
package handlers
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/base64"
 | 
						|
	"net/http"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// NOTE(stevvooe): This is basic auth support from go1.4 present to ensure we
 | 
						|
// can compile on go1.3 and earlier.
 | 
						|
 | 
						|
// BasicAuth returns the username and password provided in the request's
 | 
						|
// Authorization header, if the request uses HTTP Basic Authentication.
 | 
						|
// See RFC 2617, Section 2.
 | 
						|
func basicAuth(r *http.Request) (username, password string, ok bool) {
 | 
						|
	auth := r.Header.Get("Authorization")
 | 
						|
	if auth == "" {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	return parseBasicAuth(auth)
 | 
						|
}
 | 
						|
 | 
						|
// parseBasicAuth parses an HTTP Basic Authentication string.
 | 
						|
// "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" returns ("Aladdin", "open sesame", true).
 | 
						|
func parseBasicAuth(auth string) (username, password string, ok bool) {
 | 
						|
	if !strings.HasPrefix(auth, "Basic ") {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	c, err := base64.StdEncoding.DecodeString(strings.TrimPrefix(auth, "Basic "))
 | 
						|
	if err != nil {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	cs := string(c)
 | 
						|
	s := strings.IndexByte(cs, ':')
 | 
						|
	if s < 0 {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	return cs[:s], cs[s+1:], true
 | 
						|
}
 |