feat: ResetPassword endpoint

This commit is contained in:
Stefan Benz
2024-09-24 14:26:48 +02:00
parent 1e9d58c924
commit 04f5ed8d1c
9 changed files with 418 additions and 46 deletions

View File

@@ -7,4 +7,8 @@ func init() {
eventstore.RegisterFilterEventMapper(AggregateType, UsernameDeletedType, eventstore.GenericEventMapper[UsernameDeletedEvent])
eventstore.RegisterFilterEventMapper(AggregateType, PasswordCreatedType, eventstore.GenericEventMapper[PasswordCreatedEvent])
eventstore.RegisterFilterEventMapper(AggregateType, PasswordDeletedType, eventstore.GenericEventMapper[PasswordDeletedEvent])
eventstore.RegisterFilterEventMapper(AggregateType, JWTCreatedType, eventstore.GenericEventMapper[JWTCreatedEvent])
eventstore.RegisterFilterEventMapper(AggregateType, JWTDeletedType, eventstore.GenericEventMapper[JWTDeletedEvent])
eventstore.RegisterFilterEventMapper(AggregateType, PATCreatedType, eventstore.GenericEventMapper[PATCreatedEvent])
eventstore.RegisterFilterEventMapper(AggregateType, PATDeletedType, eventstore.GenericEventMapper[PATDeletedEvent])
}

View File

@@ -19,9 +19,9 @@ type JWTCreatedEvent struct {
UserID string `json:"userID"`
ExpirationDate time.Time `json:"expirationDate,omitempty"`
PublicKey []byte `json:"publicKey,omitempty"`
TriggerOrigin string `json:"triggerOrigin,omitempty"`
ExpirationDate time.Time `json:"expirationDate,omitempty"`
PublicKey []byte `json:"publicKey,omitempty"`
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
func (e *JWTCreatedEvent) SetBaseEvent(event *eventstore.BaseEvent) {
@@ -36,6 +36,10 @@ func (e *JWTCreatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
func (e *JWTCreatedEvent) TriggerOrigin() string {
return e.TriggeredAtOrigin
}
func NewJWTCreatedEvent(
ctx context.Context,
aggregate *eventstore.Aggregate,
@@ -49,10 +53,10 @@ func NewJWTCreatedEvent(
aggregate,
JWTCreatedType,
),
UserID: userID,
ExpirationDate: expirationDate,
PublicKey: publicKey,
TriggerOrigin: http.DomainContext(ctx).Origin(),
UserID: userID,
ExpirationDate: expirationDate,
PublicKey: publicKey,
TriggeredAtOrigin: http.DomainContext(ctx).Origin(),
}
}

View File

@@ -2,24 +2,29 @@ package authenticator
import (
"context"
"time"
"github.com/zitadel/zitadel/internal/api/http"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
)
const (
passwordPrefix = eventPrefix + "password."
PasswordCreatedType = passwordPrefix + "created"
PasswordDeletedType = passwordPrefix + "deleted"
passwordPrefix = eventPrefix + "password."
PasswordCreatedType = passwordPrefix + "created"
PasswordDeletedType = passwordPrefix + "deleted"
PasswordCodeAddedType = passwordPrefix + "code.added"
)
type PasswordCreatedEvent struct {
*eventstore.BaseEvent `json:"-"`
UserID string `json:"userID"`
EncodedHash string `json:"encodedHash,omitempty"`
ChangeRequired bool `json:"changeRequired,omitempty"`
TriggerOrigin string `json:"triggerOrigin,omitempty"`
UserID string `json:"userID"`
EncodedHash string `json:"encodedHash,omitempty"`
ChangeRequired bool `json:"changeRequired,omitempty"`
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
func (e *PasswordCreatedEvent) SetBaseEvent(event *eventstore.BaseEvent) {
@@ -34,6 +39,10 @@ func (e *PasswordCreatedEvent) UniqueConstraints() []*eventstore.UniqueConstrain
return nil
}
func (e *PasswordCreatedEvent) TriggerOrigin() string {
return e.TriggeredAtOrigin
}
func NewPasswordCreatedEvent(
ctx context.Context,
aggregate *eventstore.Aggregate,
@@ -47,10 +56,10 @@ func NewPasswordCreatedEvent(
aggregate,
PasswordCreatedType,
),
UserID: userID,
EncodedHash: encodeHash,
ChangeRequired: changeRequired,
TriggerOrigin: http.DomainContext(ctx).Origin(),
UserID: userID,
EncodedHash: encodeHash,
ChangeRequired: changeRequired,
TriggeredAtOrigin: http.DomainContext(ctx).Origin(),
}
}
@@ -82,3 +91,54 @@ func NewPasswordDeletedEvent(
),
}
}
type PasswordCodeAddedEvent struct {
*eventstore.BaseEvent `json:"-"`
Code *crypto.CryptoValue `json:"code,omitempty"`
Expiry time.Duration `json:"expiry,omitempty"`
NotificationType domain.NotificationType `json:"notificationType,omitempty"`
URLTemplate string `json:"url_template,omitempty"`
CodeReturned bool `json:"code_returned,omitempty"`
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
func (e *PasswordCodeAddedEvent) Payload() interface{} {
return e
}
func (e *PasswordCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
func (e *PasswordCodeAddedEvent) TriggerOrigin() string {
return e.TriggeredAtOrigin
}
func NewPasswordCodeAddedEvent(
ctx context.Context,
aggregate *eventstore.Aggregate,
code *crypto.CryptoValue,
expiry time.Duration,
notificationType domain.NotificationType,
urlTemplate string,
codeReturned bool,
) *PasswordCodeAddedEvent {
return &PasswordCodeAddedEvent{
BaseEvent: eventstore.NewBaseEventForPush(
ctx,
aggregate,
PasswordCodeAddedType,
),
Code: code,
Expiry: expiry,
NotificationType: notificationType,
URLTemplate: urlTemplate,
CodeReturned: codeReturned,
TriggeredAtOrigin: http.DomainContext(ctx).Origin(),
}
}
func (e *PasswordCodeAddedEvent) SetBaseEvent(event *eventstore.BaseEvent) {
e.BaseEvent = event
}

View File

@@ -19,9 +19,9 @@ type PATCreatedEvent struct {
UserID string `json:"userID"`
ExpirationDate time.Time `json:"expirationDate,omitempty"`
Scopes []string `json:"scopes"`
TriggerOrigin string `json:"triggerOrigin,omitempty"`
ExpirationDate time.Time `json:"expirationDate,omitempty"`
Scopes []string `json:"scopes"`
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
func (e *PATCreatedEvent) SetBaseEvent(event *eventstore.BaseEvent) {
@@ -49,10 +49,10 @@ func NewPATCreatedEvent(
aggregate,
PATCreatedType,
),
UserID: userID,
ExpirationDate: expirationDate,
Scopes: scopes,
TriggerOrigin: http.DomainContext(ctx).Origin(),
UserID: userID,
ExpirationDate: expirationDate,
Scopes: scopes,
TriggeredAtOrigin: http.DomainContext(ctx).Origin(),
}
}