fix: type-switch capture, nil guard, LastInsertId error check
Three defensive fixes: 1) whatsapp_native - use type-switch capture instead of redundant unchecked assertion 2) config - add nil receiver guard to FilterSensitiveData 3) seahorse/store - check LastInsertId error in 3 locations
This commit is contained in:
parent
89ee8f1b39
commit
4752a67a7c
3 changed files with 17 additions and 5 deletions
|
|
@ -269,9 +269,9 @@ func (c *WhatsAppNativeChannel) Stop(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *WhatsAppNativeChannel) eventHandler(evt any) {
|
func (c *WhatsAppNativeChannel) eventHandler(evt any) {
|
||||||
switch evt.(type) {
|
switch v := evt.(type) {
|
||||||
case *events.Message:
|
case *events.Message:
|
||||||
c.handleIncoming(evt.(*events.Message))
|
c.handleIncoming(v)
|
||||||
case *events.Disconnected:
|
case *events.Disconnected:
|
||||||
logger.InfoCF("whatsapp", "WhatsApp disconnected, will attempt reconnection", nil)
|
logger.InfoCF("whatsapp", "WhatsApp disconnected, will attempt reconnection", nil)
|
||||||
c.reconnectMu.Lock()
|
c.reconnectMu.Lock()
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,9 @@ type ExposePath struct {
|
||||||
// Uses strings.Replacer for O(n+m) performance (computed once per SecurityConfig).
|
// Uses strings.Replacer for O(n+m) performance (computed once per SecurityConfig).
|
||||||
// Short content (below FilterMinLength) is returned unchanged for performance.
|
// Short content (below FilterMinLength) is returned unchanged for performance.
|
||||||
func (c *Config) FilterSensitiveData(content string) string {
|
func (c *Config) FilterSensitiveData(content string) string {
|
||||||
|
if c == nil {
|
||||||
|
return content
|
||||||
|
}
|
||||||
// Check if filtering is enabled (default: true)
|
// Check if filtering is enabled (default: true)
|
||||||
if !c.Tools.IsFilterSensitiveDataEnabled() {
|
if !c.Tools.IsFilterSensitiveDataEnabled() {
|
||||||
return content
|
return content
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,10 @@ func (s *Store) GetOrCreateConversation(ctx context.Context, sessionKey string)
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("create conversation: %w", err)
|
return nil, fmt.Errorf("create conversation: %w", err)
|
||||||
}
|
}
|
||||||
id, _ := result.LastInsertId()
|
id, err := result.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("get last insert id: %w", err)
|
||||||
|
}
|
||||||
return &Conversation{
|
return &Conversation{
|
||||||
ConversationID: id,
|
ConversationID: id,
|
||||||
SessionKey: sessionKey,
|
SessionKey: sessionKey,
|
||||||
|
|
@ -193,7 +196,10 @@ func (s *Store) AddMessageWithReasoning(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("add message: %w", err)
|
return nil, fmt.Errorf("add message: %w", err)
|
||||||
}
|
}
|
||||||
id, _ := result.LastInsertId()
|
id, err := result.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("get last insert id: %w", err)
|
||||||
|
}
|
||||||
return &Message{
|
return &Message{
|
||||||
ID: id,
|
ID: id,
|
||||||
ConversationID: convID,
|
ConversationID: convID,
|
||||||
|
|
@ -282,7 +288,10 @@ func (s *Store) AddMessageWithPartsAndReasoning(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("add message: %w", err)
|
return nil, fmt.Errorf("add message: %w", err)
|
||||||
}
|
}
|
||||||
msgID, _ := result.LastInsertId()
|
msgID, err := result.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("get last insert id: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
for i, p := range parts {
|
for i, p := range parts {
|
||||||
_, err = tx.ExecContext(
|
_, err = tx.ExecContext(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue