parent
701c3e5242
commit
eb5aa19dfa
@ -1,152 +0,0 @@ |
||||
/* |
||||
* Minimalist Object Storage, (C) 2015 Minio, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package config |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"io" |
||||
"os" |
||||
"os/user" |
||||
"path/filepath" |
||||
"sync" |
||||
|
||||
"github.com/minio/minio/pkg/iodine" |
||||
) |
||||
|
||||
// Config context
|
||||
type Config struct { |
||||
ConfigPath string |
||||
ConfigFile string |
||||
ConfigLock *sync.RWMutex |
||||
Users map[string]User |
||||
} |
||||
|
||||
// User context
|
||||
type User struct { |
||||
Name string |
||||
AccessKey string |
||||
SecretKey string |
||||
} |
||||
|
||||
// SetupConfig initialize config directory and template config
|
||||
func (c *Config) SetupConfig() error { |
||||
u, err := user.Current() |
||||
if err != nil { |
||||
return iodine.New(err, nil) |
||||
} |
||||
|
||||
confPath := filepath.Join(u.HomeDir, ".minio") |
||||
if err := os.MkdirAll(confPath, 0700); err != nil { |
||||
return iodine.New(err, nil) |
||||
} |
||||
|
||||
c.ConfigPath = confPath |
||||
c.ConfigFile = filepath.Join(c.ConfigPath, "config.json") |
||||
if _, err := os.Stat(c.ConfigFile); os.IsNotExist(err) { |
||||
_, err = os.Create(c.ConfigFile) |
||||
if err != nil { |
||||
return iodine.New(err, nil) |
||||
} |
||||
} |
||||
|
||||
c.ConfigLock = new(sync.RWMutex) |
||||
return nil |
||||
} |
||||
|
||||
// GetConfigPath config file location
|
||||
func (c *Config) GetConfigPath() string { |
||||
return c.ConfigPath |
||||
} |
||||
|
||||
// IsUserExists verify if user exists
|
||||
func (c *Config) IsUserExists(username string) bool { |
||||
for _, user := range c.Users { |
||||
if user.Name == username { |
||||
return true |
||||
} |
||||
} |
||||
return false |
||||
} |
||||
|
||||
// GetUser - get user from username
|
||||
func (c *Config) GetUser(username string) User { |
||||
for _, user := range c.Users { |
||||
if user.Name == username { |
||||
return user |
||||
} |
||||
} |
||||
return User{} |
||||
} |
||||
|
||||
// AddUser - add a user into existing User list
|
||||
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 |
||||
} |
||||
|
||||
// WriteConfig - write encoded json in config file
|
||||
func (c *Config) WriteConfig() error { |
||||
c.ConfigLock.Lock() |
||||
defer c.ConfigLock.Unlock() |
||||
|
||||
var file *os.File |
||||
var err error |
||||
|
||||
file, err = os.OpenFile(c.ConfigFile, os.O_WRONLY, 0666) |
||||
defer file.Close() |
||||
if err != nil { |
||||
return iodine.New(err, nil) |
||||
} |
||||
|
||||
encoder := json.NewEncoder(file) |
||||
encoder.Encode(c.Users) |
||||
return nil |
||||
} |
||||
|
||||
// ReadConfig - read json config file and decode
|
||||
func (c *Config) ReadConfig() error { |
||||
c.ConfigLock.RLock() |
||||
defer c.ConfigLock.RUnlock() |
||||
|
||||
var file *os.File |
||||
var err error |
||||
|
||||
file, err = os.OpenFile(c.ConfigFile, os.O_RDONLY, 0666) |
||||
defer file.Close() |
||||
if err != nil { |
||||
return iodine.New(err, nil) |
||||
} |
||||
|
||||
users := make(map[string]User) |
||||
decoder := json.NewDecoder(file) |
||||
err = decoder.Decode(&users) |
||||
switch err { |
||||
case io.EOF: |
||||
return nil |
||||
case nil: |
||||
c.Users = users |
||||
return nil |
||||
default: |
||||
return iodine.New(err, nil) |
||||
} |
||||
} |
@ -1,75 +0,0 @@ |
||||
/* |
||||
* Minimalist Object Storage, (C) 2015 Minio, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package config |
||||
|
||||
import ( |
||||
"io/ioutil" |
||||
"os" |
||||
"path/filepath" |
||||
"sync" |
||||
"testing" |
||||
|
||||
. "github.com/minio/check" |
||||
"github.com/minio/minio/pkg/utils/crypto/keys" |
||||
) |
||||
|
||||
type MySuite struct{} |
||||
|
||||
var _ = Suite(&MySuite{}) |
||||
|
||||
func Test(t *testing.T) { TestingT(t) } |
||||
|
||||
func (s *MySuite) TestConfig(c *C) { |
||||
conf := Config{} |
||||
conf.ConfigLock = new(sync.RWMutex) |
||||
conf.ConfigPath, _ = ioutil.TempDir("/tmp", "minio-test-") |
||||
defer os.RemoveAll(conf.ConfigPath) |
||||
conf.ConfigFile = filepath.Join(conf.ConfigPath, "config.json") |
||||
if _, err := os.Stat(conf.ConfigFile); os.IsNotExist(err) { |
||||
_, err = os.Create(conf.ConfigFile) |
||||
if err != nil { |
||||
c.Fatal(err) |
||||
} |
||||
} |
||||
|
||||
accesskey, _ := keys.GenerateRandomAlphaNumeric(keys.MinioAccessID) |
||||
secretkey, _ := keys.GenerateRandomBase64(keys.MinioSecretID) |
||||
|
||||
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.GenerateRandomAlphaNumeric(keys.MinioAccessID) |
||||
secretkey, _ = keys.GenerateRandomBase64(keys.MinioSecretID) |
||||
user = User{ |
||||
Name: "minio", |
||||
AccessKey: string(accesskey), |
||||
SecretKey: string(secretkey), |
||||
} |
||||
conf.AddUser(user) |
||||
err = conf.WriteConfig() |
||||
c.Assert(err, IsNil) |
||||
} |
Loading…
Reference in new issue