package database import ( "fmt" "github.com/akrylysov/pogreb" "github.com/go-acme/lego/v4/certificate" "xorm.io/xorm" // register sql driver _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" _ "github.com/mattn/go-sqlite3" ) var _ CertDB = xDB{} type xDB struct { engine *xorm.Engine } func NewXormDB(dbType, dbConn string) (CertDB, error) { if !supportedDriver(dbType) { return nil, fmt.Errorf("not supported db type '%s'", dbType) } e, err := xorm.NewEngine(dbType, dbConn) if err != nil { return nil, err } if err := e.Sync2(new(Cert)); err != nil { return nil, fmt.Errorf("cound not sync db model :%w", err) } return &xDB{ engine: e, }, nil } func (x xDB) Close() error { return x.engine.Close() } func (x xDB) Put(name string, cert *certificate.Resource) error { // TODO implement me panic("implement me") } func (x xDB) Get(name string) (*certificate.Resource, error) { // TODO implement me panic("implement me") } func (x xDB) Delete(key string) error { // TODO implement me panic("implement me") } func (x xDB) Compact() (string, error) { // TODO implement me panic("implement me") } func (x xDB) Items() *pogreb.ItemIterator { // TODO implement me panic("implement me") } // Supported database drivers const ( DriverSqlite = "sqlite3" DriverMysql = "mysql" DriverPostgres = "postgres" ) func supportedDriver(driver string) bool { switch driver { case DriverMysql, DriverPostgres, DriverSqlite: return true default: return false } }