Skip to content

Commit 733122a

Browse files
Merge pull request #22 from 403unlocker/feat/readFromConfigFile
feat(): Add reading config file from home dir
2 parents 6afe0c9 + 08db890 commit 733122a

File tree

5 files changed

+128
-20
lines changed

5 files changed

+128
-20
lines changed

Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
OUTPUT = 403unlocker
33
MAIN = cmd/403unlockercli/main.go
44
BIN_DIR = ~/.local/bin
5+
CONFIG_DIR= ~/.config/403unlocker
6+
DNS_CONFIG_FILE_URL=https://raw.githubusercontent.com/403unlocker/403Unlocker-cli/refs/heads/main/config/dns.conf
7+
DOCKER_CONFIG_FILE_URL=https://raw.githubusercontent.com/403unlocker/403Unlocker-cli/refs/heads/main/config/dockerRegistry.conf
58

69
.DEFAULT_GOAL := help
710

@@ -34,8 +37,14 @@ clean:
3437
install: build
3538
@echo "Installing $(OUTPUT) to $(BIN_DIR)..."
3639
@install -m 755 $(OUTPUT) $(BIN_DIR)
40+
@echo "Downloading config files dns.conf to $(CONFIG_DIR)..."
41+
@wget $(DNS_CONFIG_FILE_URL) -q -P $(CONFIG_DIR)
42+
@echo "Downloading dockerRegistry.conf $(CONFIG_DIR)..."
43+
@wget $(DOCKER_CONFIG_FILE_URL) -q -P $(CONFIG_DIR)
3744

3845

3946
uninstall:
4047
@echo "Removing $(OUTPUT) from $(BIN_DIR)..."
4148
@rm -f $(BIN_DIR)/$(OUTPUT)
49+
@echo "Removing $(OUTPUT) from $(CONFIG_DIR)..."
50+
@rm -rf $(CONFIG_DIR)

