Restructure and move system settings to types pkg
This change affects: - provision files for settings - database entries (added migration script) - how struct is used accross the system services
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -3,4 +3,4 @@
|
||||
// Package contains static assets.
|
||||
package messaging
|
||||
|
||||
var Asset = "PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00 \x000000_access_control.yamlUT\x05\x00\x01\x80Cm8allow:\n everyone:\n messaging:\n - access\n\n admins:\n messaging:\n - access\n - grant\n - settings.read\n - settings.manage\n - channel.public.create\n - channel.private.create\n - channel.group.create\n\n messaging:channel:\n - update\n - leave\n - read\n - join\n - delete\n - undelete\n - archive\n - unarchive\n - members.manage\n - attachments.manage\n - message.attach\n - message.update.all\n - message.update.own\n - message.delete.all\n - message.delete.own\n - message.embed\n - message.send\n - message.reply\n - message.react\n\nPK\x07\x08\xae\x83\x83d\x8e\x02\x00\x00\x8e\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x000100_settings.yamlUT\x05\x00\x01\x80Cm8settings:\n emoji.enabled: true\n message.attachment.enabled: true\n message.attachment.source.gallery.enabled: true\n message.attachment.source.camera.enabled: true\n message.attachment.max-size: 10\n message.attachment.type.whitelist: []\n notification.enabled: true\n notification.header.template: ${user} in ${channel} | Corteza\n notification.message.max-length: 200\nPK\x07\x08\xc2\x0c\xfdkt\x01\x00\x00t\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x001000_channels.yamlUT\x05\x00\x01\x80Cm8channels:\n - name: General\n type: public\n - name: Random\n type: public\nPK\x07\x08\xe8\x83F\xf8O\x00\x00\x00O\x00\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xae\x83\x83d\x8e\x02\x00\x00\x8e\x02\x00\x00\x18\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x81\x00\x00\x00\x000000_access_control.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xc2\x0c\xfdkt\x01\x00\x00t\x01\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x81\xdd\x02\x00\x000100_settings.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xe8\x83F\xf8O\x00\x00\x00O\x00\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x81\x9a\x04\x00\x001000_channels.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xe1\x00\x00\x002\x05\x00\x00\x00\x00"
|
||||
var Asset = "PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00 \x000000_access_control.yamlUT\x05\x00\x01\x80Cm8allow:\n everyone:\n messaging:\n - access\n\n admins:\n messaging:\n - access\n - grant\n - settings.read\n - settings.manage\n - channel.public.create\n - channel.private.create\n - channel.group.create\n\n messaging:channel:\n - update\n - leave\n - read\n - join\n - delete\n - undelete\n - archive\n - unarchive\n - members.manage\n - attachments.manage\n - message.attach\n - message.update.all\n - message.update.own\n - message.delete.all\n - message.delete.own\n - message.embed\n - message.send\n - message.reply\n - message.react\n\nPK\x07\x08\xae\x83\x83d\x8e\x02\x00\x00\x8e\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x000100_settings.yamlUT\x05\x00\x01\x80Cm8settings:\n emoji.enabled: true\n message.attachment.enabled: true\n message.attachment.source.gallery.enabled: true\n message.attachment.source.camera.enabled: true\n message.attachment.max-size: 10\n message.attachment.type.whitelist: []\n notification.enabled: true\n notification.header.template: ${user} in ${channel} | Corteza\n notification.message.max-length: 200\nPK\x07\x08\xc2\x0c\xfdkt\x01\x00\x00t\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x001000_channels.yamlUT\x05\x00\x01\x80Cm8channels:\n - name: General\n type: public\n - name: Random\n type: public\nPK\x07\x08\xe8\x83F\xf8O\x00\x00\x00O\x00\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xae\x83\x83d\x8e\x02\x00\x00\x8e\x02\x00\x00\x18\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x000000_access_control.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xc2\x0c\xfdkt\x01\x00\x00t\x01\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xdd\x02\x00\x000100_settings.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xe8\x83F\xf8O\x00\x00\x00O\x00\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x9a\x04\x00\x001000_channels.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xe1\x00\x00\x002\x05\x00\x00\x00\x00"
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,3 @@
|
||||
UPDATE `sys_settings` SET `name` = 'general.mail.logo' WHERE `rel_owner` = 0 AND `name` = 'system.defaultLogo';
|
||||
UPDATE `sys_settings` SET `name` = 'general.mail.header.en' WHERE `rel_owner` = 0 AND `name` = 'system.mail.header.en';
|
||||
UPDATE `sys_settings` SET `name` = 'general.mail.footer.en' WHERE `rel_owner` = 0 AND `name` = 'system.mail.footer.en';
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza-server/pkg/mail"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -18,8 +19,9 @@ type (
|
||||
ctx context.Context
|
||||
logger *zap.Logger
|
||||
|
||||
settings *AuthSettings
|
||||
systemSettings *SystemSettings
|
||||
// @todo merge auth & system settings
|
||||
authSettings *AuthSettings
|
||||
settings *types.Settings
|
||||
}
|
||||
|
||||
AuthNotificationService interface {
|
||||
@@ -43,18 +45,18 @@ type (
|
||||
|
||||
func AuthNotification(ctx context.Context) AuthNotificationService {
|
||||
return (&authNotification{
|
||||
logger: DefaultLogger.Named("auth-notification"),
|
||||
settings: DefaultAuthSettings,
|
||||
systemSettings: DefaultSystemSettings,
|
||||
logger: DefaultLogger.Named("auth-notification"),
|
||||
authSettings: DefaultAuthSettings,
|
||||
settings: DefaultSystemSettings,
|
||||
}).With(ctx)
|
||||
}
|
||||
|
||||
func (svc authNotification) With(ctx context.Context) AuthNotificationService {
|
||||
return &authNotification{
|
||||
ctx: ctx,
|
||||
logger: logger.AddRequestID(ctx, svc.logger),
|
||||
settings: svc.settings,
|
||||
systemSettings: svc.systemSettings,
|
||||
ctx: ctx,
|
||||
logger: logger.AddRequestID(ctx, svc.logger),
|
||||
authSettings: svc.authSettings,
|
||||
settings: svc.settings,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,45 +67,45 @@ func (svc authNotification) log(ctx context.Context, fields ...zapcore.Field) *z
|
||||
func (svc authNotification) EmailConfirmation(lang string, emailAddress string, token string) error {
|
||||
return svc.send("email-confirmation", lang, authNotificationPayload{
|
||||
EmailAddress: emailAddress,
|
||||
URL: svc.settings.FrontendUrlEmailConfirmation + token,
|
||||
URL: svc.authSettings.FrontendUrlEmailConfirmation + token,
|
||||
})
|
||||
}
|
||||
|
||||
func (svc authNotification) PasswordReset(lang string, emailAddress string, token string) error {
|
||||
return svc.send("password-reset", lang, authNotificationPayload{
|
||||
EmailAddress: emailAddress,
|
||||
URL: svc.settings.FrontendUrlPasswordReset + token,
|
||||
URL: svc.authSettings.FrontendUrlPasswordReset + token,
|
||||
})
|
||||
}
|
||||
|
||||
func (svc authNotification) newMail() *gomail.Message {
|
||||
m := gomail.NewMessage()
|
||||
m.SetAddressHeader("From", svc.settings.MailFromAddress, svc.settings.MailFromName)
|
||||
m.SetAddressHeader("From", svc.authSettings.MailFromAddress, svc.authSettings.MailFromName)
|
||||
return m
|
||||
}
|
||||
|
||||
func (svc authNotification) send(name, lang string, payload authNotificationPayload) error {
|
||||
ntf := svc.newMail()
|
||||
|
||||
payload.Logo = template.URL(svc.systemSettings.DefaultLogo)
|
||||
payload.BaseURL = svc.settings.FrontendUrlBase
|
||||
payload.SignatureName = svc.settings.MailFromName
|
||||
payload.SignatureEmail = svc.settings.MailFromAddress
|
||||
payload.Logo = template.URL(svc.settings.General.Mail.Logo)
|
||||
payload.BaseURL = svc.authSettings.FrontendUrlBase
|
||||
payload.SignatureName = svc.authSettings.MailFromName
|
||||
payload.SignatureEmail = svc.authSettings.MailFromAddress
|
||||
|
||||
// @todo translations
|
||||
payload.EmailHeaderEn = template.HTML(svc.render(svc.systemSettings.MailHeader, payload))
|
||||
payload.EmailFooterEn = template.HTML(svc.render(svc.systemSettings.MailFooter, payload))
|
||||
payload.EmailHeaderEn = template.HTML(svc.render(svc.settings.General.Mail.Header, payload))
|
||||
payload.EmailFooterEn = template.HTML(svc.render(svc.settings.General.Mail.Footer, payload))
|
||||
|
||||
ntf.SetAddressHeader("To", payload.EmailAddress, "")
|
||||
// @todo translations
|
||||
switch name {
|
||||
case "email-confirmation":
|
||||
ntf.SetHeader("Subject", svc.render(svc.settings.MailEmailConfirmationSubject, payload))
|
||||
ntf.SetBody("text/html", svc.render(svc.settings.MailEmailConfirmationBody, payload))
|
||||
ntf.SetHeader("Subject", svc.render(svc.authSettings.MailEmailConfirmationSubject, payload))
|
||||
ntf.SetBody("text/html", svc.render(svc.authSettings.MailEmailConfirmationBody, payload))
|
||||
|
||||
case "password-reset":
|
||||
ntf.SetHeader("Subject", svc.render(svc.settings.MailPasswordResetSubject, payload))
|
||||
ntf.SetBody("text/html", svc.render(svc.settings.MailPasswordResetBody, payload))
|
||||
ntf.SetHeader("Subject", svc.render(svc.authSettings.MailPasswordResetSubject, payload))
|
||||
ntf.SetBody("text/html", svc.render(svc.authSettings.MailPasswordResetBody, payload))
|
||||
|
||||
default:
|
||||
return ErrNoEmailTemplateForGivenOperation
|
||||
|
||||
@@ -64,7 +64,7 @@ var (
|
||||
|
||||
DefaultAuthNotification AuthNotificationService
|
||||
DefaultAuthSettings *AuthSettings
|
||||
DefaultSystemSettings *SystemSettings
|
||||
DefaultSystemSettings *types.Settings
|
||||
|
||||
DefaultSink *sink
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
internalSettings "github.com/cortezaproject/corteza-server/pkg/settings"
|
||||
"github.com/cortezaproject/corteza-server/system/repository"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -38,9 +39,9 @@ type (
|
||||
Get(name string, ownedBy uint64) (out *internalSettings.Value, err error)
|
||||
|
||||
LoadAuthSettings() (*AuthSettings, error)
|
||||
LoadSystemSettings() (*SystemSettings, error)
|
||||
LoadSystemSettings() (*types.Settings, error)
|
||||
UpdateAuthSettings(*AuthSettings) error
|
||||
UpdateSystemSettings(*SystemSettings) error
|
||||
UpdateSystemSettings(*types.Settings) error
|
||||
AutoDiscovery() error
|
||||
}
|
||||
)
|
||||
@@ -109,18 +110,18 @@ func (svc settings) LoadAuthSettings() (*AuthSettings, error) {
|
||||
}
|
||||
|
||||
// Loads system.% settings, initializes & fills system settings struct
|
||||
func (svc settings) LoadSystemSettings() (*SystemSettings, error) {
|
||||
ss := &SystemSettings{}
|
||||
return ss, svc.UpdateSystemSettings(ss)
|
||||
func (svc settings) LoadSystemSettings() (*types.Settings, error) {
|
||||
s := &types.Settings{}
|
||||
return s, svc.UpdateSystemSettings(s)
|
||||
}
|
||||
|
||||
func (svc settings) UpdateSystemSettings(ss *SystemSettings) error {
|
||||
vv, err := svc.internalSettings.FindByPrefix("system.")
|
||||
func (svc settings) UpdateSystemSettings(s *types.Settings) error {
|
||||
vv, err := svc.internalSettings.FindByPrefix("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return ss.ReadKV(vv.KV())
|
||||
return vv.KV().Decode(s)
|
||||
}
|
||||
|
||||
func (svc settings) UpdateAuthSettings(as *AuthSettings) error {
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
intset "github.com/cortezaproject/corteza-server/pkg/settings"
|
||||
)
|
||||
|
||||
type (
|
||||
SystemSettings struct {
|
||||
DefaultLogo string
|
||||
MailHeader string
|
||||
MailFooter string
|
||||
}
|
||||
)
|
||||
|
||||
// ParseAuthSettings maps from plain values to AuthSettings struct
|
||||
//
|
||||
// see settings.Initialize() func
|
||||
func ParseSystemSettings(kv intset.KV) (ss *SystemSettings, err error) {
|
||||
ss = &SystemSettings{}
|
||||
ss.ReadKV(kv)
|
||||
return
|
||||
}
|
||||
|
||||
func (ss *SystemSettings) ReadKV(kv intset.KV) (err error) {
|
||||
ss.DefaultLogo = kv.String("system.defaultLogo")
|
||||
ss.MailHeader = kv.String("system.mail.header.en")
|
||||
ss.MailFooter = kv.String("system.mail.footer.en")
|
||||
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package types
|
||||
|
||||
type (
|
||||
Settings struct {
|
||||
General struct {
|
||||
Mail struct {
|
||||
Logo string
|
||||
Header string `kv:"footer.en"`
|
||||
Footer string `kv:"header.en"`
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user