password safety

This commit is contained in:
2024-05-22 20:17:28 +02:00
parent 80452c2e19
commit 81f68b6421
4 changed files with 54 additions and 4 deletions
+5
View File
@@ -1,3 +1,8 @@
module github.com/RudideC/wyst-package-manager module github.com/RudideC/wyst-package-manager
go 1.22.0 go 1.22.0
require (
golang.org/x/sys v0.20.0 // indirect
golang.org/x/term v0.20.0 // direct
)
+4
View File
@@ -0,0 +1,4 @@
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
+11 -4
View File
@@ -30,10 +30,17 @@ func parsePackageArg(arg string) (string, string) {
func createPackage(packageName string) { func createPackage(packageName string) {
var psw string var psw string
var pswV string
var repo string var repo string
var version string var version string
fmt.Printf("Enter the password for %s: ", packageName) fmt.Printf("Enter the password for %s: ", packageName)
fmt.Scanln(&psw) ReadPassword(&psw)
fmt.Printf("Verify the password for %s: ", packageName)
ReadPassword(&pswV)
if psw != pswV {
fmt.Printf("Passwords do not match\n")
return
}
fmt.Printf("Enter the repo for %s: ", packageName) fmt.Printf("Enter the repo for %s: ", packageName)
fmt.Scanln(&repo) fmt.Scanln(&repo)
fmt.Printf("Enter the latest version for %s: ", packageName) fmt.Printf("Enter the latest version for %s: ", packageName)
@@ -56,7 +63,7 @@ func editPackage(packageName string) {
var newPackageName string = packageName var newPackageName string = packageName
fmt.Printf("Enter the password for %s: ", packageName) fmt.Printf("Enter the password for %s: ", packageName)
fmt.Scanln(&psw) ReadPassword(&psw)
newPsw = psw newPsw = psw
for true { for true {
@@ -77,7 +84,7 @@ func editPackage(packageName string) {
fmt.Scanln(&newPackageName) fmt.Scanln(&newPackageName)
case "2": case "2":
fmt.Printf("Enter the new password for %s: ", packageName) fmt.Printf("Enter the new password for %s: ", packageName)
fmt.Scanln(&newPsw) ReadPassword(&newPsw)
case "3": case "3":
fmt.Printf("Enter the repo for %s: ", packageName) fmt.Printf("Enter the repo for %s: ", packageName)
fmt.Scanln(&repo) fmt.Scanln(&repo)
@@ -106,7 +113,7 @@ func editPackage(packageName string) {
func deletePackage(packageName string) { func deletePackage(packageName string) {
fmt.Printf("Enter the password for %s: ", packageName) fmt.Printf("Enter the password for %s: ", packageName)
var psw string var psw string
fmt.Scanln(&psw) ReadPassword(&psw)
jsonBody := []byte(fmt.Sprintf(`{"name": "%s", "psw": "%v"}`, packageName, psw)) jsonBody := []byte(fmt.Sprintf(`{"name": "%s", "psw": "%v"}`, packageName, psw))
sendRequest(http.MethodDelete, URL, jsonBody) sendRequest(http.MethodDelete, URL, jsonBody)
} }
+34
View File
@@ -2,7 +2,10 @@ package main
import ( import (
"fmt" "fmt"
"os"
"strings" "strings"
"golang.org/x/term"
) )
type ProgressBar struct { type ProgressBar struct {
@@ -38,3 +41,34 @@ func (prb ProgressBar) clean() {
fmt.Printf("\r" + strings.Repeat(" ", prb.last_suffix+prb.length+2) + "\r") fmt.Printf("\r" + strings.Repeat(" ", prb.last_suffix+prb.length+2) + "\r")
} }
} }
func ReadPassword(buff *string) error {
safeChar := "*"
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
return err
}
defer term.Restore(int(os.Stdin.Fd()), oldState)
for true {
b := make([]byte, 1)
_, err = os.Stdin.Read(b)
if err != nil {
return err
}
chr := string(b[0])
if chr == "\r" || chr == "\n" {
return nil
} else if chr == "\b" || b[0] == 127 {
fmt.Print("\033[1D \033[1D")
tmp := string(*buff)
*buff = tmp[:len(tmp)-1]
}
if safeChar == "off" {
fmt.Print(chr)
} else {
fmt.Print(safeChar)
}
*buff += chr
}
return nil
}