internal/check/function.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,28 @@ func CheckWithDNS(c *cli.Context) error {
4141
url := c.Args().First()
4242
url = ensureHTTPS(url)
4343

44+
fmt.Println("URL: ", url)
45+
4446
// Print header
4547
fmt.Println("\n+--------------------+------------+")
4648
fmt.Printf("| %-18s | %-10s |\n", "DNS Server", "Status")
4749
fmt.Println("+--------------------+------------+")
4850

49-
dnsList, err := ReadDNSFromFile("config/dns.conf")
51+
dnsList, err := ReadDNSFromFile(common.DNS_CONFIG_FILE)
5052
if err != nil {
51-
fmt.Println(err)
52-
return err
53+
err = common.DownloadConfigFile(common.DNS_CONFIG_URL, common.DNS_CONFIG_FILE)
54+
if err != nil {
55+
return err
56+
}
57+
58+
dnsList, err = ReadDNSFromFile(common.DNS_CONFIG_FILE)
59+
60+
if err != nil {
61+
fmt.Println(err)
62+
return err
63+
}
5364
}
65+
5466
var wg sync.WaitGroup
5567
for _, dns := range dnsList {
5668
wg.Add(1)
@@ -86,6 +98,12 @@ func CheckWithDNS(c *cli.Context) error {
8698
}
8799

88100
func ReadDNSFromFile(filename string) ([]string, error) {
101+
homeDir := os.Getenv("HOME")
102+
if homeDir == "" {
103+
fmt.Println("HOME environment variable not set")
104+
os.Exit(1)
105+
}
106+
filename = homeDir + "/" + filename
89107
data, err := os.ReadFile(filename)
90108
if err != nil {
91109
return nil, err

internal/common/function.go

Lines changed: 74 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
package common
22

3-
import "fmt"
4-
5-
var Reset = "\033[0m"
6-
var Red = "\033[31m"
7-
var Green = "\033[32m"
8-
var Yellow = "\033[33m"
9-
var Blue = "\033[34m"
10-
var Magenta = "\033[35m"
11-
var Cyan = "\033[36m"
12-
var Gray = "\033[37m"
13-
var White = "\033[97m"
3+
import (
4+
"fmt"
5+
"io"
6+
"net/http"
7+
"os"
8+
"path/filepath"
9+
)
10+
11+
const (
12+
// Color
13+
Reset = "\033[0m"
14+
Red = "\033[31m"
15+
Green = "\033[32m"
16+
Yellow = "\033[33m"
17+
Blue = "\033[34m"
18+
Magenta = "\033[35m"
19+
Cyan = "\033[36m"
20+
Gray = "\033[37m"
21+
White = "\033[97m"
22+
23+
// DNS config
24+
DNS_CONFIG_FILE = ".config/403unlocker/dns.conf"
25+
DOCKER_CONFIG_FILE = ".config/403unlocker/dockerRegistry.conf"
26+
DNS_CONFIG_URL = "https://raw.githubusercontent.com/403unlocker/403Unlocker-cli/refs/heads/main/config/dns.conf"
27+
DOCKER_CONFIG_URL = "https://raw.githubusercontent.com/403unlocker/403Unlocker-cli/refs/heads/main/config/dockerRegistry.conf"
28+
)
1429

1530
// FormatDataSize converts the size in bytes to a human-readable string in KB, MB, or GB.
1631
func FormatDataSize(bytes int64) string {
@@ -31,3 +46,51 @@ func FormatDataSize(bytes int64) string {
3146
return fmt.Sprintf("%d Bytes", bytes)
3247
}
3348
}
49+
50+
func DownloadConfigFile(url, path string) error {
51+
52+
homeDir := os.Getenv("HOME")
53+
if homeDir == "" {
54+
fmt.Println("HOME environment variable not set")
55+
os.Exit(1)
56+
}
57+
filePath := homeDir + "/" + path
58+
59+
dir := filepath.Dir(filePath)
60+
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
61+
fmt.Printf("Error creating directory: %v\n", err)
62+
return err
63+
}
64+
65+
out, err := os.Create(filePath)
66+
67+
if err != nil {
68+
fmt.Println(err)
69+
70+
return err
71+
}
72+
defer out.Close()
73+
74+
if err != nil {
75+
fmt.Println("Could not download config file.")
76+
return err
77+
}
78+
79+
resp, err := http.Get(url)
80+
81+
if err != nil {
82+
fmt.Println("Could not get the response: ", err)
83+
return err
84+
}
85+
86+
defer resp.Body.Close()
87+
88+
_, err = io.Copy(out, resp.Body)
89+
90+
if err != nil {
91+
fmt.Println("Could not copy content file")
92+
return err
93+
}
94+
95+
return nil
96+
}

internal/dns/function.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,19 @@ func URLValidator(URL string) bool {
3232
func CheckWithURL(c *cli.Context) error {
3333
fileToDownload := c.Args().First()
3434
timeout := c.Int("timeout")
35-
dnsList, err := check.ReadDNSFromFile("config/dns.conf")
35+
36+
dnsList, err := check.ReadDNSFromFile(common.DNS_CONFIG_FILE)
3637
if err != nil {
37-
fmt.Println("Error reading DNS list:", err)
38-
return err
38+
err = common.DownloadConfigFile(common.DNS_CONFIG_URL, common.DNS_CONFIG_FILE)
39+
if err != nil {
40+
return err
41+
}
42+
dnsList, err = check.ReadDNSFromFile(common.DNS_CONFIG_FILE)
43+
44+
if err != nil {
45+
fmt.Println("Error reading DNS list:", err)
46+
return err
47+
}
3948
}
4049

4150
dnsSizeMap := make(map[string]int64)

internal/docker/function.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,19 @@ func CheckWithDockerImage(c *cli.Context) error {
112112
return fmt.Errorf("image name cannot be empty")
113113
}
114114

115-
registryList, err := check.ReadDNSFromFile("config/dockerRegistry.conf")
115+
registryList, err := check.ReadDNSFromFile(common.DOCKER_CONFIG_FILE)
116116
if err != nil {
117-
log.Printf("Error reading registry list: %v", err)
118-
return err
117+
err = common.DownloadConfigFile(common.DOCKER_CONFIG_URL, common.DOCKER_CONFIG_FILE)
118+
if err != nil {
119+
return err
120+
}
121+
122+
registryList, err = check.ReadDNSFromFile(common.DOCKER_CONFIG_FILE)
123+
if err != nil {
124+
log.Printf("Error reading registry list: %v", err)
125+
return err
126+
}
127+
119128
}
120129

121130
// Find the longest registry name first

0 commit comments

Comments
 (0)