func decrypt(data []byte, key [32]byte) []byte { var nonce [24]byte if len(data) < len(nonce) { return nil } copy(nonce[:], data) res, ok := secretbox.Open(nil, data[len(nonce):], &nonce, &key) if !ok { return nil } return res }
func (s *httpService) getBackendSticky(req *http.Request) (*httputil.ClientConn, *http.Cookie) { cookie, err := req.Cookie(stickyCookie) if err != nil { return s.getNewBackendSticky() } data, err := base64.StdEncoding.DecodeString(cookie.Value) if err != nil { return s.getNewBackendSticky() } var nonce [24]byte if len(data) < len(nonce) { return s.getNewBackendSticky() } copy(nonce[:], data) res, ok := secretbox.Open(nil, data[len(nonce):], &nonce, s.cookieKey) if !ok { return s.getNewBackendSticky() } addr := string(res) ok = false for _, a := range s.ss.Addrs() { if a == addr { ok = true break } } if !ok { return s.getNewBackendSticky() } backend, err := net.Dial("tcp", string(addr)) if err != nil { return s.getNewBackendSticky() } return httputil.NewClientConn(backend, nil), nil }