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 }