blob: 97e01268ea058713025460232b79a7bfa4bb675b [file] [log] [blame]
giolekva0f503aa2020-04-20 22:41:06 +04001package main
2
3import (
4 "flag"
5 "fmt"
6 "log"
7 "net/http"
giolekvafb52e0d2020-04-23 22:52:13 +04008 "net/http/httputil"
9 "net/url"
10 "text/template"
giolekva0f503aa2020-04-20 22:41:06 +040011)
12
giolekvafb52e0d2020-04-23 22:52:13 +040013var port = flag.Int("port", 3000, "Port to listen on.")
14var pcloudApiServer = flag.String("pcloud_api_server", "", "PCloud API Server address.")
giolekva0f503aa2020-04-20 22:41:06 +040015
16func handle_gallery(w http.ResponseWriter, r *http.Request) {
17 http.ServeFile(w, r, "./gallery.html")
18}
19
20func handle_photo(w http.ResponseWriter, r *http.Request) {
giolekvafb52e0d2020-04-23 22:52:13 +040021 err := r.ParseForm()
22 if err != nil {
23 http.Error(w, "Could not read query", http.StatusInternalServerError)
24 return
25 }
26 id, ok := r.Form["id"]
27 if !ok {
28 http.Error(w, "Photo id must be provided", http.StatusBadRequest)
29 return
30 }
31 t, err := template.ParseFiles("photo.html")
32 if err != nil {
33 log.Print(err)
34 http.Error(w, "Could not process page", http.StatusInternalServerError)
35 return
36 }
37 err = t.Execute(w, struct{ Id string }{id[0]})
38 if err != nil {
39 log.Print(err)
40 http.Error(w, "Could not process page", http.StatusInternalServerError)
41 return
42 }
giolekva0f503aa2020-04-20 22:41:06 +040043}
44
giolekvafb52e0d2020-04-23 22:52:13 +040045func newGqlProxy(pcloudApiServer string) *httputil.ReverseProxy {
46 u, err := url.Parse(pcloudApiServer)
47 if err != nil {
48 panic(err)
49 }
50 return httputil.NewSingleHostReverseProxy(u)
giolekva0f503aa2020-04-20 22:41:06 +040051}
52
53func main() {
54 flag.Parse()
55 fs := http.FileServer(http.Dir("./static"))
56 http.Handle("/static/", http.StripPrefix("/static/", fs))
giolekvafb52e0d2020-04-23 22:52:13 +040057 http.Handle("/graphql", newGqlProxy(*pcloudApiServer))
58 http.HandleFunc("/photo", handle_photo)
giolekva0f503aa2020-04-20 22:41:06 +040059 http.HandleFunc("/", handle_gallery)
60 log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
61}