diff options
author | Matt Silverlock <matt@eatsleeprepeat.net> | 2016-04-22 16:43:38 +0300 |
---|---|---|
committer | Matt Silverlock <matt@eatsleeprepeat.net> | 2016-04-22 16:43:38 +0300 |
commit | a29e8718b61897fd1e4c14d8cf4d4baf173a26e8 (patch) | |
tree | a2d5a55f79ac3774deb64cce6b2917357968929f | |
parent | 8dacca26977607e637262eb66b15b7d39f2d3009 (diff) | |
parent | 6ac16e3b5cbfaeb260678ec53e1e052a50b01232 (diff) |
[feature] NopEncoder: accept/return []byte.
[feature] NopEncoder: accept/return []byte.
-rw-r--r-- | doc.go | 2 | ||||
-rw-r--r-- | securecookie.go | 25 |
2 files changed, 26 insertions, 1 deletions
@@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. /* -Package gorilla/securecookie encodes and decodes authenticated and optionally +Package securecookie encodes and decodes authenticated and optionally encrypted cookie values. Secure cookies can't be forged, because their values are validated using HMAC. diff --git a/securecookie.go b/securecookie.go index be43e9d..83dd606 100644 --- a/securecookie.go +++ b/securecookie.go @@ -101,6 +101,7 @@ var ( errTimestampTooNew = cookieError{typ: decodeError, msg: "timestamp is too new"} errTimestampExpired = cookieError{typ: decodeError, msg: "expired timestamp"} errDecryptionFailed = cookieError{typ: decodeError, msg: "the value could not be decrypted"} + errValueNotByte = cookieError{typ: decodeError, msg: "value not a []byte."} // ErrMacInvalid indicates that cookie decoding failed because the HMAC // could not be extracted and verified. Direct use of this error @@ -181,6 +182,11 @@ type GobEncoder struct{} // json.Unmarshaller interfaces. type JSONEncoder struct{} +// NopEncoder does not encode cookie values, and instead simply accepts a []byte +// (as an interface{}) and returns a []byte. This is particularly useful when +// you encoding an object upstream and do not wish to re-encode it. +type NopEncoder struct{} + // MaxLength restricts the maximum length, in bytes, for the cookie value. // // Default is 4096, which is the maximum value accepted by Internet Explorer. @@ -457,6 +463,25 @@ func (e JSONEncoder) Deserialize(src []byte, dst interface{}) error { return nil } +// Serialize passes a []byte through as-is. +func (e NopEncoder) Serialize(src interface{}) ([]byte, error) { + if b, ok := src.([]byte); ok { + return b, nil + } + + return nil, errValueNotByte +} + +// Deserialize passes a []byte through as-is. +func (e NopEncoder) Deserialize(src []byte, dst interface{}) error { + if _, ok := dst.([]byte); ok { + dst = src + return nil + } + + return errValueNotByte +} + // Encoding ------------------------------------------------------------------- // encode encodes a value using base64. |