62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
// Copyright 2018 sshfp authors. All rights reserved.
|
|
// Use of this source code is governed by the MIT
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package sshfp
|
|
|
|
// Cache for DNS SSHFP entries
|
|
type Cache interface {
|
|
Add(e ...*Entry) error
|
|
Get(hostname string, algo ...Algorithm) (Entries, bool)
|
|
Remove(e *Entry) error
|
|
}
|
|
|
|
// MemoryCache is a in-memory cache
|
|
type MemoryCache struct {
|
|
c map[string]Entries
|
|
}
|
|
|
|
// NewMemoryCache creates a new in-memory cache
|
|
func NewMemoryCache() (*MemoryCache, error) {
|
|
return &MemoryCache{c: make(map[string]Entries)}, nil
|
|
}
|
|
|
|
func (mc *MemoryCache) add(hostname string, e *Entry) {
|
|
entries := mc.c[hostname]
|
|
if len(entries) == 0 {
|
|
entries = Entries{}
|
|
mc.c[hostname] = entries
|
|
}
|
|
mc.c[hostname] = append(mc.c[hostname], e)
|
|
}
|
|
|
|
// Add entry to the cache
|
|
func (mc *MemoryCache) Add(e ...*Entry) error {
|
|
for _, entry := range e {
|
|
mc.add(entry.Hostname, entry)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Get entries from the cache
|
|
func (mc *MemoryCache) Get(hostname string, algo ...Algorithm) (Entries, bool) {
|
|
entries, ok := mc.c[hostname]
|
|
if len(algo) == 1 {
|
|
algorithm := uint8(algo[0])
|
|
fentries := Entries{}
|
|
for _, entry := range entries {
|
|
if entry.Algorithm != algorithm {
|
|
continue
|
|
}
|
|
fentries = append(fentries, entry)
|
|
}
|
|
entries = fentries
|
|
}
|
|
return entries, ok
|
|
}
|
|
|
|
// Remove entry from the cache
|
|
func (mc *MemoryCache) Remove(e *Entry) error {
|
|
return nil
|
|
}
|