/
page-generation.go
120 lines (113 loc) · 3.48 KB
/
page-generation.go
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 controllers
import (
"net/url"
"fmt"
"github.com/gin-gonic/gin"
"github.com/ECHibiki/Community-Banners-2.0/templater"
"github.com/ECHibiki/Community-Banners-2.0/bannerdb"
)
// NAME CHECK
func returnAdPage(name string, size string , ip string , board string) string{
ad_data := getRandomEntry(name , size , ip , board)
if len(ad_data) == 0{
return "asdf no ads";
}
ad_data[0]["url"] = fmt.Sprintf("/req?s=%v&f=%v" ,
url.QueryEscape(ad_data[0]["url"]) , ad_data[0]["uri"] )
ad_data[0]["name"] = ad_data[0]["name"]
return templater.ReturnFilledTemplate("./templates/banner.html" , ad_data[0])
}
// NAME CHECK
func getRandomEntry(name string, size string , ip string , board string) []map[string]string{
if size != "wide" && size != "small"{
size = "%"
}
filter := ""
var filter_args []interface{}
if board == ""{
for _, r_board := range controller_settings.RestrictedBoards{
if filter == "" {
filter += " ( board != ? "
} else{
filter += " AND board != ? "
}
filter_args = append(filter_args , r_board)
}
filter += " ) AND "
} else{
filter += " ( board = ? OR board = '' ) AND "
filter_args = append(filter_args , board)
}
query := fmt.Sprintf(`
SELECT ads.fk_name AS name, uri , url, size, clicks, board FROM ads
LEFT JOIN bans ON ads.fk_name = bans.fk_name
WHERE %s
( hardban IS NULL OR bans.ip = ? OR bans.fk_name = ? )
AND ads.size LIKE ?
ORDER BY RAND() LIMIT 1;
` , filter )
query_arr := append(filter_args , []interface{}{ ip , name , size ,}...)
result , err := bannerdb.Query(query , query_arr)
if err != nil{
panic(err)
}
return result
}
func returnAdJson(name string, size string , ip string , board string) (gin.H){
ad_data := getRandomEntry(name , size , ip , board)
if len(ad_data) == 0{
return gin.H{
"url": "",
"uri": "",
"name":"",
"size":"",
"clicks":"",
"board":"",
}
}
ad_data[0]["url"] = fmt.Sprintf("/req?s=%v&f=%v" ,
url.QueryEscape(ad_data[0]["url"]) , ad_data[0]["uri"] )
// ads.fk_name , uri , url, size, clicks , board
return gin.H{
"url": ad_data[0]["url"],
"uri": ad_data[0]["uri"],
"name":ad_data[0]["name"],
"size":ad_data[0]["size"],
"clicks":ad_data[0]["clicks"],
"board":ad_data[0]["board"],
}
}
func getLimitedEntries(name string , ip string ) []map[string]string{
filter := ""
var filter_args []interface{}
if name == "" || !checkBanned(name , ip) {
filter += "WHERE (bans.fk_name = ? OR bans.ip != ? OR bans.ip IS NULL) "
filter_args = append(filter_args , []interface{}{name, ip}...)
}
for _, board := range controller_settings.RestrictedBoards{
if filter == "" {
filter += "WHERE board != ? "
} else{
filter += " AND board != ? "
}
filter_args = append(filter_args , board)
}
entry_get , err := bannerdb.Query(fmt.Sprintf(`
SELECT ads.fk_name AS name , uri , url, size, clicks, board FROM ads
LEFT JOIN bans ON ads.fk_name = bans.fk_name
%s ORDER BY ads.id DESC` , filter) , filter_args)
if err != nil{
panic(err)
}
return entry_get
}
func checkBanned(name string , ip string) bool{
ban_get , err := bannerdb.Query(`
SELECT fk_name FROM bans
WHERE fk_name = ? OR ip = ?
`, []interface{}{name , ip})
if err != nil{
panic(err)
}
return len(ban_get) > 0
}