Skip to content

Commit 52de1de

Browse files
committed
feat: add oidc auth
Signed-off-by: Abirdcfly <[email protected]>
1 parent 8b886c3 commit 52de1de

File tree

7 files changed

+359
-6
lines changed

7 files changed

+359
-6
lines changed

cmd/bc-cli/main.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,19 @@ limitations under the License.
1717
package main
1818

1919
import (
20+
"bytes"
21+
"encoding/json"
22+
goflags "flag"
23+
"path"
24+
2025
"github.com/bestchains/bc-cli/cmd/bc-cli/create"
2126
delcmd "github.com/bestchains/bc-cli/cmd/bc-cli/delete"
2227
"github.com/bestchains/bc-cli/cmd/bc-cli/get"
28+
"github.com/bestchains/bc-cli/pkg/auth"
29+
"github.com/bestchains/bc-cli/pkg/common"
2330
"github.com/spf13/cobra"
31+
"github.com/spf13/viper"
32+
"k8s.io/klog/v2"
2433
)
2534

2635
func NewCmd() *cobra.Command {
@@ -32,6 +41,45 @@ func NewCmd() *cobra.Command {
3241
return nil
3342
},
3443
}
44+
fs := goflags.NewFlagSet("", goflags.PanicOnError)
45+
klog.InitFlags(fs)
46+
cmd.PersistentFlags().AddGoFlagSet(fs)
47+
cmd.PersistentFlags().String("issuer-url", "https://portal.172.22.96.209.nip.io/oidc", "issuer url for oidc")
48+
cmd.PersistentFlags().Bool("enable-auth", false, "enable oidc auth")
49+
ConfigFileFullPath := cmd.PersistentFlags().String("config", common.ConfigFilePath, "config file")
50+
_ = viper.BindPFlag("auth.issuerurl", cmd.PersistentFlags().Lookup("issuer-url"))
51+
_ = viper.BindPFlag("auth.enable", cmd.PersistentFlags().Lookup("enable-auth"))
52+
53+
var config *common.Config
54+
cmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) (err error) {
55+
config, err = loadConfig(*ConfigFileFullPath)
56+
if err != nil {
57+
return err
58+
}
59+
configGet, err := auth.Auth(cmd.Context(), &config.Auth)
60+
if err != nil {
61+
return err
62+
}
63+
config.Auth = *configGet
64+
return nil
65+
}
66+
67+
cmd.PersistentPostRunE = func(cmd *cobra.Command, args []string) (err error) {
68+
configByte, err := json.Marshal(config)
69+
if err != nil {
70+
return err
71+
}
72+
if err := viper.ReadConfig(bytes.NewReader(configByte)); err != nil {
73+
return err
74+
}
75+
if err := viper.WriteConfig(); err != nil {
76+
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
77+
return viper.SafeWriteConfig()
78+
}
79+
return err
80+
}
81+
return nil
82+
}
3583

3684
cmd.AddCommand(create.NewCreateCmd())
3785
cmd.AddCommand(get.NewGetCmd())
@@ -44,3 +92,23 @@ func main() {
4492
panic(err)
4593
}
4694
}
95+
96+
func loadConfig(configFile string) (config *common.Config, err error) {
97+
config = &common.Config{}
98+
viper.AddConfigPath(path.Dir(configFile))
99+
viper.SetConfigName(path.Base(configFile))
100+
viper.SetConfigType(common.ConfigFileType)
101+
err = viper.ReadInConfig()
102+
if err != nil {
103+
if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
104+
// ignore config file not exist error
105+
return nil, err
106+
}
107+
}
108+
err = viper.Unmarshal(config)
109+
if err != nil {
110+
return nil, err
111+
}
112+
klog.V(3).Infof("all config: %+v", config)
113+
return config, nil
114+
}

go.mod

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,16 @@ go 1.20
44

55
require (
66
github.com/bestchains/bestchains-contracts v0.0.0-20230427091538-99ca7569cde7
7+
github.com/coreos/go-oidc/v3 v3.5.0
78
github.com/golangci/golangci-lint v1.52.2
9+
github.com/int128/oauth2cli v1.14.0
10+
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8
811
github.com/spf13/cobra v1.7.0
12+
github.com/spf13/viper v1.12.0
13+
golang.org/x/oauth2 v0.4.0
14+
golang.org/x/sync v0.1.0
915
k8s.io/cli-runtime v0.27.1
16+
k8s.io/klog/v2 v2.90.1
1017
)
1118

