mirror of
https://github.com/lone-cloud/prism
synced 2026-06-03 08:43:10 -07:00
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package signal
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"prism/service/config"
|
|
"prism/service/notification"
|
|
"prism/service/util"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
type Integration struct {
|
|
cfg *config.Config
|
|
client *Client
|
|
handlers *Handlers
|
|
sender *Sender
|
|
tmpl *util.TemplateRenderer
|
|
logger *slog.Logger
|
|
}
|
|
|
|
func NewIntegration(cfg *config.Config, store *notification.Store, logger *slog.Logger, tmpl *util.TemplateRenderer) *Integration {
|
|
client := NewClient()
|
|
var sender *Sender
|
|
if client.IsEnabled() {
|
|
sender = NewSender(client, store, logger)
|
|
}
|
|
return &Integration{
|
|
cfg: cfg,
|
|
client: client,
|
|
sender: sender,
|
|
tmpl: tmpl,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (s *Integration) GetSender() *Sender {
|
|
return s.sender
|
|
}
|
|
|
|
func (s *Integration) RegisterRoutes(router *chi.Mux, auth func(http.Handler) http.Handler, db *sql.DB, apiKey string, logger *slog.Logger) {
|
|
s.handlers = RegisterRoutes(router, s.cfg, auth, s.tmpl, s.logger, s.client)
|
|
}
|
|
|
|
func (s *Integration) Start(ctx context.Context, logger *slog.Logger) {
|
|
if s.handlers != nil && s.handlers.IsEnabled() {
|
|
client := s.handlers.GetClient()
|
|
account, _ := client.GetLinkedAccount()
|
|
if account != nil {
|
|
logger.Info("Signal enabled", "status", "linked", "number", FormatPhoneNumber(account.Number))
|
|
} else {
|
|
logger.Info("Signal enabled", "status", "unlinked", "action", "visit admin UI to link")
|
|
}
|
|
} else {
|
|
logger.Info("Signal disabled", "reason", "signal-cli not found in PATH")
|
|
}
|
|
}
|
|
|
|
func (s *Integration) IsEnabled() bool {
|
|
if s.handlers == nil {
|
|
return false
|
|
}
|
|
return s.handlers.IsEnabled()
|
|
}
|
|
|
|
func (s *Integration) GetHandlers() *Handlers {
|
|
return s.handlers
|
|
}
|