Add json config reader/writer
This commit is contained in:
parent
c26b6f3d76
commit
b1db70c807
2 changed files with 143 additions and 0 deletions
97
pkg/utils/config/config.go
Normal file
97
pkg/utils/config/config.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path"
|
||||
"sync"
|
||||
|
||||
"github.com/minio-io/minio/pkg/utils/helpers"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
configPath string
|
||||
configFile string
|
||||
configLock *sync.RWMutex
|
||||
Users map[string]User
|
||||
}
|
||||
|
||||
type User struct {
|
||||
Name string
|
||||
AccessKey string
|
||||
SecretKey string
|
||||
}
|
||||
|
||||
func (c *Config) SetupConfig() error {
|
||||
confPath := path.Join(helpers.HomeDir(), ".minio")
|
||||
if err := os.MkdirAll(confPath, os.ModeDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c.configPath = confPath
|
||||
c.configFile = path.Join(c.configPath, "config.json")
|
||||
if _, err := os.Stat(c.configFile); os.IsNotExist(err) {
|
||||
_, err = os.Create(c.configFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
c.configLock = new(sync.RWMutex)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) GetConfigPath() string {
|
||||
return c.configPath
|
||||
}
|
||||
|
||||
func (c *Config) AddUser(user User) {
|
||||
var currentUsers map[string]User
|
||||
if len(c.Users) == 0 {
|
||||
currentUsers = make(map[string]User)
|
||||
} else {
|
||||
currentUsers = c.Users
|
||||
}
|
||||
currentUsers[user.AccessKey] = user
|
||||
c.Users = currentUsers
|
||||
}
|
||||
|
||||
func (c *Config) WriteConfig() error {
|
||||
var file *os.File
|
||||
var err error
|
||||
|
||||
c.configLock.Lock()
|
||||
defer c.configLock.Unlock()
|
||||
file, err = os.OpenFile(c.configFile, os.O_WRONLY, 0666)
|
||||
defer file.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
encoder := json.NewEncoder(file)
|
||||
encoder.Encode(c.Users)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) ReadConfig() error {
|
||||
var file *os.File
|
||||
var err error
|
||||
|
||||
c.configLock.RLock()
|
||||
defer c.configLock.RUnlock()
|
||||
|
||||
file, err = os.OpenFile(c.configFile, os.O_RDONLY, 0666)
|
||||
defer file.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
users := make(map[string]User)
|
||||
decoder := json.NewDecoder(file)
|
||||
err = decoder.Decode(&users)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.Users = users
|
||||
return nil
|
||||
}
|
46
pkg/utils/config/config_test.go
Normal file
46
pkg/utils/config/config_test.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/minio-io/minio/pkg/utils/crypto/keys"
|
||||
. "gopkg.in/check.v1"
|
||||
)
|
||||
|
||||
type MySuite struct{}
|
||||
|
||||
var _ = Suite(&MySuite{})
|
||||
|
||||
func Test(t *testing.T) { TestingT(t) }
|
||||
|
||||
func (s *MySuite) TestConfig(c *C) {
|
||||
conf := Config{}
|
||||
conf.SetupConfig()
|
||||
|
||||
accesskey, _ := keys.GetRandomAlphaNumeric(keys.MINIO_ACCESS_ID)
|
||||
secretkey, _ := keys.GetRandomBase64(keys.MINIO_SECRET_ID)
|
||||
|
||||
user := User{
|
||||
Name: "gnubot",
|
||||
AccessKey: string(accesskey),
|
||||
SecretKey: string(secretkey),
|
||||
}
|
||||
|
||||
conf.AddUser(user)
|
||||
err := conf.WriteConfig()
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
err = conf.ReadConfig()
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
accesskey, _ = keys.GetRandomAlphaNumeric(keys.MINIO_ACCESS_ID)
|
||||
secretkey, _ = keys.GetRandomBase64(keys.MINIO_SECRET_ID)
|
||||
user = User{
|
||||
Name: "minio",
|
||||
AccessKey: string(accesskey),
|
||||
SecretKey: string(secretkey),
|
||||
}
|
||||
conf.AddUser(user)
|
||||
err = conf.WriteConfig()
|
||||
c.Assert(err, IsNil)
|
||||
}
|
Loading…
Reference in a new issue