package main import ( "encoding/json" "fmt" "net/http" "strings" "github.com/gorilla/mux" ) func handleApiUsersCall(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") vars := mux.Vars(req) uid, uidok := vars["uid"] fn, fnok := vars["function"] switch req.Method { case "GET": if !uidok { handleApiListUsers(w) return } switch fn { default: handleApiShowUser(uid, w) } case "POST", "PUT": if !uidok { http.Error(w, "You did a bad", 400) return } if !fnok { // Creating a new user var u *User var err error if u, err = m.GetUserByName(uid); err == nil { http.Error(w, "You did a bad", 400) return } u = NewUser(uid) m.SaveUser(u) m.LoadUsers() handleApiShowUser(u.Uuid, w) return } switch fn { case "slugs": slug, slugok := vars["slug"] if !slugok { http.Error(w, "You did a bad", 400) return } handleApiSubUser(uid, slug, w) default: http.Error(w, "You did a bad", 400) return } default: http.Error(w, "You did a bad", 400) return } } func handleApiListUsers(w http.ResponseWriter) { var res []byte var err error if res, err = json.Marshal(m.Users); err != nil { http.Error(w, "I did a bad", 500) return } fmt.Fprint(w, string(res)) } func handleApiShowUser(uid string, w http.ResponseWriter) { var err error var u *User if u, err = m.GetUser(uid); err != nil { http.Error(w, err.Error(), 400) return } var res []byte if res, err = json.Marshal(u); err != nil { http.Error(w, err.Error(), 400) return } fmt.Fprint(w, string(res)) return } func handleApiSubUser(uid string, slug string, w http.ResponseWriter) { fmt.Println("Sub User", uid, slug) var u *User var err error if u, err = m.GetUser(uid); err != nil { http.Error(w, err.Error(), 400) return } pts := strings.Split(slug, ";") if len(pts) != 2 { http.Error(w, err.Error(), 400) return } _, err = m.GetComic(pts[0], pts[1]) if err != nil { http.Error(w, err.Error(), 400) return } u.SubSlugs = append(u.SubSlugs, slug) err = m.SaveUser(u) if err != nil { http.Error(w, err.Error(), 400) return } m.LoadUsers() handleApiShowUser(u.Uuid, w) }