1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package cmd
- import (
- "fmt"
- "github.com/claudiodangelis/qrcp/config"
- "github.com/claudiodangelis/qrcp/logger"
- "github.com/claudiodangelis/qrcp/payload"
- "github.com/claudiodangelis/qrcp/qr"
- "github.com/eiannone/keyboard"
- "github.com/claudiodangelis/qrcp/server"
- "github.com/spf13/cobra"
- )
- func sendCmdFunc(command *cobra.Command, args []string) error {
- log := logger.New(quietFlag)
- payload, err := payload.FromArgs(args, zipFlag)
- if err != nil {
- return err
- }
- // Load configuration
- configOptions := config.Options{
- Interface: interfaceFlag,
- Port: portFlag,
- Path: pathFlag,
- FQDN: fqdnFlag,
- KeepAlive: keepaliveFlag,
- ListAllInterfaces: listallinterfacesFlag,
- Secure: secureFlag,
- TLSCert: tlscertFlag,
- TLSKey: tlskeyFlag,
- }
- cfg, err := config.New(configFlag, configOptions)
- if err != nil {
- return err
- }
- srv, err := server.New(&cfg)
- if err != nil {
- return err
- }
- // Sets the payload
- srv.Send(payload)
- log.Print(`Scan the following URL with a QR reader to start the file transfer, press CTRL+C or "q" to exit:`)
- log.Print(srv.SendURL)
- qr.RenderString(srv.SendURL)
- if browserFlag {
- srv.DisplayQR(srv.SendURL)
- }
- if err := keyboard.Open(); err == nil {
- defer func() {
- keyboard.Close()
- }()
- go func() {
- for {
- char, key, _ := keyboard.GetKey()
- if string(char) == "q" || key == keyboard.KeyCtrlC {
- srv.Shutdown()
- }
- }
- }()
- } else {
- log.Print(fmt.Sprintf("Warning: keyboard not detected: %v", err))
- }
- if err := srv.Wait(); err != nil {
- return err
- }
- return nil
- }
- var sendCmd = &cobra.Command{
- Use: "send",
- Short: "Send a file(s) or directories from this host",
- Long: "Send a file(s) or directories from this host",
- Aliases: []string{"s"},
- Example: `# Send /path/file.gif. Webserver listens on a random port
- qrcp send /path/file.gif
- # Shorter version:
- qrcp /path/file.gif
- # Zip file1.gif and file2.gif, then send the zip package
- qrcp /path/file1.gif /path/file2.gif
- # Zip the content of directory, then send the zip package
- qrcp /path/directory
- # Send file.gif by creating a webserver on port 8080
- qrcp --port 8080 /path/file.gif
- `,
- Args: cobra.MinimumNArgs(1),
- RunE: sendCmdFunc,
- }
|