前言

如何使用Tags

package pconfig

import (
	"crypto/sha1"
	"encoding/hex"
)

type node_config struct {
	NodeFlag string //上线标识,UUID前8位
	ACL      string //ACL
	Addr     string //连接帐号密码
	UserName string //用户名
	PassWord string //密码
	DB       int    //Redis仓库
	Sha1     string //签名
}

var (
	PENodeConfig node_config
)

func (n *node_config) Verify() bool {
	s := sha1.New()
	s.Write([]byte(n.ACL + n.NodeFlag + n.UserName + n.PassWord))
	ss := hex.EncodeToString(s.Sum(nil))
	return ss == n.Sha1
}
package pconfig

import (
	"os"
	"path"
	"peien-engine/logger"

	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

func init() {
	PENodeConfig = node_config{}
	pflag.String("node_flag", "0c3f6d78", "上线标识")
	pflag.String("acl", "acl_key", "Redis ACL键")
	pflag.Int("redis_db", 5, "Redis 仓库")
	pflag.String("redis_host", "127.0.0.1:6379", "Redis 服务器地址")
	pflag.String("redis_username", "kali-team", "Redis 用户名")
	pflag.String("redis_password", "password", "Redis 密码")
	pflag.String("sha1", "344f3467e824e7c5f54875ad53f7051eea925939", "Redis 数字签名")

	pflag.Parse()

	viper.AutomaticEnv()
	viper.BindPFlags(pflag.CommandLine)

	PENodeConfig.NodeFlag = viper.GetString("node_flag")
	PENodeConfig.ACL = viper.GetString("acl")
	PENodeConfig.Addr = viper.GetString("redis_host")
	PENodeConfig.UserName = viper.GetString("redis_username")
	PENodeConfig.PassWord = viper.GetString("redis_password")
	PENodeConfig.DB = viper.GetInt("redis_db")
	PENodeConfig.Sha1 = viper.GetString("sha1")
	if !PENodeConfig.Verify() {
		logger.Error("Redis签名错误")
		os.Exit(1)
	}
}
//go:build node
// +build node

package pconfig

import (
	"os"
	"path"

	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

var (
	PEScanConfig = scan_config{
		Timeout: *pflag.Int("timeout", 15, "Nuclei验证超时参数,默认:15秒")}
)

func init() {
	viper.AutomaticEnv()
	viper.BindPFlags(pflag.CommandLine)
	PEScanConfig.Timeout = viper.GetInt("timeout")
}
//go:build engine
// +build engine

package pconfig

import (
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

var (
	PEApiToken = token{
		ApiToken: *pflag.String("api_token", "token", "接口Token")}
)

func init() {
	viper.AutomaticEnv()
	viper.BindPFlags(pflag.CommandLine)
	PESumap.SumapApiToken = viper.GetString("api_token")
}

编译

go build -tags engine -ldflags "-s -w -extldflags '-static'" -o engine cmd/engine/receiver/main.go
go build -tags node -ldflags "-s -w -extldflags '-static'" -o node cmd/node/receiver/main.go

效果

➜  peien-engine git:(master) ✗ ./engine -h
Usage of ./engine:
      --acl string                 Redis ACL键 (default "acl_key")
      --node_flag string           上线标识 (default "0c3f6d78")
      --redis_db int               Redis 仓库 (default 5)
      --redis_host string          Redis 服务器地址 (default "127.0.0.1:6379")
      --redis_password string      Redis 密码 (default "password")
      --redis_username string      Redis 用户名 (default "kali-team")
      --sha1 string                Redis 数字签名 (default "344f3467e824e7c5f54875ad53f7051eea925939")
      --api_token string           接口Token (default "token")
pflag: help requested
➜  peien-engine git:(master) ✗ ./node -h  
Usage of ./node:
      --acl string                 Redis ACL键 (default "acl_key")
      --node_flag string           上线标识 (default "0c3f6d78")
      --redis_db int               Redis 仓库 (default 5)
      --redis_host string          Redis 服务器地址 (default "127.0.0.1:6379")
      --redis_password string      Redis 密码 (default "password")
      --redis_username string      Redis 用户名 (default "kali-team")
      --timeout int                Nuclei验证超时参数,默认:15秒 (default 15)
      --sha1 string                Redis 数字签名 (default "344f3467e824e7c5f54875ad53f7051eea925939")
pflag: help requested

VsCode的gopls提示

{
    "gopls": {
        "build.buildFlags": [
            "-tags=engine,node",
        ],
    },
}

总结

Powered by Kali-Team