Пример #1
0
func handler_publish(w http.ResponseWriter, r *http.Request) {
	json := r.FormValue("pkg")
	if json == "" {
		http.Error(w, "Form value pkg is empty!", http.StatusBadRequest)
		return
	}

	// unmarshal PackageMeta from json
	meta := new(gopm_index.PackageMeta)
	err := meta.FromJson([]byte(json))
	if err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	// check name uniqueness in the database
	ctx := appengine.NewContext(r)
	key := datastore.NewKey(ctx, "PackageMeta", meta.Name, 0, nil)
	entity := new(gopm_index.PackageMeta)

	err = datastore.Get(ctx, key, entity)
	if err == nil {
		http.Error(w, fmt.Sprintf("The package name '%v' already exists in the index registry.\n", meta.Name), http.StatusInternalServerError)
		return
	}

	if err != datastore.ErrNoSuchEntity {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	_, err = datastore.Put(ctx, key, meta)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	update_full_index(ctx, w)

	fmt.Printf("Published a package '%v'\n", meta.Name)
}