Documentation
¶
Index ¶
- func GenerateBinaryPreviewImage(filename, mimeType string) (image.Image, error)
- func GenerateCodeImage(code, filename string) ([]byte, error)
- func GenerateCodeImageWithConfig(code, filename string, config ImageConfig) (image.Image, error)
- func GenerateImagePreview(img image.Image) (image.Image, error)
- func HdurDurationConverter(value string) reflect.Value
- type APIKeyRequest
- type APIKeyResponse
- type APIKeyService
- type AnalyticsService
- func (s *AnalyticsService) GetResourceStats(resourceType string, resourceID string, timeframe AnalyticsTimeframe) (*AnalyticsStats, error)
- func (s *AnalyticsService) GetStatsHistory(days int) (*StatsHistory, error)
- func (s *AnalyticsService) LogEvent(c *fiber.Ctx, eventType models.EventType, resourceType string, ...) error
- func (s *AnalyticsService) LogPasteView(c *fiber.Ctx, pasteID string) error
- func (s *AnalyticsService) LogShortlinkClick(c *fiber.Ctx, shortlinkID string) error
- type AnalyticsStats
- type AnalyticsTimeframe
- type ChartDataPoint
- type CleanupService
- type ExpiryOptions
- type ImageConfig
- type ListPastesResponse
- type PasteOptions
- type PasteResponse
- type PasteService
- func (s *PasteService) CleanupExpired() (int64, error)
- func (s *PasteService) Delete(c *fiber.Ctx, id string) error
- func (s *PasteService) DeleteWithKey(c *fiber.Ctx, id string) error
- func (s *PasteService) GetPaste(id string) (*models.Paste, error)
- func (s *PasteService) GetPasteImage(c *fiber.Ctx, paste *models.Paste) error
- func (s *PasteService) ListPastes(c *fiber.Ctx) error
- func (s *PasteService) RenderDownload(c *fiber.Ctx, paste *models.Paste) error
- func (s *PasteService) RenderPaste(c *fiber.Ctx, paste *models.Paste) error
- func (s *PasteService) RenderPasteJSON(c *fiber.Ctx, paste *models.Paste) error
- func (s *PasteService) RenderPasteRaw(c *fiber.Ctx, paste *models.Paste) error
- func (s *PasteService) UpdateExpiration(c *fiber.Ctx, id string) error
- func (s *PasteService) UploadPaste(c *fiber.Ctx) error
- type RequestParser
- type Services
- type ShortlinkOptions
- type ShortlinkResponse
- type StatsHistory
- type StatsService
- type URLService
- func (s *URLService) CleanupExpired() (int64, error)
- func (s *URLService) CreateShortlink(c *fiber.Ctx) error
- func (s *URLService) Delete(c *fiber.Ctx) error
- func (s *URLService) FindShortlink(id string) (*models.Shortlink, error)
- func (s *URLService) GetStats(c *fiber.Ctx) error
- func (s *URLService) ListURLs(c *fiber.Ctx) error
- func (s *URLService) UpdateExpiration(c *fiber.Ctx) error
- type UpdatePasteExpirationRequest
- type UploadRequest
- type WatermarkConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GenerateCodeImage ¶
func GenerateCodeImageWithConfig ¶
func GenerateCodeImageWithConfig(code, filename string, config ImageConfig) (image.Image, error)
func HdurDurationConverter ¶
Types ¶
type APIKeyRequest ¶
type APIKeyRequest struct {
Email string `json:"email" xml:"email" form:"email"`
Name string `json:"name" xml:"name" form:"name"`
}
APIKeyRequest represents the request structure for creating an API key
type APIKeyResponse ¶
type APIKeyResponse struct {
Message string `json:"message" xml:"message" form:"message"`
}
APIKeyResponse represents the response sent after an API key is requested
type APIKeyService ¶
type APIKeyService struct {
// contains filtered or unexported fields
}
func NewAPIKeyService ¶
func (*APIKeyService) CleanupUnverifiedKeys ¶
func (s *APIKeyService) CleanupUnverifiedKeys() int64
CleanupUnverifiedKeys removes unverified API keys older than 24 hours
func (*APIKeyService) HasMailer ¶
func (s *APIKeyService) HasMailer() bool
func (*APIKeyService) IsEnabled ¶
func (s *APIKeyService) IsEnabled() bool
func (*APIKeyService) RequestKey ¶
func (s *APIKeyService) RequestKey(c *fiber.Ctx) error
RequestKey handles the initial API key request
type AnalyticsService ¶
type AnalyticsService struct {
// contains filtered or unexported fields
}
func NewAnalyticsService ¶
func (*AnalyticsService) GetResourceStats ¶
func (s *AnalyticsService) GetResourceStats(resourceType string, resourceID string, timeframe AnalyticsTimeframe) (*AnalyticsStats, error)
GetResourceStats retrieves analytics statistics for a given resource
func (*AnalyticsService) GetStatsHistory ¶
func (s *AnalyticsService) GetStatsHistory(days int) (*StatsHistory, error)
GetStatsHistory generates usage statistics for the specified number of days
func (*AnalyticsService) LogEvent ¶
func (s *AnalyticsService) LogEvent(c *fiber.Ctx, eventType models.EventType, resourceType string, resourceID string) error
LogEvent creates a new analytics event with common request information
func (*AnalyticsService) LogPasteView ¶
func (s *AnalyticsService) LogPasteView(c *fiber.Ctx, pasteID string) error
LogPasteView creates an analytics event for paste views
func (*AnalyticsService) LogShortlinkClick ¶
func (s *AnalyticsService) LogShortlinkClick(c *fiber.Ctx, shortlinkID string) error
LogShortlinkClick creates an analytics event for shortlink clicks
type AnalyticsStats ¶
type AnalyticsStats struct {
TotalViews int64 `json:"total_views"`
UniqueViews int64 `json:"unique_views"`
ViewsByDay []ChartDataPoint `json:"views_by_day"`
TopReferrers map[string]int64 `json:"top_referrers"`
TopCountries map[string]int64 `json:"top_countries"`
TopBrowsers map[string]int64 `json:"top_browsers"`
}
AnalyticsStats contains aggregated statistics for a resource
type AnalyticsTimeframe ¶
AnalyticsTimeframe represents a time period for analytics queries
type ChartDataPoint ¶
type ChartDataPoint struct {
Value any `json:"value" xml:"value" form:"value"` // The value at this point (can be number or string)
Date time.Time `json:"date" xml:"date" form:"date"` // The timestamp for this data point
}
ChartDataPoint represents a single point of data in time-series statistics
type CleanupService ¶
type CleanupService struct {
// contains filtered or unexported fields
}
func NewCleanupService ¶
func (*CleanupService) RunCleanup ¶
func (s *CleanupService) RunCleanup()
RunCleanup performs all cleanup tasks
func (*CleanupService) StartCleanupScheduler ¶
func (s *CleanupService) StartCleanupScheduler(interval time.Duration)
StartCleanupScheduler starts a periodic cleanup task
type ExpiryOptions ¶
type ExpiryOptions struct {
Size int64
HasAPIKey bool
ExpiresAt *time.Time
ExpiresIn *hdur.Duration
}
ExpiryOptions contains parameters for calculating paste expiration
type ImageConfig ¶
type ImageConfig struct {
Width int
Height int
MaxLines int
FontSize float64
LineSpacing float64
Padding float64
BorderWidth float64
BorderRadius float64
FontPath string
Watermark WatermarkConfig
}
ImageConfig holds all configuration for image generation
func DefaultImageConfig ¶
func DefaultImageConfig() ImageConfig
DefaultImageConfig returns the default image configuration
type ListPastesResponse ¶
type ListPastesResponse struct {
Pastes []PasteResponse `json:"pastes"`
Total int64 `json:"total"`
Page int `json:"page"`
Limit int `json:"limit"`
}
ListPastesResponse represents the response structure for listing pastes
func NewListPastesResponse ¶
func NewListPastesResponse(pastes []models.Paste, baseURL string) ListPastesResponse
NewListPastesResponse creates a new ListPastesResponse from a list of pastes
type PasteOptions ¶
type PasteOptions struct {
Content string `json:"content" xml:"content" form:"content"` // Content to be pasted
Extension string `json:"extension" xml:"extension" form:"extension"` // File extension (optional)
Private bool `json:"private" xml:"private" form:"private"` // Whether the paste is private
Filename string `json:"filename" xml:"filename" form:"filename"` // Original filename
APIKey *models.APIKey `json:"api_key" xml:"api_key" form:"api_key"` // Associated API key for authentication
URL string `json:"url" xml:"url" form:"url"` // URL to be pasted
ExpiresIn *hdur.Duration `json:"expires_in" xml:"expires_in" form:"expires_in"` // Duration string for paste expiry (e.g. "24h")
ExpiresAt *time.Time `json:"expires_at" xml:"expires_at" form:"expires_at"` // Expiration time for the paste
}
PasteOptions contains configuration options for creating a new paste
type PasteResponse ¶
type PasteResponse struct {
ID string `json:"id" xml:"id" form:"id"`
Filename string `json:"filename" xml:"filename" form:"filename"`
URL string `json:"url" xml:"url" form:"url"`
DeleteURL string `json:"delete_url" xml:"delete_url" form:"delete_url"`
MimeType string `json:"mime_type" xml:"mime_type" form:"mime_type"`
Size int64 `json:"size" xml:"size" form:"size"`
ExpiresAt *time.Time `json:"expires_at" xml:"expires_at" form:"expires_at"`
Private bool `json:"private" xml:"private" form:"private"`
}
PasteResponse represents the response structure for creating a new paste
func NewPasteResponse ¶
func NewPasteResponse(paste *models.Paste, baseURL string) PasteResponse
NewPasteResponse creates a new PasteResponse from a paste
type PasteService ¶
type PasteService struct {
// contains filtered or unexported fields
}
func NewPasteService ¶
func (*PasteService) CleanupExpired ¶
func (s *PasteService) CleanupExpired() (int64, error)
CleanupExpired removes expired pastes and their associated files
func (*PasteService) Delete ¶
func (s *PasteService) Delete(c *fiber.Ctx, id string) error
Delete removes a paste and its associated files
func (*PasteService) DeleteWithKey ¶
func (s *PasteService) DeleteWithKey(c *fiber.Ctx, id string) error
DeleteWithKey deletes a paste using its deletion key
func (*PasteService) GetPaste ¶
func (s *PasteService) GetPaste(id string) (*models.Paste, error)
GetPaste retrieves a paste by ID with expiry checking
func (*PasteService) GetPasteImage ¶
GetPasteImage returns an image of the paste suitable for Open Graph
func (*PasteService) ListPastes ¶
func (s *PasteService) ListPastes(c *fiber.Ctx) error
ListPastes returns a paginated list of pastes for the API key
func (*PasteService) RenderDownload ¶
RenderDownload serves the content as a downloadable file
func (*PasteService) RenderPaste ¶
RenderPaste renders the paste view for text content
func (*PasteService) RenderPasteJSON ¶
RenderPasteJSON serves the paste as JSON. If the paste is text, the content will be included in the response. Otherwise only the URL will be included for downloading purposes.
func (*PasteService) RenderPasteRaw ¶
RenderPasteRaw serves the raw content with proper content type
func (*PasteService) UpdateExpiration ¶
func (s *PasteService) UpdateExpiration(c *fiber.Ctx, id string) error
UpdateExpiration updates a paste's expiration time
func (*PasteService) UploadPaste ¶
func (s *PasteService) UploadPaste(c *fiber.Ctx) error
CreatePaste handles the creation of a new paste
type RequestParser ¶
type RequestParser struct {
// contains filtered or unexported fields
}
RequestParser handles unified request parsing for different content types
func NewRequestParser ¶
func NewRequestParser(c *fiber.Ctx) *RequestParser
NewRequestParser creates a new RequestParser instance
func (*RequestParser) ParseJSON ¶
func (p *RequestParser) ParseJSON(out interface{}) error
ParseJSON attempts to parse the request body as JSON into the provided struct
func (*RequestParser) ParseUploadRequest ¶
func (p *RequestParser) ParseUploadRequest() (*UploadRequest, error)
ParseUploadRequest parses various types of upload requests into a unified format
type Services ¶
type Services struct {
Paste *PasteService
URL *URLService
APIKey *APIKeyService
Analytics *AnalyticsService
Stats *StatsService
Cleanup *CleanupService
}
Services holds all service instances
func NewServices ¶
NewServices creates a new Services instance with all service dependencies
func (*Services) StartCleanupScheduler ¶
StartCleanupScheduler starts the cleanup scheduler with the configured interval
type ShortlinkOptions ¶
type ShortlinkOptions struct {
URL string `json:"url" xml:"url" form:"url"` // URL to be shortened
Title string `json:"title" xml:"title" form:"title"` // Display title for the shortlink
ExpiresIn *hdur.Duration `json:"expires_in" xml:"expires_in" form:"expires_in"` // Duration string for shortlink expiry (e.g. "24h")
}
ShortlinkOptions contains configuration options for creating a new shortlink
type ShortlinkResponse ¶
type ShortlinkResponse struct {
ID string `json:"id" xml:"id" form:"id"`
URL string `json:"url" xml:"url" form:"url"`
Title string `json:"title" xml:"title" form:"title"`
ShortURL string `json:"short_url" xml:"short_url" form:"short_url"`
StatsURL string `json:"stats_url" xml:"stats_url" form:"stats_url"`
DeleteURL string `json:"delete_url" xml:"delete_url" form:"delete_url"`
}
ShortlinkResponse represents the response structure for creating a new shortlink
type StatsHistory ¶
type StatsHistory struct {
Pastes []ChartDataPoint
URLs []ChartDataPoint
Storage []ChartDataPoint
AvgSize []ChartDataPoint
APIKeys []ChartDataPoint
Extensions []ChartDataPoint // Top extensions per day
ErrorRates []ChartDataPoint // If we add error tracking
}
StatsHistory contains time-series data for system statistics
type StatsService ¶
type StatsService struct {
// contains filtered or unexported fields
}
func NewStatsService ¶
func (*StatsService) GetSystemStats ¶
func (s *StatsService) GetSystemStats() (fiber.Map, error)
GetSystemStats returns current system statistics and historical data
type URLService ¶
type URLService struct {
// contains filtered or unexported fields
}
func NewURLService ¶
func (*URLService) CleanupExpired ¶
func (s *URLService) CleanupExpired() (int64, error)
CleanupExpired removes expired shortlinks
func (*URLService) CreateShortlink ¶
func (s *URLService) CreateShortlink(c *fiber.Ctx) error
CreateShortlink creates a new URL shortlink
func (*URLService) Delete ¶
func (s *URLService) Delete(c *fiber.Ctx) error
Delete deletes a URL (requires API key ownership)
func (*URLService) FindShortlink ¶
func (s *URLService) FindShortlink(id string) (*models.Shortlink, error)
FindShortlink retrieves a shortlink by ID with expiry checking
func (*URLService) GetStats ¶
func (s *URLService) GetStats(c *fiber.Ctx) error
GetStats returns statistics for a shortened URL
func (*URLService) ListURLs ¶
func (s *URLService) ListURLs(c *fiber.Ctx) error
ListURLs returns a paginated list of URLs for the API key
func (*URLService) UpdateExpiration ¶
func (s *URLService) UpdateExpiration(c *fiber.Ctx) error
UpdateExpiration updates a URL's expiration time
type UpdatePasteExpirationRequest ¶
type UpdatePasteExpirationRequest struct {
ExpiresIn *hdur.Duration `json:"expires_in" xml:"expires_in" form:"expires_in"` // Duration string for paste expiry (e.g. "24h")
ExpiresAt *time.Time `json:"expires_at" xml:"expires_at" form:"expires_at"` // Expiration time for the paste
}
UpdatePasteExpirationRequest represents the request structure for updating a paste's expiration time
type UploadRequest ¶
type UploadRequest struct {
Content []byte // Raw content bytes
Filename string // Original filename
Extension string // File extension
ExpiresIn string // Expiration duration
Private bool // Privacy flag
ContentType string // MIME type
URL string // Optional URL for URL-based uploads
}
UploadRequest represents a unified structure for all upload types
type WatermarkConfig ¶
type WatermarkConfig struct {
Enabled bool
Text string
FontSize float64
Color color.Color
PaddingX float64
PaddingY float64
FontPath string
}
WatermarkConfig holds configuration for the image watermark
func DefaultWatermarkConfig ¶
func DefaultWatermarkConfig() WatermarkConfig
DefaultWatermarkConfig returns the default watermark configuration