commands

package
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2023 License: AGPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BDPanTools = &cli.Command{
	Name:  "bdpan",
	Usage: "baidu pan tools",
	Flags: []cli.Flag{
		&cli.StringFlag{
			Name:        "config",
			Aliases:     []string{"c"},
			DefaultText: "<UserConfigDir>/toybox/bdpan.json",
		},
	},
	Before: func(c *cli.Context) error {
		configFile := c.String("config")
		if configFile == "" {
			configDir := utils.ConfigDir()
			configFile = filepath.Join(configDir, "bdpan.json")
			_ = c.Set("config", configFile)
		}
		if _, err := os.Stat(configFile); os.IsNotExist(err) {
			return os.WriteFile(configFile, []byte("{}"), 0644)
		}
		return nil
	},
	Subcommands: []*cli.Command{
		{
			Name:  "whoami",
			Usage: "currently logged in user",
			Action: func(c *cli.Context) error {
				configFile := c.String("config")
				data, err := os.ReadFile(configFile)
				if err != nil {
					return err
				}
				var config bdpanConfig
				if err = json.Unmarshal(data, &config); err != nil {
					return err
				}
				if config.Bduss == "" || config.Name == "" {
					return errors.New("not logged in")
				}
				fmt.Println(color.FgGreen.Render("Logged in as"), color.FgYellow.Render(config.Name))
				return nil
			},
		},
		{
			Name:  "login",
			Usage: "login to baidu pan",
			Flags: []cli.Flag{
				&cli.StringFlag{
					Name:  "bduss",
					Usage: "BDUSS cookie value",
				},
				&cli.StringFlag{
					Name:  "cookies",
					Usage: "full cookies string",
				},
			},
			Action: func(c *cli.Context) error {
				bduss := c.String("bduss")
				cookies := c.String("cookies")
				if c.IsSet("cookies") && bduss == "" {
					r, _ := regexp.Compile(`BDUSS=([^;]+)`)
					bduss = r.FindStringSubmatch(cookies)[1]
				} else if bduss == "" {
					bduss = c.Args().First()
				}
				if bduss == "" {
					return errors.New("BDUSS is empty")
				}

				name, err := bdpan.CheckBduss(bduss)
				if err != nil {
					return err
				}
				fmt.Println(color.FgGreen.Render("Login success!"), "Welcome", color.FgYellow.Render(name))

				config := bdpanConfig{Bduss: bduss, Name: name}
				data, err := json.MarshalIndent(config, "", "  ")
				if err != nil {
					return err
				}
				return os.WriteFile(c.String("config"), data, 0644)
			},
		},
		{

			Name:    "rapid",
			Usage:   "get rapid of file",
			Aliases: []string{"id"},
			Action: func(c *cli.Context) error {
				filename := c.Args().First()
				if filename == "" {
					return errors.New("filename is empty")
				}
				file, err := os.Open(filename)
				if err != nil {
					return err
				}
				name, hash, size, err := bdpan.GetFileHash(file)
				if err != nil {
					return err
				}
				fmt.Printf("%s#%d#%s", hash, size, name)
				return nil
			},
		},
		{
			Name:    "rapidupload",
			Usage:   "rapid upload file to baidu pan",
			Aliases: []string{"ru"},
			Flags: []cli.Flag{
				&cli.StringFlag{
					Name:    "md5",
					Aliases: []string{"m"},
					Usage:   "file md5",
				},
				&cli.IntFlag{
					Name:        "size",
					Aliases:     []string{"z"},
					Usage:       "file size in bytes",
					DefaultText: "auto detect from rapid",
				},
				&cli.StringFlag{
					Name:    "rapid",
					Aliases: []string{"r"},
				},
			},
			Action: func(c *cli.Context) error {
				configFile := c.String("config")
				data, err := os.ReadFile(configFile)
				if err != nil {
					return err
				}
				var config bdpanConfig
				if err = json.Unmarshal(data, &config); err != nil {
					return err
				}
				if config.Bduss == "" || config.Name == "" {
					return errors.New("not logged in")
				}

				savename := c.Args().First()
				md5 := c.String("md5")
				size := c.Int("size")
				rapid := c.String("rapid")
				if md5 == "" || size <= 0 {
					if rapid != "" {
						arr := strings.Split(rapid, "#")
						if len(arr) < 3 {
							return errors.New("invalid rapid")
						}
						md5 = arr[0]
						var err error
						if len(arr[1]) == 32 {
							size, err = strconv.Atoi(arr[2])
							if err != nil {
								return errors.New("invalid rapid")
							}
						} else {
							size, err = strconv.Atoi(arr[1])
							if err != nil {
								return errors.New("invalid rapid")
							}
						}
					}
				}
				if savename == "" {
					if rapid != "" {
						arr := strings.Split(rapid, "#")
						savename = "/" + arr[len(arr)-1]
					} else {
						savename = "/toybox_ru_" + time.Now().Format("20060102150405")
					}
				} else if strings.HasSuffix(savename, "/") && rapid != "" {
					arr := strings.Split(rapid, "#")
					savename += arr[len(arr)-1]
				}
				if err = bdpan.RapidUpload(config.Bduss, savename, md5, size, 3); err != nil {
					return err
				}
				fmt.Println(color.FgGreen.Render("Rapid upload success!"), "Saved as", color.FgYellow.Render(savename))
				return nil
			},
		},
	},
}
View Source
var Commands []*cli.Command
View Source
var PasswordGenerator = &cli.Command{
	Name:  "pwd",
	Usage: "generate password",
	Flags: []cli.Flag{
		&cli.IntFlag{
			Name:    "length",
			Aliases: []string{"l"},
			Usage:   "password length",
			Value:   16,
		},
		&cli.BoolFlag{
			Name:    "uppercase",
			Usage:   "include uppercase letters",
			Aliases: []string{"up"},
			Value:   true,
		},
		&cli.BoolFlag{
			Name:    "bighead",
			Usage:   "first letter is uppercase",
			Aliases: []string{"bh"},
			Value:   false,
		},
		&cli.BoolFlag{
			Name:    "lowercase",
			Aliases: []string{"low"},
			Usage:   "include lowercase letters",
			Value:   true,
		},
		&cli.BoolFlag{
			Name:    "ambiguous",
			Aliases: []string{"a"},
			Usage:   "include ambiguous characters",
			Value:   false,
		},
		&cli.BoolFlag{
			Name:    "numbers",
			Aliases: []string{"n"},
			Usage:   "include numbers",
			Value:   true,
		},
		&cli.IntFlag{
			Name:    "min-number",
			Aliases: []string{"mn"},
			Usage:   "minimum number of numbers",
			Value:   1,
		},
		&cli.BoolFlag{
			Name:    "special",
			Aliases: []string{"s"},
			Usage:   "include special characters",
			Value:   true,
		},
		&cli.IntFlag{
			Name:    "min-special",
			Aliases: []string{"ms"},
			Usage:   "minimum number of special characters",
			Value:   1,
		},
		&cli.BoolFlag{
			Name:  "color",
			Usage: "colorize output",
			Value: true,
		},
	},
	Action: func(c *cli.Context) error {
		p, pc := pwdgen.Generate(pwdgen.Option{
			Length:     c.Int("length"),
			Ambiguous:  c.Bool("ambiguous"),
			Uppercase:  c.Bool("uppercase"),
			Lowercase:  c.Bool("lowercase"),
			Numbers:    c.Bool("numbers"),
			MinNumber:  c.Int("min-number"),
			Special:    c.Bool("special"),
			MinSpecial: c.Int("min-special"),
			BigHead:    c.Bool("bighead"),
		})
		if c.Bool("color") {
			fmt.Println(pc)
		} else {
			fmt.Println(p)
		}
		return nil
	},
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL