2016-11-04 01:16:01 +03:00
// Copyright 2013 Beego Authors
// Copyright 2014 The Macaron Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
package session
import (
"bytes"
"crypto/rand"
"encoding/gob"
"io"
2019-08-23 19:40:30 +03:00
"github.com/unknwon/com"
2016-11-04 01:16:01 +03:00
)
func init ( ) {
gob . Register ( [ ] interface { } { } )
gob . Register ( map [ int ] interface { } { } )
gob . Register ( map [ string ] interface { } { } )
gob . Register ( map [ interface { } ] interface { } { } )
gob . Register ( map [ string ] string { } )
gob . Register ( map [ int ] string { } )
gob . Register ( map [ int ] int { } )
gob . Register ( map [ int ] int64 { } )
}
func EncodeGob ( obj map [ interface { } ] interface { } ) ( [ ] byte , error ) {
for _ , v := range obj {
gob . Register ( v )
}
buf := bytes . NewBuffer ( nil )
err := gob . NewEncoder ( buf ) . Encode ( obj )
return buf . Bytes ( ) , err
}
func DecodeGob ( encoded [ ] byte ) ( out map [ interface { } ] interface { } , err error ) {
buf := bytes . NewBuffer ( encoded )
err = gob . NewDecoder ( buf ) . Decode ( & out )
return out , err
}
2019-02-05 19:52:51 +03:00
// NOTE: A local copy in case of underlying package change
var alphanum = [ ] byte ( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" )
2016-11-04 01:16:01 +03:00
// generateRandomKey creates a random key with the given strength.
func generateRandomKey ( strength int ) [ ] byte {
k := make ( [ ] byte , strength )
if n , err := io . ReadFull ( rand . Reader , k ) ; n != strength || err != nil {
2019-02-05 19:52:51 +03:00
return com . RandomCreateBytes ( strength , alphanum ... )
2016-11-04 01:16:01 +03:00
}
return k
}