ensure no index out of bound panic

main
TZGyn 1 year ago
parent 40ad9ab077
commit 8d1af7db85
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -105,56 +105,82 @@ func main() {
code := c.Params("code") code := c.Params("code")
domain := c.Hostname() domain := c.Hostname()
uastring := c.GetReqHeaders()["User-Agent"][0] uastrings := c.GetReqHeaders()["User-Agent"]
ua := useragent.Parse(uastring)
client := parser.Parse(uastring)
redirecturl := "" redirecturl := ""
var shortenerId int32 var shortenerId int32
iosEnabled := false
iosRedirectUrl := ""
androidEnabled := false
androidRedirectUrl := ""
if domain == appurl { if domain == appurl {
shortener, err := queries.GetShortener(ctx, code) shortener, err := queries.GetShortener(ctx, code)
shortenerId = shortener.ID
if err != nil { if err != nil {
return c.Redirect(fallbackurl) return c.Redirect(fallbackurl)
} }
if ua.OS == "iOS" && shortener.Ios && len(shortener.IosLink.String) != 0 { shortenerId = shortener.ID
redirecturl = shortener.IosLink.String
} else if ua.OS == "Android" && shortener.Android && len(shortener.AndroidLink.String) != 0 { iosEnabled = shortener.Ios
redirecturl = shortener.AndroidLink.String iosRedirectUrl = shortener.IosLink.String
} else {
androidEnabled = shortener.Android
androidRedirectUrl = shortener.AndroidLink.String
redirecturl = shortener.Link redirecturl = shortener.Link
}
} else { } else {
shortener, err := queries.GetShortenerWithDomain(ctx, db.GetShortenerWithDomainParams{ shortener, err := queries.GetShortenerWithDomain(ctx, db.GetShortenerWithDomainParams{
Code: code, Code: code,
CustomDomain: pgtype.Text{String: domain, Valid: true}, CustomDomain: pgtype.Text{String: domain, Valid: true},
}) })
shortenerId = shortener.ID
if err != nil { if err != nil {
return c.Redirect(fallbackurl) return c.Redirect(fallbackurl)
} }
if ua.OS == "iOS" && shortener.Ios && len(shortener.IosLink.String) != 0 { shortenerId = shortener.ID
redirecturl = shortener.IosLink.String
} else if ua.OS == "Android" && shortener.Android && len(shortener.AndroidLink.String) != 0 { iosEnabled = shortener.Ios
redirecturl = shortener.AndroidLink.String iosRedirectUrl = shortener.IosLink.String
} else {
androidEnabled = shortener.Android
androidRedirectUrl = shortener.AndroidLink.String
redirecturl = shortener.Link redirecturl = shortener.Link
} }
if len(uastrings) == 0 {
return c.Redirect(redirecturl)
}
uastring := uastrings[0]
ua := useragent.Parse(uastring)
client := parser.Parse(uastring)
finalRedirectUrl := redirecturl
if ua.OS == "iOS" && iosEnabled && len(iosRedirectUrl) != 0 {
finalRedirectUrl = iosRedirectUrl
} else if ua.OS == "Android" && androidEnabled && len(androidRedirectUrl) != 0 {
finalRedirectUrl = androidRedirectUrl
} }
ip := c.IPs()[0] ipList := c.IPs()
if len(ipList) == 0 {
return c.Redirect(finalRedirectUrl)
}
ip := ipList[0]
_, found := cache_client.Get(ip + "_" + string(shortenerId)) _, found := cache_client.Get(ip + "_" + string(shortenerId))
if found { if found {
return c.Redirect(redirecturl) return c.Redirect(finalRedirectUrl)
} }
cache_client.Set(ip+"_"+string(shortenerId), true, cache.DefaultExpiration) cache_client.Set(ip+"_"+string(shortenerId), true, cache.DefaultExpiration)
record, err := getCity(geodb, ip) record, err := getCity(geodb, ip)
if err != nil { if err != nil {
return c.Redirect(redirecturl) return c.Redirect(finalRedirectUrl)
} }
devicetype := "" devicetype := ""
@ -178,10 +204,10 @@ func main() {
}) })
if err != nil { if err != nil {
return c.Redirect(redirecturl) return c.Redirect(finalRedirectUrl)
} }
return c.Redirect(redirecturl) return c.Redirect(finalRedirectUrl)
}) })
cron := cron.New() cron := cron.New()

Loading…
Cancel
Save