-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.go
More file actions
120 lines (96 loc) · 2.02 KB
/
utils.go
File metadata and controls
120 lines (96 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package main
import (
"errors"
"fmt"
"html/template"
"log"
"math"
"net"
"os"
"path"
"strings"
)
func getIPAddr() (string, error) {
interfaces, err := net.Interfaces()
if err != nil {
log.Fatal(err)
}
for _, i := range interfaces {
addrs, err := i.Addrs()
if err != nil {
log.Fatal(err)
}
for _, addr := range addrs {
ip := addr.String()
isIPv6 := strings.Contains(ip, ":")
isLocalhost := strings.Contains(ip, "127.0.0.1")
if !isIPv6 && !isLocalhost {
return strings.Split(ip, "/")[0], nil
}
}
}
return "", errors.New("FAILED TO FIND IP ADDRESS")
}
func loadEnv() (pwd string, host string, addr string) {
var err error
pwd, err = os.Getwd()
if err != nil {
log.Fatal(err)
}
host, err = os.Hostname()
if err != nil {
log.Fatal(err)
}
addr, err = getIPAddr()
if err != nil {
log.Fatal(err)
}
return
}
func loadTmpl(tmplName string) *template.Template {
tmpl, err := template.ParseFS(assets, "web/base.html", fmt.Sprintf("web/%s.html", tmplName))
if err != nil {
log.Fatal(err)
}
return tmpl
}
func loadBaseData(url string) BaseData {
return BaseData{
Host: host,
Addr: addr,
Path: url,
Split: strings.Split(url, "/")[1:],
Join: path.Join,
Size: fileSize,
}
}
func resolveBase() string {
if len(os.Args) <= 1 || os.Args[1] == "." {
return pwd
}
if path.IsAbs(os.Args[1]) {
return path.Clean(os.Args[1])
}
return path.Join(pwd, os.Args[1])
}
func fileSize(n int64) string {
if n == 0 {
return "0B"
}
units := []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}
// Getting log base 1000 of n
exp := math.Floor(math.Log(float64(n)) / math.Log(1000))
return fmt.Sprintf("%.1f%s", float64(n)/math.Pow(1000, exp), units[int(exp)])
}
func record(level, msg string) {
switch strings.ToUpper(level) {
case "GET":
log.Printf("\033[32mGET:\033[0m %s", msg)
case "ERROR":
log.Printf("\033[31mERROR:\033[0m %s", msg)
case "WARN":
log.Printf("\033[33mWARNING:\033[0m %s", msg)
case "ZIP":
log.Printf("\033[33mZIP:\033[0m %s", msg)
}
}