mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
refactor(objectnode): refactor acl structure json tag
Signed-off-by: yhjiango <jiangyunhua@oppo.com>
This commit is contained in:
parent
958967dc40
commit
c40e78cd83
@ -44,9 +44,8 @@ var (
|
||||
)
|
||||
|
||||
type Grantee struct {
|
||||
Xmlxsi string `xml:"xmlns:xsi,attr" json:"xmlns,omitempty"`
|
||||
Xmlns string `xml:"xsi,attr" json:"xsi,omitempty"`
|
||||
XsiType string `xml:"xsi:type,attr" json:"xsi_type,omitempty"`
|
||||
Xmlxsi string `xml:"xmlns:xsi,attr" json:"-"`
|
||||
XsiType string `xml:"xsi:type,attr" json:"-"`
|
||||
Type string `xml:"type,attr" json:"t"`
|
||||
Id string `xml:"ID,omitempty" json:"i,omitempty"`
|
||||
URI string `xml:"URI,omitempty" json:"u,omitempty"`
|
||||
@ -68,7 +67,7 @@ type Owner struct {
|
||||
}
|
||||
|
||||
type AccessControlPolicy struct {
|
||||
Xmlns string `xml:"xmlns,attr" json:"x,omitempty"`
|
||||
Xmlns string `xml:"xmlns,attr" json:"-"`
|
||||
Owner Owner `xml:"Owner,omitempty" json:"o,omitempty"`
|
||||
Acl AccessControlList `xml:"AccessControlList,omitempty" json:"a,omitempty"`
|
||||
}
|
||||
@ -186,7 +185,6 @@ func (acp *AccessControlPolicy) AddGrant(idUri, granteeType, permission string)
|
||||
default:
|
||||
return
|
||||
}
|
||||
g.Grantee.Xmlns = XMLNS
|
||||
g.Permission = permission
|
||||
acp.Acl.Grants = append(acp.Acl.Grants, g)
|
||||
}
|
||||
@ -218,15 +216,12 @@ func (acp *AccessControlPolicy) SetAuthenticatedRead(ownerId string) {
|
||||
func (acp *AccessControlPolicy) XmlMarshal() ([]byte, error) {
|
||||
var grants []Grant
|
||||
for _, g := range acp.Acl.Grants {
|
||||
if g.Grantee.Xmlns == "" {
|
||||
g.Grantee.Xmlns = XMLNS
|
||||
}
|
||||
g.Grantee.Xmlxsi = g.Grantee.Xmlns
|
||||
g.Grantee.Xmlxsi = XMLSI
|
||||
g.Grantee.XsiType = g.Grantee.Type
|
||||
grants = append(grants, g)
|
||||
}
|
||||
acp.Acl.Grants = grants
|
||||
acp.Xmlns = "http://s3.amazonaws.com/doc/2006-03-01/"
|
||||
acp.Xmlns = XMLNS
|
||||
data, err := xml.Marshal(acp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -234,20 +229,7 @@ func (acp *AccessControlPolicy) XmlMarshal() ([]byte, error) {
|
||||
return append([]byte(xml.Header), data...), nil
|
||||
}
|
||||
|
||||
func (acp *AccessControlPolicy) RemoveAttr() {
|
||||
var grants []Grant
|
||||
for _, g := range acp.Acl.Grants {
|
||||
g.Grantee.Xmlxsi = ""
|
||||
g.Grantee.XsiType = ""
|
||||
g.Grantee.Xmlns = ""
|
||||
grants = append(grants, g)
|
||||
}
|
||||
acp.Xmlns = ""
|
||||
acp.Acl.Grants = grants
|
||||
}
|
||||
|
||||
func (acp *AccessControlPolicy) Encode() string {
|
||||
acp.RemoveAttr()
|
||||
data, err := json.Marshal(acp)
|
||||
if err != nil {
|
||||
log.LogWarnf("acl json marshal failed: %v", err)
|
||||
|
||||
@ -176,7 +176,6 @@ func addGrants(acl *AccessControlPolicy, grants []grant, permission string) {
|
||||
}
|
||||
|
||||
func putBucketACL(vol *Volume, acp *AccessControlPolicy) error {
|
||||
acp.RemoveAttr()
|
||||
data, err := json.Marshal(acp)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -192,7 +191,9 @@ func getObjectACL(vol *Volume, path string, needDefault bool) (*AccessControlPol
|
||||
var acp *AccessControlPolicy
|
||||
data := xAttr.Get(XAttrKeyOSSACL)
|
||||
if len(data) > 0 {
|
||||
err = json.Unmarshal(data, &acp)
|
||||
if err = json.Unmarshal(data, &acp); err != nil {
|
||||
err = xml.Unmarshal(data, &acp)
|
||||
}
|
||||
} else if needDefault {
|
||||
acp = CreateDefaultACL(vol.owner)
|
||||
}
|
||||
@ -200,7 +201,6 @@ func getObjectACL(vol *Volume, path string, needDefault bool) (*AccessControlPol
|
||||
}
|
||||
|
||||
func putObjectACL(vol *Volume, path string, acp *AccessControlPolicy) error {
|
||||
acp.RemoveAttr()
|
||||
data, err := json.Marshal(acp)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@ -48,7 +48,8 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
XMLNS = "http://www.w3.org/2001/XMLSchema-instance"
|
||||
XMLNS = "http://s3.amazonaws.com/doc/2006-03-01/"
|
||||
XMLSI = "http://www.w3.org/2001/XMLSchema-instance"
|
||||
GroupAllUser = "http://acs.amazonaws.com/groups/global/AllUsers"
|
||||
GroupAuthenticated = "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
|
||||
)
|
||||
|
||||
@ -58,14 +58,12 @@ func TestAccessControlPolicyXml(t *testing.T) {
|
||||
require.Equal(t, "CanonicalUser", result.Acl.Grants[0].Grantee.Type)
|
||||
require.Equal(t, "", result.Acl.Grants[0].Grantee.URI)
|
||||
require.Equal(t, "display-id1-name", result.Acl.Grants[0].Grantee.DisplayName)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", result.Acl.Grants[0].Grantee.Xmlns)
|
||||
|
||||
require.Equal(t, "READ", result.Acl.Grants[1].Permission)
|
||||
require.Equal(t, "", result.Acl.Grants[1].Grantee.Id)
|
||||
require.Equal(t, "Group", result.Acl.Grants[1].Grantee.Type)
|
||||
require.Equal(t, "http://acs.amazonaws.com/groups/global/AllUsers", result.Acl.Grants[1].Grantee.URI)
|
||||
require.Equal(t, "", result.Acl.Grants[1].Grantee.DisplayName)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", result.Acl.Grants[1].Grantee.Xmlns)
|
||||
}
|
||||
|
||||
func TestAccessControlPolicyXml_NoGrantIDAndURI(t *testing.T) {
|
||||
@ -244,7 +242,6 @@ func TestSetPrivate(t *testing.T) {
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.DisplayName)
|
||||
require.Equal(t, "CanonicalUser", acp.Acl.Grants[0].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[0].Grantee.Xmlns)
|
||||
}
|
||||
|
||||
func TestSetPublicRead(t *testing.T) {
|
||||
@ -257,14 +254,12 @@ func TestSetPublicRead(t *testing.T) {
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.DisplayName)
|
||||
require.Equal(t, "CanonicalUser", acp.Acl.Grants[0].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[0].Grantee.Xmlns)
|
||||
|
||||
require.Equal(t, "READ", acp.Acl.Grants[1].Permission)
|
||||
require.Equal(t, "", acp.Acl.Grants[1].Grantee.Id)
|
||||
require.Equal(t, "http://acs.amazonaws.com/groups/global/AllUsers", acp.Acl.Grants[1].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[1].Grantee.DisplayName)
|
||||
require.Equal(t, "Group", acp.Acl.Grants[1].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[1].Grantee.Xmlns)
|
||||
}
|
||||
|
||||
func TestSetPublicReadWrite(t *testing.T) {
|
||||
@ -277,21 +272,18 @@ func TestSetPublicReadWrite(t *testing.T) {
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.DisplayName)
|
||||
require.Equal(t, "CanonicalUser", acp.Acl.Grants[0].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[0].Grantee.Xmlns)
|
||||
|
||||
require.Equal(t, "READ", acp.Acl.Grants[1].Permission)
|
||||
require.Equal(t, "", acp.Acl.Grants[1].Grantee.Id)
|
||||
require.Equal(t, "http://acs.amazonaws.com/groups/global/AllUsers", acp.Acl.Grants[1].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[1].Grantee.DisplayName)
|
||||
require.Equal(t, "Group", acp.Acl.Grants[1].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[1].Grantee.Xmlns)
|
||||
|
||||
require.Equal(t, "WRITE", acp.Acl.Grants[2].Permission)
|
||||
require.Equal(t, "", acp.Acl.Grants[2].Grantee.Id)
|
||||
require.Equal(t, "http://acs.amazonaws.com/groups/global/AllUsers", acp.Acl.Grants[2].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[2].Grantee.DisplayName)
|
||||
require.Equal(t, "Group", acp.Acl.Grants[2].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[2].Grantee.Xmlns)
|
||||
}
|
||||
|
||||
func TestSetAuthenticatedRead(t *testing.T) {
|
||||
@ -304,14 +296,12 @@ func TestSetAuthenticatedRead(t *testing.T) {
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[0].Grantee.DisplayName)
|
||||
require.Equal(t, "CanonicalUser", acp.Acl.Grants[0].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[0].Grantee.Xmlns)
|
||||
|
||||
require.Equal(t, "READ", acp.Acl.Grants[1].Permission)
|
||||
require.Equal(t, "", acp.Acl.Grants[1].Grantee.Id)
|
||||
require.Equal(t, "http://acs.amazonaws.com/groups/global/AuthenticatedUsers", acp.Acl.Grants[1].Grantee.URI)
|
||||
require.Equal(t, "", acp.Acl.Grants[1].Grantee.DisplayName)
|
||||
require.Equal(t, "Group", acp.Acl.Grants[1].Grantee.Type)
|
||||
require.Equal(t, "http://www.w3.org/2001/XMLSchema-instance", acp.Acl.Grants[1].Grantee.Xmlns)
|
||||
}
|
||||
|
||||
func TestAccessControlPolicy_FULL_CONTROL(t *testing.T) {
|
||||
|
||||
@ -233,6 +233,7 @@ func (v *Volume) loadBucketACL() (acp *AccessControlPolicy, err error) {
|
||||
}
|
||||
acp = &AccessControlPolicy{}
|
||||
if err = json.Unmarshal(raw, acp); err != nil {
|
||||
err = xml.Unmarshal(raw, acp)
|
||||
return
|
||||
}
|
||||
return
|
||||
|
||||
Loading…
Reference in New Issue
Block a user