refactor(objectnode): refactor acl structure json tag

Signed-off-by: yhjiango <jiangyunhua@oppo.com>
This commit is contained in:
yhjiango 2023-07-21 14:26:59 +08:00 committed by leonrayang
parent 958967dc40
commit c40e78cd83
5 changed files with 11 additions and 37 deletions

View File

@ -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)

View File

@ -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

View File

@ -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"
)

View File

@ -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) {

View File

@ -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