summaryrefslogtreecommitdiff
path: root/system/db
diff options
context:
space:
mode:
authorSteve Manuel <nilslice@gmail.com>2017-04-11 14:51:22 -0700
committerSteve Manuel <nilslice@gmail.com>2017-04-11 14:51:22 -0700
commitb961e74656b0db97d5b3c14295ca8c6ba16b4424 (patch)
tree3809b37535114c337452a3ab7320ca51ede02d06 /system/db
parent3f1d6b5df128973eb7c4c8a92c2b34fde2fb1ba0 (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.go4
-rw-r--r--system/db/search.go22
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