mirror of
https://github.com/lone-cloud/prism
synced 2026-06-03 08:43:10 -07:00
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package delivery
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
var phoneRegex = regexp.MustCompile(`(?:\+?1[\s.-]?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}`)
|
|
var emailRegex = regexp.MustCompile(`[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}`)
|
|
|
|
func enrichActions(notif Notification) Notification {
|
|
if len(notif.Actions) > 0 {
|
|
return notif
|
|
}
|
|
|
|
seen := make(map[string]bool)
|
|
|
|
for _, num := range phoneRegex.FindAllString(notif.Message, -1) {
|
|
if seen[num] {
|
|
continue
|
|
}
|
|
seen[num] = true
|
|
notif.Actions = append(notif.Actions, Action{
|
|
ID: fmt.Sprintf("call-%s", num),
|
|
Label: fmt.Sprintf("Call %s", num),
|
|
Endpoint: fmt.Sprintf("tel:%s", num),
|
|
})
|
|
}
|
|
|
|
for _, addr := range emailRegex.FindAllString(notif.Message, -1) {
|
|
if seen[addr] {
|
|
continue
|
|
}
|
|
seen[addr] = true
|
|
local := addr
|
|
if i := strings.Index(addr, "@"); i != -1 {
|
|
local = addr[:i]
|
|
}
|
|
notif.Actions = append(notif.Actions, Action{
|
|
ID: fmt.Sprintf("email-%s", addr),
|
|
Label: fmt.Sprintf("Email %s", local),
|
|
Endpoint: fmt.Sprintf("mailto:%s", addr),
|
|
})
|
|
}
|
|
|
|
return notif
|
|
}
|