diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-04-11 14:51:22 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-04-11 14:51:22 -0700 |
commit | b961e74656b0db97d5b3c14295ca8c6ba16b4424 (patch) | |
tree | 3809b37535114c337452a3ab7320ca51ede02d06 /system/db | |
parent | 3f1d6b5df128973eb7c4c8a92c2b34fde2fb1ba0 (diff) |
change implementation of search to opt-in per type, less risky if sensative data is added
Diffstat (limited to 'system/db')
-rw-r--r-- | system/db/content.go | 4 | ||||
-rw-r--r-- | system/db/search.go | 22 |
2 files changed, 23 insertions, 3 deletions
diff --git a/system/db/content.go b/system/db/content.go index 49cba87..5db2896 100644 --- a/system/db/content.go +++ b/system/db/content.go @@ -124,7 +124,7 @@ func update(ns, id string, data url.Values, existingContent *[]byte) (int, error go func() { // update data in search index target := fmt.Sprintf("%s:%s", ns, id) - err = UpdateSearchIndex(target, string(j)) + err = UpdateSearchIndex(target, j) if err != nil { log.Println("[search] UpdateSearchIndex Error:", err) } @@ -252,7 +252,7 @@ func insert(ns string, data url.Values) (int, error) { go func() { // add data to seach index target := fmt.Sprintf("%s:%s", ns, cid) - err = UpdateSearchIndex(target, string(j)) + err = UpdateSearchIndex(target, j) if err != nil { log.Println("[search] UpdateSearchIndex Error:", err) } diff --git a/system/db/search.go b/system/db/search.go index 3e7a9d6..84a3828 100644 --- a/system/db/search.go +++ b/system/db/search.go @@ -9,6 +9,8 @@ import ( "github.com/ponzu-cms/ponzu/system/item" + "encoding/json" + "github.com/blevesearch/bleve" "github.com/blevesearch/bleve/mapping" ) @@ -24,6 +26,7 @@ var ( // Searchable ... type Searchable interface { SearchMapping() (*mapping.IndexMappingImpl, error) + IndexContent() bool } func init() { @@ -44,6 +47,11 @@ func MapSearchIndex(typeName string) error { return fmt.Errorf("[search] MapSearchIndex Error: Item type %s doesn't implement db.Searchable", typeName) } + // skip setting or using index for types that shouldn't be indexed + if !s.IndexContent() { + return nil + } + mapping, err := s.SearchMapping() if err == item.ErrNoSearchMapping { return nil @@ -97,8 +105,20 @@ func UpdateSearchIndex(id string, data interface{}) error { idx, ok := Search[ns] if ok { + // unmarshal json to struct, error if not registered + it, ok := item.Types[ns] + if !ok { + return fmt.Errorf("[search] UpdateSearchIndex Error: type '%s' doesn't exist", ns) + } + + p := it() + err := json.Unmarshal(data.([]byte), &p) + if err != nil { + return err + } + // add data to search index - return idx.Index(id, data) + return idx.Index(id, p) } return nil |