Working on portmaster restructure
This commit is contained in:
@@ -15,12 +15,14 @@ type ProfileIndex struct {
|
||||
record.Base
|
||||
sync.Mutex
|
||||
|
||||
ID string
|
||||
|
||||
UserProfiles []string
|
||||
StampProfiles []string
|
||||
}
|
||||
|
||||
func makeIndexRecordKey(id string) string {
|
||||
return fmt.Sprintf("index:profiles/%s", base64.RawURLEncoding.EncodeToString([]byte(id)))
|
||||
func makeIndexRecordKey(fpType, id string) string {
|
||||
return fmt.Sprintf("index:profiles/%s:%s", fpType, base64.RawURLEncoding.EncodeToString([]byte(id)))
|
||||
}
|
||||
|
||||
// NewIndex returns a new ProfileIndex.
|
||||
@@ -32,8 +34,8 @@ func NewIndex(id string) *ProfileIndex {
|
||||
|
||||
// AddUserProfile adds a User Profile to the index.
|
||||
func (pi *ProfileIndex) AddUserProfile(identifier string) (changed bool) {
|
||||
if !utils.StringInSlice(pi.UserProfiles, id) {
|
||||
pi.UserProfiles = append(pi.UserProfiles, id)
|
||||
if !utils.StringInSlice(pi.UserProfiles, identifier) {
|
||||
pi.UserProfiles = append(pi.UserProfiles, identifier)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -41,8 +43,8 @@ func (pi *ProfileIndex) AddUserProfile(identifier string) (changed bool) {
|
||||
|
||||
// AddStampProfile adds a Stamp Profile to the index.
|
||||
func (pi *ProfileIndex) AddStampProfile(identifier string) (changed bool) {
|
||||
if !utils.StringInSlice(pi.StampProfiles, id) {
|
||||
pi.StampProfiles = append(pi.StampProfiles, id)
|
||||
if !utils.StringInSlice(pi.StampProfiles, identifier) {
|
||||
pi.StampProfiles = append(pi.StampProfiles, identifier)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -59,8 +61,8 @@ func (pi *ProfileIndex) RemoveStampProfile(id string) {
|
||||
}
|
||||
|
||||
// Get gets a ProfileIndex from the database.
|
||||
func Get(id string) (*ProfileIndex, error) {
|
||||
key := makeIndexRecordKey(id)
|
||||
func Get(fpType, id string) (*ProfileIndex, error) {
|
||||
key := makeIndexRecordKey(fpType, id)
|
||||
|
||||
r, err := indexDB.Get(key)
|
||||
if err != nil {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package index
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/Safing/portbase/database"
|
||||
"github.com/Safing/portbase/database/query"
|
||||
"github.com/Safing/portbase/database/record"
|
||||
@@ -25,7 +23,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
modules.Register("profile:index", nil, start, stop, "database")
|
||||
modules.Register("profile:index", nil, start, stop, "profile", "database")
|
||||
}
|
||||
|
||||
func start() (err error) {
|
||||
@@ -49,13 +47,17 @@ func indexer() {
|
||||
case <-shutdownIndexer:
|
||||
return
|
||||
case r := <-indexSub.Feed:
|
||||
if r == nil {
|
||||
return
|
||||
}
|
||||
|
||||
prof := ensureProfile(r)
|
||||
if prof != nil {
|
||||
for _, id := range prof.Identifiers {
|
||||
if strings.HasPrefix(id, profile.IdentifierPrefix) {
|
||||
for _, fp := range prof.Fingerprints {
|
||||
if fp.MatchesOS() && fp.Type == "full_path" {
|
||||
|
||||
// get Profile and ensure identifier is set
|
||||
pi, err := GetIndex(id)
|
||||
pi, err := Get("full_path", fp.Value)
|
||||
if err != nil {
|
||||
if err == database.ErrNotFound {
|
||||
pi = NewIndex(id)
|
||||
|
||||
Reference in New Issue
Block a user