@@ -28,7 +28,8 @@ type Client struct {
28
28
conn * zk.Conn
29
29
30
30
addrlist string
31
- auth string
31
+ username string
32
+ password string
32
33
timeout time.Duration
33
34
34
35
logger * zkLogger
@@ -55,9 +56,17 @@ func NewWithLogfunc(addrlist string, auth string, timeout time.Duration, logfunc
55
56
timeout = time .Second * 5
56
57
}
57
58
c := & Client {
58
- addrlist : addrlist , auth : auth , timeout : timeout ,
59
+ addrlist : addrlist , timeout : timeout ,
59
60
logger : & zkLogger {logfunc },
60
61
}
62
+ if auth != "" {
63
+ split := strings .Split (auth , ":" )
64
+ if len (split ) != 2 || split [0 ] == "" {
65
+ return nil , errors .Errorf ("invalid auth" )
66
+ }
67
+ c .username = split [0 ]
68
+ c .password = split [1 ]
69
+ }
61
70
if err := c .reset (); err != nil {
62
71
return nil , err
63
72
}
@@ -78,8 +87,9 @@ func (c *Client) reset() error {
78
87
79
88
c .logger .Printf ("zkclient setup new connection to %s" , c .addrlist )
80
89
81
- if c .auth != "" {
82
- if err := c .conn .AddAuth ("digest" , []byte (c .auth )); err != nil {
90
+ if c .username != "" {
91
+ var auth = fmt .Sprintf ("%s:%s" , c .username , c .password )
92
+ if err := c .conn .AddAuth ("digest" , []byte (auth )); err != nil {
83
93
return errors .Trace (err )
84
94
}
85
95
}
@@ -162,15 +172,13 @@ func (c *Client) mkdir(conn *zk.Conn, path string) error {
162
172
if err := c .mkdir (conn , filepath .Dir (path )); err != nil {
163
173
return err
164
174
}
165
- var acl []zk.ACL
166
-
167
- if c .auth != "" {
168
- auth := strings .Split (c .auth , ":" )
169
- acl = zk .DigestACL (zk .PermAll , auth [0 ], auth [1 ])
170
- } else {
171
- acl = zk .WorldACL (zk .PermAll )
172
- }
173
- _ , err := conn .Create (path , []byte {}, 0 , acl )
175
+ _ , err := conn .Create (path , []byte {}, 0 , func () []zk.ACL {
176
+ const perm = zk .PermAll
177
+ if c .username != "" {
178
+ return zk .DigestACL (perm , c .username , c .password )
179
+ }
180
+ return zk .WorldACL (perm )
181
+ }())
174
182
if err != nil && errors .NotEqual (err , zk .ErrNodeExists ) {
175
183
return errors .Trace (err )
176
184
}
@@ -228,16 +236,13 @@ func (c *Client) create(conn *zk.Conn, path string, data []byte, flag int32) (st
228
236
if err := c .mkdir (conn , filepath .Dir (path )); err != nil {
229
237
return "" , err
230
238
}
231
-
232
- var acl []zk.ACL
233
-
234
- if c .auth != "" {
235
- auth := strings .Split (c .auth , ":" )
236
- acl = zk .DigestACL (zk .PermAdmin | zk .PermRead | zk .PermWrite , auth [0 ], auth [1 ])
237
- } else {
238
- acl = zk .WorldACL (zk .PermAdmin | zk .PermRead | zk .PermWrite )
239
- }
240
- p , err := conn .Create (path , data , flag , acl )
239
+ p , err := conn .Create (path , data , flag , func () []zk.ACL {
240
+ const perm = zk .PermAdmin | zk .PermRead | zk .PermWrite
241
+ if c .username != "" {
242
+ return zk .DigestACL (perm , c .username , c .password )
243
+ }
244
+ return zk .WorldACL (perm )
245
+ }())
241
246
if err != nil {
242
247
return "" , errors .Trace (err )
243
248
}
0 commit comments