blob: 8ef81506e811cdc32c628dd13b3bfe3ec9a35af8 [file] [log] [blame]
Serge Bazanski877cf0a2021-02-08 00:34:34 +01001// A minimal redirector for b/123 style links to redmine.
2
3package main
4
5import (
6 "fmt"
7 "regexp"
8
9 "github.com/golang/glog"
10
11 "flag"
12 "net/http"
13)
14
15func init() {
16 flag.Set("logtostderr", "true")
17}
18
19var (
20 flagListen string
21 flagTarget string
22 flagProject string
23
24 reIssue = regexp.MustCompile(`^/([0-9]+)$`)
25)
26
27func main() {
28 flag.StringVar(&flagListen, "b_listen", "0.0.0.0:8000", "Address to listen at")
29 flag.StringVar(&flagTarget, "b_target", "issues.hackerspace.pl", "Redmine instance address")
30 flag.StringVar(&flagProject, "b_project", "hswaw", "Redmine project name")
31 flag.Parse()
32
33 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
34 scheme := r.URL.Scheme
35 if scheme == "" {
36 scheme = "https"
37 }
38 if r.URL.Path == "/" {
39 http.Redirect(w, r, fmt.Sprintf("%s://%s/my/page", scheme, flagTarget), 302)
40 return
41 }
42 if r.URL.Path == "/new" {
43 http.Redirect(w, r, fmt.Sprintf("%s://%s/projects/%s/issues/new", scheme, flagTarget, flagProject), 302)
44 return
45 }
46 if matches := reIssue.FindStringSubmatch(r.URL.Path); len(matches) == 2 {
47 num := matches[1]
48 http.Redirect(w, r, fmt.Sprintf("%s://%s/issues/%s", scheme, flagTarget, num), 302)
49 return
50 }
51
52 fmt.Fprintf(w, `<!DOCTYPE html>
53 <title>🅱️</title>
54 <center><iframe width="1120" height="630" src="https://www.youtube.com/embed/el0PtDvg2AE?start=4994&autoplay=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></center>
55 `)
56 })
57
58 glog.Infof("Listening on %q...", flagListen)
59 err := http.ListenAndServe(flagListen, nil)
60 if err != nil {
61 glog.Exit(err)
62 }
63}