73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
// ©AngelaMos | 2026
|
|
// contract.go
|
|
|
|
package token
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/CarterPerez-dev/cybersecurity-projects/canary-token-generator/backend/internal/event"
|
|
)
|
|
|
|
type ArtifactKind string
|
|
|
|
const (
|
|
KindURL ArtifactKind = "url"
|
|
KindFile ArtifactKind = "file"
|
|
KindText ArtifactKind = "text"
|
|
KindConnectionString ArtifactKind = "connection_string"
|
|
)
|
|
|
|
type Artifact struct {
|
|
Kind ArtifactKind
|
|
URL string
|
|
Filename string
|
|
Content []byte
|
|
ContentType string
|
|
ConnectionString string
|
|
DestinationURL string
|
|
}
|
|
|
|
type TriggerResponse struct {
|
|
StatusCode int
|
|
ContentType string
|
|
Body []byte
|
|
RedirectURL string
|
|
ExtraHeaders map[string]string
|
|
}
|
|
|
|
type Generator interface {
|
|
Type() Type
|
|
Generate(
|
|
ctx context.Context,
|
|
t *Token,
|
|
baseURL string,
|
|
) (Artifact, error)
|
|
Trigger(
|
|
ctx context.Context,
|
|
t *Token,
|
|
r *http.Request,
|
|
) (*event.Event, *TriggerResponse, error)
|
|
}
|
|
|
|
func (t *Token) NotifyInfo() event.NotifyInfo {
|
|
return event.NotifyInfo{
|
|
TokenID: t.ID,
|
|
ManageID: t.ManageID,
|
|
Type: string(t.Type),
|
|
Memo: t.Memo,
|
|
AlertChannel: string(t.AlertChannel),
|
|
TelegramBot: derefString(t.TelegramBot),
|
|
TelegramChat: derefString(t.TelegramChat),
|
|
WebhookURL: derefString(t.WebhookURL),
|
|
}
|
|
}
|
|
|
|
func derefString(s *string) string {
|
|
if s == nil {
|
|
return ""
|
|
}
|
|
return *s
|
|
}
|