mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2025-12-16 17:45:39 -06:00
groupware: shift some attributes of the Groupware object around, in defaults and config sub-structures
This commit is contained in:
@@ -121,7 +121,7 @@ func (g *Groupware) GetEventsInCalendar(w http.ResponseWriter, r *http.Request)
|
||||
l = l.Uint(QueryParamOffset, offset)
|
||||
}
|
||||
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaultContactLimit)
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaults.contactLimit)
|
||||
if err != nil {
|
||||
return errorResponse(single(accountId), err)
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ func (g *Groupware) GetContactsInAddressbook(w http.ResponseWriter, r *http.Requ
|
||||
l = l.Uint(QueryParamOffset, offset)
|
||||
}
|
||||
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaultContactLimit)
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaults.contactLimit)
|
||||
if err != nil {
|
||||
return errorResponse(single(accountId), err)
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ func (g *Groupware) GetAllEmailsInMailbox(w http.ResponseWriter, r *http.Request
|
||||
|
||||
logger := log.From(req.logger.With().Str(HeaderSince, log.SafeString(since)).Str(logAccountId, log.SafeString(accountId)))
|
||||
|
||||
changes, sessionState, state, lang, jerr := g.jmap.GetMailboxChanges(accountId, req.session, req.ctx, logger, req.language(), mailboxId, since, true, g.maxBodyValueBytes, maxChanges)
|
||||
changes, sessionState, state, lang, jerr := g.jmap.GetMailboxChanges(accountId, req.session, req.ctx, logger, req.language(), mailboxId, since, true, g.config.maxBodyValueBytes, maxChanges)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -108,7 +108,7 @@ func (g *Groupware) GetAllEmailsInMailbox(w http.ResponseWriter, r *http.Request
|
||||
l = l.Int(QueryParamOffset, offset)
|
||||
}
|
||||
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaultEmailLimit)
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaults.emailLimit)
|
||||
if err != nil {
|
||||
return errorResponse(single(accountId), err)
|
||||
}
|
||||
@@ -122,7 +122,7 @@ func (g *Groupware) GetAllEmailsInMailbox(w http.ResponseWriter, r *http.Request
|
||||
fetchBodies := false
|
||||
withThreads := true
|
||||
|
||||
emails, sessionState, state, lang, jerr := g.jmap.GetAllEmailsInMailbox(accountId, req.session, req.ctx, logger, req.language(), mailboxId, offset, limit, collapseThreads, fetchBodies, g.maxBodyValueBytes, withThreads)
|
||||
emails, sessionState, state, lang, jerr := g.jmap.GetAllEmailsInMailbox(accountId, req.session, req.ctx, logger, req.language(), mailboxId, offset, limit, collapseThreads, fetchBodies, g.config.maxBodyValueBytes, withThreads)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -209,7 +209,7 @@ func (g *Groupware) GetEmailsById(w http.ResponseWriter, r *http.Request) {
|
||||
if len(ids) == 1 {
|
||||
logger := log.From(l.Str("id", log.SafeString(id)))
|
||||
|
||||
emails, _, sessionState, state, lang, jerr := g.jmap.GetEmails(accountId, req.session, req.ctx, logger, req.language(), ids, true, g.maxBodyValueBytes, markAsSeen, true)
|
||||
emails, _, sessionState, state, lang, jerr := g.jmap.GetEmails(accountId, req.session, req.ctx, logger, req.language(), ids, true, g.config.maxBodyValueBytes, markAsSeen, true)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -225,7 +225,7 @@ func (g *Groupware) GetEmailsById(w http.ResponseWriter, r *http.Request) {
|
||||
} else {
|
||||
logger := log.From(l.Array("ids", log.SafeStringArray(ids)))
|
||||
|
||||
emails, _, sessionState, state, lang, jerr := g.jmap.GetEmails(accountId, req.session, req.ctx, logger, req.language(), ids, true, g.maxBodyValueBytes, markAsSeen, false)
|
||||
emails, _, sessionState, state, lang, jerr := g.jmap.GetEmails(accountId, req.session, req.ctx, logger, req.language(), ids, true, g.config.maxBodyValueBytes, markAsSeen, false)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -388,7 +388,7 @@ func (g *Groupware) getEmailsSince(w http.ResponseWriter, r *http.Request, since
|
||||
|
||||
logger := log.From(l)
|
||||
|
||||
changes, sessionState, state, lang, jerr := g.jmap.GetEmailsSince(accountId, req.session, req.ctx, logger, req.language(), since, true, g.maxBodyValueBytes, maxChanges)
|
||||
changes, sessionState, state, lang, jerr := g.jmap.GetEmailsSince(accountId, req.session, req.ctx, logger, req.language(), since, true, g.config.maxBodyValueBytes, maxChanges)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -460,7 +460,7 @@ func (g *Groupware) buildFilter(req Request) (bool, jmap.EmailFilterElement, boo
|
||||
l = l.Int(QueryParamOffset, offset)
|
||||
}
|
||||
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaultEmailLimit)
|
||||
limit, ok, err := req.parseUIntParam(QueryParamLimit, g.defaults.emailLimit)
|
||||
if err != nil {
|
||||
return false, nil, snippets, 0, 0, nil, err
|
||||
}
|
||||
@@ -611,7 +611,7 @@ func (g *Groupware) GetEmails(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
fetchBodies := false
|
||||
|
||||
resultsByAccount, sessionState, state, lang, jerr := g.jmap.QueryEmailsWithSnippets(single(accountId), filter, req.session, req.ctx, logger, req.language(), offset, limit, fetchBodies, g.maxBodyValueBytes)
|
||||
resultsByAccount, sessionState, state, lang, jerr := g.jmap.QueryEmailsWithSnippets(single(accountId), filter, req.session, req.ctx, logger, req.language(), offset, limit, fetchBodies, g.config.maxBodyValueBytes)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -1364,7 +1364,7 @@ func (g *Groupware) RelatedToEmail(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
reqId := req.GetRequestId()
|
||||
getEmailsBefore := time.Now()
|
||||
emails, _, sessionState, state, lang, jerr := g.jmap.GetEmails(accountId, req.session, req.ctx, logger, req.language(), []string{id}, true, g.maxBodyValueBytes, false, false)
|
||||
emails, _, sessionState, state, lang, jerr := g.jmap.GetEmails(accountId, req.session, req.ctx, logger, req.language(), []string{id}, true, g.config.maxBodyValueBytes, false, false)
|
||||
getEmailsDuration := time.Since(getEmailsBefore)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
@@ -1389,7 +1389,7 @@ func (g *Groupware) RelatedToEmail(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
g.job(logger, RelationTypeSameSender, func(jobId uint64, l *log.Logger) {
|
||||
before := time.Now()
|
||||
resultsByAccountId, _, _, lang, jerr := g.jmap.QueryEmails(single(accountId), filter, req.session, bgctx, l, req.language(), 0, limit, false, g.maxBodyValueBytes)
|
||||
resultsByAccountId, _, _, lang, jerr := g.jmap.QueryEmails(single(accountId), filter, req.session, bgctx, l, req.language(), 0, limit, false, g.config.maxBodyValueBytes)
|
||||
if results, ok := resultsByAccountId[accountId]; ok {
|
||||
duration := time.Since(before)
|
||||
if jerr != nil {
|
||||
@@ -1410,7 +1410,7 @@ func (g *Groupware) RelatedToEmail(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
g.job(logger, RelationTypeSameThread, func(jobId uint64, l *log.Logger) {
|
||||
before := time.Now()
|
||||
emails, _, _, _, jerr := g.jmap.EmailsInThread(accountId, email.ThreadId, req.session, bgctx, l, req.language(), false, g.maxBodyValueBytes)
|
||||
emails, _, _, _, jerr := g.jmap.EmailsInThread(accountId, email.ThreadId, req.session, bgctx, l, req.language(), false, g.config.maxBodyValueBytes)
|
||||
duration := time.Since(before)
|
||||
if jerr != nil {
|
||||
req.observeJmapError(jerr)
|
||||
@@ -1819,7 +1819,7 @@ var sanitizableMediaTypes = []string{
|
||||
}
|
||||
|
||||
func (req *Request) sanitizeEmail(source jmap.Email) (jmap.Email, *Error) {
|
||||
if !req.g.sanitize {
|
||||
if !req.g.config.sanitize {
|
||||
return source, nil
|
||||
}
|
||||
memory := map[string]int{}
|
||||
@@ -1867,7 +1867,7 @@ func (req *Request) sanitizeEmail(source jmap.Email) (jmap.Email, *Error) {
|
||||
}
|
||||
|
||||
func (req *Request) sanitizeEmails(source []jmap.Email) ([]jmap.Email, *Error) {
|
||||
if !req.g.sanitize {
|
||||
if !req.g.config.sanitize {
|
||||
return source, nil
|
||||
}
|
||||
result := make([]jmap.Email, len(source))
|
||||
|
||||
@@ -267,7 +267,7 @@ func (g *Groupware) GetMailboxChanges(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
logger := log.From(l)
|
||||
|
||||
changes, sessionState, state, lang, jerr := g.jmap.GetMailboxChanges(accountId, req.session, req.ctx, logger, req.language(), mailboxId, sinceState, true, g.maxBodyValueBytes, maxChanges)
|
||||
changes, sessionState, state, lang, jerr := g.jmap.GetMailboxChanges(accountId, req.session, req.ctx, logger, req.language(), mailboxId, sinceState, true, g.config.maxBodyValueBytes, maxChanges)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(single(accountId), jerr)
|
||||
}
|
||||
@@ -320,7 +320,7 @@ func (g *Groupware) GetMailboxChangesForAllAccounts(w http.ResponseWriter, r *ht
|
||||
|
||||
logger := log.From(l)
|
||||
|
||||
changesByAccountId, sessionState, state, lang, jerr := g.jmap.GetMailboxChangesForMultipleAccounts(allAccountIds, req.session, req.ctx, logger, req.language(), sinceStateMap, true, g.maxBodyValueBytes, maxChanges)
|
||||
changesByAccountId, sessionState, state, lang, jerr := g.jmap.GetMailboxChangesForMultipleAccounts(allAccountIds, req.session, req.ctx, logger, req.language(), sinceStateMap, true, g.config.maxBodyValueBytes, maxChanges)
|
||||
if jerr != nil {
|
||||
return req.errorResponseFromJmap(allAccountIds, jerr)
|
||||
}
|
||||
|
||||
@@ -30,29 +30,26 @@ import (
|
||||
"github.com/opencloud-eu/opencloud/services/groupware/pkg/metrics"
|
||||
)
|
||||
|
||||
// Logging property keys.
|
||||
const (
|
||||
logUsername = "username"
|
||||
logUserId = "user-id"
|
||||
logSessionState = "session-state"
|
||||
logAccountId = "account-id"
|
||||
logBlobAccountId = "blob-account-id" // if the blob accountId is needed as well
|
||||
logErrorId = "error-id"
|
||||
logErrorCode = "code"
|
||||
logErrorStatus = "status"
|
||||
logErrorSourceHeader = "source-header"
|
||||
logErrorSourceParameter = "source-parameter"
|
||||
logErrorSourcePointer = "source-pointer"
|
||||
logInvalidQueryParameter = "error-query-param"
|
||||
logInvalidPathParameter = "error-path-param"
|
||||
logFolderId = "folder-id"
|
||||
logIdentityId = "identity-id"
|
||||
logQuery = "query"
|
||||
logEmailId = "email-id"
|
||||
logJobDescription = "job"
|
||||
logJobId = "job-id"
|
||||
logStreamId = "stream-id"
|
||||
logPath = "path"
|
||||
logMethod = "method"
|
||||
logUsername = "username"
|
||||
logUserId = "user-id"
|
||||
logSessionState = "session-state"
|
||||
logAccountId = "account-id"
|
||||
logBlobAccountId = "blob-account-id"
|
||||
logErrorId = "error-id"
|
||||
logErrorCode = "code"
|
||||
logErrorStatus = "status"
|
||||
logErrorSourceHeader = "source-header"
|
||||
logErrorSourceParameter = "source-parameter"
|
||||
logErrorSourcePointer = "source-pointer"
|
||||
logIdentityId = "identity-id"
|
||||
logEmailId = "email-id"
|
||||
logJobDescription = "job"
|
||||
logJobId = "job-id"
|
||||
logStreamId = "stream-id"
|
||||
logPath = "path"
|
||||
logMethod = "method"
|
||||
)
|
||||
|
||||
// Minimalistic representation of a user, containing only the attributes that are
|
||||
@@ -80,6 +77,16 @@ type Job struct {
|
||||
job func(uint64, *log.Logger)
|
||||
}
|
||||
|
||||
type groupwareConfig struct {
|
||||
maxBodyValueBytes uint
|
||||
sanitize bool
|
||||
}
|
||||
|
||||
type groupwareDefaults struct {
|
||||
emailLimit uint
|
||||
contactLimit uint
|
||||
}
|
||||
|
||||
type Groupware struct {
|
||||
mux *chi.Mux
|
||||
metrics *metrics.Metrics
|
||||
@@ -88,12 +95,10 @@ type Groupware struct {
|
||||
// unfortunately, the sse implementation does not provide such a function.
|
||||
// Key: the stream ID, which is the username
|
||||
// Value: the timestamp of the creation of the stream
|
||||
streams cmap.ConcurrentMap
|
||||
logger *log.Logger
|
||||
defaultEmailLimit uint
|
||||
defaultContactLimit uint
|
||||
maxBodyValueBytes uint
|
||||
sanitize bool
|
||||
streams cmap.ConcurrentMap
|
||||
logger *log.Logger
|
||||
defaults groupwareDefaults
|
||||
config groupwareConfig
|
||||
// Caches successful and failed Sessions by the username.
|
||||
sessionCache sessionCache
|
||||
jmap *jmap.Client
|
||||
@@ -354,21 +359,25 @@ func NewGroupware(config *config.Config, logger *log.Logger, mux *chi.Mux, prome
|
||||
}
|
||||
|
||||
g := &Groupware{
|
||||
mux: mux,
|
||||
metrics: m,
|
||||
sseServer: sseServer,
|
||||
streams: cmap.New(),
|
||||
logger: logger,
|
||||
sessionCache: sessionCache,
|
||||
userProvider: userProvider,
|
||||
jmap: &jmapClient,
|
||||
defaultEmailLimit: defaultEmailLimit,
|
||||
defaultContactLimit: defaultContactLimit,
|
||||
maxBodyValueBytes: maxBodyValueBytes,
|
||||
sanitize: sanitize,
|
||||
eventChannel: eventChannel,
|
||||
jobsChannel: jobsChannel,
|
||||
jobCounter: atomic.Uint64{},
|
||||
mux: mux,
|
||||
metrics: m,
|
||||
sseServer: sseServer,
|
||||
streams: cmap.New(),
|
||||
logger: logger,
|
||||
sessionCache: sessionCache,
|
||||
userProvider: userProvider,
|
||||
jmap: &jmapClient,
|
||||
defaults: groupwareDefaults{
|
||||
emailLimit: defaultEmailLimit,
|
||||
contactLimit: defaultContactLimit,
|
||||
},
|
||||
config: groupwareConfig{
|
||||
maxBodyValueBytes: maxBodyValueBytes,
|
||||
sanitize: sanitize,
|
||||
},
|
||||
eventChannel: eventChannel,
|
||||
jobsChannel: jobsChannel,
|
||||
jobCounter: atomic.Uint64{},
|
||||
}
|
||||
|
||||
for w := 1; w <= workerPoolSize; w++ {
|
||||
|
||||
@@ -34,7 +34,7 @@ func TestSanitizeEmail(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
g := &Groupware{sanitize: true}
|
||||
g := &Groupware{config: groupwareConfig{sanitize: true}}
|
||||
req := Request{g: g}
|
||||
|
||||
safe, err := req.sanitizeEmail(email)
|
||||
|
||||
Reference in New Issue
Block a user