mirror of
https://github.com/minio/mc.git
synced 2025-11-14 23:42:27 +03:00
Revert Alias behavior, make it passthrough and make Object Storage errors human readable
This commit is contained in:
14
aliases.go
14
aliases.go
@@ -34,25 +34,23 @@ func isValidAliasName(aliasName string) bool {
|
||||
|
||||
// aliasExpand expands aliased (name:/path) to full URL, used by url-parser
|
||||
func aliasExpand(aliasedURL string, aliases map[string]string) (newURL string, err error) {
|
||||
if aliasedURL == "" || aliases == nil {
|
||||
return aliasedURL, iodine.New(errInvalidArgument{}, nil)
|
||||
}
|
||||
u, err := url.Parse(aliasedURL)
|
||||
if err != nil {
|
||||
return aliasedURL, iodine.New(errInvalidURL{url: aliasedURL}, nil)
|
||||
}
|
||||
if u.Scheme == "" {
|
||||
// proper URL
|
||||
if u.Host != "" {
|
||||
return aliasedURL, nil
|
||||
}
|
||||
for aliasName, expandedURL := range aliases {
|
||||
if !isValidAliasName(aliasName) {
|
||||
return "", iodine.New(errInvalidAliasName{name: aliasName}, nil)
|
||||
}
|
||||
if strings.HasPrefix(aliasedURL, aliasName) {
|
||||
// Match found. Expand it.
|
||||
splits := strings.Split(aliasedURL, ":")
|
||||
if len(splits) == 2 {
|
||||
return expandedURL + "/" + splits[1], nil
|
||||
}
|
||||
return expandedURL, nil
|
||||
}
|
||||
return aliasedURL, iodine.New(errAliasNotFound{name: aliasedURL}, nil)
|
||||
}
|
||||
return aliasedURL, nil
|
||||
}
|
||||
|
||||
@@ -43,29 +43,29 @@ func (s *MySuite) TestEmptyExpansions(c *C) {
|
||||
// c.Skip("Test still being written")
|
||||
url, err := aliasExpand("hello", nil)
|
||||
c.Assert(url, Equals, "hello")
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
url, err = aliasExpand("minio://hello", nil)
|
||||
c.Assert(url, Equals, "minio://hello")
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
url, err = aliasExpand("$#\\", nil)
|
||||
c.Assert(url, Equals, "$#\\")
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
url, err = aliasExpand("foo:bar", map[string]string{"foo": "http://foo"})
|
||||
c.Assert(url, Equals, "http://foo/bar")
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
url, err = aliasExpand("myfoo:bar", map[string]string{"foo": "http://foo"})
|
||||
url, err = aliasExpand("myfoo:bar", nil)
|
||||
c.Assert(url, Equals, "myfoo:bar")
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
url, err = aliasExpand("", map[string]string{"foo": "http://foo"})
|
||||
url, err = aliasExpand("", nil)
|
||||
c.Assert(url, Equals, "")
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
url, err = aliasExpand("hello", nil)
|
||||
c.Assert(url, Equals, "hello")
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
}
|
||||
|
||||
@@ -205,6 +205,9 @@ func parseConfigInput(ctx *cli.Context) (config qdb.Store, err error) {
|
||||
if !strings.HasPrefix(url, "http") {
|
||||
return nil, iodine.New(errInvalidURL{url: url}, nil)
|
||||
}
|
||||
if !isValidAliasName(aliasName) {
|
||||
return nil, iodine.New(errInvalidAliasName{name: aliasName}, nil)
|
||||
}
|
||||
aliases := configStore.GetMapString("Aliases")
|
||||
if _, ok := aliases[aliasName]; ok {
|
||||
return nil, iodine.New(errAliasExists{name: aliasName}, nil)
|
||||
|
||||
@@ -69,7 +69,7 @@ func doListCmd(ctx *cli.Context) {
|
||||
u, err := parseURL(arg, config.GetMapString("Aliases"))
|
||||
if err != nil {
|
||||
log.Debug.Println(iodine.New(err, nil))
|
||||
console.Fatalf("mc: Unable to parse URL [%s]\n", u)
|
||||
console.Fatalf("mc: Unable to parse URL [%s]\n", arg)
|
||||
}
|
||||
manager := mcClientManager{}
|
||||
clnt, err := manager.getNewClient(u, globalDebugFlag)
|
||||
|
||||
@@ -37,7 +37,7 @@ var _ = Suite(&CmdTestSuite{})
|
||||
func (s *CmdTestSuite) TestCopyToSingleTarget(c *C) {
|
||||
manager := &MockclientManager{}
|
||||
sourceURL, err := parseURL("foo", nil)
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
data := "Hello World"
|
||||
md5Sum := md5.Sum([]byte(data))
|
||||
@@ -45,7 +45,7 @@ func (s *CmdTestSuite) TestCopyToSingleTarget(c *C) {
|
||||
dataLength := int64(len(data))
|
||||
|
||||
targetURL, err := parseURL("bar", nil)
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
targetURLs := []string{targetURL}
|
||||
|
||||
sourceReader, sourceWriter := io.Pipe()
|
||||
@@ -66,7 +66,7 @@ func (s *CmdTestSuite) TestCopyToSingleTarget(c *C) {
|
||||
manager.On("getTargetWriter", targetURL, hexMd5, dataLength).Return(targetWriter, nil).Once()
|
||||
doCopyCmd(manager, sourceURL, targetURLs)
|
||||
wg.Wait()
|
||||
c.Assert(err, Not(IsNil))
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(resultBuffer.String(), DeepEquals, data)
|
||||
}
|
||||
|
||||
|
||||
@@ -84,15 +84,6 @@ func (e errAliasExists) Error() string {
|
||||
return fmt.Sprintf("alias: %s exists", e.name)
|
||||
}
|
||||
|
||||
// errAliasNotFound - alias not found
|
||||
type errAliasNotFound struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (e errAliasNotFound) Error() string {
|
||||
return "alias: " + e.name + " exists"
|
||||
}
|
||||
|
||||
// errInvalidAuthKeys - invalid authorization keys
|
||||
type errInvalidAuthKeys struct{}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user