3
0

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:
Denis Arh
2019-10-23 22:00:13 +02:00
parent 90d5b13cbb
commit 92eadbba99
13 changed files with 79 additions and 90 deletions
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
+1 -1
View File
@@ -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';
+24 -22
View File
@@ -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
+1 -1
View File
@@ -64,7 +64,7 @@ var (
DefaultAuthNotification AuthNotificationService
DefaultAuthSettings *AuthSettings
DefaultSystemSettings *SystemSettings
DefaultSystemSettings *types.Settings
DefaultSink *sink
+9 -8
View File
@@ -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 {
-30
View File
@@ -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
}
+13
View File
@@ -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"`
}
}
}
)