a simple url shortener in Go (check it out at qurl.org)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package pages
import ( "bytes" "fmt" "html/template" "net/http" "qurl/qurl" "qurl/static" "qurl/storage" "time" )
type SubmitHandler struct { Storage storage.Storage template *template.Template }
type submitPage struct { Message string URL string }
func (ctx *SubmitHandler) Init() error { ctx.template = template.New("submit.html")
_, err := ctx.template.Parse(string(static.Assets["submit.html"])) if err != nil { return err } return nil }
func (ctx *SubmitHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var pg submitPage
u := r.FormValue("url") if u == "" { pg.Message = "Not a valid URL." } else { q, err := ctx.Storage.GetQURLByURL(u) if err != nil { http.Error(w, fmt.Sprintf("Database error: %s", err.Error()), http.StatusInternalServerError) return }
if q != nil { pg.Message = "URL already exists." pg.URL = fmt.Sprintf("https://qurl.org/%s", qurl.ToString(q.ID)) } else { q = &qurl.QURL{ URL: u, Created: time.Now(), }
err := q.CheckValid() if err != nil { pg.Message = err.Error() } else { err := ctx.Storage.AddQURL(q) if err != nil { http.Error(w, fmt.Sprintf("Database error: %s", err.Error()), http.StatusInternalServerError) return }
pg.Message = "URL Added." pg.URL = fmt.Sprintf("https://qurl.org/%s", qurl.ToString(q.ID)) } } }
var buf bytes.Buffer err := ctx.template.Execute(&buf, pg) if err != nil { http.Error(w, fmt.Sprintf("Template execute error: %s", err.Error()), http.StatusInternalServerError) return } w.Header().Set("Content-Length", fmt.Sprintf("%d", buf.Len())) w.Header().Set("Content-Type", "text/html") w.Write(buf.Bytes()) }
|