Cybersecurity-Projects/PROJECTS/beginner/canary-token-generator/backend/internal/token/contract.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
}