Compare commits
10
Commits
80452c2e19
...
533a2f0d46
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
533a2f0d46 | ||
|
|
3645bfc1c4 | ||
|
|
231281858e | ||
|
|
69fffab610 | ||
|
|
68685b53b0 | ||
|
|
3990c620a1 | ||
|
|
7851d90185 | ||
|
|
a3b05d2fbe | ||
|
|
0b65ca4309 | ||
|
|
81f68b6421 |
@@ -1,3 +1,8 @@
|
||||
module github.com/RudideC/wyst-package-manager
|
||||
module github.com/wyst-lang/wpm
|
||||
|
||||
go 1.22.0
|
||||
|
||||
require (
|
||||
golang.org/x/sys v0.20.0 // indirect
|
||||
golang.org/x/term v0.20.0 // direct
|
||||
)
|
||||
|
||||
@@ -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=
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
sudo cp -rf . ~/wpm
|
||||
cd ~/wpm
|
||||
go build -o bin/wpm src/*.go
|
||||
sudo cp bin/wpm /usr/local/bin/
|
||||
@@ -0,0 +1,16 @@
|
||||
@echo off
|
||||
cd %~dp0
|
||||
where go >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo please install go: https://go.dev/doc/install
|
||||
start https://go.dev/doc/install
|
||||
exit /b 1
|
||||
) else (
|
||||
@echo off
|
||||
xcopy /s /e /i /h /y . "%USERPROFILE%\wpm"
|
||||
cd /d "%USERPROFILE%\wpm\src"
|
||||
go build -o ..\wpm.exe
|
||||
copy ..\wpm.exe C:\Windows\System32
|
||||
)
|
||||
|
||||
pause
|
||||
+55
-18
@@ -6,7 +6,8 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
const URL = "http://localhost:3000"
|
||||
// const URL = "http://localhost:3000"
|
||||
const URL = "https://pms-xdib.onrender.com"
|
||||
|
||||
func showHelp() {
|
||||
fmt.Println("wpm - Wyst Package Manager")
|
||||
@@ -30,24 +31,42 @@ func parsePackageArg(arg string) (string, string) {
|
||||
|
||||
func createPackage(packageName string) {
|
||||
var psw string
|
||||
var pswV string
|
||||
var repo string
|
||||
var version string
|
||||
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\r")
|
||||
return
|
||||
}
|
||||
fmt.Printf("Enter the repo for %s: ", packageName)
|
||||
fmt.Scanln(&repo)
|
||||
fmt.Printf("Enter the latest version for %s: ", packageName)
|
||||
fmt.Scanln(&version)
|
||||
fmt.Println()
|
||||
jsonBody := []byte(fmt.Sprintf(`{"name": "%v", "psw": "%v", "repo": "%v", "latest": "%v"}`, packageName, psw, repo, version))
|
||||
_, err := sendRequest(http.MethodPost, URL, jsonBody)
|
||||
req, err := sendRequest(http.MethodPost, URL, jsonBody)
|
||||
if err != nil {
|
||||
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
err = getMessage(req)
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v\n\r", err)
|
||||
return
|
||||
} else {
|
||||
fmt.Printf("Done\n\r")
|
||||
}
|
||||
}
|
||||
|
||||
func editPackage(packageName string) {
|
||||
pkgidx, err := getPackage(packageName)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
var psw string
|
||||
var repo string = pkgidx.Repo
|
||||
@@ -55,19 +74,19 @@ func editPackage(packageName string) {
|
||||
var newPsw string
|
||||
var newPackageName string = packageName
|
||||
|
||||
fmt.Printf("Enter the password for %s: ", packageName)
|
||||
fmt.Scanln(&psw)
|
||||
fmt.Printf("\rEnter the password for %s: ", packageName)
|
||||
ReadPassword(&psw)
|
||||
newPsw = psw
|
||||
|
||||
for true {
|
||||
fmt.Printf("\033[2J")
|
||||
fmt.Println("Choose what you want to modify")
|
||||
fmt.Printf(" 1 -> package name: %s\n", newPackageName)
|
||||
fmt.Printf(" 2 -> password: %s\n", newPsw)
|
||||
fmt.Printf(" 3 -> repo: %s\n", repo)
|
||||
fmt.Printf(" 4 -> latest version: %s\n", version)
|
||||
fmt.Println("Type in 'quit'/'q'/'exit' to discard your changes")
|
||||
fmt.Println("Type in anything else to confirm your changes")
|
||||
clear()
|
||||
fmt.Printf("Choose what you want to modify\n\r")
|
||||
fmt.Printf(" 1 -> package name : %s\n\r", newPackageName)
|
||||
fmt.Printf(" 2 -> password : %s\n\r", newPsw)
|
||||
fmt.Printf(" 3 -> repo : %s\n\r", repo)
|
||||
fmt.Printf(" 4 -> latest version: %s\n\r", version)
|
||||
fmt.Printf("Type in 'quit'/'q'/'exit' to discard your changes\n\r")
|
||||
fmt.Printf("Type in anything else to confirm your changes\n\r")
|
||||
var option string
|
||||
fmt.Print("\n> ")
|
||||
fmt.Scanln(&option)
|
||||
@@ -77,7 +96,7 @@ func editPackage(packageName string) {
|
||||
fmt.Scanln(&newPackageName)
|
||||
case "2":
|
||||
fmt.Printf("Enter the new password for %s: ", packageName)
|
||||
fmt.Scanln(&newPsw)
|
||||
ReadPassword(&newPsw)
|
||||
case "3":
|
||||
fmt.Printf("Enter the repo for %s: ", packageName)
|
||||
fmt.Scanln(&repo)
|
||||
@@ -95,8 +114,15 @@ func editPackage(packageName string) {
|
||||
req, err := sendRequest(http.MethodPut, URL, jsonBody)
|
||||
if err != nil {
|
||||
fmt.Printf("Error while editing %s: %v", packageName, err)
|
||||
return
|
||||
}
|
||||
err = getMessage(req)
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v\n\r", err)
|
||||
return
|
||||
} else {
|
||||
fmt.Printf("Done\n\r")
|
||||
}
|
||||
fmt.Printf(string(req.Body))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -106,7 +132,18 @@ func editPackage(packageName string) {
|
||||
func deletePackage(packageName string) {
|
||||
fmt.Printf("Enter the password for %s: ", packageName)
|
||||
var psw string
|
||||
fmt.Scanln(&psw)
|
||||
ReadPassword(&psw)
|
||||
jsonBody := []byte(fmt.Sprintf(`{"name": "%s", "psw": "%v"}`, packageName, psw))
|
||||
sendRequest(http.MethodDelete, URL, jsonBody)
|
||||
req, err := sendRequest(http.MethodDelete, URL, jsonBody)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
err = getMessage(req)
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v\n\r", err)
|
||||
return
|
||||
} else {
|
||||
fmt.Printf("Done\n\r")
|
||||
}
|
||||
}
|
||||
|
||||
+17
-1
@@ -26,6 +26,10 @@ type PackageIndex struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func sendRequest(method, url string, jsonBody []byte) (Request, error) {
|
||||
bodyReader := bytes.NewReader(jsonBody)
|
||||
req, err := http.NewRequest(method, url, bodyReader)
|
||||
@@ -48,7 +52,7 @@ func sendRequest(method, url string, jsonBody []byte) (Request, error) {
|
||||
func getPackage(packageName string) (PackageIndex, error) {
|
||||
var pkgidx PackageIndex
|
||||
jsonBody := []byte(fmt.Sprintf(`{"name": "%s"}`, packageName))
|
||||
req, err := sendRequest(http.MethodGet, "http://localhost:3000", jsonBody)
|
||||
req, err := sendRequest(http.MethodGet, URL, jsonBody)
|
||||
if err != nil {
|
||||
fmt.Printf("Fetching error: %s\n", err)
|
||||
}
|
||||
@@ -62,3 +66,15 @@ func getPackage(packageName string) (PackageIndex, error) {
|
||||
}
|
||||
return pkgidx, nil
|
||||
}
|
||||
|
||||
func getMessage(req Request) error {
|
||||
var msg Message
|
||||
err := json.Unmarshal(req.Body, &msg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("JsonError: %v", err)
|
||||
}
|
||||
if msg.Message != "ok" {
|
||||
return fmt.Errorf(msg.Message)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type ProgressBar struct {
|
||||
total int
|
||||
length int
|
||||
last_suffix int
|
||||
enabled bool
|
||||
}
|
||||
|
||||
func (prb *ProgressBar) change(amount int, prefix, suffix string) {
|
||||
if prb.enabled {
|
||||
percent := float64(amount) / float64(prb.total)
|
||||
filledLength := int(float64(prb.length) * percent)
|
||||
fill := "█"
|
||||
end := "█"
|
||||
if amount == prb.total {
|
||||
end = "█"
|
||||
}
|
||||
for len(suffix) < prb.last_suffix {
|
||||
suffix += " "
|
||||
}
|
||||
bar := strings.Repeat(fill, filledLength) + end + strings.Repeat("-", (prb.length-filledLength))
|
||||
fmt.Printf("\r%s [%s] %s", prefix, bar, suffix)
|
||||
// if amount == prb.total {
|
||||
// fmt.Println()
|
||||
// }
|
||||
prb.last_suffix = len(suffix) + 3
|
||||
}
|
||||
}
|
||||
|
||||
func (prb ProgressBar) clean() {
|
||||
if prb.enabled {
|
||||
fmt.Printf("\r" + strings.Repeat(" ", prb.last_suffix+prb.length+2) + "\r")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/term"
|
||||
)
|
||||
|
||||
type ProgressBar struct {
|
||||
total int
|
||||
length int
|
||||
last_suffix int
|
||||
enabled bool
|
||||
}
|
||||
|
||||
func (prb *ProgressBar) change(amount int, prefix, suffix string) {
|
||||
if prb.enabled {
|
||||
percent := float64(amount) / float64(prb.total)
|
||||
filledLength := int(float64(prb.length) * percent)
|
||||
fill := "█"
|
||||
end := "█"
|
||||
if amount == prb.total {
|
||||
end = "█"
|
||||
}
|
||||
for len(suffix) < prb.last_suffix {
|
||||
suffix += " "
|
||||
}
|
||||
bar := strings.Repeat(fill, filledLength) + end + strings.Repeat("-", (prb.length-filledLength))
|
||||
fmt.Printf("\r%s [%s] %s", prefix, bar, suffix)
|
||||
// if amount == prb.total {
|
||||
// fmt.Println()
|
||||
// }
|
||||
prb.last_suffix = len(suffix) + 3
|
||||
}
|
||||
}
|
||||
|
||||
func (prb ProgressBar) clean() {
|
||||
if prb.enabled {
|
||||
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" {
|
||||
fmt.Printf("\n\r")
|
||||
return nil
|
||||
} else if chr == "\b" || b[0] == 127 {
|
||||
if len(*buff) > 0 {
|
||||
fmt.Print("\033[1D \033[1D")
|
||||
*buff = string(*buff)[:len(*buff)-1]
|
||||
}
|
||||
} else if b[0] == 3 {
|
||||
os.Exit(0)
|
||||
} else {
|
||||
*buff += chr
|
||||
if safeChar == "off" {
|
||||
fmt.Print(chr)
|
||||
} else {
|
||||
fmt.Print(safeChar)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func clear() {
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
cmd := exec.Command("cmd", "/c", "cls")
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Run()
|
||||
default: // Unix-like systems
|
||||
cmd := exec.Command("clear")
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Run()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user