github.com/TaceyWong/ctools@v0.1.1-0.20201221084458-4d7a8190b2ac/ctools.go (about)

     1  /*
     2   * @Description:
     3   * @Author: WangXinyong/TaceyWong
     4   * @Date: 2020-05-27 14:49:56
     5   * @LastEditors: WangXinyong/TaceyWong
     6   * @LastEditTime: 2020-05-28 14:18:56
     7   * @FilePath: /ctools/ctools.go
     8   */
     9  package main
    10  
    11  import (
    12  	"fmt"
    13  	"log"
    14  	"os"
    15  	"sort"
    16  
    17  	"github.com/TaceyWong/ctools/tools"
    18  	"github.com/TaceyWong/ctools/tools/code_minifiers_beautifiers"
    19  	"github.com/TaceyWong/ctools/tools/converters"
    20  	"github.com/TaceyWong/ctools/tools/crypt_security"
    21  	"github.com/TaceyWong/ctools/tools/encoders_decoders"
    22  	"github.com/TaceyWong/ctools/tools/formatters"
    23  	"github.com/TaceyWong/ctools/tools/fun"
    24  	"github.com/TaceyWong/ctools/tools/string_utils"
    25  	"github.com/TaceyWong/ctools/tools/validators"
    26  	"github.com/TaceyWong/ctools/tools/web_resources"
    27  
    28  	. "github.com/TaceyWong/ctools/tools/dev/asciiflow2"
    29  
    30  	"github.com/fsnotify/fsnotify"
    31  	"github.com/spf13/viper"
    32  	"github.com/urfave/cli/v2"
    33  )
    34  
    35  func show() {
    36  	logo := `
    37    .,-:::::::::::::::::   ...         ...      :::     .::::::.
    38    ,;;;'''';;;;;;;;''''.;;;;;;;.   .;;;;;;;.   ;;;    ;;;'    '
    39  [[[            [[    ,[[     \[[,,[[     \[[, [[[    '[==/[[[[,
    40  $$$            $$    $$$,     $$$$$$,     $$$ $$'      '''    $
    41  '88bo,__,o,    88,   "888,_ _,88P"888,_ _,88Po88oo,.__88b    dP
    42    "YUMMMMMP"   MMM     "YMMMMMP"   "YMMMMMP" """"YUMMM "YMmMY"
    43    `
    44  	logo = `
    45     ______   ______            __    
    46    / ____/  /_  __/___  ____  / /____
    47   / /  ______/ / / __ \/ __ \/ / ___/
    48  / /__/_____/ / / /_/ / /_/ / (__  ) 
    49  \____/    /_/  \____/\____/_/____/  
    50  																	
    51  	`
    52  	fmt.Println(logo)
    53  	fmt.Println("Please type `ctools -h/--help` for the help of usage")
    54  }
    55  
    56  func loadConfig() {
    57  	appname := "ctools"
    58  	viper.SetConfigName(appname)
    59  	viper.AddConfigPath("/etc/" + appname + "/")
    60  	viper.AddConfigPath("$HOME/." + appname)
    61  	viper.AddConfigPath(".")
    62  	err := viper.ReadInConfig()
    63  	if err != nil {
    64  		panic(fmt.Errorf("fatal error config file: %s ", err))
    65  	}
    66  	viper.WatchConfig()
    67  	viper.OnConfigChange(func(e fsnotify.Event) {
    68  		fmt.Println("Config file changed:", e.Name)
    69  	})
    70  }
    71  
    72  func ctools() {
    73  	app := cli.NewApp()
    74  	app.Name = "ctools"
    75  	app.Version = "0.0.1dev"
    76  	app.Compiled = app.Compiled.UTC().Local()
    77  	app.Authors = []*cli.Author{
    78  		{
    79  			Name:  "Tacey Wong",
    80  			Email: "xinyong.wang@qq.com",
    81  		},
    82  		{
    83  			Name: "所有贡献者",
    84  		},
    85  	}
    86  	app.Copyright = "© 2018 - Forever Tacey Wong & 所有贡献者"
    87  	app.Usage = "Coder Toolbox,Programmer General Tools"
    88  	// app.UsageText = "contrive - demonstrating the available API"
    89  	app.EnableBashCompletion = true
    90  
    91  	app.Flags = []cli.Flag{
    92  		&cli.BoolFlag{
    93  			Name:    "interactive",
    94  			Aliases: []string{"i"},
    95  			Usage:   "使用交互式模式",
    96  		},
    97  		&cli.StringFlag{
    98  			Name:    "lang, l",
    99  			Value:   "english",
   100  			Usage:   "应用语言",
   101  			EnvVars: []string{"CTOOLS_LANG"},
   102  		},
   103  		&cli.StringFlag{
   104  			Name:  "config, c",
   105  			Usage: "从`文件`加载配置",
   106  		},
   107  	}
   108  
   109  	app.Commands = []*cli.Command{
   110  		// Dev-Tools
   111  		&AsciiFlowCMD,
   112  		&tools.IMailCMD,
   113  		&tools.RequestCMD,
   114  		&tools.ShortMeCMD,
   115  
   116  		&converters.JSON2GoCMD,
   117  		&converters.JSON2XMLCMD,
   118  		&converters.CSV2JSONCMD,
   119  		&converters.CSV2XMLCMD,
   120  		&converters.XML2JSONCMD,
   121  		&converters.CURL2GoCMD,
   122  		&converters.URL2BTCMD,
   123  		&converters.XML2XSDCMD,
   124  		&converters.Timestamp2DateCMD,
   125  		&converters.XML2XSLCMD,
   126  
   127  		&code_minifiers_beautifiers.CSSBeautifierCMD,
   128  		&code_minifiers_beautifiers.CSSMinifierCMD,
   129  		&code_minifiers_beautifiers.JavascriptBeautifierCMD,
   130  		&code_minifiers_beautifiers.JavascriptMinifierCMD,
   131  
   132  		&crypt_security.DigesterCMD,
   133  		&crypt_security.HMACGeneratorCMD,
   134  		&crypt_security.HtpasswdCMD,
   135  		&crypt_security.MD5GeneratorCMD,
   136  		&crypt_security.SHA256GeneratorCMD,
   137  		&crypt_security.SHA512GeneratorCMD,
   138  		&crypt_security.JWTRS256GeneratorCMD,
   139  
   140  		&encoders_decoders.Base64CMD,
   141  		&encoders_decoders.QRCodeCMD,
   142  		&encoders_decoders.URLEncodeDecodeCMD,
   143  
   144  		&formatters.HTMLFormatCMD,
   145  		&formatters.JSONFormatCMD,
   146  		&formatters.NginxConfigFormatCMD,
   147  		&formatters.SQLFormatCMD,
   148  		&formatters.XMLFormatCMD,
   149  
   150  		&string_utils.StrUtilCMD,
   151  		&string_utils.CSVEscapeCMD,
   152  		&string_utils.HTMLEscapeCMD,
   153  		&string_utils.JSONEscapeCMD,
   154  		&string_utils.SQLEscapeCMD,
   155  		&string_utils.XMLEscapeCMD,
   156  		&string_utils.JavaDotNetEscapeCMD,
   157  
   158  		&validators.CronGenCMD,
   159  		&validators.HTMLValidCMD,
   160  		&validators.JSONValidCMD,
   161  		&validators.RegexTestCMD,
   162  		&validators.XMLValidCMD,
   163  		&validators.XPathTestCMD,
   164  
   165  		&web_resources.CanadaProvinceCMD,
   166  		&web_resources.ChinaProvinceCMD,
   167  		&web_resources.HTMLEntitiesCMD,
   168  		&web_resources.HTTPCodeCMD,
   169  		&web_resources.I18nCMD,
   170  		&web_resources.ISOCountryListCMD,
   171  		&web_resources.LessCompilerCMD,
   172  		&web_resources.LoremLpsumGeneratorCMD,
   173  		&web_resources.MexcioStateCMD,
   174  		&web_resources.MIMETypeListCMD,
   175  		&web_resources.SassCompilerCMD,
   176  		&web_resources.TimezoneListCMD,
   177  		&web_resources.URLParserCMD,
   178  		&web_resources.USAStateCMD,
   179  
   180  		&fun.ConsolePicCMD,
   181  	}
   182  	app.HideHelpCommand = true
   183  	sort.Sort(cli.CommandsByName(app.Commands))
   184  	sort.Sort(cli.FlagsByName(app.Flags))
   185  	app.Action = func(c *cli.Context) error {
   186  		if c.Bool("i") {
   187  			tools.InteractiveAction(c)
   188  		} else {
   189  			show()
   190  		}
   191  		return nil
   192  	}
   193  	err := app.Run(os.Args)
   194  	if err != nil {
   195  		log.Fatal(err)
   196  	}
   197  }
   198  
   199  // https://golanglibs.com
   200  // https://www.freeformatter.com/
   201  func main() {
   202  	ctools()
   203  }