Maint: alpine package interface rework
- return concrete struct type - split interface is sub-interfaces
This commit is contained in:
@@ -2,24 +2,25 @@
|
|||||||
package alpine
|
package alpine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"os/user"
|
"os/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Configurator interface {
|
var _ Alpiner = (*Alpine)(nil)
|
||||||
CreateUser(username string, uid int) (createdUsername string, err error)
|
|
||||||
Version(ctx context.Context) (version string, err error)
|
type Alpiner interface {
|
||||||
|
UserCreater
|
||||||
|
VersionGetter
|
||||||
}
|
}
|
||||||
|
|
||||||
type configurator struct {
|
type Alpine struct {
|
||||||
alpineReleasePath string
|
alpineReleasePath string
|
||||||
passwdPath string
|
passwdPath string
|
||||||
lookupID func(uid string) (*user.User, error)
|
lookupID func(uid string) (*user.User, error)
|
||||||
lookup func(username string) (*user.User, error)
|
lookup func(username string) (*user.User, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConfigurator() Configurator {
|
func New() *Alpine {
|
||||||
return &configurator{
|
return &Alpine{
|
||||||
alpineReleasePath: "/etc/alpine-release",
|
alpineReleasePath: "/etc/alpine-release",
|
||||||
passwdPath: "/etc/passwd",
|
passwdPath: "/etc/passwd",
|
||||||
lookupID: user.LookupId,
|
lookupID: user.LookupId,
|
||||||
|
|||||||
@@ -12,10 +12,14 @@ var (
|
|||||||
ErrUserAlreadyExists = errors.New("user already exists")
|
ErrUserAlreadyExists = errors.New("user already exists")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type UserCreater interface {
|
||||||
|
CreateUser(username string, uid int) (createdUsername string, err error)
|
||||||
|
}
|
||||||
|
|
||||||
// CreateUser creates a user in Alpine with the given UID.
|
// CreateUser creates a user in Alpine with the given UID.
|
||||||
func (c *configurator) CreateUser(username string, uid int) (createdUsername string, err error) {
|
func (a *Alpine) CreateUser(username string, uid int) (createdUsername string, err error) {
|
||||||
UIDStr := strconv.Itoa(uid)
|
UIDStr := strconv.Itoa(uid)
|
||||||
u, err := c.lookupID(UIDStr)
|
u, err := a.lookupID(UIDStr)
|
||||||
_, unknownUID := err.(user.UnknownUserIdError)
|
_, unknownUID := err.(user.UnknownUserIdError)
|
||||||
if err != nil && !unknownUID {
|
if err != nil && !unknownUID {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -28,7 +32,7 @@ func (c *configurator) CreateUser(username string, uid int) (createdUsername str
|
|||||||
return u.Username, nil
|
return u.Username, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
u, err = c.lookup(username)
|
u, err = a.lookup(username)
|
||||||
_, unknownUsername := err.(user.UnknownUserError)
|
_, unknownUsername := err.(user.UnknownUserError)
|
||||||
if err != nil && !unknownUsername {
|
if err != nil && !unknownUsername {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -39,7 +43,7 @@ func (c *configurator) CreateUser(username string, uid int) (createdUsername str
|
|||||||
ErrUserAlreadyExists, username, u.Uid, uid)
|
ErrUserAlreadyExists, username, u.Uid, uid)
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := os.OpenFile(c.passwdPath, os.O_APPEND|os.O_WRONLY, 0644)
|
file, err := os.OpenFile(a.passwdPath, os.O_APPEND|os.O_WRONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *configurator) Version(ctx context.Context) (version string, err error) {
|
type VersionGetter interface {
|
||||||
file, err := os.OpenFile(c.alpineReleasePath, os.O_RDONLY, 0)
|
Version(ctx context.Context) (version string, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Alpine) Version(ctx context.Context) (version string, err error) {
|
||||||
|
file, err := os.OpenFile(a.alpineReleasePath, os.O_RDONLY, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user