fix: Custom texts (#2875)

* feat: delete org

* fix: return is default on custom message text

* fix(projeciton): print stack trace on recover panic

* chore: print panic line

* fix: custom message text retunr nil, nil

* fix: custom message text template

* fix: remove isDefault from selection (#2876)

* fix: custom message text query

Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
Co-authored-by: Max Peintner <max@caos.ch>
This commit is contained in:
Fabi 2021-12-21 15:18:05 +01:00 committed by GitHub
parent fc08229679
commit cf727b7fff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 44 additions and 40 deletions

View File

@ -12,14 +12,14 @@ import { InfoSectionType } from '../info-section/info-section.component';
})
export class EditTextComponent implements OnInit, OnDestroy {
@Input() label: string = '';
@Input() current$!: Observable<{ [key: string]: any | string; }>;
@Input() default$!: Observable<{ [key: string]: any | string; }>;
@Input() current$!: Observable<{ [key: string]: any | string }>;
@Input() default$!: Observable<{ [key: string]: any | string }>;
@Input() currentlyDragged: string = '';
@Output() changedValues: EventEmitter<{ [key: string]: string; }> = new EventEmitter();
public currentMap: { [key: string]: string; } = {};
@Output() changedValues: EventEmitter<{ [key: string]: string }> = new EventEmitter();
public currentMap: { [key: string]: string } = {};
private destroy$: Subject<void> = new Subject();
public form!: FormGroup;
public warnText: { [key: string]: string | undefined; } = {};
public warnText: { [key: string]: string | undefined } = {};
@Input() public chips: any[] = [];
@Input() public disabled: boolean = true;
@ -28,17 +28,18 @@ export class EditTextComponent implements OnInit, OnDestroy {
public InfoSectionType: any = InfoSectionType;
public ngOnInit(): void {
this.current$.pipe(takeUntil(this.destroy$)).subscribe(value => {
this.current$.pipe(takeUntil(this.destroy$)).subscribe((value) => {
this.currentMap = value;
this.form = new FormGroup({});
Object.keys(value).map(key => {
const control = new FormControl({ value: value[key], disabled: this.disabled });
this.form.addControl(key, control);
Object.keys(value).map((key) => {
if (key !== 'isDefault') {
const control = new FormControl({ value: value[key], disabled: this.disabled });
this.form.addControl(key, control);
}
});
this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(values => this.changedValues.emit(values));
this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((values) => this.changedValues.emit(values));
});
}
public ngOnDestroy(): void {

View File

@ -233,7 +233,7 @@ Changes the username
GET: /users/{user_id}/username
PUT: /users/{user_id}/username
### SetUserMetadata

View File

@ -343,6 +343,7 @@ title: zitadel/text.proto
| text | string | - | |
| button_text | string | - | |
| footer_text | string | - | |
| is_default | bool | - | |

View File

@ -22,24 +22,7 @@ func ModelCustomMessageTextToPb(msg *query.MessageText) *text_pb.MessageCustomTe
msg.ChangeDate,
msg.AggregateID,
),
}
}
func DomainCustomMsgTextToPb(msg *domain.CustomMessageText) *text_pb.MessageCustomText {
return &text_pb.MessageCustomText{
Title: msg.Title,
PreHeader: msg.PreHeader,
Subject: msg.Subject,
Greeting: msg.Greeting,
Text: msg.Text,
ButtonText: msg.ButtonText,
FooterText: msg.FooterText,
Details: object.ToViewDetailsPb(
msg.Sequence,
msg.CreationDate,
msg.ChangeDate,
"", //TODO: resourceowner
),
IsDefault: msg.AggregateID == domain.IAMID,
}
}

View File

@ -2,6 +2,7 @@ package handler
import (
"context"
"runtime/debug"
"sort"
"sync"
"time"
@ -106,7 +107,7 @@ func (h *ProjectionHandler) Process(
//handle panic
defer func() {
cause := recover()
logging.LogWithFields("HANDL-utWkv", "projection", h.ProjectionName, "cause", cause).Error("projection handler paniced")
logging.LogWithFields("HANDL-utWkv", "projection", h.ProjectionName, "cause", cause, "stack", string(debug.Stack())).Error("projection handler paniced")
}()
execBulk := h.prepareExecuteBulk(query, reduce, update)

View File

@ -161,12 +161,24 @@ func (q *Queries) DefaultMessageTextByTypeAndLanguageFromFileSystem(messageType,
func (q *Queries) CustomMessageTextByTypeAndLanguage(ctx context.Context, aggregateID, messageType, language string) (*MessageText, error) {
stmt, scan := prepareMessageTextQuery()
query, args, err := stmt.Where(
sq.Eq{
MessageTextColAggregateID.identifier(): aggregateID,
MessageTextColType.identifier(): messageType,
MessageTextColLanguage.identifier(): language,
sq.And{
sq.Eq{
MessageTextColLanguage.identifier(): language,
},
sq.Eq{
MessageTextColType.identifier(): messageType,
},
sq.Or{
sq.Eq{
MessageTextColAggregateID.identifier(): aggregateID,
},
sq.Eq{
MessageTextColAggregateID.identifier(): domain.IAMID,
},
},
},
).
OrderBy(MessageTextColAggregateID.identifier()).
Limit(1).ToSql()
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-1b9mf", "Errors.Query.SQLStatement")

View File

@ -147,7 +147,7 @@ func (p *MessageTextProjection) reduceRemoved(event eventstore.EventReader) (*ha
return nil, errors.ThrowInvalidArgument(nil, "PROJE-fm0ge", "reduce.wrong.event.type")
}
if !isMessageTemplate(templateEvent.Template) {
return nil, nil
return crdb.NewNoOpStatement(event), nil
}
cols := []handler.Column{
handler.NewCol(MessageTextChangeDateCol, templateEvent.CreationDate()),
@ -186,16 +186,21 @@ func (p *MessageTextProjection) reduceRemoved(event eventstore.EventReader) (*ha
}
func (p *MessageTextProjection) reduceTemplateRemoved(event eventstore.EventReader) (*handler.Statement, error) {
templateEvent, ok := event.(*org.CustomTextTemplateRemovedEvent)
if !ok {
var templateEvent policy.CustomTextTemplateRemovedEvent
switch e := event.(type) {
case *org.CustomTextTemplateRemovedEvent:
templateEvent = e.CustomTextTemplateRemovedEvent
case *iam.CustomTextTemplateRemovedEvent:
templateEvent = e.CustomTextTemplateRemovedEvent
default:
logging.LogWithFields("PROJE-m03ng", "seq", event.Sequence(), "expectedType", org.CustomTextTemplateRemovedEventType).Error("wrong event type")
return nil, errors.ThrowInvalidArgument(nil, "PROJE-2n9rs", "reduce.wrong.event.type")
}
if !isMessageTemplate(templateEvent.Template) {
return nil, nil
return crdb.NewNoOpStatement(event), nil
}
return crdb.NewDeleteStatement(
templateEvent,
event,
[]handler.Condition{
handler.NewCond(MessageTextAggregateIDCol, templateEvent.Aggregate().ID),
handler.NewCond(MessageTextTypeCol, templateEvent.Template),

View File

@ -45,6 +45,7 @@ message MessageCustomText {
description: "custom text for email footer_text"
}
];
bool is_default = 9;
}
message LoginCustomText {