github.com/aleksi/gonuts.io@v0.0.0-20130622121132-3b0f2d1999fb/app/gonuts/controllers/debug.go (about) 1 package controllers 2 3 import ( 4 "appengine" 5 "appengine/datastore" 6 "fmt" 7 "net/http" 8 9 "gonuts" 10 ) 11 12 func debugPrepareTestHandler(c appengine.Context, w http.ResponseWriter, r *http.Request) { 13 d := make(ContentData) 14 15 // extract token from request 16 token := r.URL.Query().Get("token") 17 if token == "" { 18 ServeJSONError(w, http.StatusForbidden, fmt.Errorf("Can't find 'token' in get parameters."), d) 19 return 20 } 21 22 // find user by token 23 q := datastore.NewQuery("User").Filter("Token=", token) 24 var users []gonuts.User 25 _, err := q.Limit(2).GetAll(c, &users) 26 if err != nil || len(users) != 1 { 27 if err == nil || err == datastore.ErrNoSuchEntity { 28 err = fmt.Errorf("Can't find user with token %q.", token) 29 } 30 ServeJSONError(w, http.StatusForbidden, err, d) 31 return 32 } 33 34 // user should be debug 35 if !users[0].Debug { 36 err = fmt.Errorf("User doesn't have debug access.") 37 ServeJSONError(w, http.StatusForbidden, err, d) 38 return 39 } 40 41 // remove versions 42 for i := datastore.NewQuery("Version").Filter("Vendor=", "debug").KeysOnly().Run(c); ; { 43 key, err := i.Next(nil) 44 if err == datastore.Done { 45 break 46 } 47 if err == nil { 48 err = datastore.Delete(c, key) 49 } 50 if err != nil { 51 gonuts.LogError(c, err) 52 ServeJSONError(w, http.StatusInternalServerError, err, d) 53 return 54 } 55 } 56 57 // remove nuts 58 var nut gonuts.Nut 59 for i := datastore.NewQuery("Nut").Filter("Vendor=", "debug").Run(c); ; { 60 key, err := i.Next(&nut) 61 if err == datastore.Done { 62 break 63 } 64 if err == nil { 65 err = datastore.Delete(c, key) 66 } 67 if err != nil { 68 gonuts.LogError(c, err) 69 ServeJSONError(w, http.StatusInternalServerError, err, d) 70 return 71 } 72 err = gonuts.RemoveFromSearchIndex(c, &nut) 73 gonuts.LogError(c, err) 74 } 75 76 d["Message"] = "OK" 77 ServeJSON(w, http.StatusOK, d) 78 return 79 }