1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-19 21:29:42 +02:00

changed indexer coupling

This commit is contained in:
Harvey Kandola 2017-08-02 15:58:39 +01:00
parent 562872a4a8
commit ecc94f31c9
12 changed files with 52 additions and 45 deletions

View file

@ -92,7 +92,7 @@ func (h *Handler) Login(w http.ResponseWriter, r *http.Request) {
return return
} }
org, err := h.Store.Organization.GetOrganizationByDomain(ctx, dom) org, err := h.Store.Organization.GetOrganizationByDomain(dom)
if err != nil { if err != nil {
response.WriteUnauthorizedError(w) response.WriteUnauthorizedError(w)
return return
@ -136,7 +136,7 @@ func (h *Handler) ValidateToken(w http.ResponseWriter, r *http.Request) {
// depending upon the domain in question. // depending upon the domain in question.
if len(rc.OrgID) == 0 { if len(rc.OrgID) == 0 {
dom := organization.GetRequestSubdomain(r) dom := organization.GetRequestSubdomain(r)
org, err = h.Store.Organization.GetOrganizationByDomain(rc, dom) org, err = h.Store.Organization.GetOrganizationByDomain(dom)
} else { } else {
org, err = h.Store.Organization.GetOrganization(rc, rc.OrgID) org, err = h.Store.Organization.GetOrganization(rc, rc.OrgID)
} }

View file

@ -161,7 +161,7 @@ func (h *Handler) Authenticate(w http.ResponseWriter, r *http.Request) {
return return
} }
org, err := h.Store.Organization.GetOrganizationByDomain(ctx, a.Domain) org, err := h.Store.Organization.GetOrganizationByDomain(a.Domain)
if err != nil { if err != nil {
response.WriteUnauthorizedError(w) response.WriteUnauthorizedError(w)
return return

View file

@ -61,7 +61,7 @@ func (h *Handler) Get(w http.ResponseWriter, r *http.Request) {
return return
} }
if CanViewDocumentInFolder(ctx, *h.Store, document.LabelID) { if !CanViewDocumentInFolder(ctx, *h.Store, document.LabelID) {
response.WriteForbiddenError(w) response.WriteForbiddenError(w)
return return
} }
@ -72,12 +72,16 @@ func (h *Handler) Get(w http.ResponseWriter, r *http.Request) {
return return
} }
h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{ err = h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{
LabelID: document.LabelID, LabelID: document.LabelID,
SourceID: document.RefID, SourceID: document.RefID,
SourceType: activity.SourceTypeDocument, SourceType: activity.SourceTypeDocument,
ActivityType: activity.TypeRead}) ActivityType: activity.TypeRead})
if err != nil {
h.Runtime.Log.Error("record user activity", err)
}
h.Store.Audit.Record(ctx, audit.EventTypeDocumentView) h.Store.Audit.Record(ctx, audit.EventTypeDocumentView)
ctx.Transaction.Commit() ctx.Transaction.Commit()
@ -143,6 +147,7 @@ func (h *Handler) BySpace(w http.ResponseWriter, r *http.Request) {
} }
if !space.CanViewSpace(ctx, *h.Store, folderID) { if !space.CanViewSpace(ctx, *h.Store, folderID) {
h.Runtime.Log.Info("no permission to view space documents")
response.WriteForbiddenError(w) response.WriteForbiddenError(w)
return return
} }

View file

@ -57,7 +57,7 @@ func (h *Handler) GetLinkCandidates(w http.ResponseWriter, r *http.Request) {
} }
// permission check // permission check
if document.CanViewDocument(ctx, *h.Store, documentID) { if !document.CanViewDocument(ctx, *h.Store, documentID) {
response.WriteForbiddenError(w) response.WriteForbiddenError(w)
return return
} }

View file