1219
require (
@@ -49,6 +56,7 @@ require (
4956
github.com/fzipp/gocyclo v0.6.0 // indirect
5057
github.com/go-critic/go-critic v0.7.0 // indirect
5158
github.com/go-errors/errors v1.4.2 // indirect
59+
github.com/go-jose/go-jose/v3 v3.0.0 // indirect
5260
github.com/go-logr/logr v1.2.3 // indirect
5361
github.com/go-openapi/jsonpointer v0.19.6 // indirect
5462
github.com/go-openapi/jsonreference v0.20.1 // indirect
@@ -100,6 +108,7 @@ require (
100108
github.com/hyperledger/fabric-protos-go v0.3.0 // indirect
101109
github.com/imdario/mergo v0.3.6 // indirect
102110
github.com/inconshreveable/mousetrap v1.1.0 // indirect
111+
github.com/int128/listener v1.1.0 // indirect
103112
github.com/jgautheron/goconst v1.5.1 // indirect
104113
github.com/jingyugao/rowserrcheck v1.1.1 // indirect
105114
github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect
@@ -175,7 +184,6 @@ require (
175184
github.com/spf13/cast v1.5.0 // indirect
176185
github.com/spf13/jwalterweatherman v1.1.0 // indirect
177186
github.com/spf13/pflag v1.0.5 // indirect
178-
github.com/spf13/viper v1.12.0 // indirect
179187
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
180188
github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect
181189
github.com/stretchr/objx v0.5.0 // indirect
@@ -207,8 +215,6 @@ require (
207215
golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 // indirect
208216
golang.org/x/mod v0.9.0 // indirect
209217
golang.org/x/net v0.8.0 // indirect
210-
golang.org/x/oauth2 v0.4.0 // indirect
211-
golang.org/x/sync v0.1.0 // indirect
212218
golang.org/x/sys v0.6.0 // indirect
213219
golang.org/x/term v0.6.0 // indirect
214220
golang.org/x/text v0.8.0 // indirect
@@ -226,7 +232,6 @@ require (
226232
k8s.io/api v0.27.1 // indirect
227233
k8s.io/apimachinery v0.27.1 // indirect
228234
k8s.io/client-go v0.27.1 // indirect
229-
k8s.io/klog/v2 v2.90.1 // indirect
230235
k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a // indirect
231236
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
232237
mvdan.cc/gofumpt v0.4.0 // indirect

go.sum

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
2727
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
2828
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
2929
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
30+
cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
3031
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
3132
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
3233
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
@@ -109,6 +110,8 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht
109110
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
110111
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
111112
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
113+
github.com/coreos/go-oidc/v3 v3.5.0 h1:VxKtbccHZxs8juq7RdJntSqtXFtde9YpNpGn0yqgEHw=
114+
github.com/coreos/go-oidc/v3 v3.5.0/go.mod h1:ecXRtV4romGPeO6ieExAsUK9cb/3fp9hXNz1tlv8PIM=
112115
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
113116
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
114117
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
@@ -156,6 +159,8 @@ github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3Bop
156159
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
157160
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
158161
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
162+
github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo=
163+
github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
159164
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
160165
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
161166
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
@@ -352,6 +357,10 @@ github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
352357
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
353358
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
354359
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
360+
github.com/int128/listener v1.1.0 h1:2Jb41DWLpkQ3I9bIdBzO8H/tNwMvyl/OBZWtCV5Pjuw=
361+
github.com/int128/listener v1.1.0/go.mod h1:68WkmTN8PQtLzc9DucIaagAKeGVyMnyyKIkW4Xn47UA=
362+
github.com/int128/oauth2cli v1.14.0 h1:r63NoO10ybUXIXUQxih8WOmt5HQpJubdTmhWh22B9VE=
363+
github.com/int128/oauth2cli v1.14.0/go.mod h1:LIoVAzgAsS2tDDBc8yopkcgY5oZR0+MJAeECkCwtxhA=
355364
github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM=
356365
github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4=
357366
github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs=
@@ -491,6 +500,8 @@ github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwb
491500
github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas=
492501
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
493502
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
503+
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
504+
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
494505
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
495506
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
496507
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -681,6 +692,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
681692
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
682693
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
683694
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
695+
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
684696
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
685697
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
686698
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
@@ -777,6 +789,7 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
777789
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
778790
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
779791
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
792+
golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
780793
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
781794
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
782795
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
@@ -791,6 +804,8 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ
791804
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
792805
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
793806
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
807+
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
808+
golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk=
794809
golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M=
795810
golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
796811
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -855,6 +870,7 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w
855870
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
856871
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
857872
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
873+
golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
858874
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
859875
golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
860876
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1074,6 +1090,7 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
10741090
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
10751091
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
10761092
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
1093+
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
10771094
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
10781095
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
10791096
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=

0 commit comments

Comments
 (0)