diff options
Diffstat (limited to 'securecookie.go')
-rw-r--r-- | securecookie.go | 25 |
1 files changed, 25 insertions, 0 deletions
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. |