Commit 58d43d6
Changed files (3)
cmd
generate
internal
generate
utils
cmd/generate/generate_key.go
@@ -1,37 +1,16 @@
package generate
import (
- "crypto/rand"
- "encoding/base64"
- "fmt"
-
- "github.com/kahnwong/swissknife/utils"
- "github.com/rs/zerolog/log"
+ "github.com/kahnwong/swissknife/internal/generate"
"github.com/spf13/cobra"
)
-func generateKey(n int) string {
- // https://stackoverflow.com/questions/32349807/how-can-i-generate-a-random-int-using-the-crypto-rand-package/32351471#32351471
- // generate random bytes
- b := make([]byte, n)
- _, err := rand.Read(b)
- // Note that err == nil only if we read len(b) bytes.
- if err != nil {
- log.Fatal().Msg("Failed to generate random bytes")
- }
-
- // convert to base64
- return base64.URLEncoding.EncodeToString(b)
-}
-
var generateKeyCmd = &cobra.Command{
Use: "key",
Short: "Generate key",
Long: `Generate key. Re-implementation of "openssl rand -base64 48"". Result is copied to clipboard.`,
Run: func(cmd *cobra.Command, args []string) {
- key := generateKey(48)
- utils.WriteToClipboard(key)
- fmt.Printf("%s\n", key)
+ generate.Key()
},
}
internal/generate/key.go
@@ -0,0 +1,30 @@
+package generate
+
+import (
+ "crypto/rand"
+ "encoding/base64"
+ "fmt"
+
+ "github.com/kahnwong/swissknife/internal/utils"
+ "github.com/rs/zerolog/log"
+)
+
+func generateKey(n int) string {
+ // https://stackoverflow.com/questions/32349807/how-can-i-generate-a-random-int-using-the-crypto-rand-package/32351471#32351471
+ // generate random bytes
+ b := make([]byte, n)
+ _, err := rand.Read(b)
+ // Note that err == nil only if we read len(b) bytes.
+ if err != nil {
+ log.Fatal().Msg("Failed to generate random bytes")
+ }
+
+ // convert to base64
+ return base64.URLEncoding.EncodeToString(b)
+}
+
+func Key() {
+ key := generateKey(48)
+ utils.WriteToClipboard(key)
+ fmt.Printf("%s\n", key)
+}
internal/utils/clipboard.go
@@ -0,0 +1,44 @@
+package utils
+
+import (
+ "os"
+
+ "github.com/atotto/clipboard"
+ "github.com/rs/zerolog/log"
+ clipboardImage "github.com/skanehira/clipboard-image"
+)
+
+func WriteToClipboard(text string) {
+ err := clipboard.WriteAll(text)
+ if err != nil {
+ log.Error().Msg("Failed to write to clipboard")
+ }
+}
+
+func WriteToClipboardImage(bytes []byte) {
+ tempFilename := "/tmp/qr-image.png"
+ err := os.WriteFile(tempFilename, bytes, 0644)
+ if err != nil {
+ log.Fatal().Msg("Failed to write temp image for clipboard")
+ }
+
+ f, err := os.Open(tempFilename)
+ if err != nil {
+ log.Fatal().Msg("Failed to open temp image for clipboard")
+ }
+ defer func(f *os.File) {
+ err := f.Close()
+ if err != nil {
+ log.Error().Msg("Error opening temp image for clipboard")
+ }
+ }(f)
+
+ if err = clipboardImage.CopyToClipboard(f); err != nil {
+ log.Fatal().Msg("Failed to copy to clipboard")
+ }
+}
+
+func ReadFromClipboard() string {
+ text, _ := clipboard.ReadAll()
+ return text
+}