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  }