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:
parent
562872a4a8
commit
ecc94f31c9
12 changed files with 52 additions and 45 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue