Skip to content

Commit 72fc5f1

Browse files
authored
Clean up webserver.go (#52)
1 parent f745545 commit 72fc5f1

File tree

3 files changed

+272
-257
lines changed

3 files changed

+272
-257
lines changed

src/TibiaDataUtils.go

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
package main
22

33
import (
4+
"html"
5+
"io"
46
"log"
7+
"net/url"
8+
"os"
9+
"regexp"
10+
"sort"
11+
"strconv"
12+
"strings"
513
"time"
614

15+
"golang.org/x/text/encoding/charmap"
716
"golang.org/x/text/unicode/norm"
817
)
918

@@ -42,3 +51,190 @@ func TibiadataDatetimeV3(date string) string {
4251
// Return of formatted date and time string to functions..
4352
return returnDate.UTC().Format(time.RFC3339)
4453
}
54+
55+
// TibiadataHTMLRemoveLinebreaksV3 func
56+
func TibiadataHTMLRemoveLinebreaksV3(data string) string {
57+
return strings.ReplaceAll(data, "\n", "")
58+
}
59+
60+
var removeUrlRegex = regexp.MustCompile(`<a.*>(.*)<\/a>`)
61+
62+
// TibiadataRemoveURLsV3 func
63+
func TibiadataRemoveURLsV3(data string) string {
64+
// prepare return value
65+
var returnData string
66+
67+
result := removeUrlRegex.FindAllStringSubmatch(data, -1)
68+
69+
if len(result) > 0 {
70+
returnData = result[0][1]
71+
} else {
72+
returnData = ""
73+
}
74+
75+
return returnData
76+
}
77+
78+
// TibiadataStringWorldFormatToTitleV3 func
79+
func TibiadataStringWorldFormatToTitleV3(world string) string {
80+
return strings.Title(strings.ToLower(world))
81+
}
82+
83+
// TibiadataQueryEscapeStringV3 func - encode string to be correct formatted
84+
func TibiadataQueryEscapeStringV3(data string) string {
85+
// switching "+" to " "
86+
data = strings.ReplaceAll(data, "+", " ")
87+
88+
// encoding string to latin-1
89+
data, _ = TibiaDataConvertEncodingtoISO88591(data)
90+
91+
// returning with QueryEscape function
92+
return url.QueryEscape(data)
93+
}
94+
95+
var dateRegex = regexp.MustCompile(`([a-zA-Z]{3}).*([0-9]{2}).*([0-9]{4})`)
96+
97+
// TibiadataDateV3 func
98+
func TibiadataDateV3(date string) string {
99+
// use regex to skip weird formatting on "spaces"
100+
subma1 := dateRegex.FindAllStringSubmatch(date, -1)
101+
date = (subma1[0][1] + " " + subma1[0][2] + " " + subma1[0][3])
102+
103+
// parsing and setting format of return
104+
tmpDate, _ := time.Parse("Jan 02 2006", date)
105+
date = tmpDate.UTC().Format("2006-01-02")
106+
107+
return date
108+
}
109+
110+
// TibiadataStringToIntegerV3 func
111+
func TibiadataStringToIntegerV3(data string) int {
112+
returnData, err := strconv.Atoi(data)
113+
if err != nil {
114+
log.Printf("[warning] TibiadataStringToIntegerV3: couldn't convert %s into an int. error: %s", data, err)
115+
}
116+
117+
return returnData
118+
}
119+
120+
var removeHtmlTagRegex = regexp.MustCompile(`(<\/?[a-zA-A]+?[^>]*\/?>)*`)
121+
122+
// match html tag and replace it with ""
123+
func RemoveHtmlTag(in string) string {
124+
groups := removeHtmlTagRegex.FindAllString(in, -1)
125+
// should replace long string first
126+
sort.Slice(groups, func(i, j int) bool {
127+
return len(groups[i]) > len(groups[j])
128+
})
129+
130+
for _, group := range groups {
131+
if strings.TrimSpace(group) != "" {
132+
in = strings.ReplaceAll(in, group, "")
133+
}
134+
}
135+
136+
return in
137+
}
138+
139+
// TibiaDataConvertEncodingtoISO88591 func - convert string from UTF-8 to latin1 (ISO 8859-1)
140+
func TibiaDataConvertEncodingtoISO88591(data string) (string, error) {
141+
return charmap.ISO8859_1.NewEncoder().String(data)
142+
}
143+
144+
// TibiaDataConvertEncodingtoUTF8 func - convert string from latin1 (ISO 8859-1) to UTF-8
145+
func TibiaDataConvertEncodingtoUTF8(data io.Reader) io.Reader {
146+
return norm.NFKC.Reader(charmap.ISO8859_1.NewDecoder().Reader(data))
147+
}
148+
149+
// isEnvExist func - check if environment var is set
150+
func isEnvExist(key string) bool {
151+
if _, ok := os.LookupEnv(key); ok {
152+
return true
153+
}
154+
155+
return false
156+
}
157+
158+
// TibiaDataSanitizeEscapedString func - run unescape string on string
159+
func TibiaDataSanitizeEscapedString(data string) string {
160+
return html.UnescapeString(data)
161+
}
162+
163+
// TibiaDataSanitizeDoubleQuoteString func - replaces double quotes to single quotes in strings
164+
func TibiaDataSanitizeDoubleQuoteString(data string) string {
165+
return strings.ReplaceAll(data, "\"", "'")
166+
}
167+
168+
// TibiaDataSanitizeNbspSpaceString func - replaces weird \u00A0 string to real space
169+
func TibiaDataSanitizeNbspSpaceString(data string) string {
170+
return strings.ReplaceAll(data, "\u00A0", " ")
171+
}
172+
173+
// getEnv func - read an environment or return a default value
174+
func getEnv(key string, defaultVal string) string {
175+
if value, exists := os.LookupEnv(key); exists {
176+
return value
177+
}
178+
179+
return defaultVal
180+
}
181+
182+
// getEnvAsBool func - read an environment variable into a bool or return default value
183+
func getEnvAsBool(name string, defaultVal bool) bool {
184+
valStr := getEnv(name, "")
185+
if val, err := strconv.ParseBool(valStr); err == nil {
186+
return val
187+
}
188+
189+
return defaultVal
190+
}
191+
192+
/*
193+
// getEnvAsFloat func - read an environment variable into a float64 or return default value
194+
func getEnvAsFloat(name string, defaultVal float64) float64 {
195+
valStr := getEnv(name, "")
196+
if val, err := strconv.ParseFloat(valStr, 64); err == nil {
197+
return val
198+
}
199+
return defaultVal
200+
}
201+
202+
// getEnvAsInt func - read an environment variable into integer or return a default value
203+
func getEnvAsInt(name string, defaultVal int) int {
204+
valueStr := getEnv(name, "")
205+
if value, err := strconv.Atoi(valueStr); err == nil {
206+
return value
207+
}
208+
return defaultVal
209+
}
210+
*/
211+
212+
// TibiaDataVocationValidator func - return valid vocation string and vocation id
213+
func TibiaDataVocationValidator(vocation string) (string, string) {
214+
// defining return vars
215+
var vocationid string
216+
217+
switch strings.ToLower(vocation) {
218+
case "none":
219+
vocationid = "1"
220+
vocation = "none"
221+
case "knight", "knights":
222+
vocationid = "2"
223+
vocation = "knights"
224+
case "paladin", "paladins":
225+
vocationid = "3"
226+
vocation = "paladins"
227+
case "sorcerer", "sorcerers":
228+
vocationid = "4"
229+
vocation = "sorcerers"
230+
case "druid", "druids":
231+
vocationid = "5"
232+
vocation = "druids"
233+
default:
234+
vocationid = "0"
235+
vocation = "all"
236+
}
237+
238+
// returning vars
239+
return vocation, vocationid
240+
}

src/main.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package main
2+
3+
import "log"
4+
5+
var (
6+
// TibiadataDefaultVoc - default vocation when not specified in request
7+
TibiadataDefaultVoc string = "all"
8+
9+
// Tibiadata app flags for running
10+
TibiadataAPIversion int = 3
11+
TibiadataDebug bool
12+
13+
// Tibiadata app settings
14+
TibiadataHost string // set through env TIBIADATA_HOST
15+
16+
// Tibiadata app details set to release/build on GitHub
17+
TibiadataBuildRelease = "unknown" // will be set by GitHub Actions (to release number)
18+
TibiadataBuildBuilder = "manual" // will be set by GitHub Actions
19+
TibiadataBuildCommit = "-" // will be set by GitHub Actions (to git commit)
20+
TibiadataBuildEdition = "open-source" //
21+
)
22+
23+
func main() {
24+
// logging start of TibiaData
25+
log.Printf("[info] TibiaData API starting..")
26+
27+
// running the TibiaDataInitializer function
28+
TibiaDataInitializer()
29+
30+
// logging build information
31+
log.Printf("[info] TibiaData API release: %s", TibiadataBuildRelease)
32+
log.Printf("[info] TibiaData API build: %s", TibiadataBuildBuilder)
33+
log.Printf("[info] TibiaData API commit: %s", TibiadataBuildCommit)
34+
log.Printf("[info] TibiaData API edition: %s", TibiadataBuildEdition)
35+
36+
// setting tibiadata-application to log much less if DEBUG_MODE is false (default is false)
37+
if !getEnvAsBool("DEBUG_MODE", false) {
38+
log.Printf("[info] TibiaData API debug-mode: disabled")
39+
} else {
40+
// setting debug to true for more logging
41+
TibiadataDebug = true
42+
log.Printf("[info] TibiaData API debug-mode: enabled")
43+
44+
// logging user-agent string
45+
log.Printf("[debug] TIbiaData API User-Agent: %s", TibiadataUserAgent)
46+
}
47+
48+
runWebServer()
49+
}
50+
51+
// TibiaDataInitializer func - init things at beginning
52+
func TibiaDataInitializer() {
53+
// setting TibiadataBuildEdition
54+
if isEnvExist("TIBIADATA_EDITION") {
55+
TibiadataBuildEdition = getEnv("TIBIADATA_EDITION", "open-source")
56+
}
57+
58+
// adding information of host
59+
TibiadataHost = getEnv("TIBIADATA_HOST", "")
60+
if TibiadataHost != "" {
61+
TibiadataHost = "+https://" + TibiadataHost
62+
}
63+
64+
// generating TibiadataUserAgent with TibiadataUserAgentGenerator function
65+
TibiadataUserAgent = TibiadataUserAgentGenerator(TibiadataAPIversion)
66+
67+
// setting TibiadataProxyDomain
68+
if isEnvExist("TIBIADATA_PROXY") {
69+
TibiadataProxyDomain = "https://" + getEnv("TIBIADATA_PROXY", "www.tibia.com") + "/"
70+
}
71+
72+
log.Printf("[info] TibiaData API proxy: %s", TibiadataProxyDomain)
73+
}

0 commit comments

Comments
 (0)