This commit is contained in:
6
internal/config/command.go
Normal file
6
internal/config/command.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package config
|
||||
|
||||
type Command struct {
|
||||
Name string
|
||||
Args []string
|
||||
}
|
||||
19
internal/config/commands.go
Normal file
19
internal/config/commands.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package config
|
||||
|
||||
import "errors"
|
||||
|
||||
type Commands struct {
|
||||
Commands map[string]func(*State, Command) error
|
||||
}
|
||||
|
||||
func (c *Commands) Register(name string, f func(*State, Command) error) {
|
||||
c.Commands[name] = f
|
||||
}
|
||||
|
||||
func (c *Commands) Run(s *State, cmd Command) error {
|
||||
f, ok := c.Commands[cmd.Name]
|
||||
if !ok {
|
||||
return errors.New("unknown command: " + cmd.Name)
|
||||
}
|
||||
return f(s, cmd)
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package config
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"os/user"
|
||||
)
|
||||
|
||||
const configFileName = ".gatorconfig.json"
|
||||
@@ -31,22 +30,9 @@ func Read() (Config, error) {
|
||||
|
||||
}
|
||||
|
||||
func (config Config) SetUser() error {
|
||||
usr, err := user.Current()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
config.CurrentUserName = usr.Username
|
||||
|
||||
err = write(config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
func (config Config) SetUser(username string) error {
|
||||
config.CurrentUserName = username
|
||||
return write(config)
|
||||
}
|
||||
|
||||
func getConfigFilePath() (string, error) {
|
||||
@@ -68,7 +54,9 @@ func write(cfg Config) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
defer func(file *os.File) {
|
||||
_ = file.Close()
|
||||
}(file)
|
||||
|
||||
encoder := json.NewEncoder(file)
|
||||
encoder.SetIndent("", " ") // For pretty printing
|
||||
|
||||
5
internal/config/state.go
Normal file
5
internal/config/state.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package config
|
||||
|
||||
type State struct {
|
||||
Config *Config
|
||||
}
|
||||
22
internal/handlers/loginHandler.go
Normal file
22
internal/handlers/loginHandler.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/rdarius/boot-dev-blog-aggregator/internal/config"
|
||||
)
|
||||
|
||||
func HandlerLogin(s *config.State, cmd config.Command) error {
|
||||
if len(cmd.Args) < 1 {
|
||||
return errors.New("missing required argument USERNAME")
|
||||
}
|
||||
|
||||
err := s.Config.SetUser(cmd.Args[0])
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set current user: %w", err)
|
||||
}
|
||||
|
||||
fmt.Printf("User set to %s\n", s.Config.CurrentUserName)
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user