mirror of
https://github.com/lone-cloud/prism
synced 2026-06-03 08:43:10 -07:00
85 lines
2 KiB
Go
85 lines
2 KiB
Go
package proton
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"prism/service/config"
|
|
"prism/service/credentials"
|
|
"prism/service/notification"
|
|
"prism/service/util"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
type Integration struct {
|
|
cfg *config.Config
|
|
dispatcher *notification.Dispatcher
|
|
logger *slog.Logger
|
|
handlers *Handlers
|
|
tmpl *util.TemplateRenderer
|
|
monitor *Monitor
|
|
db *sql.DB
|
|
apiKey string
|
|
}
|
|
|
|
func NewIntegration(cfg *config.Config, dispatcher *notification.Dispatcher, logger *slog.Logger, tmpl *util.TemplateRenderer, db *sql.DB, apiKey string) *Integration {
|
|
monitor := NewMonitor(cfg, dispatcher, logger)
|
|
handlers := NewHandlers(monitor, "", logger, tmpl)
|
|
return &Integration{
|
|
cfg: cfg,
|
|
dispatcher: dispatcher,
|
|
logger: logger,
|
|
handlers: handlers,
|
|
tmpl: tmpl,
|
|
monitor: monitor,
|
|
db: db,
|
|
apiKey: apiKey,
|
|
}
|
|
}
|
|
|
|
func (p *Integration) RegisterRoutes(router *chi.Mux, auth func(http.Handler) http.Handler, db *sql.DB, apiKey string, logger *slog.Logger) {
|
|
credStore, err := credentials.NewStore(db, apiKey)
|
|
if err == nil {
|
|
if creds, err := credStore.GetProton(); err == nil {
|
|
p.handlers.username = creds.Email
|
|
}
|
|
}
|
|
|
|
RegisterRoutes(router, p.handlers, auth, db, apiKey, logger, p)
|
|
}
|
|
|
|
func (p *Integration) Start(ctx context.Context, logger *slog.Logger) {
|
|
credStore, err := credentials.NewStore(p.db, p.apiKey)
|
|
if err != nil {
|
|
logger.Error("Failed to initialize credentials store for Proton", "error", err)
|
|
return
|
|
}
|
|
|
|
creds, err := credStore.GetProton()
|
|
if err != nil {
|
|
logger.Debug("Proton credentials not configured", "error", err)
|
|
return
|
|
}
|
|
|
|
if err := p.monitor.Start(ctx, credStore); err != nil {
|
|
logger.Error("Failed to start Proton monitor", "error", err)
|
|
return
|
|
}
|
|
|
|
if p.handlers != nil {
|
|
p.handlers.username = creds.Email
|
|
}
|
|
|
|
logger.Info("Proton Mail enabled", "email", creds.Email)
|
|
}
|
|
|
|
func (p *Integration) IsEnabled() bool {
|
|
return p.cfg.EnableProton
|
|
}
|
|
|
|
func (p *Integration) GetHandlers() *Handlers {
|
|
return p.handlers
|
|
}
|