func (g *Commands) QR(byId bool) error { kvChan := g.urler(byId, g.opts.Sources) address := DefaultQRShareServer if g.opts.Meta != nil { meta := *(g.opts.Meta) if retrAddress, ok := meta[AddressKey]; ok && len(retrAddress) >= 1 { address = retrAddress[0] } } address = strings.TrimRight(address, "/") if envKeySet.PublicKey == "" { envKeySet.PublicKey = "5160897b3586461e83e7279c10352ac4" } if envKeySet.PrivateKey == "" { envKeySet.PrivateKey = "5a3451dadab74f75b16f754c0a931949" } for kv := range kvChan { switch kv.value.(type) { case error: g.log.LogErrf("%s: %s\n", kv.key, kv.value) continue } fileURI, ok := kv.value.(string) if !ok { continue } curTime := time.Now() pl := meddler.Payload{ URI: fileURI, RequestTime: curTime.Unix(), Payload: fmt.Sprintf("%v%v", rand.Float64(), curTime), PublicKey: envKeySet.PublicKey, ExpiryTime: curTime.Add(time.Hour).Unix(), } plainTextToSign := pl.RawTextForSigning() pl.Signature = fmt.Sprintf("%s", envKeySet.Sign([]byte(plainTextToSign))) uv := pl.ToUrlValues() encodedValues := uv.Encode() fullUrl := fmt.Sprintf("%s/qr?%s", address, encodedValues) if g.opts.Verbose { g.log.Logf("%q => %q\n", kv.key, fullUrl) } if err := open.Start(fullUrl); err != nil { g.log.Logf("qr: err %v %q\n", err, fullUrl) } } return nil }