Cybersecurity-Projects/PROJECTS/beginner/canary-token-generator/backend/internal/token/dto.go

56 lines
2.1 KiB
Go

// ©AngelaMos | 2026
// dto.go
package token
import (
"encoding/json"
"time"
)
type CreateRequest struct {
Type Type `json:"type" validate:"required,oneof=webbug slowredirect docx pdf kubeconfig envfile mysql"`
Memo string `json:"memo" validate:"max=256"`
Filename string `json:"filename" validate:"max=128"`
AlertChannel AlertChannel `json:"alert_channel" validate:"required,oneof=telegram webhook"`
TelegramBot string `json:"telegram_bot" validate:"required_if=AlertChannel telegram"`
TelegramChat string `json:"telegram_chat" validate:"required_if=AlertChannel telegram"`
WebhookURL string `json:"webhook_url" validate:"required_if=AlertChannel webhook,omitempty,url"`
Metadata json.RawMessage `json:"metadata"`
TurnstileResp string `json:"cf_turnstile_response" validate:"required"`
}
type Response struct {
ID string `json:"id"`
ManageID string `json:"manage_id"`
Type Type `json:"type"`
Memo string `json:"memo"`
Filename *string `json:"filename"`
AlertChannel AlertChannel `json:"alert_channel"`
CreatedAt time.Time `json:"created_at"`
TriggerCount int64 `json:"trigger_count"`
LastTriggered *time.Time `json:"last_triggered"`
Enabled bool `json:"enabled"`
TriggerURL string `json:"trigger_url"`
ManageURL string `json:"manage_url"`
Metadata json.RawMessage `json:"metadata,omitempty"`
}
func (t *Token) ToResponse(triggerURL, manageURL string) Response {
return Response{
ID: t.ID,
ManageID: t.ManageID,
Type: t.Type,
Memo: t.Memo,
Filename: t.Filename,
AlertChannel: t.AlertChannel,
CreatedAt: t.CreatedAt,
TriggerCount: t.TriggerCount,
LastTriggered: t.LastTriggered,
Enabled: t.Enabled,
TriggerURL: triggerURL,
ManageURL: manageURL,
Metadata: t.Metadata,
}
}