Skip to content

Commit f4b0897

Browse files
committed
add project policy api
1 parent e3cd89c commit f4b0897

4 files changed

+168
-0
lines changed

client_interface.go

+7
Original file line numberDiff line numberDiff line change
@@ -321,4 +321,11 @@ type ClientInterface interface {
321321
ListExport(project, logstore, name, displayName string, offset, size int) (exports []*Export, total, count int, error error)
322322
DeleteExport(project string, name string) error
323323
RestartExport(project string, export *Export) error
324+
325+
// UpdateProjectPolicy updates project's policy.
326+
UpdateProjectPolicy(project string, policy string) error
327+
// DeleteProjectPolicy deletes project's policy.
328+
DeleteProjectPolicy(project string) error
329+
// GetProjectPolicy return project's policy.
330+
GetProjectPolicy(project string) (string, error)
324331
}

client_project_policy.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package sls
2+
3+
import (
4+
"fmt"
5+
"io/ioutil"
6+
)
7+
8+
func (c *Client) GetProjectPolicy(project string) (policy string, err error) {
9+
h := map[string]string{
10+
"x-log-bodyrawsize": "0",
11+
"Content-Type": "application/json",
12+
}
13+
uri := "/policy"
14+
r, err := c.request(project, "GET", uri, h, nil)
15+
if err != nil {
16+
return "", err
17+
}
18+
defer r.Body.Close()
19+
buf, _ := ioutil.ReadAll(r.Body)
20+
policy = string(buf)
21+
return policy, nil
22+
}
23+
24+
func (c *Client) UpdateProjectPolicy(project string, policy string) error {
25+
body := []byte(policy)
26+
h := map[string]string{
27+
"x-log-bodyrawsize": fmt.Sprintf("%v", len(body)),
28+
"Content-Type": "application/json",
29+
}
30+
uri := "/policy"
31+
r, err := c.request(project, "POST", uri, h, body)
32+
if err != nil {
33+
return err
34+
}
35+
r.Body.Close()
36+
return nil
37+
}
38+
39+
func (c *Client) DeleteProjectPolicy(project string) error {
40+
h := map[string]string{
41+
"x-log-bodyrawsize": "0",
42+
"Content-Type": "application/json",
43+
}
44+
uri := "/policy"
45+
r, err := c.request(project, "DELETE", uri, h, nil)
46+
if err != nil {
47+
return err
48+
}
49+
r.Body.Close()
50+
return nil
51+
}

client_project_policy_test.go

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package sls
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/stretchr/testify/suite"
8+
)
9+
10+
func TestProjectPolicy(t *testing.T) {
11+
suite.Run(t, new(ProjectPolicyTestSuite))
12+
}
13+
14+
type ProjectPolicyTestSuite struct {
15+
suite.Suite
16+
endpoint string
17+
projectName string
18+
accessKeyID string
19+
accessKeySecret string
20+
client Client
21+
policy string
22+
newPolicy string
23+
}
24+
25+
func (s *ProjectPolicyTestSuite) SetupSuite() {
26+
s.endpoint = os.Getenv("LOG_TEST_ENDPOINT")
27+
s.projectName = os.Getenv("LOG_TEST_PROJECT")
28+
s.accessKeyID = os.Getenv("LOG_TEST_ACCESS_KEY_ID")
29+
s.accessKeySecret = os.Getenv("LOG_TEST_ACCESS_KEY_SECRET")
30+
s.client.AccessKeyID = s.accessKeyID
31+
s.client.AccessKeySecret = s.accessKeySecret
32+
s.client.Endpoint = s.endpoint
33+
s.policy = `
34+
{
35+
"Statement": [
36+
{
37+
"Action": [
38+
"log:Post*"
39+
],
40+
"Effect": "Deny",
41+
"Resource": "acs:log:*:*:project/test-project-policy/*"
42+
}
43+
],
44+
"Version": "1"
45+
}`
46+
s.newPolicy = `
47+
{
48+
"Statement": [
49+
{
50+
"Action": [
51+
"log:Post*"
52+
],
53+
"Effect": "Allow",
54+
"Resource": "acs:log:*:*:project/test-project-policy/*"
55+
}
56+
],
57+
"Version": "1"
58+
}`
59+
}
60+
61+
func (s *ProjectPolicyTestSuite) TearDownSuite() {
62+
}
63+
64+
func (s *ProjectPolicyTestSuite) TestClient_CURDProjectPolicy() {
65+
err := s.client.UpdateProjectPolicy(s.projectName, s.policy)
66+
s.Require().Nil(err)
67+
policy, err := s.client.GetProjectPolicy(s.projectName)
68+
s.Require().Nil(err)
69+
s.Require().Equal(policy, s.policy)
70+
err = s.client.UpdateProjectPolicy(s.projectName, s.newPolicy)
71+
s.Require().Nil(err)
72+
newPolicy, err := s.client.GetProjectPolicy(s.projectName)
73+
s.Require().Nil(err)
74+
s.Require().Equal(newPolicy, s.newPolicy)
75+
err = s.client.DeleteProjectPolicy(s.projectName)
76+
s.Require().Nil(err)
77+
policy, err = s.client.GetProjectPolicy(s.projectName)
78+
s.Require().Nil(err)
79+
s.Require().Empty(policy)
80+
}

token_auto_update_client.go

+30
Original file line numberDiff line numberDiff line change
@@ -1604,3 +1604,33 @@ func (c *TokenAutoUpdateClient) GetMetricStore(project, name string) (metricStor
16041604
}
16051605
return
16061606
}
1607+
1608+
func (c *TokenAutoUpdateClient) UpdateProjectPolicy(project, policy string) (err error) {
1609+
for i := 0; i < c.maxTryTimes; i++ {
1610+
err = c.logClient.UpdateProjectPolicy(project, policy)
1611+
if !c.processError(err) {
1612+
return
1613+
}
1614+
}
1615+
return
1616+
}
1617+
1618+
func (c *TokenAutoUpdateClient) DeleteProjectPolicy(project string) (err error) {
1619+
for i := 0; i < c.maxTryTimes; i++ {
1620+
err = c.logClient.DeleteProjectPolicy(project)
1621+
if !c.processError(err) {
1622+
return
1623+
}
1624+
}
1625+
return
1626+
}
1627+
1628+
func (c *TokenAutoUpdateClient) GetProjectPolicy(project string) (policy string, err error) {
1629+
for i := 0; i < c.maxTryTimes; i++ {
1630+
policy, err = c.logClient.GetProjectPolicy(project)
1631+
if !c.processError(err) {
1632+
return
1633+
}
1634+
}
1635+
return
1636+
}

0 commit comments

Comments
 (0)