/
stickerl.go
79 lines (65 loc) · 1.47 KB
/
stickerl.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
package main
import (
"os"
"fmt"
"flag"
"strings"
"image/png"
"encoding/json"
"github.com/pilu/traffic"
"github.com/qpliu/qrencode-go/qrencode"
)
const VERSION = "0.1.0"
var (
baseUrl string
env string
host string
port int
app *traffic.Router
)
func usage() {
fmt.Println("USAGE:")
fmt.Printf(" %s [OPTIONS] BASE_URL\n", os.Args[0])
flag.PrintDefaults()
}
func rootHandler(w traffic.ResponseWriter, r *traffic.Request) {
response := map[string]string{
"version": VERSION,
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
}
func codesHandler(w traffic.ResponseWriter, r *traffic.Request) {
code := r.Param("code")
url := fmt.Sprintf("%s%s", baseUrl, code)
grid, err := qrencode.Encode(url, qrencode.ECLevelQ)
if err != nil {
panic(err)
}
w.Header().Set("Content-Type", "image/png")
png.Encode(w, grid.Image(8))
}
func init() {
app = traffic.New()
app.Get("/", rootHandler)
app.Get("/:code", codesHandler)
}
func main() {
flag.StringVar(&env, "e", "production", "Environment")
flag.StringVar(&host, "b", "127.0.0.1", "Host")
flag.IntVar(&port, "p", 7000, "Port")
flag.Parse()
args := flag.Args()
if len(args) != 1 {
usage()
os.Exit(1)
}
baseUrl = args[0]
if !strings.HasSuffix(baseUrl, "/") {
baseUrl = fmt.Sprintf("%s/", baseUrl)
}
traffic.SetVar("env", env)
traffic.SetVar("port", port)
traffic.SetVar("host", host)
app.Run()
}