Feat: conditional permissions behavior (#28)
* Fix: don't need sudo if we're root + other aesthetics
* Heavy refactoring, see PR #28
* Fix: avoid silent fatalities
demo: https://tcp.ac/i/JMSUc.gif
* Fix: Inverse check on `IsRoot`
* D.R.Y: check for permissions error in `common.ErrorCheck`
Reduce cognitive complexity.
* Fix: Issue with copying
* Resolve https://github.com/HikariKnight/quickpassthrough/pull/28#discussion_r1646535918
* Resolve https://github.com/HikariKnight/quickpassthrough/pull/28#discussion_r1646606680 and https://github.com/HikariKnight/quickpassthrough/pull/28#discussion_r1646594105
* Revert "Resolve https://github.com/HikariKnight/quickpassthrough/pull/28#discussion_r1646606680 and https://github.com/HikariKnight/quickpassthrough/pull/28#discussion_r1646594105"
This reverts commit ce15213009
.
* Resolve https://github.com/HikariKnight/quickpassthrough/pull/28#discussion_r1646730751
This commit is contained in:
parent
4d0086df41
commit
6c48a35180
21 changed files with 604 additions and 255 deletions
|
@ -12,10 +12,11 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/HikariKnight/ls-iommu/pkg/errorcheck"
|
||||
"github.com/cavaliergopher/grab/v3"
|
||||
|
||||
"github.com/HikariKnight/quickpassthrough/internal/common"
|
||||
"github.com/HikariKnight/quickpassthrough/pkg/fileio"
|
||||
"github.com/HikariKnight/quickpassthrough/pkg/untar"
|
||||
"github.com/cavaliergopher/grab/v3"
|
||||
)
|
||||
|
||||
// Generated from github API response using https://mholt.github.io/json-to-go/
|
||||
|
@ -95,14 +96,14 @@ type Response struct {
|
|||
func CheckLsIOMMU() {
|
||||
// Check the API for releases
|
||||
resp, err := http.Get("https://api.github.com/repos/hikariknight/ls-iommu/releases/latest")
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
|
||||
// Close the response when function ends
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Get the response body
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
|
||||
var result Response
|
||||
if err := json.Unmarshal(body, &result); err != nil {
|
||||
|
@ -111,9 +112,9 @@ func CheckLsIOMMU() {
|
|||
|
||||
// Make the directory for ls-iommu if it does not exist
|
||||
path := "utils"
|
||||
if !fileio.FileExist(path) {
|
||||
if exists, _ := fileio.FileExist(path); !exists {
|
||||
err := os.Mkdir(path, os.ModePerm)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
}
|
||||
|
||||
// Generate the download url
|
||||
|
@ -133,30 +134,30 @@ func CheckLsIOMMU() {
|
|||
|
||||
// Get the checksum data
|
||||
checksums, err := http.Get(checkSumsUrl)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
defer checksums.Body.Close()
|
||||
checksums_txt, err := io.ReadAll(checksums.Body)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
|
||||
// Check if the tar.gz exists
|
||||
if !fileio.FileExist(fileName) {
|
||||
if exists, _ := fileio.FileExist(fileName); !exists {
|
||||
downloadNewVersion(path, fileName, downloadUrl)
|
||||
if checkSum(string(checksums_txt), fileName) {
|
||||
err = untar.Untar(fmt.Sprintf("%s/", path), fileName)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
}
|
||||
} else {
|
||||
if !checkSum(string(checksums_txt), fileName) {
|
||||
downloadNewVersion(path, fileName, downloadUrl)
|
||||
err = untar.Untar(fmt.Sprintf("%s/", path), fileName)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func checkSum(checksums string, fileName string) bool {
|
||||
r, err := os.Open(fileName)
|
||||
errorcheck.ErrorCheck(err)
|
||||
common.ErrorCheck(err)
|
||||
defer r.Close()
|
||||
|
||||
hasher := sha256.New()
|
||||
|
@ -182,7 +183,7 @@ func downloadNewVersion(path, fileName, downloadUrl string) {
|
|||
// check for errors
|
||||
if err := download.Err(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Download failed: %v\n", err)
|
||||
if !fileio.FileExist("utils/ls-iommu") {
|
||||
if exists, _ := fileio.FileExist("utils/ls-iommu"); !exists {
|
||||
log.Fatal("If the above error is 404, then we could not communicate with the GitHub API\n Please manually download and extract ls-iommu to: utils/\nYou can download it from: https://github.com/HikariKnight/ls-iommu/releases")
|
||||
} else {
|
||||
fmt.Println("Existing ls-iommu binary detected in \"utils/\", will use that instead as the GitHub API did not respond.")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue