Skip to content

Commit db3f090

Browse files
Merge pull request #119 from aeroyu/master
etcd basic auth support
2 parents ef7d8c0 + 4921098 commit db3f090

6 files changed

Lines changed: 40 additions & 17 deletions

File tree

cmd/api/api_server.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ var (
2424
addr = flag.String("addr", "127.0.0.1:9092", "Addr: client grpc entrypoint")
2525
addrHTTP = flag.String("addr-http", "127.0.0.1:9093", "Addr: client http restful entrypoint")
2626
addrStore = flag.String("addr-store", "etcd://127.0.0.1:2379", "Addr: store address")
27+
addrStoreUser = flag.String("addr-store-user", "", "addr Store UserName")
28+
addrStorePwd = flag.String("addr-store-pwd", "", "addr Store Password")
2729
namespace = flag.String("namespace", "dev", "The namespace to isolation the environment.")
2830
discovery = flag.Bool("discovery", false, "Publish apiserver service via discovery.")
2931
servicePrefix = flag.String("service-prefix", "/services", "The prefix for service name.")
@@ -46,13 +48,15 @@ func main() {
4648

4749
log.Infof("addr: %s", *addr)
4850
log.Infof("addr-store: %s", *addrStore)
51+
log.Infof("addr-store-user: %s", *addrStoreUser)
52+
log.Infof("addr-store-pwd: %s", *addrStorePwd)
4953
log.Infof("namespace: %s", *namespace)
5054
log.Infof("discovery: %v", *discovery)
5155
log.Infof("service-prefix: %s", *servicePrefix)
5256
log.Infof("publish-lease: %d", *publishLease)
5357
log.Infof("publish-timeout: %d", *publishTimeout)
5458

55-
db, err := store.GetStoreFrom(*addrStore, fmt.Sprintf("/%s", *namespace))
59+
db, err := store.GetStoreFrom(*addrStore, fmt.Sprintf("/%s", *namespace), *addrStoreUser, *addrStorePwd)
5660
if err != nil {
5761
log.Fatalf("init store failed for %s, errors:\n%+v",
5862
*addrStore,

cmd/proxy/proxy.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ var (
3434
addr = flag.String("addr", "127.0.0.1:80", "Addr: http request entrypoint")
3535
addrRPC = flag.String("addr-rpc", "127.0.0.1:9091", "Addr: manager request entrypoint")
3636
addrStore = flag.String("addr-store", "etcd://127.0.0.1:2379", "Addr: store of meta data, support etcd")
37+
addrStoreUser = flag.String("addr-store-user", "", "addr Store UserName")
38+
addrStorePwd = flag.String("addr-store-pwd", "", "addr Store Password")
3739
addrPPROF = flag.String("addr-pprof", "", "Addr: pprof addr")
3840
namespace = flag.String("namespace", "dev", "The namespace to isolation the environment.")
3941
limitCpus = flag.Int("limit-cpus", 0, "Limit: schedule threads count")
@@ -139,6 +141,8 @@ func getCfg() *proxy.Cfg {
139141
cfg.AddrRPC = *addrRPC
140142
cfg.AddrPPROF = *addrPPROF
141143
cfg.AddrStore = *addrStore
144+
cfg.AddrStoreUserName = *addrStoreUser
145+
cfg.AddrStorePwd = *addrStorePwd
142146
cfg.TTLProxy = *ttlProxy
143147
cfg.Namespace = fmt.Sprintf("/%s", *namespace)
144148
cfg.Option.LimitBytesBody = *limitBytesBodyMB * 1024 * 1024

pkg/proxy/cfg.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ type Option struct {
3131

3232
// Cfg proxy config
3333
type Cfg struct {
34-
Addr string
35-
AddrRPC string
36-
AddrStore string
37-
AddrPPROF string
38-
Namespace string
39-
TTLProxy int64
40-
Filers []*FilterSpec
34+
Addr string
35+
AddrRPC string
36+
AddrStore string
37+
AddrStoreUserName string
38+
AddrStorePwd string
39+
AddrPPROF string
40+
Namespace string
41+
TTLProxy int64
42+
Filers []*FilterSpec
4143

4244
Option *Option
4345
Metric *util.MetricCfg

pkg/proxy/proxy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ func (p *Proxy) init() {
221221
}
222222

223223
func (p *Proxy) initDispatcher() error {
224-
s, err := store.GetStoreFrom(p.cfg.AddrStore, p.cfg.Namespace)
224+
s, err := store.GetStoreFrom(p.cfg.AddrStore, p.cfg.Namespace, p.cfg.AddrStoreUserName, p.cfg.AddrStorePwd)
225225

226226
if err != nil {
227227
return err

pkg/store/store.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ var (
1919
)
2020

2121
var (
22-
supportSchema = make(map[string]func(string, string) (Store, error))
22+
supportSchema = make(map[string]func(string, string, BasicAuth) (Store, error))
2323
)
2424

2525
// EvtType event type
@@ -28,6 +28,11 @@ type EvtType int
2828
// EvtSrc event src
2929
type EvtSrc int
3030

31+
type BasicAuth struct {
32+
userName string
33+
password string
34+
}
35+
3136
const (
3237
// EventTypeNew event type new
3338
EventTypeNew = EvtType(0)
@@ -65,7 +70,7 @@ func init() {
6570
}
6671

6772
// GetStoreFrom returns a store implemention, if not support returns error
68-
func GetStoreFrom(registryAddr, prefix string) (Store, error) {
73+
func GetStoreFrom(registryAddr, prefix string, userName string, password string) (Store, error) {
6974
u, err := url.Parse(registryAddr)
7075
if err != nil {
7176
panic(fmt.Sprintf("parse registry addr failed, errors:%+v", err))
@@ -74,21 +79,21 @@ func GetStoreFrom(registryAddr, prefix string) (Store, error) {
7479
schema := strings.ToLower(u.Scheme)
7580
fn, ok := supportSchema[schema]
7681
if ok {
77-
return fn(u.Host, prefix)
82+
return fn(u.Host, prefix, BasicAuth{userName: userName, password: password})
7883
}
7984

8085
return nil, fmt.Errorf("not support: %s", registryAddr)
8186
}
8287

83-
func getEtcdStoreFrom(addr, prefix string) (Store, error) {
88+
func getEtcdStoreFrom(addr, prefix string, basicAuth BasicAuth) (Store, error) {
8489
var addrs []string
8590
values := strings.Split(addr, ",")
8691

8792
for _, value := range values {
8893
addrs = append(addrs, fmt.Sprintf("http://%s", value))
8994
}
9095

91-
return NewEtcdStore(addrs, prefix)
96+
return NewEtcdStore(addrs, prefix, basicAuth)
9297
}
9398

9499
// Store store interface

pkg/store/store_etcd.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ type EtcdStore struct {
6161
}
6262

6363
// NewEtcdStore create a etcd store
64-
func NewEtcdStore(etcdAddrs []string, prefix string) (Store, error) {
64+
func NewEtcdStore(etcdAddrs []string, prefix string, basicAuth BasicAuth) (Store, error) {
6565
store := &EtcdStore{
6666
prefix: prefix,
6767
clustersDir: fmt.Sprintf("%s/clusters", prefix),
@@ -76,10 +76,18 @@ func NewEtcdStore(etcdAddrs []string, prefix string) (Store, error) {
7676
end: 100,
7777
}
7878

79-
cli, err := clientv3.New(clientv3.Config{
79+
config := &clientv3.Config{
8080
Endpoints: etcdAddrs,
8181
DialTimeout: DefaultTimeout,
82-
})
82+
}
83+
if basicAuth.userName != "" {
84+
config.Username = basicAuth.userName
85+
}
86+
if basicAuth.password != "" {
87+
config.Password = basicAuth.password
88+
}
89+
90+
cli, err := clientv3.New(*config)
8391

8492
if err != nil {
8593
return nil, err

0 commit comments

Comments
 (0)