58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.faercol.me/faercol/http-boot-server/bootserver/bootoption"
|
|
)
|
|
|
|
var ErrUnknownClient = errors.New("unknown client")
|
|
var ErrUnselectedBootOption = errors.New("unselected boot option")
|
|
var ErrUnknownBootOption = errors.New("unknown boot option")
|
|
|
|
type ClientHandlerService struct {
|
|
clients map[string]*bootoption.Client
|
|
}
|
|
|
|
func NewClientHandlerService() *ClientHandlerService {
|
|
return &ClientHandlerService{
|
|
clients: make(map[string]*bootoption.Client),
|
|
}
|
|
}
|
|
|
|
func (chs *ClientHandlerService) AddClient(client *bootoption.Client) {
|
|
chs.clients[client.IP] = client
|
|
}
|
|
|
|
func (chs *ClientHandlerService) GetClientSelectedBootOption(client string) (*bootoption.EFIApp, error) {
|
|
clientDetails, ok := chs.clients[client]
|
|
if !ok {
|
|
return nil, ErrUnknownClient
|
|
}
|
|
|
|
if clientDetails.SelectedOption == "" {
|
|
return nil, ErrUnselectedBootOption
|
|
}
|
|
|
|
for _, o := range clientDetails.Options {
|
|
if o.Name == clientDetails.SelectedOption {
|
|
return &o, nil
|
|
}
|
|
}
|
|
return nil, ErrUnknownBootOption
|
|
}
|
|
|
|
func (chs *ClientHandlerService) SetClientBootOption(client, option string) error {
|
|
clientDetails, ok := chs.clients[client]
|
|
if !ok {
|
|
return ErrUnknownClient
|
|
}
|
|
|
|
for _, o := range clientDetails.Options {
|
|
if o.Name == option {
|
|
clientDetails.SelectedOption = option
|
|
return nil
|
|
}
|
|
}
|
|
return ErrUnknownBootOption
|
|
}
|