123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /*
- The Kurz Web API exposes these routes:
- - GET "/<short>" : resolve a short URL
- - Handler: handleGetShort()
- - Success: 307 to matching target URL
- - Client request incorrect: 400
- - Short not yet defined: 404 no matching target
- - Target blocked for permission reasons: 403
- - Target legally censored: 451
- - Server failure: 50*
- - POST "/" with <target>: create a short URL from a target URL
- - Handler: handlePostTarget()
- - Success: 201 with <new short>
- - Already existing short: 409 with <existing short>
- - Target blocked for permission reasons: 403
- - Target legally censored: 451
- - Server failure: 50*
- Code 451 MAY be replaced by 403, for example when legal censorship includes a
- gag order, super-injunction (UK), National security letter (US) or similar
- mechanisms.
- */
- package api
- import (
- "net/http"
- "github.com/gorilla/mux"
- )
- // Short is the type of responses provided by the Web API from a target.
- type Short struct {
- Short string `json:"short"`
- }
- // Target is the type of requests accepted by the Web API for target submissions.
- type Target struct {
- Target string `json:"target"`
- }
- func ListenAndServe(addr string) error {
- router := mux.NewRouter()
- router.HandleFunc("/{short}", handleGetShort).
- Methods("GET", "HEAD").
- Name("kurz.get_short")
- router.HandleFunc("/", handlePostTarget).
- HeadersRegexp("Content-Type", "^application/json$").
- Methods("POST").
- Name("kurd.post_target")
- http.Handle("/", router)
- err := http.ListenAndServe(addr, router)
- return err
- }
|