@@ -14,6 +14,8 @@ import (
14
14
"path/filepath"
15
15
"strings"
16
16
17
+ "net/url"
18
+
17
19
"github.com/chai2010/webp"
18
20
"github.com/gorilla/mux"
19
21
"github.com/nfnt/resize"
@@ -22,12 +24,36 @@ import (
22
24
var (
23
25
outputDirectory string
24
26
port int
27
+ allowedDomains string
25
28
)
26
29
30
+ var URLParse = url .Parse ;
31
+
27
32
func init () {
28
- flag .StringVar (& outputDirectory , "o" , "." , "Output directory for compressed images" )
29
- flag .IntVar (& port , "p" , 8080 , "Port for the server to listen on" )
30
- flag .Parse ()
33
+ flag .StringVar (& outputDirectory , "o" , "." , "Output directory for compressed images" )
34
+ flag .IntVar (& port , "p" , 8080 , "Port for the server to listen on" )
35
+ flag .StringVar (& allowedDomains , "s" , "*" , "Allowed domains separated by comma (,)" )
36
+ flag .Parse ()
37
+ }
38
+
39
+ func isDomainAllowed (url string ) bool {
40
+ if allowedDomains == "*" {
41
+ return true // Allow all domains
42
+ }
43
+
44
+ allowedDomainList := strings .Split (allowedDomains , "," )
45
+ u , err := URLParse (url )
46
+ if err != nil {
47
+ return false
48
+ }
49
+
50
+ for _ , ___domain := range allowedDomainList {
51
+ if strings .HasSuffix (u .Hostname (), ___domain ) {
52
+ return true
53
+ }
54
+ }
55
+
56
+ return false
31
57
}
32
58
33
59
func downloadImage (url string ) (image.Image , string , error ) {
@@ -145,9 +171,16 @@ func compressHandler(w http.ResponseWriter, r *http.Request) {
145
171
format := r .URL .Query ().Get ("output" )
146
172
quality := r .URL .Query ().Get ("quality" )
147
173
resolution := r .URL .Query ().Get ("resolution" )
174
+ version := r .URL .Query ().Get ("v" )
175
+
176
+ // Check if the URL ___domain is allowed
177
+ if ! isDomainAllowed (url ) {
178
+ http .Error (w , "URL ___domain not allowed" , http .StatusForbidden )
179
+ return
180
+ }
148
181
149
182
// Concatenate parameters into a single string
150
- paramsString := fmt .Sprintf ("%s-%s-%s-%s" , url , format , quality , resolution )
183
+ paramsString := fmt .Sprintf ("%s-%s-%s-%s-%s " , url , format , quality , resolution , version )
151
184
152
185
// Generate MD5 hash from the concatenated parameters
153
186
hash := generateMD5Hash (paramsString )
@@ -249,9 +282,15 @@ func compressHandler(w http.ResponseWriter, r *http.Request) {
249
282
250
283
func main () {
251
284
r := mux .NewRouter ()
285
+
252
286
r .HandleFunc ("/compressor" , compressHandler ).Methods ("GET" )
253
287
r .HandleFunc ("/compressor/{filename}" , compressHandler ).Methods ("GET" )
254
288
289
+ // / get return multiline text
290
+ r .HandleFunc ("/" , func (w http.ResponseWriter , r * http.Request ) {
291
+ fmt .Fprintf (w , "ok!" )
292
+ })
293
+
255
294
http .Handle ("/" , r )
256
295
257
296
fmt .Printf ("Server is listening on :%d. Output directory: %s\n " , port , outputDirectory )
0 commit comments