@ -37,12 +37,10 @@ type Handler struct {
// Meta provides org meta data based upon request domain (e.g. acme.documize.com). // Meta provides org meta data based upon request domain (e.g. acme.documize.com).
func (h *Handler) Meta(w http.ResponseWriter, r *http.Request) { func (h *Handler) Meta(w http.ResponseWriter, r *http.Request) {
ctx := domain.GetRequestContext(r)
data := org.SiteMeta{} data := org.SiteMeta{}
data.URL = organization.GetSubdomainFromHost(r) 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 { if err != nil {
response.WriteForbiddenError(w) response.WriteForbiddenError(w)
return return
@ -72,7 +70,7 @@ func (h *Handler) RobotsTxt(w http.ResponseWriter, r *http.Request) {
ctx := domain.GetRequestContext(r) ctx := domain.GetRequestContext(r)
dom := organization.GetSubdomainFromHost(r) dom := organization.GetSubdomainFromHost(r)
org, err := h.Store.Organization.GetOrganizationByDomain(ctx, dom) org, err := h.Store.Organization.GetOrganizationByDomain(dom)
// default is to deny // default is to deny
robots := robots :=
@ -116,7 +114,7 @@ func (h *Handler) Sitemap(w http.ResponseWriter, r *http.Request) {
ctx := domain.GetRequestContext(r) ctx := domain.GetRequestContext(r)
dom := organization.GetSubdomainFromHost(r) dom := organization.GetSubdomainFromHost(r)
org, err := h.Store.Organization.GetOrganizationByDomain(ctx, dom) org, err := h.Store.Organization.GetOrganizationByDomain(dom)
if err != nil { if err != nil {
h.Runtime.Log.Error(fmt.Sprintf("%s failed to get Organization for domain %s", method, dom), err) h.Runtime.Log.Error(fmt.Sprintf("%s failed to get Organization for domain %s", method, dom), err)

View file

@ -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. // 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 err = nil
subdomain = strings.ToLower(subdomain) subdomain = strings.ToLower(subdomain)

View file

@ -27,6 +27,7 @@ import (
"github.com/documize/community/domain" "github.com/documize/community/domain"
"github.com/documize/community/domain/document" "github.com/documize/community/domain/document"
"github.com/documize/community/domain/link" "github.com/documize/community/domain/link"
indexer "github.com/documize/community/domain/search"
"github.com/documize/community/domain/section/provider" "github.com/documize/community/domain/section/provider"
"github.com/documize/community/model/activity" "github.com/documize/community/model/activity"
"github.com/documize/community/model/audit" "github.com/documize/community/model/audit"
@ -39,6 +40,7 @@ import (
type Handler struct { type Handler struct {
Runtime *env.Runtime Runtime *env.Runtime
Store *domain.Store Store *domain.Store
Indexer indexer.Indexer
} }
// Add inserts new section into document. // 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) np, _ := h.Store.Page.Get(ctx, pageID)
h.Store.Indexer.Add(ctx, np, pageID) h.Indexer.Add(ctx, np, pageID)
response.WriteJSON(w, np) 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.Audit.Record(ctx, audit.EventTypeSectionDelete)
h.Store.Indexer.Delete(ctx, documentID, pageID) h.Indexer.Delete(ctx, documentID, pageID)
h.Store.Link.DeleteSourcePageLinks(ctx, pageID) h.Store.Link.DeleteSourcePageLinks(ctx, pageID)
@ -405,7 +407,7 @@ func (h *Handler) DeletePages(w http.ResponseWriter, r *http.Request) {
return return
} }
h.Store.Indexer.Delete(ctx, documentID, page.PageID) h.Indexer.Delete(ctx, documentID, page.PageID)
h.Store.Link.DeleteSourcePageLinks(ctx, 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() ctx.Transaction.Commit()
h.Store.Indexer.Update(ctx, model.Page) h.Indexer.Update(ctx, model.Page)
updatedPage, err := h.Store.Page.Get(ctx, pageID) updatedPage, err := h.Store.Page.Get(ctx, pageID)
@ -623,7 +625,7 @@ func (h *Handler) ChangePageSequence(w http.ResponseWriter, r *http.Request) {
return 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) h.Store.Audit.Record(ctx, audit.EventTypeSectionResequence)
@ -682,7 +684,7 @@ func (h *Handler) ChangePageLevel(w http.ResponseWriter, r *http.Request) {
return 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) h.Store.Audit.Record(ctx, audit.EventTypeSectionResequence)

View file

@ -554,7 +554,7 @@ func (h *Handler) AcceptInvitation(w http.ResponseWriter, r *http.Request) {
return return
} }
org, err := h.Store.Organization.GetOrganizationByDomain(ctx, ctx.Subdomain) org, err := h.Store.Organization.GetOrganizationByDomain(ctx.Subdomain)
if err != nil { if err != nil {
response.WriteServerError(w, method, err) response.WriteServerError(w, method, err)
return return

View file

@ -30,21 +30,20 @@ import (
// Store provides access to data store (database) // Store provides access to data store (database)
type Store struct { 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 Space SpaceStorer
User UserStorer 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 // SpaceStorer defines required methods for space management
@ -100,7 +99,7 @@ type AccountStorer interface {
type OrganizationStorer interface { type OrganizationStorer interface {
AddOrganization(ctx RequestContext, org org.Organization) error AddOrganization(ctx RequestContext, org org.Organization) error
GetOrganization(ctx RequestContext, id string) (org org.Organization, err 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) UpdateOrganization(ctx RequestContext, org org.Organization) (err error)
DeleteOrganization(ctx RequestContext, orgID string) (rows int64, err error) DeleteOrganization(ctx RequestContext, orgID string) (rows int64, err error)
RemoveOrganization(ctx RequestContext, orgID string) (err error) RemoveOrganization(ctx RequestContext, orgID string) (err error)

View file

@ -16,6 +16,7 @@ import (
"github.com/documize/community/core/env" "github.com/documize/community/core/env"
"github.com/documize/community/domain" "github.com/documize/community/domain"
account "github.com/documize/community/domain/account/mysql" account "github.com/documize/community/domain/account/mysql"
activity "github.com/documize/community/domain/activity/mysql"
attachment "github.com/documize/community/domain/attachment/mysql" attachment "github.com/documize/community/domain/attachment/mysql"
audit "github.com/documize/community/domain/audit/mysql" audit "github.com/documize/community/domain/audit/mysql"
block "github.com/documize/community/domain/block/mysql" block "github.com/documize/community/domain/block/mysql"
@ -32,19 +33,20 @@ import (
// AttachStore selects database persistence layer // AttachStore selects database persistence layer
func AttachStore(r *env.Runtime, s *domain.Store) { func AttachStore(r *env.Runtime, s *domain.Store) {
s.Space = space.Scope{Runtime: r}
s.Account = account.Scope{Runtime: r} s.Account = account.Scope{Runtime: r}
s.Organization = org.Scope{Runtime: r} s.Activity = activity.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.Attachment = attachment.Scope{Runtime: r} s.Attachment = attachment.Scope{Runtime: r}
s.Link = link.Scope{Runtime: r} s.Audit = audit.Scope{Runtime: r}
s.Page = page.Scope{Runtime: r}
s.Search = search.Scope{Runtime: r}
s.Block = block.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 // https://github.com/golang-sql/sqlexp/blob/c2488a8be21d20d31abf0d05c2735efd2d09afe4/quoter.go#L46

View file

@ -80,7 +80,7 @@ func (m *middleware) Authorize(w http.ResponseWriter, r *http.Request, next http
if len(rc.OrgID) == 0 { if len(rc.OrgID) == 0 {
dom := organization.GetRequestSubdomain(r) dom := organization.GetRequestSubdomain(r)
dom = m.Store.Organization.CheckDomain(rc, dom) dom = m.Store.Organization.CheckDomain(rc, dom)
org, err = m.Store.Organization.GetOrganizationByDomain(rc, dom) org, err = m.Store.Organization.GetOrganizationByDomain(dom)
} else { } else {
org, err = m.Store.Organization.GetOrganization(rc, rc.OrgID) org, err = m.Store.Organization.GetOrganization(rc, rc.OrgID)
} }

View file

@ -48,7 +48,7 @@ func RegisterEndpoints(rt *env.Runtime, s *domain.Store) {
meta := meta.Handler{Runtime: rt, Store: s} meta := meta.Handler{Runtime: rt, Store: s}
user := user.Handler{Runtime: rt, Store: s} user := user.Handler{Runtime: rt, Store: s}
link := link.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} space := space.Handler{Runtime: rt, Store: s}
block := block.Handler{Runtime: rt, Store: s} block := block.Handler{Runtime: rt, Store: s}
section := section.Handler{Runtime: rt, Store: s} section := section.Handler{Runtime: rt, Store: s}