mirror of
https://github.com/nabbar/golib.git
synced 2025-10-08 01:00:09 +08:00
- Chg :
- Package AWS : extend aws helper to manage accessKey - Package Cobra : refactor configure function to allow use independant part of the command - Package ldap : fix error - Package config - interface : add shutdown method - components: - request : syntax error in default json - mail : syntax error default json - ldap : - allow to access loaded config - mutex lock circular - tls : allow to access loaded config - Package request : - add error managment - fix error with circular mutex - fix bug with empty response body - fix some other errors - Package status : default label in component default config - Bump dependancies - Bump yaml to v3 (in waiting fix for CVE-2022-28948) - force dependancies gogo/protobuff to v1.3.2+
This commit is contained in:
@@ -26,19 +26,33 @@
|
|||||||
package user
|
package user
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/aws/aws-sdk-go-v2/aws"
|
sdkaws "github.com/aws/aws-sdk-go-v2/aws"
|
||||||
"github.com/aws/aws-sdk-go-v2/service/iam"
|
sdkiam "github.com/aws/aws-sdk-go-v2/service/iam"
|
||||||
"github.com/aws/aws-sdk-go-v2/service/iam/types"
|
sdktps "github.com/aws/aws-sdk-go-v2/service/iam/types"
|
||||||
"github.com/nabbar/golib/aws/helper"
|
awshlp "github.com/nabbar/golib/aws/helper"
|
||||||
"github.com/nabbar/golib/errors"
|
liberr "github.com/nabbar/golib/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (cli *client) AccessList(username string) (map[string]bool, errors.Error) {
|
func (cli *client) AccessListAll() ([]sdktps.AccessKeyMetadata, liberr.Error) {
|
||||||
var req = &iam.ListAccessKeysInput{}
|
var req = &sdkiam.ListAccessKeysInput{}
|
||||||
|
|
||||||
|
out, err := cli.iam.ListAccessKeys(cli.GetContext(), req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, cli.GetError(err)
|
||||||
|
} else if out.AccessKeyMetadata == nil {
|
||||||
|
return nil, awshlp.ErrorResponse.Error(nil)
|
||||||
|
} else {
|
||||||
|
return out.AccessKeyMetadata, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cli *client) AccessList(username string) (map[string]bool, liberr.Error) {
|
||||||
|
var req = &sdkiam.ListAccessKeysInput{}
|
||||||
|
|
||||||
if username != "" {
|
if username != "" {
|
||||||
req = &iam.ListAccessKeysInput{
|
req = &sdkiam.ListAccessKeysInput{
|
||||||
UserName: aws.String(username),
|
UserName: sdkaws.String(username),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,15 +61,15 @@ func (cli *client) AccessList(username string) (map[string]bool, errors.Error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, cli.GetError(err)
|
return nil, cli.GetError(err)
|
||||||
} else if out.AccessKeyMetadata == nil {
|
} else if out.AccessKeyMetadata == nil {
|
||||||
return nil, helper.ErrorResponse.Error(nil)
|
return nil, awshlp.ErrorResponse.Error(nil)
|
||||||
} else {
|
} else {
|
||||||
var res = make(map[string]bool)
|
var res = make(map[string]bool)
|
||||||
|
|
||||||
for _, a := range out.AccessKeyMetadata {
|
for _, a := range out.AccessKeyMetadata {
|
||||||
switch a.Status {
|
switch a.Status {
|
||||||
case types.StatusTypeActive:
|
case sdktps.StatusTypeActive:
|
||||||
res[*a.AccessKeyId] = true
|
res[*a.AccessKeyId] = true
|
||||||
case types.StatusTypeInactive:
|
case sdktps.StatusTypeInactive:
|
||||||
res[*a.AccessKeyId] = false
|
res[*a.AccessKeyId] = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,12 +78,12 @@ func (cli *client) AccessList(username string) (map[string]bool, errors.Error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *client) AccessCreate(username string) (string, string, errors.Error) {
|
func (cli *client) AccessCreate(username string) (string, string, liberr.Error) {
|
||||||
var req = &iam.CreateAccessKeyInput{}
|
var req = &sdkiam.CreateAccessKeyInput{}
|
||||||
|
|
||||||
if username != "" {
|
if username != "" {
|
||||||
req = &iam.CreateAccessKeyInput{
|
req = &sdkiam.CreateAccessKeyInput{
|
||||||
UserName: aws.String(username),
|
UserName: sdkaws.String(username),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,21 +92,21 @@ func (cli *client) AccessCreate(username string) (string, string, errors.Error)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", cli.GetError(err)
|
return "", "", cli.GetError(err)
|
||||||
} else if out.AccessKey == nil {
|
} else if out.AccessKey == nil {
|
||||||
return "", "", helper.ErrorResponse.Error(nil)
|
return "", "", awshlp.ErrorResponse.Error(nil)
|
||||||
} else {
|
} else {
|
||||||
return *out.AccessKey.AccessKeyId, *out.AccessKey.SecretAccessKey, nil
|
return *out.AccessKey.AccessKeyId, *out.AccessKey.SecretAccessKey, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *client) AccessDelete(username, accessKey string) errors.Error {
|
func (cli *client) AccessDelete(username, accessKey string) liberr.Error {
|
||||||
var req = &iam.DeleteAccessKeyInput{
|
var req = &sdkiam.DeleteAccessKeyInput{
|
||||||
AccessKeyId: aws.String(accessKey),
|
AccessKeyId: sdkaws.String(accessKey),
|
||||||
}
|
}
|
||||||
|
|
||||||
if username != "" {
|
if username != "" {
|
||||||
req = &iam.DeleteAccessKeyInput{
|
req = &sdkiam.DeleteAccessKeyInput{
|
||||||
AccessKeyId: aws.String(accessKey),
|
AccessKeyId: sdkaws.String(accessKey),
|
||||||
UserName: aws.String(username),
|
UserName: sdkaws.String(username),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
sdkiam "github.com/aws/aws-sdk-go-v2/service/iam"
|
sdkiam "github.com/aws/aws-sdk-go-v2/service/iam"
|
||||||
sdkitp "github.com/aws/aws-sdk-go-v2/service/iam/types"
|
sdktps "github.com/aws/aws-sdk-go-v2/service/iam/types"
|
||||||
sdksss "github.com/aws/aws-sdk-go-v2/service/s3"
|
sdksss "github.com/aws/aws-sdk-go-v2/service/s3"
|
||||||
libhlp "github.com/nabbar/golib/aws/helper"
|
libhlp "github.com/nabbar/golib/aws/helper"
|
||||||
liberr "github.com/nabbar/golib/errors"
|
liberr "github.com/nabbar/golib/errors"
|
||||||
@@ -43,7 +43,7 @@ type client struct {
|
|||||||
|
|
||||||
type User interface {
|
type User interface {
|
||||||
List() (map[string]string, liberr.Error)
|
List() (map[string]string, liberr.Error)
|
||||||
Get(username string) (*sdkitp.User, liberr.Error)
|
Get(username string) (*sdktps.User, liberr.Error)
|
||||||
Create(username string) liberr.Error
|
Create(username string) liberr.Error
|
||||||
Delete(username string) liberr.Error
|
Delete(username string) liberr.Error
|
||||||
|
|
||||||
@@ -54,6 +54,7 @@ type User interface {
|
|||||||
LoginCreate(username, password string) liberr.Error
|
LoginCreate(username, password string) liberr.Error
|
||||||
LoginDelete(username string) liberr.Error
|
LoginDelete(username string) liberr.Error
|
||||||
|
|
||||||
|
AccessListAll() ([]sdktps.AccessKeyMetadata, liberr.Error)
|
||||||
AccessList(username string) (map[string]bool, liberr.Error)
|
AccessList(username string) (map[string]bool, liberr.Error)
|
||||||
AccessCreate(username string) (string, string, liberr.Error)
|
AccessCreate(username string) (string, string, liberr.Error)
|
||||||
AccessDelete(username, accessKey string) liberr.Error
|
AccessDelete(username, accessKey string) liberr.Error
|
||||||
|
@@ -38,12 +38,14 @@ import (
|
|||||||
|
|
||||||
"github.com/mitchellh/go-homedir"
|
"github.com/mitchellh/go-homedir"
|
||||||
"github.com/pelletier/go-toml"
|
"github.com/pelletier/go-toml"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v3"
|
||||||
|
|
||||||
liblog "github.com/nabbar/golib/logger"
|
liblog "github.com/nabbar/golib/logger"
|
||||||
spfcbr "github.com/spf13/cobra"
|
spfcbr "github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var cfgFile string
|
||||||
|
|
||||||
func (c *cobra) getDefaultPath(baseName string) (string, error) {
|
func (c *cobra) getDefaultPath(baseName string) (string, error) {
|
||||||
path := ""
|
path := ""
|
||||||
|
|
||||||
@@ -65,65 +67,7 @@ func (c *cobra) getDefaultPath(baseName string) (string, error) {
|
|||||||
return path, nil
|
return path, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cobra) AddCommandConfigure(basename string, defaultConfig func() io.Reader) {
|
func (c *cobra) ConfigureCheckArgs(basename string, args []string) error {
|
||||||
pkg := c.getPackageName()
|
|
||||||
|
|
||||||
if basename == "" && pkg != "" {
|
|
||||||
basename = "." + strings.ToLower(pkg)
|
|
||||||
}
|
|
||||||
|
|
||||||
var cfgFile string
|
|
||||||
|
|
||||||
c.c.AddCommand(&spfcbr.Command{
|
|
||||||
Use: "configure <file path with valid extension (json, yaml, toml, ...) to be generated>",
|
|
||||||
Example: "configure ~/." + strings.ToLower(pkg) + ".yml",
|
|
||||||
Short: "Generate config file",
|
|
||||||
Long: `Generates a configuration file based on giving existing config flag
|
|
||||||
override by passed flag in command line and completed with default for non existing values.`,
|
|
||||||
|
|
||||||
Run: func(cmd *spfcbr.Command, args []string) {
|
|
||||||
var fs *os.File
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if fs != nil {
|
|
||||||
_ = fs.Close()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
buf, err := ioutil.ReadAll(defaultConfig())
|
|
||||||
c.getLog().CheckError(liblog.FatalLevel, liblog.DebugLevel, "reading default config", err)
|
|
||||||
|
|
||||||
if len(path.Ext(cfgFile)) > 0 && strings.ToLower(path.Ext(cfgFile)) != ".json" {
|
|
||||||
var mod = make(map[string]interface{}, 0)
|
|
||||||
|
|
||||||
err = json.Unmarshal(buf, &mod)
|
|
||||||
c.getLog().CheckError(liblog.FatalLevel, liblog.DebugLevel, "transform json default config", err)
|
|
||||||
|
|
||||||
switch strings.ToLower(path.Ext(cfgFile)) {
|
|
||||||
case ".toml":
|
|
||||||
buf, err = toml.Marshal(mod)
|
|
||||||
case ".yml", ".yaml":
|
|
||||||
buf, err = yaml.Marshal(mod)
|
|
||||||
default:
|
|
||||||
c.getLog().CheckError(liblog.FatalLevel, liblog.DebugLevel, "get encode for extension file", fmt.Errorf("extension file '%s' not compatible", path.Ext(cfgFile)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fs, err = os.OpenFile(cfgFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600)
|
|
||||||
c.getLog().CheckError(liblog.FatalLevel, liblog.DebugLevel, "opening destination config file for exclusive write with truncate", err)
|
|
||||||
|
|
||||||
_, err = fs.Write(buf)
|
|
||||||
c.getLog().CheckError(liblog.FatalLevel, liblog.DebugLevel, fmt.Sprintf("writing config to file '%s'", cfgFile), err)
|
|
||||||
|
|
||||||
err = os.Chmod(cfgFile, 0600)
|
|
||||||
if !c.getLog().CheckError(liblog.ErrorLevel, liblog.InfoLevel, fmt.Sprintf("setting permission for config file '%s'", cfgFile), err) {
|
|
||||||
println(fmt.Sprintf("\n\t>> Config File '%s' has been created and file permission have been set.", cfgFile))
|
|
||||||
println("\t>> To explicitly specify this config file when you call this tool, use the '-c' flag like this: ")
|
|
||||||
println(fmt.Sprintf("\t\t\t %s -c %s <cmd>...\n", pkg, cfgFile))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
Args: func(cmd *spfcbr.Command, args []string) error {
|
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
var err error
|
var err error
|
||||||
cfgFile, err = c.getDefaultPath(basename)
|
cfgFile, err = c.getDefaultPath(basename)
|
||||||
@@ -135,6 +79,89 @@ override by passed flag in command line and completed with default for non exist
|
|||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cobra) ConfigureWriteConfig(basename string, defaultConfig func() io.Reader) error {
|
||||||
|
pkg := c.getPackageName()
|
||||||
|
|
||||||
|
if basename == "" && pkg != "" {
|
||||||
|
basename = "." + strings.ToLower(pkg)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
fs *os.File
|
||||||
|
)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if fs != nil {
|
||||||
|
_ = fs.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
buf, err := ioutil.ReadAll(defaultConfig())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(path.Ext(cfgFile)) > 0 && strings.ToLower(path.Ext(cfgFile)) != ".json" {
|
||||||
|
var mod = make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
err = json.Unmarshal(buf, &mod)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch strings.ToLower(path.Ext(cfgFile)) {
|
||||||
|
case ".toml":
|
||||||
|
buf, err = toml.Marshal(mod)
|
||||||
|
case ".yml", ".yaml":
|
||||||
|
buf, err = yaml.Marshal(mod)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("extension file '%s' not compatible", path.Ext(cfgFile))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fs, err = os.OpenFile(cfgFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fs.Write(buf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.Chmod(cfgFile, 0600)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
println(fmt.Sprintf("\n\t>> Config File '%s' has been created and file permission have been set.", cfgFile))
|
||||||
|
println("\t>> To explicitly specify this config file when you call this tool, use the '-c' flag like this: ")
|
||||||
|
println(fmt.Sprintf("\t\t\t %s -c %s <cmd>...\n", pkg, cfgFile))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cobra) AddCommandConfigure(basename string, defaultConfig func() io.Reader) {
|
||||||
|
pkg := c.getPackageName()
|
||||||
|
|
||||||
|
if basename == "" && pkg != "" {
|
||||||
|
basename = "." + strings.ToLower(pkg)
|
||||||
|
}
|
||||||
|
|
||||||
|
c.c.AddCommand(&spfcbr.Command{
|
||||||
|
Use: "configure <file path with valid extension (json, yaml, toml, ...) to be generated>",
|
||||||
|
Example: "configure ~/." + strings.ToLower(pkg) + ".yml",
|
||||||
|
Short: "Generate config file",
|
||||||
|
Long: `Generates a configuration file based on giving existing config flag
|
||||||
|
override by passed flag in command line and completed with default for non existing values.`,
|
||||||
|
|
||||||
|
RunE: func(cmd *spfcbr.Command, args []string) error {
|
||||||
|
return c.ConfigureWriteConfig(basename, defaultConfig)
|
||||||
|
},
|
||||||
|
|
||||||
|
Args: func(cmd *spfcbr.Command, args []string) error {
|
||||||
|
return c.ConfigureCheckArgs(basename, args)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -63,6 +63,9 @@ type Cobra interface {
|
|||||||
Execute() error
|
Execute() error
|
||||||
|
|
||||||
Cobra() *spfcbr.Command
|
Cobra() *spfcbr.Command
|
||||||
|
|
||||||
|
ConfigureCheckArgs(basename string, args []string) error
|
||||||
|
ConfigureWriteConfig(basename string, defaultConfig func() io.Reader) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() Cobra {
|
func New() Cobra {
|
||||||
|
@@ -43,6 +43,7 @@ const (
|
|||||||
type ComponentLDAP interface {
|
type ComponentLDAP interface {
|
||||||
libcfg.Component
|
libcfg.Component
|
||||||
|
|
||||||
|
Config() *lbldap.Config
|
||||||
LDAP() *lbldap.HelperLDAP
|
LDAP() *lbldap.HelperLDAP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -47,6 +47,7 @@ type componentLDAP struct {
|
|||||||
frb func(cpt libcfg.Component) liberr.Error
|
frb func(cpt libcfg.Component) liberr.Error
|
||||||
|
|
||||||
m sync.Mutex
|
m sync.Mutex
|
||||||
|
c *lbldap.Config
|
||||||
l *lbldap.HelperLDAP
|
l *lbldap.HelperLDAP
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +87,7 @@ func (c *componentLDAP) _runFct(fct func(cpt libcfg.Component) liberr.Error) lib
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *componentLDAP) _runCli(getCfg libcfg.FuncComponentConfigGet) liberr.Error {
|
func (c *componentLDAP) _runCli(ctx context.Context, getCfg libcfg.FuncComponentConfigGet) liberr.Error {
|
||||||
c.m.Lock()
|
c.m.Lock()
|
||||||
defer c.m.Unlock()
|
defer c.m.Unlock()
|
||||||
|
|
||||||
@@ -95,10 +96,11 @@ func (c *componentLDAP) _runCli(getCfg libcfg.FuncComponentConfigGet) liberr.Err
|
|||||||
return ErrorParamsInvalid.Error(err)
|
return ErrorParamsInvalid.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if l, e := lbldap.NewLDAP(c._GetContext(), &cfg, nil); e != nil {
|
if l, e := lbldap.NewLDAP(ctx, &cfg, nil); e != nil {
|
||||||
return ErrorConfigInvalid.ErrorParent(e)
|
return ErrorConfigInvalid.ErrorParent(e)
|
||||||
} else {
|
} else {
|
||||||
c.l = l
|
c.l = l
|
||||||
|
c.c = &cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -109,7 +111,7 @@ func (c *componentLDAP) _run(getCfg libcfg.FuncComponentConfigGet) liberr.Error
|
|||||||
|
|
||||||
if err := c._runFct(fb); err != nil {
|
if err := c._runFct(fb); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if err = c._runCli(getCfg); err != nil {
|
} else if err = c._runCli(c._GetContext(), getCfg); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if err = c._runFct(fa); err != nil {
|
} else if err = c._runFct(fa); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -175,6 +177,13 @@ func (c *componentLDAP) Dependencies() []string {
|
|||||||
return make([]string, 0)
|
return make([]string, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *componentLDAP) Config() *lbldap.Config {
|
||||||
|
c.m.Lock()
|
||||||
|
defer c.m.Unlock()
|
||||||
|
|
||||||
|
return c.c
|
||||||
|
}
|
||||||
|
|
||||||
func (c *componentLDAP) LDAP() *lbldap.HelperLDAP {
|
func (c *componentLDAP) LDAP() *lbldap.HelperLDAP {
|
||||||
c.m.Lock()
|
c.m.Lock()
|
||||||
defer c.m.Unlock()
|
defer c.m.Unlock()
|
||||||
|
@@ -42,9 +42,9 @@ var _defaultConfig = []byte(`{
|
|||||||
"subject": "",
|
"subject": "",
|
||||||
"encoding": "",
|
"encoding": "",
|
||||||
"priority": "",
|
"priority": "",
|
||||||
"headers": [
|
"headers": {
|
||||||
""
|
"": ""
|
||||||
],
|
},
|
||||||
"from": "",
|
"from": "",
|
||||||
"sender": "",
|
"sender": "",
|
||||||
"replyTo": "",
|
"replyTo": "",
|
||||||
|
@@ -78,7 +78,7 @@ var _defaultConfig = []byte(`{
|
|||||||
"valid_http_code": [200, 201, 202, 203, 204],
|
"valid_http_code": [200, 201, 202, 203, 204],
|
||||||
"invalid_http_code": [401, 403, 404, 405, 500, 501, 502, 503, 504],
|
"invalid_http_code": [401, 403, 404, 405, 500, 501, 502, 503, 504],
|
||||||
"contain": ["OK", "Done"],
|
"contain": ["OK", "Done"],
|
||||||
"not_contain": ["KO", "fail", "error"],
|
"not_contain": ["KO", "fail", "error"]
|
||||||
},
|
},
|
||||||
"status": ` + string(libsts.DefaultConfig(" ")) + `
|
"status": ` + string(libsts.DefaultConfig(" ")) + `
|
||||||
}
|
}
|
||||||
|
@@ -37,6 +37,7 @@ const (
|
|||||||
|
|
||||||
type ComponentTlS interface {
|
type ComponentTlS interface {
|
||||||
libcfg.Component
|
libcfg.Component
|
||||||
|
Config() *libtls.Config
|
||||||
GetTLS() libtls.TLSConfig
|
GetTLS() libtls.TLSConfig
|
||||||
SetTLS(tls libtls.TLSConfig)
|
SetTLS(tls libtls.TLSConfig)
|
||||||
}
|
}
|
||||||
|
@@ -47,6 +47,7 @@ type componentTls struct {
|
|||||||
|
|
||||||
m sync.Mutex
|
m sync.Mutex
|
||||||
t libtls.TLSConfig
|
t libtls.TLSConfig
|
||||||
|
c *libtls.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *componentTls) _getFct() (func(cpt libcfg.Component) liberr.Error, func(cpt libcfg.Component) liberr.Error) {
|
func (c *componentTls) _getFct() (func(cpt libcfg.Component) liberr.Error, func(cpt libcfg.Component) liberr.Error) {
|
||||||
@@ -87,6 +88,7 @@ func (c *componentTls) _runCli(getCfg libcfg.FuncComponentConfigGet) liberr.Erro
|
|||||||
return ErrorComponentStart.Error(err)
|
return ErrorComponentStart.Error(err)
|
||||||
} else {
|
} else {
|
||||||
c.t = tls
|
c.t = tls
|
||||||
|
c.c = cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -163,6 +165,13 @@ func (c *componentTls) Dependencies() []string {
|
|||||||
return make([]string, 0)
|
return make([]string, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *componentTls) Config() *libtls.Config {
|
||||||
|
c.m.Lock()
|
||||||
|
defer c.m.Unlock()
|
||||||
|
|
||||||
|
return c.c
|
||||||
|
}
|
||||||
|
|
||||||
func (c *componentTls) GetTLS() libtls.TLSConfig {
|
func (c *componentTls) GetTLS() libtls.TLSConfig {
|
||||||
c.m.Lock()
|
c.m.Lock()
|
||||||
defer c.m.Unlock()
|
defer c.m.Unlock()
|
||||||
|
@@ -112,6 +112,12 @@ type Config interface {
|
|||||||
// is trigger. This func is call after the stop sequence.
|
// is trigger. This func is call after the stop sequence.
|
||||||
RegisterFuncStopAfter(fct func())
|
RegisterFuncStopAfter(fct func())
|
||||||
|
|
||||||
|
// Shutdown will trigger all stop function.
|
||||||
|
// This function will call the Stop function and the private function cancel.
|
||||||
|
// This will stop all process and do like a SIGTERM/SIGINT signal.
|
||||||
|
// This will finish by an os.Exit with the given parameter code.
|
||||||
|
Shutdown(code int)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Section Component : github.com/nabbar/golib/config
|
// Section Component : github.com/nabbar/golib/config
|
||||||
*/
|
*/
|
||||||
|
@@ -29,6 +29,7 @@ package config
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
libctx "github.com/nabbar/golib/context"
|
libctx "github.com/nabbar/golib/context"
|
||||||
liberr "github.com/nabbar/golib/errors"
|
liberr "github.com/nabbar/golib/errors"
|
||||||
@@ -227,6 +228,11 @@ func (c *configModel) RegisterFuncStopAfter(fct func()) {
|
|||||||
c.fctStopAfter = fct
|
c.fctStopAfter = fct
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *configModel) Shutdown(code int) {
|
||||||
|
c.cancel()
|
||||||
|
os.Exit(code)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *configModel) ComponentHas(key string) bool {
|
func (c *configModel) ComponentHas(key string) bool {
|
||||||
return c.cpt.ComponentHas(key)
|
return c.cpt.ComponentHas(key)
|
||||||
}
|
}
|
||||||
|
240
go.mod
240
go.mod
@@ -2,194 +2,186 @@ module github.com/nabbar/golib
|
|||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/aws/aws-sdk-go-v2 v1.16.3
|
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.15.4
|
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.12.0
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/iam v1.18.4
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.7
|
|
||||||
github.com/bits-and-blooms/bitset v1.2.2
|
|
||||||
github.com/c-bata/go-prompt v0.2.6
|
|
||||||
github.com/fatih/color v1.13.0
|
|
||||||
github.com/fsnotify/fsnotify v1.5.4
|
|
||||||
github.com/fxamacker/cbor/v2 v2.4.0
|
|
||||||
github.com/gin-gonic/gin v1.7.7
|
|
||||||
github.com/go-ldap/ldap/v3 v3.4.3
|
|
||||||
github.com/go-playground/validator/v10 v10.10.1
|
|
||||||
github.com/google/go-github/v33 v33.0.0
|
|
||||||
github.com/hashicorp/go-hclog v1.2.0
|
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.1
|
|
||||||
github.com/hashicorp/go-uuid v1.0.3
|
|
||||||
github.com/hashicorp/go-version v1.4.0
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20220310202011-d2c44e311e78
|
|
||||||
github.com/lni/dragonboat/v3 v3.1.1-0.20220423051305-68cf0ad96f46
|
|
||||||
github.com/matcornic/hermes/v2 v2.1.0
|
|
||||||
github.com/mattn/go-colorable v0.1.12
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
|
||||||
github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a
|
|
||||||
github.com/nats-io/nats-server/v2 v2.8.1
|
|
||||||
github.com/nats-io/nats.go v1.14.0
|
|
||||||
github.com/onsi/ginkgo/v2 v2.1.4
|
|
||||||
github.com/onsi/gomega v1.19.0
|
|
||||||
github.com/pelletier/go-toml v1.9.5
|
|
||||||
github.com/pkg/errors v0.9.1
|
|
||||||
github.com/prometheus/client_golang v1.12.1
|
|
||||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
|
||||||
github.com/sirupsen/logrus v1.8.1
|
|
||||||
github.com/spf13/cobra v1.4.0
|
|
||||||
github.com/spf13/jwalterweatherman v1.1.0
|
|
||||||
github.com/spf13/viper v1.11.0
|
|
||||||
github.com/vbauerster/mpb/v5 v5.4.0
|
|
||||||
github.com/xanzy/go-gitlab v0.64.0
|
|
||||||
github.com/xhit/go-simple-mail v2.2.2+incompatible
|
|
||||||
github.com/xujiajun/nutsdb v0.8.0
|
|
||||||
github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b
|
|
||||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4
|
|
||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
|
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
|
||||||
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150
|
|
||||||
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171
|
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
|
||||||
gorm.io/driver/clickhouse v0.3.2
|
|
||||||
gorm.io/driver/mysql v1.3.3
|
|
||||||
gorm.io/driver/postgres v1.3.5
|
|
||||||
gorm.io/driver/sqlite v1.3.2
|
|
||||||
gorm.io/driver/sqlserver v1.3.2
|
|
||||||
gorm.io/gorm v1.23.5
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
|
github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect
|
||||||
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
|
github.com/ClickHouse/clickhouse-go/v2 v2.2.0 // indirect
|
||||||
github.com/DataDog/zstd v1.5.2 // indirect
|
github.com/Masterminds/semver v1.4.2 // indirect
|
||||||
github.com/Masterminds/goutils v1.1.1 // indirect
|
github.com/Masterminds/sprig v2.16.0+incompatible // indirect
|
||||||
github.com/Masterminds/semver v1.5.0 // indirect
|
github.com/PuerkitoBio/goquery v1.5.0 // indirect
|
||||||
github.com/Masterminds/sprig v2.22.0+incompatible // indirect
|
github.com/VictoriaMetrics/metrics v1.6.2 // indirect
|
||||||
github.com/PuerkitoBio/goquery v1.8.0 // indirect
|
github.com/VividCortex/ewma v1.1.1 // indirect
|
||||||
github.com/VictoriaMetrics/metrics v1.18.1 // indirect
|
|
||||||
github.com/VividCortex/ewma v1.2.0 // indirect
|
|
||||||
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
|
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
|
||||||
github.com/andybalholm/cascadia v1.3.1 // indirect
|
github.com/andybalholm/cascadia v1.0.0 // indirect
|
||||||
github.com/aokoli/goutils v1.1.1 // indirect
|
github.com/aokoli/goutils v1.0.1 // indirect
|
||||||
github.com/armon/go-metrics v0.3.11 // indirect
|
github.com/armon/go-metrics v0.3.10 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.1 // indirect
|
github.com/aws/aws-sdk-go-v2 v1.16.7 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.4 // indirect
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.10 // indirect
|
github.com/aws/aws-sdk-go-v2/config v1.15.14 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.4 // indirect
|
github.com/aws/aws-sdk-go-v2/credentials v1.12.9 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.11 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.1 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.1 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.5 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.4 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.4 // indirect
|
github.com/aws/aws-sdk-go-v2/service/iam v1.18.9 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.11.4 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.16.4 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.9 // indirect
|
||||||
github.com/aws/smithy-go v1.11.2 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.8 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.27.1 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/sso v1.11.12 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/sts v1.16.9 // indirect
|
||||||
|
github.com/aws/smithy-go v1.12.0 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/bits-and-blooms/bitset v1.3.0 // indirect
|
||||||
github.com/bwmarrin/snowflake v0.3.0 // indirect
|
github.com/bwmarrin/snowflake v0.3.0 // indirect
|
||||||
|
github.com/c-bata/go-prompt v0.2.6 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||||
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
|
github.com/cockroachdb/errors v1.7.5 // indirect
|
||||||
github.com/cockroachdb/errors v1.9.0 // indirect
|
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect
|
||||||
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
|
github.com/cockroachdb/pebble v0.0.0-20210331181633-27fc006b8bfb // indirect
|
||||||
github.com/cockroachdb/pebble v0.0.0-20220428002600-b9e970a83ddd // indirect
|
github.com/cockroachdb/redact v1.0.6 // indirect
|
||||||
github.com/cockroachdb/redact v1.1.3 // indirect
|
|
||||||
github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect
|
github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect
|
||||||
github.com/codahale/hdrhistogram v0.9.0 // indirect
|
|
||||||
github.com/denisenkom/go-mssqldb v0.12.0 // indirect
|
github.com/denisenkom/go-mssqldb v0.12.0 // indirect
|
||||||
github.com/getsentry/sentry-go v0.13.0 // indirect
|
github.com/fatih/color v1.13.0 // indirect
|
||||||
|
github.com/fsnotify/fsnotify v1.5.4 // indirect
|
||||||
|
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/gin-gonic/gin v1.8.1 // indirect
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
|
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
|
||||||
|
github.com/go-ldap/ldap/v3 v3.4.3 // indirect
|
||||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||||
github.com/go-playground/locales v0.14.0 // indirect
|
github.com/go-playground/locales v0.14.0 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.0 // indirect
|
github.com/go-playground/universal-translator v0.18.0 // indirect
|
||||||
|
github.com/go-playground/validator/v10 v10.11.0 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.6.0 // indirect
|
github.com/go-sql-driver/mysql v1.6.0 // indirect
|
||||||
|
github.com/goccy/go-json v0.9.7 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect
|
||||||
github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 // indirect
|
github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 // indirect
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/golang/protobuf v1.5.2 // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 // indirect
|
||||||
github.com/google/btree v1.0.1 // indirect
|
github.com/google/btree v1.0.0 // indirect
|
||||||
|
github.com/google/go-cmp v0.5.8 // indirect
|
||||||
|
github.com/google/go-github/v33 v33.0.0 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/google/uuid v1.3.0 // indirect
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
github.com/gorilla/css v1.0.0 // indirect
|
github.com/gorilla/css v1.0.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.0.0 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
|
github.com/hashicorp/go-hclog v1.2.1 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
github.com/hashicorp/go-msgpack v1.1.5 // indirect
|
github.com/hashicorp/go-msgpack v0.5.3 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
github.com/hashicorp/go-retryablehttp v0.7.1 // indirect
|
||||||
|
github.com/hashicorp/go-sockaddr v1.0.0 // indirect
|
||||||
|
github.com/hashicorp/go-uuid v1.0.3 // indirect
|
||||||
|
github.com/hashicorp/go-version v1.6.0 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/hashicorp/memberlist v0.3.1 // indirect
|
github.com/hashicorp/memberlist v0.2.2 // indirect
|
||||||
github.com/huandu/xstrings v1.3.2 // indirect
|
github.com/huandu/xstrings v1.2.0 // indirect
|
||||||
github.com/imdario/mergo v0.3.12 // indirect
|
github.com/imdario/mergo v0.3.6 // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||||
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
|
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
|
||||||
github.com/jackc/pgconn v1.12.0 // indirect
|
github.com/jackc/pgconn v1.12.1 // indirect
|
||||||
github.com/jackc/pgio v1.0.0 // indirect
|
github.com/jackc/pgio v1.0.0 // indirect
|
||||||
github.com/jackc/pgpassfile v1.0.0 // indirect
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
github.com/jackc/pgproto3/v2 v2.3.0 // indirect
|
github.com/jackc/pgproto3/v2 v2.3.0 // indirect
|
||||||
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
|
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
|
||||||
github.com/jackc/pgtype v1.11.0 // indirect
|
github.com/jackc/pgtype v1.11.0 // indirect
|
||||||
github.com/jackc/pgx/v4 v4.16.0 // indirect
|
github.com/jackc/pgx/v4 v4.16.1 // indirect
|
||||||
github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba // indirect
|
github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 // indirect
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/jlaffaye/ftp v0.0.0-20220630165035-11536801d1ff // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/juju/ratelimit v1.0.2-0.20191002062651-f60b32039441 // indirect
|
github.com/juju/ratelimit v1.0.2-0.20191002062651-f60b32039441 // indirect
|
||||||
github.com/klauspost/compress v1.15.2 // indirect
|
github.com/klauspost/compress v1.14.4 // indirect
|
||||||
github.com/kr/pretty v0.3.0 // indirect
|
github.com/kr/pretty v0.3.0 // indirect
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/kr/text v0.2.0 // indirect
|
||||||
github.com/leodido/go-urn v1.2.1 // indirect
|
github.com/leodido/go-urn v1.2.1 // indirect
|
||||||
github.com/lni/goutils v1.3.1-0.20220404072553-ddb2075d2587 // indirect
|
github.com/lni/dragonboat/v3 v3.3.5 // indirect
|
||||||
github.com/lni/vfs v0.2.1-0.20220408085249-8be85be1c3c1 // indirect
|
github.com/lni/goutils v1.3.0 // indirect
|
||||||
github.com/magiconair/properties v1.8.6 // indirect
|
github.com/magiconair/properties v1.8.6 // indirect
|
||||||
|
github.com/matcornic/hermes/v2 v2.1.0 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.12 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.13 // indirect
|
github.com/mattn/go-runewidth v0.0.9 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.14.12 // indirect
|
github.com/mattn/go-sqlite3 v1.14.12 // indirect
|
||||||
github.com/mattn/go-tty v0.0.4 // indirect
|
github.com/mattn/go-tty v0.0.3 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
||||||
github.com/miekg/dns v1.1.48 // indirect
|
github.com/miekg/dns v1.1.26 // indirect
|
||||||
github.com/minio/highwayhash v1.0.2 // indirect
|
github.com/minio/highwayhash v1.0.2 // indirect
|
||||||
github.com/mitchellh/copystructure v1.2.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
|
github.com/nats-io/jwt/v2 v2.3.0 // indirect
|
||||||
|
github.com/nats-io/nats-server/v2 v2.8.4 // indirect
|
||||||
|
github.com/nats-io/nats.go v1.16.0 // indirect
|
||||||
github.com/nats-io/nkeys v0.3.0 // indirect
|
github.com/nats-io/nkeys v0.3.0 // indirect
|
||||||
github.com/nats-io/nuid v1.0.1 // indirect
|
github.com/nats-io/nuid v1.0.1 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.1 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.0.0 // indirect
|
github.com/onsi/ginkgo/v2 v2.1.4 // indirect
|
||||||
|
github.com/onsi/gomega v1.20.0 // indirect
|
||||||
|
github.com/paulmach/orb v0.7.1 // indirect
|
||||||
|
github.com/pelletier/go-toml v1.9.5 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
|
||||||
|
github.com/pierrec/lz4/v4 v4.1.15 // indirect
|
||||||
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/term v1.2.0-beta.2 // indirect
|
github.com/pkg/term v1.2.0-beta.2 // indirect
|
||||||
|
github.com/prometheus/client_golang v1.12.2 // indirect
|
||||||
github.com/prometheus/client_model v0.2.0 // indirect
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
github.com/prometheus/common v0.34.0 // indirect
|
github.com/prometheus/common v0.32.1 // indirect
|
||||||
github.com/prometheus/procfs v0.7.3 // indirect
|
github.com/prometheus/procfs v0.7.3 // indirect
|
||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rogpeppe/go-internal v1.8.0 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.8.1 // indirect
|
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
|
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
|
||||||
|
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
|
||||||
|
github.com/shopspring/decimal v1.3.1 // indirect
|
||||||
|
github.com/sirupsen/logrus v1.9.0 // indirect
|
||||||
github.com/spf13/afero v1.8.2 // indirect
|
github.com/spf13/afero v1.8.2 // indirect
|
||||||
github.com/spf13/cast v1.4.1 // indirect
|
github.com/spf13/cast v1.5.0 // indirect
|
||||||
|
github.com/spf13/cobra v1.5.0 // indirect
|
||||||
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
|
github.com/spf13/viper v1.12.0 // indirect
|
||||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
||||||
github.com/subosito/gotenv v1.2.0 // indirect
|
github.com/subosito/gotenv v1.3.0 // indirect
|
||||||
github.com/ugorji/go/codec v1.2.7 // indirect
|
github.com/ugorji/go/codec v1.2.7 // indirect
|
||||||
github.com/valyala/fastrand v1.1.0 // indirect
|
github.com/valyala/fastrand v1.0.0 // indirect
|
||||||
github.com/valyala/histogram v1.2.0 // indirect
|
github.com/valyala/histogram v1.0.1 // indirect
|
||||||
github.com/vanng822/css v1.0.1 // indirect
|
github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04 // indirect
|
||||||
github.com/vanng822/go-premailer v1.20.1 // indirect
|
github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe // indirect
|
||||||
|
github.com/vbauerster/mpb/v5 v5.4.0 // indirect
|
||||||
github.com/x448/float16 v0.8.4 // indirect
|
github.com/x448/float16 v0.8.4 // indirect
|
||||||
|
github.com/xanzy/go-gitlab v0.69.0 // indirect
|
||||||
|
github.com/xhit/go-simple-mail v2.2.2+incompatible // indirect
|
||||||
github.com/xujiajun/mmap-go v1.0.1 // indirect
|
github.com/xujiajun/mmap-go v1.0.1 // indirect
|
||||||
|
github.com/xujiajun/nutsdb v0.9.0 // indirect
|
||||||
|
github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f // indirect
|
go.opentelemetry.io/otel v1.7.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 // indirect
|
go.opentelemetry.io/otel/trace v1.7.0 // indirect
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
|
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20200513190911-00229845015e // indirect
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
|
||||||
|
golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
|
||||||
|
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect
|
golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect
|
||||||
golang.org/x/tools v0.1.10 // indirect
|
|
||||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/protobuf v1.28.0 // indirect
|
google.golang.org/protobuf v1.28.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
gorm.io/driver/clickhouse v0.4.2 // indirect
|
||||||
|
gorm.io/driver/mysql v1.3.5 // indirect
|
||||||
|
gorm.io/driver/postgres v1.3.8 // indirect
|
||||||
|
gorm.io/driver/sqlite v1.3.6 // indirect
|
||||||
|
gorm.io/driver/sqlserver v1.3.2 // indirect
|
||||||
|
gorm.io/gorm v1.23.8 // indirect
|
||||||
)
|
)
|
||||||
|
@@ -49,14 +49,13 @@ const (
|
|||||||
ErrorLDAPGroupNotFound
|
ErrorLDAPGroupNotFound
|
||||||
)
|
)
|
||||||
|
|
||||||
var isCodeError = false
|
var isCodeError = errors.ExistInMapMessage(ErrorEmptyParams)
|
||||||
|
|
||||||
func IsCodeError() bool {
|
func IsCodeError() bool {
|
||||||
return isCodeError
|
return isCodeError
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
isCodeError = errors.ExistInMapMessage(ErrorEmptyParams)
|
|
||||||
errors.RegisterIdFctMessage(ErrorEmptyParams, getMessage)
|
errors.RegisterIdFctMessage(ErrorEmptyParams, getMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -170,7 +170,7 @@ func (lc *HelperLDAP) dialTLS() (*ldap.Conn, liberr.Error) {
|
|||||||
func (lc *HelperLDAP) dial() (*ldap.Conn, liberr.Error) {
|
func (lc *HelperLDAP) dial() (*ldap.Conn, liberr.Error) {
|
||||||
d := net.Dialer{}
|
d := net.Dialer{}
|
||||||
|
|
||||||
c, err := d.DialContext(lc.ctx, "tcp", lc.config.ServerAddr(true))
|
c, err := d.DialContext(lc.ctx, "tcp", lc.config.ServerAddr(false))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if c != nil {
|
if c != nil {
|
||||||
|
@@ -26,12 +26,17 @@
|
|||||||
|
|
||||||
package request
|
package request
|
||||||
|
|
||||||
import "bytes"
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
type requestError struct {
|
type requestError struct {
|
||||||
c int
|
c int
|
||||||
s string
|
s string
|
||||||
|
se bool
|
||||||
b *bytes.Buffer
|
b *bytes.Buffer
|
||||||
|
be bool
|
||||||
e error
|
e error
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,3 +55,25 @@ func (r *requestError) Body() *bytes.Buffer {
|
|||||||
func (r *requestError) Error() error {
|
func (r *requestError) Error() error {
|
||||||
return r.e
|
return r.e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *requestError) IsError() bool {
|
||||||
|
return r.se || r.be || r.e != nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *requestError) IsStatusError() bool {
|
||||||
|
return r.se
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *requestError) IsBodyError() bool {
|
||||||
|
return r.be
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *requestError) ParseBody(i interface{}) bool {
|
||||||
|
if r.b != nil && r.b.Len() > 0 {
|
||||||
|
if e := json.Unmarshal(r.b.Bytes(), i); e == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
@@ -47,6 +47,12 @@ type RequestError interface {
|
|||||||
Status() string
|
Status() string
|
||||||
Body() *bytes.Buffer
|
Body() *bytes.Buffer
|
||||||
Error() error
|
Error() error
|
||||||
|
|
||||||
|
IsError() bool
|
||||||
|
IsStatusError() bool
|
||||||
|
IsBodyError() bool
|
||||||
|
|
||||||
|
ParseBody(i interface{}) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Request interface {
|
type Request interface {
|
||||||
|
123
request/model.go
123
request/model.go
@@ -178,8 +178,20 @@ func (r *request) _GetContext() context.Context {
|
|||||||
return context.Background()
|
return context.Background()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *request) _GetOption() *Options {
|
||||||
|
if r.o == nil {
|
||||||
|
return nil
|
||||||
|
} else if i := r.o.Load(); i == nil {
|
||||||
|
return nil
|
||||||
|
} else if o, ok := i.(*Options); !ok {
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (r *request) _GetDefaultTLS() libtls.TLSConfig {
|
func (r *request) _GetDefaultTLS() libtls.TLSConfig {
|
||||||
if cfg := r.GetOption(); cfg != nil {
|
if cfg := r._GetOption(); cfg != nil {
|
||||||
return cfg._GetDefaultTLS()
|
return cfg._GetDefaultTLS()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +211,7 @@ func (r *request) _GetClient() *http.Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg := r.GetOption(); cfg != nil {
|
if cfg := r._GetOption(); cfg != nil {
|
||||||
return cfg.GetClientHTTP(h)
|
return cfg.GetClientHTTP(h)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,8 +264,10 @@ func (r *request) _CheckResponse(rsp *http.Response, validStatus ...int) (*bytes
|
|||||||
}
|
}
|
||||||
|
|
||||||
if rsp.Body != nil {
|
if rsp.Body != nil {
|
||||||
|
if _, e = io.Copy(b, rsp.Body); e != nil {
|
||||||
return b, ErrorResponseLoadBody.ErrorParent(e)
|
return b, ErrorResponseLoadBody.ErrorParent(e)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !r._IsValidCode(validStatus, rsp.StatusCode) {
|
if !r._IsValidCode(validStatus, rsp.StatusCode) {
|
||||||
return b, ErrorResponseStatus.Error(nil)
|
return b, ErrorResponseStatus.Error(nil)
|
||||||
@@ -314,20 +328,23 @@ func (r *request) Clone() (Request, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *request) New() (Request, error) {
|
func (r *request) New() (Request, error) {
|
||||||
cfg := r.GetOption()
|
|
||||||
|
|
||||||
r.s.Lock()
|
r.s.Lock()
|
||||||
defer r.s.Unlock()
|
defer r.s.Unlock()
|
||||||
|
|
||||||
var n *request
|
var (
|
||||||
|
n *request
|
||||||
|
c = r._GetOption()
|
||||||
|
)
|
||||||
|
|
||||||
if cfg == nil {
|
if c == nil {
|
||||||
if i, e := New(r.x, r.f, Options{}); e != nil {
|
c = &Options{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if i, e := New(r.x, r.f, *c); e != nil {
|
||||||
return nil, e
|
return nil, e
|
||||||
} else {
|
} else {
|
||||||
n = i.(*request)
|
n = i.(*request)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if r.u != nil {
|
if r.u != nil {
|
||||||
n.u = &url.URL{
|
n.u = &url.URL{
|
||||||
@@ -351,15 +368,7 @@ func (r *request) GetOption() *Options {
|
|||||||
r.s.Lock()
|
r.s.Lock()
|
||||||
defer r.s.Unlock()
|
defer r.s.Unlock()
|
||||||
|
|
||||||
if r.o == nil {
|
return r._GetOption()
|
||||||
return nil
|
|
||||||
} else if i := r.o.Load(); i == nil {
|
|
||||||
return nil
|
|
||||||
} else if o, ok := i.(*Options); !ok {
|
|
||||||
return nil
|
|
||||||
} else {
|
|
||||||
return o
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *request) SetOption(opt *Options) error {
|
func (r *request) SetOption(opt *Options) error {
|
||||||
@@ -437,7 +446,9 @@ func (r *request) AddPath(raw bool, path ...string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := range path {
|
for i := range path {
|
||||||
if strings.HasPrefix(path[i], "/") {
|
if raw && strings.HasSuffix(r.u.RawPath, "/") && strings.HasPrefix(path[i], "/") {
|
||||||
|
path[i] = strings.TrimPrefix(path[i], "/")
|
||||||
|
} else if !raw && strings.HasSuffix(r.u.Path, "/") && strings.HasPrefix(path[i], "/") {
|
||||||
path[i] = strings.TrimPrefix(path[i], "/")
|
path[i] = strings.TrimPrefix(path[i], "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -594,10 +605,7 @@ func (r *request) BodyJson(body interface{}) error {
|
|||||||
if p, e := json.Marshal(body); e != nil {
|
if p, e := json.Marshal(body); e != nil {
|
||||||
return e
|
return e
|
||||||
} else {
|
} else {
|
||||||
r.s.Lock()
|
r._BodyReader(bytes.NewBuffer(p))
|
||||||
defer r.s.Unlock()
|
|
||||||
|
|
||||||
r.b = bytes.NewBuffer(p)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r.ContentType("application/json")
|
r.ContentType("application/json")
|
||||||
@@ -605,16 +613,20 @@ func (r *request) BodyJson(body interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *request) BodyReader(body io.Reader, contentType string) {
|
func (r *request) BodyReader(body io.Reader, contentType string) {
|
||||||
r.s.Lock()
|
r._BodyReader(body)
|
||||||
defer r.s.Unlock()
|
|
||||||
|
|
||||||
r.b = body
|
|
||||||
|
|
||||||
if contentType != "" {
|
if contentType != "" {
|
||||||
r.ContentType(contentType)
|
r.ContentType(contentType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *request) _BodyReader(body io.Reader) {
|
||||||
|
r.s.Lock()
|
||||||
|
defer r.s.Unlock()
|
||||||
|
|
||||||
|
r.b = body
|
||||||
|
}
|
||||||
|
|
||||||
func (r *request) Error() RequestError {
|
func (r *request) Error() RequestError {
|
||||||
r.s.Lock()
|
r.s.Lock()
|
||||||
defer r.s.Unlock()
|
defer r.s.Unlock()
|
||||||
@@ -626,7 +638,7 @@ func (r *request) IsError() bool {
|
|||||||
r.s.Lock()
|
r.s.Lock()
|
||||||
defer r.s.Unlock()
|
defer r.s.Unlock()
|
||||||
|
|
||||||
return r.e != nil
|
return r.e != nil && r.e.IsError()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *request) Do() (*http.Response, liberr.Error) {
|
func (r *request) Do() (*http.Response, liberr.Error) {
|
||||||
@@ -644,28 +656,25 @@ func (r *request) Do() (*http.Response, liberr.Error) {
|
|||||||
err liberr.Error
|
err liberr.Error
|
||||||
)
|
)
|
||||||
|
|
||||||
r.e = nil
|
|
||||||
|
|
||||||
req, err = r._MakeRequest(r.u, r.m, r.b, r.h, r.p)
|
|
||||||
if err != nil {
|
|
||||||
r.e = &requestError{
|
r.e = &requestError{
|
||||||
c: 0,
|
c: 0,
|
||||||
s: "",
|
s: "",
|
||||||
b: nil,
|
se: false,
|
||||||
e: err,
|
b: bytes.NewBuffer(make([]byte, 0)),
|
||||||
|
be: false,
|
||||||
|
e: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req, err = r._MakeRequest(r.u, r.m, r.b, r.h, r.p)
|
||||||
|
if err != nil {
|
||||||
|
r.e.e = err
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp, e = r._GetClient().Do(req)
|
rsp, e = r._GetClient().Do(req)
|
||||||
|
|
||||||
if e != nil {
|
if e != nil {
|
||||||
r.e = &requestError{
|
r.e.e = e
|
||||||
c: 0,
|
|
||||||
s: "",
|
|
||||||
b: nil,
|
|
||||||
e: e,
|
|
||||||
}
|
|
||||||
return nil, ErrorSendRequest.ErrorParent(e)
|
return nil, ErrorSendRequest.ErrorParent(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -681,31 +690,41 @@ func (r *request) DoParse(model interface{}, validStatus ...int) liberr.Error {
|
|||||||
rsp *http.Response
|
rsp *http.Response
|
||||||
)
|
)
|
||||||
|
|
||||||
|
r.e = &requestError{
|
||||||
|
c: 0,
|
||||||
|
s: "",
|
||||||
|
se: false,
|
||||||
|
b: bytes.NewBuffer(make([]byte, 0)),
|
||||||
|
be: false,
|
||||||
|
e: nil,
|
||||||
|
}
|
||||||
|
|
||||||
if rsp, err = r.Do(); err != nil {
|
if rsp, err = r.Do(); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if rsp == nil {
|
} else if rsp == nil {
|
||||||
return ErrorResponseInvalid.Error(nil)
|
return ErrorResponseInvalid.Error(nil)
|
||||||
|
} else {
|
||||||
|
r.e.c = rsp.StatusCode
|
||||||
|
r.e.s = rsp.Status
|
||||||
}
|
}
|
||||||
|
|
||||||
if b, err = r._CheckResponse(rsp, validStatus...); e != nil {
|
b, err = r._CheckResponse(rsp, validStatus...)
|
||||||
r.e = &requestError{
|
r.e.b = b
|
||||||
c: rsp.StatusCode,
|
|
||||||
s: rsp.Status,
|
if err != nil && err.HasCodeError(ErrorResponseStatus) {
|
||||||
b: b,
|
r.e.se = true
|
||||||
e: err,
|
} else if err != nil {
|
||||||
}
|
r.e.e = err
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if b.Len() > 0 {
|
||||||
if e = json.Unmarshal(b.Bytes(), model); e != nil {
|
if e = json.Unmarshal(b.Bytes(), model); e != nil {
|
||||||
r.e = &requestError{
|
r.e.be = true
|
||||||
c: rsp.StatusCode,
|
r.e.e = e
|
||||||
s: rsp.Status,
|
|
||||||
b: b,
|
|
||||||
e: e,
|
|
||||||
}
|
|
||||||
return ErrorResponseUnmarshall.ErrorParent(e)
|
return ErrorResponseUnmarshall.ErrorParent(e)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@@ -59,7 +59,7 @@ type ConfigStatus struct {
|
|||||||
var _defaultConfig = []byte(`{
|
var _defaultConfig = []byte(`{
|
||||||
"mandatory": false,
|
"mandatory": false,
|
||||||
"message_ok": "OK",
|
"message_ok": "OK",
|
||||||
"message_ko": "OK",
|
"message_ko": "KO",
|
||||||
"cache_timeout_info": "30s",
|
"cache_timeout_info": "30s",
|
||||||
"cache_timeout_health": "5s"
|
"cache_timeout_health": "5s"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user