GoBlog/autocertCache.go

39 lines
1.0 KiB
Go

package main
import (
"context"
"database/sql"
"time"
"golang.org/x/crypto/acme/autocert"
)
type autocertCache struct{}
func (c *autocertCache) Get(ctx context.Context, key string) ([]byte, error) {
var data []byte
row, err := appDbQueryRow("select data from autocert where key = @key", sql.Named("key", key))
if err != nil {
return nil, err
}
err = row.Scan(&data)
if err == sql.ErrNoRows {
return nil, autocert.ErrCacheMiss
}
return data, err
}
func (c *autocertCache) Put(ctx context.Context, key string, data []byte) error {
startWritingToDb()
defer finishWritingToDb()
_, err := appDbExec("insert or replace into autocert (key, data, created) values (@key, @data, @created)", sql.Named("key", key), sql.Named("data", data), sql.Named("created", time.Now().String()))
return err
}
func (c *autocertCache) Delete(ctx context.Context, key string) error {
startWritingToDb()
defer finishWritingToDb()
_, err := appDbExec("delete from autocert where key = @key", sql.Named("key", key))
return err
}