From ecc94f31c97995f3886d03bdac9fbea26244a4b2 Mon Sep 17 00:00:00 2001 From: Harvey Kandola Date: Wed, 2 Aug 2017 15:58:39 +0100 Subject: [PATCH] changed indexer coupling --- domain/auth/endpoint.go | 4 ++-- domain/auth/keycloak/endpoint.go | 2 +- domain/document/endpoint.go | 9 +++++++-- domain/link/endpoint.go | 2 +- domain/meta/endpoint.go | 8 +++----- domain/organization/mysql/store.go | 3 ++- domain/page/endpoint.go | 14 ++++++++------ domain/space/endpoint.go | 2 +- domain/storer.go | 27 +++++++++++++-------------- edition/boot/store.go | 22 ++++++++++++---------- server/middleware.go | 2 +- server/routing/routes.go | 2 +- 12 files changed, 52 insertions(+), 45 deletions(-) diff --git a/domain/auth/endpoint.go b/domain/auth/endpoint.go index ce239831..75188132 100644 --- a/domain/auth/endpoint.go +++ b/domain/auth/endpoint.go @@ -92,7 +92,7 @@ func (h *Handler) Login(w http.ResponseWriter, r *http.Request) { return } - org, err := h.Store.Organization.GetOrganizationByDomain(ctx, dom) + org, err := h.Store.Organization.GetOrganizationByDomain(dom) if err != nil { response.WriteUnauthorizedError(w) return @@ -136,7 +136,7 @@ func (h *Handler) ValidateToken(w http.ResponseWriter, r *http.Request) { // depending upon the domain in question. if len(rc.OrgID) == 0 { dom := organization.GetRequestSubdomain(r) - org, err = h.Store.Organization.GetOrganizationByDomain(rc, dom) + org, err = h.Store.Organization.GetOrganizationByDomain(dom) } else { org, err = h.Store.Organization.GetOrganization(rc, rc.OrgID) } diff --git a/domain/auth/keycloak/endpoint.go b/domain/auth/keycloak/endpoint.go index 5ef355bf..f19083e7 100644 --- a/domain/auth/keycloak/endpoint.go +++ b/domain/auth/keycloak/endpoint.go @@ -161,7 +161,7 @@ func (h *Handler) Authenticate(w http.ResponseWriter, r *http.Request) { return } - org, err := h.Store.Organization.GetOrganizationByDomain(ctx, a.Domain) + org, err := h.Store.Organization.GetOrganizationByDomain(a.Domain) if err != nil { response.WriteUnauthorizedError(w) return diff --git a/domain/document/endpoint.go b/domain/document/endpoint.go index 835e2b38..f4ed7696 100644 --- a/domain/document/endpoint.go +++ b/domain/document/endpoint.go @@ -61,7 +61,7 @@ func (h *Handler) Get(w http.ResponseWriter, r *http.Request) { return } - if CanViewDocumentInFolder(ctx, *h.Store, document.LabelID) { + if !CanViewDocumentInFolder(ctx, *h.Store, document.LabelID) { response.WriteForbiddenError(w) return } @@ -72,12 +72,16 @@ func (h *Handler) Get(w http.ResponseWriter, r *http.Request) { return } - h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{ + err = h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{ LabelID: document.LabelID, SourceID: document.RefID, SourceType: activity.SourceTypeDocument, ActivityType: activity.TypeRead}) + if err != nil { + h.Runtime.Log.Error("record user activity", err) + } + h.Store.Audit.Record(ctx, audit.EventTypeDocumentView) ctx.Transaction.Commit() @@ -143,6 +147,7 @@ func (h *Handler) BySpace(w http.ResponseWriter, r *http.Request) { } if !space.CanViewSpace(ctx, *h.Store, folderID) { + h.Runtime.Log.Info("no permission to view space documents") response.WriteForbiddenError(w) return } diff --git a/domain/link/endpoint.go b/domain/link/endpoint.go index f843d8ff..e206b6d3 100644 --- a/domain/link/endpoint.go +++ b/domain/link/endpoint.go @@ -57,7 +57,7 @@ func (h *Handler) GetLinkCandidates(w http.ResponseWriter, r *http.Request) { } // permission check - if document.CanViewDocument(ctx, *h.Store, documentID) { + if !document.CanViewDocument(ctx, *h.Store, documentID) { response.WriteForbiddenError(w) return } diff --git a/domain/meta/endpoint.go b/domain/meta/endpoint.go index 58fa1668..9ec50fd3 100644 --- a/domain/meta/endpoint.go +++ b/domain/meta/endpoint.go @@ -37,12 +37,10 @@ type Handler struct { // Meta provides org meta data based upon request domain (e.g. acme.documize.com). func (h *Handler) Meta(w http.ResponseWriter, r *http.Request) { - ctx := domain.GetRequestContext(r) - data := org.SiteMeta{} data.URL = organization.GetSubdomainFromHost(r) - org, err := h.Store.Organization.GetOrganizationByDomain(ctx, data.URL) + org, err := h.Store.Organization.GetOrganizationByDomain(data.URL) if err != nil { response.WriteForbiddenError(w) return @@ -72,7 +70,7 @@ func (h *Handler) RobotsTxt(w http.ResponseWriter, r *http.Request) { ctx := domain.GetRequestContext(r) dom := organization.GetSubdomainFromHost(r) - org, err := h.Store.Organization.GetOrganizationByDomain(ctx, dom) + org, err := h.Store.Organization.GetOrganizationByDomain(dom) // default is to deny robots := @@ -116,7 +114,7 @@ func (h *Handler) Sitemap(w http.ResponseWriter, r *http.Request) { ctx := domain.GetRequestContext(r) dom := organization.GetSubdomainFromHost(r) - org, err := h.Store.Organization.GetOrganizationByDomain(ctx, dom) + org, err := h.Store.Organization.GetOrganizationByDomain(dom) if err != nil { h.Runtime.Log.Error(fmt.Sprintf("%s failed to get Organization for domain %s", method, dom), err) diff --git a/domain/organization/mysql/store.go b/domain/organization/mysql/store.go index 08ff8ef9..b00b1115 100644 --- a/domain/organization/mysql/store.go +++ b/domain/organization/mysql/store.go @@ -77,7 +77,8 @@ func (s Scope) GetOrganization(ctx domain.RequestContext, id string) (org org.Or } // GetOrganizationByDomain returns the organization matching a given URL subdomain. -func (s Scope) GetOrganizationByDomain(ctx domain.RequestContext, subdomain string) (org org.Organization, err error) { +// No context is required because user might no be authenticated yet. +func (s Scope) GetOrganizationByDomain(subdomain string) (org org.Organization, err error) { err = nil subdomain = strings.ToLower(subdomain) diff --git a/domain/page/endpoint.go b/domain/page/endpoint.go index 8b60bafb..d34916a4 100644 --- a/domain/page/endpoint.go +++ b/domain/page/endpoint.go @@ -27,6 +27,7 @@ import ( "github.com/documize/community/domain" "github.com/documize/community/domain/document" "github.com/documize/community/domain/link" + indexer "github.com/documize/community/domain/search" "github.com/documize/community/domain/section/provider" "github.com/documize/community/model/activity" "github.com/documize/community/model/audit" @@ -39,6 +40,7 @@ import ( type Handler struct { Runtime *env.Runtime Store *domain.Store + Indexer indexer.Indexer } // Add inserts new section into document. @@ -140,7 +142,7 @@ func (h *Handler) Add(w http.ResponseWriter, r *http.Request) { np, _ := h.Store.Page.Get(ctx, pageID) - h.Store.Indexer.Add(ctx, np, pageID) + h.Indexer.Add(ctx, np, pageID) response.WriteJSON(w, np) } @@ -326,7 +328,7 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) { h.Store.Audit.Record(ctx, audit.EventTypeSectionDelete) - h.Store.Indexer.Delete(ctx, documentID, pageID) + h.Indexer.Delete(ctx, documentID, pageID) h.Store.Link.DeleteSourcePageLinks(ctx, pageID) @@ -405,7 +407,7 @@ func (h *Handler) DeletePages(w http.ResponseWriter, r *http.Request) { return } - h.Store.Indexer.Delete(ctx, documentID, page.PageID) + h.Indexer.Delete(ctx, documentID, page.PageID) h.Store.Link.DeleteSourcePageLinks(ctx, page.PageID) @@ -567,7 +569,7 @@ func (h *Handler) Update(w http.ResponseWriter, r *http.Request) { ctx.Transaction.Commit() - h.Store.Indexer.Update(ctx, model.Page) + h.Indexer.Update(ctx, model.Page) updatedPage, err := h.Store.Page.Get(ctx, pageID) @@ -623,7 +625,7 @@ func (h *Handler) ChangePageSequence(w http.ResponseWriter, r *http.Request) { return } - h.Store.Indexer.UpdateSequence(ctx, documentID, p.PageID, p.Sequence) + h.Indexer.UpdateSequence(ctx, documentID, p.PageID, p.Sequence) } h.Store.Audit.Record(ctx, audit.EventTypeSectionResequence) @@ -682,7 +684,7 @@ func (h *Handler) ChangePageLevel(w http.ResponseWriter, r *http.Request) { return } - h.Store.Indexer.UpdateLevel(ctx, documentID, p.PageID, p.Level) + h.Indexer.UpdateLevel(ctx, documentID, p.PageID, p.Level) } h.Store.Audit.Record(ctx, audit.EventTypeSectionResequence) diff --git a/domain/space/endpoint.go b/domain/space/endpoint.go index 9aecd1ae..ff2553b3 100644 --- a/domain/space/endpoint.go +++ b/domain/space/endpoint.go @@ -554,7 +554,7 @@ func (h *Handler) AcceptInvitation(w http.ResponseWriter, r *http.Request) { return } - org, err := h.Store.Organization.GetOrganizationByDomain(ctx, ctx.Subdomain) + org, err := h.Store.Organization.GetOrganizationByDomain(ctx.Subdomain) if err != nil { response.WriteServerError(w, method, err) return diff --git a/domain/storer.go b/domain/storer.go index b60bd9a9..2dd42fa9 100644 --- a/domain/storer.go +++ b/domain/storer.go @@ -30,21 +30,20 @@ import ( // Store provides access to data store (database) type Store struct { + Account AccountStorer + Activity ActivityStorer + Attachment AttachmentStorer + Audit AuditStorer + Block BlockStorer + Document DocumentStorer + Link LinkStorer + Organization OrganizationStorer + Page PageStorer + Pin PinStorer + Search SearchStorer + Setting SettingStorer Space SpaceStorer User UserStorer - Account AccountStorer - Organization OrganizationStorer - Pin PinStorer - Audit AuditStorer - Document DocumentStorer - Setting SettingStorer - Attachment AttachmentStorer - Link LinkStorer - Page PageStorer - Activity ActivityStorer - Search SearchStorer - Indexer Indexer - Block BlockStorer } // SpaceStorer defines required methods for space management @@ -100,7 +99,7 @@ type AccountStorer interface { type OrganizationStorer interface { AddOrganization(ctx RequestContext, org org.Organization) error GetOrganization(ctx RequestContext, id string) (org org.Organization, err error) - GetOrganizationByDomain(ctx RequestContext, subdomain string) (org org.Organization, err error) + GetOrganizationByDomain(subdomain string) (org org.Organization, err error) UpdateOrganization(ctx RequestContext, org org.Organization) (err error) DeleteOrganization(ctx RequestContext, orgID string) (rows int64, err error) RemoveOrganization(ctx RequestContext, orgID string) (err error) diff --git a/edition/boot/store.go b/edition/boot/store.go index 3a510d70..c4b9ffb3 100644 --- a/edition/boot/store.go +++ b/edition/boot/store.go @@ -16,6 +16,7 @@ import ( "github.com/documize/community/core/env" "github.com/documize/community/domain" account "github.com/documize/community/domain/account/mysql" + activity "github.com/documize/community/domain/activity/mysql" attachment "github.com/documize/community/domain/attachment/mysql" audit "github.com/documize/community/domain/audit/mysql" block "github.com/documize/community/domain/block/mysql" @@ -32,19 +33,20 @@ import ( // AttachStore selects database persistence layer func AttachStore(r *env.Runtime, s *domain.Store) { - s.Space = space.Scope{Runtime: r} s.Account = account.Scope{Runtime: r} - s.Organization = org.Scope{Runtime: r} - s.User = user.Scope{Runtime: r} - s.Pin = pin.Scope{Runtime: r} - s.Audit = audit.Scope{Runtime: r} - s.Document = doc.Scope{Runtime: r} - s.Setting = setting.Scope{Runtime: r} + s.Activity = activity.Scope{Runtime: r} s.Attachment = attachment.Scope{Runtime: r} - s.Link = link.Scope{Runtime: r} - s.Page = page.Scope{Runtime: r} - s.Search = search.Scope{Runtime: r} + s.Audit = audit.Scope{Runtime: r} s.Block = block.Scope{Runtime: r} + s.Document = doc.Scope{Runtime: r} + s.Link = link.Scope{Runtime: r} + s.Organization = org.Scope{Runtime: r} + s.Page = page.Scope{Runtime: r} + s.Pin = pin.Scope{Runtime: r} + s.Search = search.Scope{Runtime: r} + s.Setting = setting.Scope{Runtime: r} + s.Space = space.Scope{Runtime: r} + s.User = user.Scope{Runtime: r} } // https://github.com/golang-sql/sqlexp/blob/c2488a8be21d20d31abf0d05c2735efd2d09afe4/quoter.go#L46 diff --git a/server/middleware.go b/server/middleware.go index dfdb85dd..ef9e4c54 100644 --- a/server/middleware.go +++ b/server/middleware.go @@ -80,7 +80,7 @@ func (m *middleware) Authorize(w http.ResponseWriter, r *http.Request, next http if len(rc.OrgID) == 0 { dom := organization.GetRequestSubdomain(r) dom = m.Store.Organization.CheckDomain(rc, dom) - org, err = m.Store.Organization.GetOrganizationByDomain(rc, dom) + org, err = m.Store.Organization.GetOrganizationByDomain(dom) } else { org, err = m.Store.Organization.GetOrganization(rc, rc.OrgID) } diff --git a/server/routing/routes.go b/server/routing/routes.go index 6dbb26f7..8ab9cf6b 100644 --- a/server/routing/routes.go +++ b/server/routing/routes.go @@ -48,7 +48,7 @@ func RegisterEndpoints(rt *env.Runtime, s *domain.Store) { meta := meta.Handler{Runtime: rt, Store: s} user := user.Handler{Runtime: rt, Store: s} link := link.Handler{Runtime: rt, Store: s} - page := page.Handler{Runtime: rt, Store: s} + page := page.Handler{Runtime: rt, Store: s, Indexer: indexer} space := space.Handler{Runtime: rt, Store: s} block := block.Handler{Runtime: rt, Store: s} section := section.Handler{Runtime: rt, Store: s}