| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package apikeygen
- import (
- "encoding/base64"
- "encoding/json"
- "errors"
- "github.com/grafana/grafana/pkg/util"
- )
- var ErrInvalidApiKey = errors.New("Invalid Api Key")
- type KeyGenResult struct {
- HashedKey string
- ClientSecret string
- }
- type ApiKeyJson struct {
- Key string `json:"k"`
- Name string `json:"n"`
- OrgId int64 `json:"id"`
- }
- func New(orgId int64, name string) KeyGenResult {
- jsonKey := ApiKeyJson{}
- jsonKey.OrgId = orgId
- jsonKey.Name = name
- jsonKey.Key = util.GetRandomString(32)
- result := KeyGenResult{}
- result.HashedKey = util.EncodePassword(jsonKey.Key, name)
- jsonString, _ := json.Marshal(jsonKey)
- result.ClientSecret = base64.StdEncoding.EncodeToString(jsonString)
- return result
- }
- func Decode(keyString string) (*ApiKeyJson, error) {
- jsonString, err := base64.StdEncoding.DecodeString(keyString)
- if err != nil {
- return nil, ErrInvalidApiKey
- }
- var keyObj ApiKeyJson
- err = json.Unmarshal(jsonString, &keyObj)
- if err != nil {
- return nil, ErrInvalidApiKey
- }
- return &keyObj, nil
- }
- func IsValid(key *ApiKeyJson, hashedKey string) bool {
- check := util.EncodePassword(key.Key, key.Name)
- return check == hashedKey
- }
|