From 6cc724c19f94cc9f1a4073fdef6a190c312aa9e1 Mon Sep 17 00:00:00 2001 From: CarterPerez-dev Date: Tue, 12 May 2026 02:40:00 -0400 Subject: [PATCH] feat(canary): Generator interface for token-type plugins - ArtifactKind enum: url, file, text, connection_string - Artifact struct discriminated by Kind - TriggerResponse value-typed (handler writes; generator stays pure) - Generator interface: Type, Generate, Trigger --- .../internal/token/generators/generator.go | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 PROJECTS/beginner/canary-token-generator/backend/internal/token/generators/generator.go diff --git a/PROJECTS/beginner/canary-token-generator/backend/internal/token/generators/generator.go b/PROJECTS/beginner/canary-token-generator/backend/internal/token/generators/generator.go new file mode 100644 index 00000000..2c91bc9d --- /dev/null +++ b/PROJECTS/beginner/canary-token-generator/backend/internal/token/generators/generator.go @@ -0,0 +1,45 @@ +// ©AngelaMos | 2026 +// generator.go + +package generators + +import ( + "context" + "net/http" + + "github.com/CarterPerez-dev/cybersecurity-projects/canary-token-generator/backend/internal/event" + "github.com/CarterPerez-dev/cybersecurity-projects/canary-token-generator/backend/internal/token" +) + +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() token.Type + Generate(ctx context.Context, t *token.Token, baseURL string) (Artifact, error) + Trigger(ctx context.Context, t *token.Token, r *http.Request) (*event.Event, *TriggerResponse, error) +}