handlers

package
v1.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 8, 2026 License: GPL-2.0 Imports: 65 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RespondError

func RespondError(w http.ResponseWriter, status int, message string)

RespondError sends an error response

func RespondJSON

func RespondJSON(w http.ResponseWriter, status int, data any)

RespondJSON sends a JSON response. For 204 No Content and 304 Not Modified, no body or Content-Type is sent per HTTP spec.

Types

type ActivateLicenseRequest added in v1.0.0

type ActivateLicenseRequest struct {
	LicenseKey string `json:"licenseKey"`
}

ActivateLicenseRequest represents the request body for license activation

type ActivateLicenseResponse added in v1.0.0

type ActivateLicenseResponse struct {
	Valid       bool       `json:"valid"`
	ProductName string     `json:"productName,omitempty"`
	ExpiresAt   *time.Time `json:"expiresAt,omitempty"`
	Message     string     `json:"message,omitempty"`
	Error       string     `json:"error,omitempty"`
}

ActivateLicenseResponse represents the response for license activation

type AddFeedRequest added in v1.13.0

type AddFeedRequest struct {
	URL  string `json:"url"`
	Path string `json:"path"`
}

type AddFolderRequest added in v1.13.0

type AddFolderRequest struct {
	Path string `json:"path"`
}

type AddTrackerRequest added in v1.0.0

type AddTrackerRequest struct {
	URLs string `json:"urls"` // Newline-separated URLs
}

AddTrackerRequest represents a tracker add request

type ApplicationDatabaseInfo added in v1.15.0

type ApplicationDatabaseInfo struct {
	Engine string `json:"engine"`
	Target string `json:"target"`
}

type ApplicationHandler added in v1.15.0

type ApplicationHandler struct {
	// contains filtered or unexported fields
}

func NewApplicationHandler added in v1.15.0

func NewApplicationHandler(appConfig *config.AppConfig, startedAt time.Time) *ApplicationHandler

func (*ApplicationHandler) GetInfo added in v1.15.0

type ApplicationInfoResponse added in v1.15.0

type ApplicationInfoResponse struct {
	Version         string                  `json:"version"`
	Commit          string                  `json:"commit,omitempty"`
	CommitShort     string                  `json:"commitShort,omitempty"`
	BuildDate       string                  `json:"buildDate,omitempty"`
	StartedAt       string                  `json:"startedAt"`
	UptimeSeconds   int64                   `json:"uptimeSeconds"`
	GoVersion       string                  `json:"goVersion"`
	GoOS            string                  `json:"goOS"`
	GoArch          string                  `json:"goArch"`
	BaseURL         string                  `json:"baseUrl"`
	Host            string                  `json:"host"`
	Port            int                     `json:"port"`
	ConfigDir       string                  `json:"configDir"`
	DataDir         string                  `json:"dataDir"`
	AuthMode        string                  `json:"authMode"`
	OIDCEnabled     bool                    `json:"oidcEnabled"`
	BuiltInLogin    bool                    `json:"builtInLoginEnabled"`
	OIDCIssuerHost  string                  `json:"oidcIssuerHost,omitempty"`
	CheckForUpdates bool                    `json:"checkForUpdates"`
	Database        ApplicationDatabaseInfo `json:"database"`
}

type ArrHandler added in v1.12.0

type ArrHandler struct {
	// contains filtered or unexported fields
}

ArrHandler handles ARR instance management endpoints

func NewArrHandler added in v1.12.0

func NewArrHandler(instanceStore *models.ArrInstanceStore, arrService *arr.Service) *ArrHandler

NewArrHandler creates a new ARR handler

func (*ArrHandler) CreateInstance added in v1.12.0

func (h *ArrHandler) CreateInstance(w http.ResponseWriter, r *http.Request)

CreateInstance handles POST /api/arr/instances

func (*ArrHandler) DeleteInstance added in v1.12.0

func (h *ArrHandler) DeleteInstance(w http.ResponseWriter, r *http.Request)

DeleteInstance handles DELETE /api/arr/instances/{id}

func (*ArrHandler) GetInstance added in v1.12.0

func (h *ArrHandler) GetInstance(w http.ResponseWriter, r *http.Request)

GetInstance handles GET /api/arr/instances/{id}

func (*ArrHandler) ListInstances added in v1.12.0

func (h *ArrHandler) ListInstances(w http.ResponseWriter, r *http.Request)

ListInstances handles GET /api/arr/instances

func (*ArrHandler) Resolve added in v1.12.0

func (h *ArrHandler) Resolve(w http.ResponseWriter, r *http.Request)

Resolve handles POST /api/arr/resolve

func (*ArrHandler) TestConnection added in v1.12.0

func (h *ArrHandler) TestConnection(w http.ResponseWriter, r *http.Request)

TestConnection handles POST /api/arr/test

func (*ArrHandler) TestInstance added in v1.12.0

func (h *ArrHandler) TestInstance(w http.ResponseWriter, r *http.Request)

TestInstance handles POST /api/arr/instances/{id}/test

func (*ArrHandler) UpdateInstance added in v1.12.0

func (h *ArrHandler) UpdateInstance(w http.ResponseWriter, r *http.Request)

UpdateInstance handles PUT /api/arr/instances/{id}

type AuthHandler

type AuthHandler struct {
	// contains filtered or unexported fields
}

func NewAuthHandler

func NewAuthHandler(
	authService *auth.Service,
	sessionManager *scs.SessionManager, config *domain.Config,
	instanceStore *models.InstanceStore,
	clientPool *qbittorrent.ClientPool,
	syncManager *qbittorrent.SyncManager,
) (*AuthHandler, error)

func (*AuthHandler) ChangePassword

func (h *AuthHandler) ChangePassword(w http.ResponseWriter, r *http.Request)

ChangePassword handles password change requests

func (*AuthHandler) CheckSetupRequired

func (h *AuthHandler) CheckSetupRequired(w http.ResponseWriter, r *http.Request)

CheckSetupRequired checks if initial setup is required

func (*AuthHandler) CreateAPIKey

func (h *AuthHandler) CreateAPIKey(w http.ResponseWriter, r *http.Request)

CreateAPIKey creates a new API key

func (*AuthHandler) DeleteAPIKey

func (h *AuthHandler) DeleteAPIKey(w http.ResponseWriter, r *http.Request)

DeleteAPIKey deletes an API key

func (*AuthHandler) GetCurrentUser

func (h *AuthHandler) GetCurrentUser(w http.ResponseWriter, r *http.Request)

GetCurrentUser returns the current user information

func (*AuthHandler) GetOIDCHandler added in v1.3.0

func (h *AuthHandler) GetOIDCHandler() *OIDCHandler

GetOIDCHandler returns the OIDC handler if configured

func (*AuthHandler) ListAPIKeys

func (h *AuthHandler) ListAPIKeys(w http.ResponseWriter, r *http.Request)

ListAPIKeys returns all API keys

func (*AuthHandler) Login

func (h *AuthHandler) Login(w http.ResponseWriter, r *http.Request)

Login handles user login

func (*AuthHandler) Logout

func (h *AuthHandler) Logout(w http.ResponseWriter, r *http.Request)

Logout handles user logout

func (*AuthHandler) Setup

func (h *AuthHandler) Setup(w http.ResponseWriter, r *http.Request)

Setup handles initial user setup

func (*AuthHandler) Validate added in v1.3.0

func (h *AuthHandler) Validate(w http.ResponseWriter, r *http.Request)

Validate checks if the user has a valid session (used for OIDC callback)

type AutomationDryRunResult added in v1.14.0

type AutomationDryRunResult struct {
	Status      string                       `json:"status"`
	ActivityIDs []int                        `json:"activityIds,omitempty"`
	Activities  []*models.AutomationActivity `json:"activities,omitempty"`
}

type AutomationHandler added in v1.12.0

type AutomationHandler struct {
	// contains filtered or unexported fields
}

func NewAutomationHandler added in v1.12.0

func NewAutomationHandler(store *models.AutomationStore, activityStore *models.AutomationActivityStore, instanceStore *models.InstanceStore, externalProgramStore *models.ExternalProgramStore, service *automations.Service) *AutomationHandler

func (*AutomationHandler) ApplyNow added in v1.12.0

func (h *AutomationHandler) ApplyNow(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) Create added in v1.12.0

func (*AutomationHandler) Delete added in v1.12.0

func (*AutomationHandler) DeleteActivity added in v1.12.0

func (h *AutomationHandler) DeleteActivity(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) DryRunNow added in v1.14.0

func (h *AutomationHandler) DryRunNow(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) GetActivityRun added in v1.14.0

func (h *AutomationHandler) GetActivityRun(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) List added in v1.12.0

func (*AutomationHandler) ListActivity added in v1.12.0

func (h *AutomationHandler) ListActivity(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) PreviewDeleteRule added in v1.12.0

func (h *AutomationHandler) PreviewDeleteRule(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) Reorder added in v1.12.0

func (h *AutomationHandler) Reorder(w http.ResponseWriter, r *http.Request)

func (*AutomationHandler) Update added in v1.12.0

func (*AutomationHandler) ValidateRegex added in v1.12.0

func (h *AutomationHandler) ValidateRegex(w http.ResponseWriter, r *http.Request)

ValidateRegex validates all regex patterns in the automation conditions.

type AutomationPayload added in v1.12.0

type AutomationPayload struct {
	Name            string                   `json:"name"`
	TrackerPattern  string                   `json:"trackerPattern"`
	TrackerDomains  []string                 `json:"trackerDomains"`
	Enabled         *bool                    `json:"enabled"`
	DryRun          *bool                    `json:"dryRun"`
	Notify          *bool                    `json:"notify"`
	SortOrder       *int                     `json:"sortOrder"`
	IntervalSeconds *int                     `json:"intervalSeconds,omitempty"` // nil = use DefaultRuleInterval (15m)
	Conditions      *models.ActionConditions `json:"conditions"`
	FreeSpaceSource *models.FreeSpaceSource  `json:"freeSpaceSource,omitempty"` // nil = default qBittorrent free space
	SortingConfig   *models.SortingConfig    `json:"sortingConfig,omitempty"`   // nil = default (oldest first)
	PreviewLimit    *int                     `json:"previewLimit"`
	PreviewOffset   *int                     `json:"previewOffset"`
	PreviewView     string                   `json:"previewView,omitempty"` // "needed" (default) or "eligible"
}

type BackupsHandler added in v1.5.0

type BackupsHandler struct {
	// contains filtered or unexported fields
}

func NewBackupsHandler added in v1.5.0

func NewBackupsHandler(service *backups.Service) *BackupsHandler

func (*BackupsHandler) DeleteAllRuns added in v1.5.0

func (h *BackupsHandler) DeleteAllRuns(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) DeleteRun added in v1.5.0

func (h *BackupsHandler) DeleteRun(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) DownloadRun added in v1.5.0

func (h *BackupsHandler) DownloadRun(w http.ResponseWriter, r *http.Request)

DownloadRun downloads a backup archive. Query parameters:

  • format: compression format (zip, tar.gz, tar.zst, tar.br, tar.xz, tar) - defaults to zip

func (*BackupsHandler) DownloadTorrentBlob added in v1.5.0

func (h *BackupsHandler) DownloadTorrentBlob(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) ExecuteRestore added in v1.5.0

func (h *BackupsHandler) ExecuteRestore(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) GetManifest added in v1.5.0

func (h *BackupsHandler) GetManifest(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) GetSettings added in v1.5.0

func (h *BackupsHandler) GetSettings(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) ImportManifest added in v1.8.0

func (h *BackupsHandler) ImportManifest(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) ListRuns added in v1.5.0

func (h *BackupsHandler) ListRuns(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) PreviewRestore added in v1.5.0

func (h *BackupsHandler) PreviewRestore(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) TriggerBackup added in v1.5.0

func (h *BackupsHandler) TriggerBackup(w http.ResponseWriter, r *http.Request)

func (*BackupsHandler) UpdateSettings added in v1.5.0

func (h *BackupsHandler) UpdateSettings(w http.ResponseWriter, r *http.Request)

type BulkActionRequest

type BulkActionRequest struct {
	Hashes                   []string                   `json:"hashes"`
	Targets                  []BulkActionTarget         `json:"targets,omitempty"` // Optional explicit instance/hash targets (used by unified view)
	Action                   string                     `json:"action"`
	DeleteFiles              bool                       `json:"deleteFiles,omitempty"`              // For delete action
	Tags                     string                     `json:"tags,omitempty"`                     // For tag operations (comma-separated)
	Comment                  string                     `json:"comment,omitempty"`                  // For setComment action
	Category                 string                     `json:"category,omitempty"`                 // For category operations
	Enable                   bool                       `json:"enable,omitempty"`                   // For toggleAutoTMM action
	SelectAll                bool                       `json:"selectAll,omitempty"`                // When true, apply to all torrents matching filters
	InstanceIDs              []int                      `json:"instanceIds,omitempty"`              // Optional unified instance scope
	Filters                  *qbittorrent.FilterOptions `json:"filters,omitempty"`                  // Filters to apply when selectAll is true
	Search                   string                     `json:"search,omitempty"`                   // Search query when selectAll is true
	ExcludeHashes            []string                   `json:"excludeHashes,omitempty"`            // Hashes to exclude when selectAll is true
	ExcludeTargets           []BulkActionTarget         `json:"excludeTargets,omitempty"`           // Optional explicit targets to exclude when selectAll is true
	RatioLimit               float64                    `json:"ratioLimit,omitempty"`               // For setShareLimit action
	SeedingTimeLimit         int64                      `json:"seedingTimeLimit,omitempty"`         // For setShareLimit action
	InactiveSeedingTimeLimit int64                      `json:"inactiveSeedingTimeLimit,omitempty"` // For setShareLimit action
	ShareLimitAction         string                     `json:"shareLimitAction,omitempty"`         // For setShareLimit action (qBittorrent 5.2+)
	ShareLimitsMode          string                     `json:"shareLimitsMode,omitempty"`          // MatchAny/MatchAll; Web API 2.16.0+ (ignored below that; see supportsShareLimitsMode)
	UploadLimit              int64                      `json:"uploadLimit,omitempty"`              // For setUploadLimit action (KB/s)
	DownloadLimit            int64                      `json:"downloadLimit,omitempty"`            // For setDownloadLimit action (KB/s)
	Location                 string                     `json:"location,omitempty"`                 // For setLocation action
	TrackerOldURL            string                     `json:"trackerOldURL,omitempty"`            // For editTrackers action
	TrackerNewURL            string                     `json:"trackerNewURL,omitempty"`            // For editTrackers action
	TrackerURLs              string                     `json:"trackerURLs,omitempty"`              // For addTrackers/removeTrackers actions
}

BulkActionRequest represents a bulk action request

type BulkActionTarget added in v1.14.0

type BulkActionTarget struct {
	InstanceID int    `json:"instanceId"`
	Hash       string `json:"hash"`
}

type ChangePasswordRequest

type ChangePasswordRequest struct {
	CurrentPassword string `json:"currentPassword"`
	NewPassword     string `json:"newPassword"`
}

ChangePasswordRequest represents a password change request

type CheckResult added in v1.0.0

type CheckResult struct {
	Status string `json:"status"`
	Error  string `json:"error,omitempty"`
}

type ClientAPIKeyWithInstance added in v1.0.0

type ClientAPIKeyWithInstance struct {
	*models.ClientAPIKey
	Instance *models.Instance `json:"instance"`
}

type ClientAPIKeysHandler added in v1.0.0

type ClientAPIKeysHandler struct {
	// contains filtered or unexported fields
}

func NewClientAPIKeysHandler added in v1.0.0

func NewClientAPIKeysHandler(clientAPIKeyStore *models.ClientAPIKeyStore, instanceStore *models.InstanceStore, baseURL string) *ClientAPIKeysHandler

func (*ClientAPIKeysHandler) CreateClientAPIKey added in v1.0.0

func (h *ClientAPIKeysHandler) CreateClientAPIKey(w http.ResponseWriter, r *http.Request)

CreateClientAPIKey handles POST /api/client-api-keys

func (*ClientAPIKeysHandler) DeleteClientAPIKey added in v1.0.0

func (h *ClientAPIKeysHandler) DeleteClientAPIKey(w http.ResponseWriter, r *http.Request)

DeleteClientAPIKey handles DELETE /api/client-api-keys/{id}

func (*ClientAPIKeysHandler) ListClientAPIKeys added in v1.0.0

func (h *ClientAPIKeysHandler) ListClientAPIKeys(w http.ResponseWriter, r *http.Request)

ListClientAPIKeys handles GET /api/client-api-keys

type CreateAPIKeyRequest

type CreateAPIKeyRequest struct {
	Name string `json:"name"`
}

CreateAPIKeyRequest represents a request to create an API key

type CreateClientAPIKeyRequest added in v1.0.0

type CreateClientAPIKeyRequest struct {
	ClientName string `json:"clientName"`
	InstanceID int    `json:"instanceId"`
}

type CreateClientAPIKeyResponse added in v1.0.0

type CreateClientAPIKeyResponse struct {
	Key          string               `json:"key"`
	ClientAPIKey *models.ClientAPIKey `json:"clientApiKey"`
	Instance     *models.Instance     `json:"instance,omitempty"`
	ProxyURL     string               `json:"proxyUrl"`
}

type CreateInstanceRequest

type CreateInstanceRequest struct {
	Name                     string                             `json:"name"`
	Host                     string                             `json:"host"`
	Username                 string                             `json:"username"`
	Password                 string                             `json:"password"`
	APIKey                   string                             `json:"apiKey,omitempty"`
	BasicUsername            *string                            `json:"basicUsername,omitempty"`
	BasicPassword            *string                            `json:"basicPassword,omitempty"`
	TLSSkipVerify            bool                               `json:"tlsSkipVerify,omitempty"`
	HasLocalFilesystemAccess *bool                              `json:"hasLocalFilesystemAccess,omitempty"`
	ReannounceSettings       *InstanceReannounceSettingsPayload `json:"reannounceSettings,omitempty"`
}

CreateInstanceRequest represents a request to create a new instance

type CrossSeedBlocklistRequest added in v1.14.0

type CrossSeedBlocklistRequest struct {
	InstanceID int    `json:"instanceId"`
	InfoHash   string `json:"infoHash"`
	Note       string `json:"note"`
}

type CrossSeedHandler added in v1.8.0

type CrossSeedHandler struct {
	// contains filtered or unexported fields
}

CrossSeedHandler handles cross-seed API endpoints

func NewCrossSeedHandler added in v1.8.0

func NewCrossSeedHandler(
	service *crossseed.Service,
	completionStore *models.InstanceCrossSeedCompletionStore,
	instanceStore *models.InstanceStore,
	seasonPackRunStore *models.SeasonPackRunStore,
) *CrossSeedHandler

NewCrossSeedHandler creates a new cross-seed handler

func (*CrossSeedHandler) AddBlocklistEntry added in v1.14.0

func (h *CrossSeedHandler) AddBlocklistEntry(w http.ResponseWriter, r *http.Request)

AddBlocklistEntry godoc @Summary Add cross-seed blocklist entry @Description Adds or updates a blocked infohash for a specific instance. @Tags cross-seed @Accept json @Produce json @Param request body CrossSeedBlocklistRequest true "Blocklist entry" @Success 201 {object} models.CrossSeedBlocklistEntry @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/blocklist [post]

func (*CrossSeedHandler) AnalyzeTorrentForSearch added in v1.8.0

func (h *CrossSeedHandler) AnalyzeTorrentForSearch(w http.ResponseWriter, r *http.Request)

AnalyzeTorrentForSearch godoc @Summary Analyze torrent for cross-seed search metadata @Description Returns metadata about how a torrent would be searched (content type, search type, required categories/capabilities) without performing the actual search @Tags cross-seed @Produce json @Param instanceID path int true "Instance ID" @Param hash path string true "Torrent hash" @Success 200 {object} crossseed.TorrentInfo @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/torrents/{instanceID}/{hash}/analyze [get]

func (*CrossSeedHandler) ApplyTorrentSearchResults added in v1.8.0

func (h *CrossSeedHandler) ApplyTorrentSearchResults(w http.ResponseWriter, r *http.Request)

ApplyTorrentSearchResults godoc @Summary Add torrents discovered via cross-seed search @Description Downloads the selected releases and reuses the cross-seed pipeline to add them to the specified instance. @Tags cross-seed @Accept json @Produce json @Param instanceID path int true "Instance ID" @Param hash path string true "Torrent hash" @Param request body crossseed.ApplyTorrentSearchRequest true "Selections to add" @Success 200 {object} crossseed.ApplyTorrentSearchResponse @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/torrents/{instanceID}/{hash}/apply [post]

func (*CrossSeedHandler) AutobrrApply added in v1.8.0

func (h *CrossSeedHandler) AutobrrApply(w http.ResponseWriter, r *http.Request)

AutobrrApply godoc @Summary Add a cross-seed torrent provided by autobrr @Description Accepts a torrent file from autobrr, matches it against the requested instances (or all instances when instanceIds is omitted), and adds it with alignment wherever a match is found. @Tags cross-seed @Accept json @Produce json @Param request body crossseed.AutobrrApplyRequest true "Autobrr apply request" @Success 200 {object} crossseed.CrossSeedResponse @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/apply [post]

func (*CrossSeedHandler) CancelAutomationRun added in v1.12.0

func (h *CrossSeedHandler) CancelAutomationRun(w http.ResponseWriter, r *http.Request)

CancelAutomationRun godoc @Summary Cancel RSS automation run @Description Stops the currently running RSS automation run, if any. @Tags cross-seed @Success 204 @Failure 409 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/run/cancel [post]

func (*CrossSeedHandler) CancelSearchRun added in v1.8.0

func (h *CrossSeedHandler) CancelSearchRun(w http.ResponseWriter, r *http.Request)

CancelSearchRun godoc @Summary Cancel cross-seed search run @Description Stops the currently running cross-seed library search, if any. @Tags cross-seed @Success 204 @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/search/run/cancel [post]

func (*CrossSeedHandler) DeleteBlocklistEntry added in v1.14.0

func (h *CrossSeedHandler) DeleteBlocklistEntry(w http.ResponseWriter, r *http.Request)

DeleteBlocklistEntry godoc @Summary Remove cross-seed blocklist entry @Description Removes a blocked infohash for a specific instance. @Tags cross-seed @Success 204 @Failure 400 {object} httphelpers.ErrorResponse @Failure 404 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/blocklist/{instanceID}/{infohash} [delete]

func (*CrossSeedHandler) GetAsyncFilteringStatus added in v1.8.0

func (h *CrossSeedHandler) GetAsyncFilteringStatus(w http.ResponseWriter, r *http.Request)

GetAsyncFilteringStatus godoc @Summary Get async filtering status for a torrent @Description Returns the current status of async indexer filtering for a torrent, including whether content filtering has completed @Tags cross-seed @Produce json @Param instanceID path int true "Instance ID" @Param hash path string true "Torrent hash" @Success 200 {object} crossseed.AsyncIndexerFilteringState @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/torrents/{instanceID}/{hash}/async-status [get]

func (*CrossSeedHandler) GetAutomationSettings added in v1.8.0

func (h *CrossSeedHandler) GetAutomationSettings(w http.ResponseWriter, r *http.Request)

GetAutomationSettings returns scheduler configuration. GetAutomationSettings godoc @Summary Get cross-seed automation settings @Description Returns current automation configuration for cross-seeding @Tags cross-seed @Produce json @Success 200 {object} models.CrossSeedAutomationSettings @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/settings [get]

func (*CrossSeedHandler) GetAutomationStatus added in v1.8.0

func (h *CrossSeedHandler) GetAutomationStatus(w http.ResponseWriter, r *http.Request)

GetAutomationStatus returns scheduler state and latest run metadata. GetAutomationStatus godoc @Summary Get cross-seed automation status @Description Returns current scheduler state and last automation run details @Tags cross-seed @Produce json @Success 200 {object} crossseed.AutomationStatus @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/status [get]

func (*CrossSeedHandler) GetCrossSeedStatus added in v1.8.0

func (h *CrossSeedHandler) GetCrossSeedStatus(w http.ResponseWriter, r *http.Request)

GetCrossSeedStatus godoc @Summary Get cross-seed status for an instance @Description Returns statistics about cross-seeded torrents on an instance @Tags cross-seed @Produce json @Param instanceID path int true "Instance ID" @Success 200 {object} map[string]interface{} @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Failure 501 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/instances/{instanceID}/cross-seed/status [get]

func (*CrossSeedHandler) GetInstanceCompletionSettings added in v1.10.0

func (h *CrossSeedHandler) GetInstanceCompletionSettings(w http.ResponseWriter, r *http.Request)

GetInstanceCompletionSettings returns the completion settings for a specific instance.

func (*CrossSeedHandler) GetLocalMatches added in v1.12.0

func (h *CrossSeedHandler) GetLocalMatches(w http.ResponseWriter, r *http.Request)

GetLocalMatches godoc @Summary Find existing torrents that match the source torrent across all instances @Description Returns torrents from all instances that match the source torrent using proper release metadata parsing (rls library), not fuzzy string matching. @Tags cross-seed @Produce json @Param instanceID path int true "Source instance ID" @Param hash path string true "Source torrent hash" @Param strict query bool false "When true, fail if file overlap checks cannot complete (use for delete dialogs)" @Success 200 {object} crossseed.LocalMatchesResponse @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/torrents/{instanceID}/{hash}/local-matches [get]

func (*CrossSeedHandler) GetSearchRunStatus added in v1.8.0

func (h *CrossSeedHandler) GetSearchRunStatus(w http.ResponseWriter, r *http.Request)

GetSearchRunStatus godoc @Summary Get cross-seed search run status @Description Returns the state of the active or most recent cross-seed library search run. @Tags cross-seed @Produce json @Success 200 {object} crossseed.SearchRunStatus @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/search/status [get]

func (*CrossSeedHandler) GetSearchSettings added in v1.8.0

func (h *CrossSeedHandler) GetSearchSettings(w http.ResponseWriter, r *http.Request)

GetSearchSettings godoc @Summary Get seeded torrent search settings @Description Returns the persisted defaults used by Seeded Torrent Search runs. @Tags cross-seed @Produce json @Success 200 {object} models.CrossSeedSearchSettings @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/search/settings [get]

func (*CrossSeedHandler) ListAutomationRuns added in v1.8.0

func (h *CrossSeedHandler) ListAutomationRuns(w http.ResponseWriter, r *http.Request)

ListAutomationRuns returns automation history. ListAutomationRuns godoc @Summary List cross-seed automation runs @Description Returns paginated automation run history @Tags cross-seed @Produce json @Param limit query int false "Limit" @Param offset query int false "Offset" @Success 200 {array} models.CrossSeedRun @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/runs [get]

func (*CrossSeedHandler) ListBlocklist added in v1.14.0

func (h *CrossSeedHandler) ListBlocklist(w http.ResponseWriter, r *http.Request)

ListBlocklist godoc @Summary List cross-seed blocklist entries @Description Returns the per-instance cross-seed blocklist entries. @Tags cross-seed @Produce json @Param instanceId query int false "Instance ID" @Success 200 {array} models.CrossSeedBlocklistEntry @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/blocklist [get]

func (*CrossSeedHandler) ListSearchRunHistory added in v1.8.0

func (h *CrossSeedHandler) ListSearchRunHistory(w http.ResponseWriter, r *http.Request)

ListSearchRunHistory godoc @Summary List cross-seed search run history @Description Lists historical cross-seed search runs for a specific instance. @Tags cross-seed @Produce json @Param instanceId query int true "Instance ID" @Param limit query int false "Page size (max 200)" @Param offset query int false "Result offset" @Success 200 {array} models.CrossSeedSearchRun @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/search/runs [get]

func (*CrossSeedHandler) ListSeasonPackRuns added in v1.19.0

func (h *CrossSeedHandler) ListSeasonPackRuns(w http.ResponseWriter, r *http.Request)

ListSeasonPackRuns returns recent season-pack processing activity.

func (*CrossSeedHandler) PatchAutomationSettings added in v1.8.0

func (h *CrossSeedHandler) PatchAutomationSettings(w http.ResponseWriter, r *http.Request)

PatchAutomationSettings merges updates into the existing cross-seed configuration. PatchAutomationSettings godoc @Summary Patch cross-seed automation settings @Description Partially update automation, completion, or global cross-seed settings without overwriting unspecified fields @Tags cross-seed @Accept json @Produce json @Param request body automationSettingsPatchRequest true "Automation settings fields to update" @Success 200 {object} models.CrossSeedAutomationSettings @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/settings [patch]

func (*CrossSeedHandler) PatchSearchSettings added in v1.8.0

func (h *CrossSeedHandler) PatchSearchSettings(w http.ResponseWriter, r *http.Request)

PatchSearchSettings godoc @Summary Update seeded torrent search settings @Description Persists default filters and timing for Seeded Torrent Search runs. @Tags cross-seed @Accept json @Produce json @Param request body searchSettingsPatchRequest true "Search settings patch" @Success 200 {object} models.CrossSeedSearchSettings @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/search/settings [patch]

func (*CrossSeedHandler) Routes added in v1.8.0

func (h *CrossSeedHandler) Routes(r chi.Router, authMiddleware func(http.Handler) http.Handler, apiKeyQueryMiddleware func(http.Handler) http.Handler)

Routes registers the cross-seed routes with explicit middleware ordering.

func (*CrossSeedHandler) SearchTorrentMatches added in v1.8.0

func (h *CrossSeedHandler) SearchTorrentMatches(w http.ResponseWriter, r *http.Request)

SearchTorrentMatches godoc @Summary Search Torznab indexers for cross-seed matches for a specific torrent @Description Uses the seeded torrent's metadata to find compatible releases on the configured Torznab indexers. @Tags cross-seed @Accept json @Produce json @Param instanceID path int true "Instance ID" @Param hash path string true "Torrent hash" @Param request body crossseed.TorrentSearchOptions false "Optional search configuration" @Success 200 {object} crossseed.TorrentSearchResponse @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/torrents/{instanceID}/{hash}/search [post]

func (*CrossSeedHandler) SeasonPackApply added in v1.19.0

func (h *CrossSeedHandler) SeasonPackApply(w http.ResponseWriter, r *http.Request)

SeasonPackApply attempts to add a season pack torrent using linked episode data.

func (*CrossSeedHandler) SeasonPackCheck added in v1.19.0

func (h *CrossSeedHandler) SeasonPackCheck(w http.ResponseWriter, r *http.Request)

SeasonPackCheck checks whether a season pack can be reconstructed from existing episodes.

func (*CrossSeedHandler) StartSearchRun added in v1.8.0

func (h *CrossSeedHandler) StartSearchRun(w http.ResponseWriter, r *http.Request)

StartSearchRun godoc @Summary Start cross-seed search run @Description Launches an on-demand cross-seed library search for a specific instance with optional category, tag, and indexer filters. @Tags cross-seed @Accept json @Produce json @Param request body searchRunRequest true "Search run options" @Success 202 {object} models.CrossSeedSearchRun @Failure 400 {object} httphelpers.ErrorResponse @Failure 409 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/search/run [post]

func (*CrossSeedHandler) TriggerAutomationRun added in v1.8.0

func (h *CrossSeedHandler) TriggerAutomationRun(w http.ResponseWriter, r *http.Request)

TriggerAutomationRun queues a manual automation pass. TriggerAutomationRun godoc @Summary Trigger cross-seed automation run @Description Starts an on-demand automation pass @Tags cross-seed @Accept json @Produce json @Param request body automationRunRequest false "Automation run options" @Success 202 {object} models.CrossSeedRun @Failure 400 {object} httphelpers.ErrorResponse @Failure 409 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/run [post]

func (*CrossSeedHandler) UpdateAutomationSettings added in v1.8.0

func (h *CrossSeedHandler) UpdateAutomationSettings(w http.ResponseWriter, r *http.Request)

UpdateAutomationSettings updates scheduler configuration. UpdateAutomationSettings godoc @Summary Update cross-seed automation settings @Description Updates the automation scheduler configuration for cross-seeding @Tags cross-seed @Accept json @Produce json @Param request body automationSettingsRequest true "Automation settings" @Success 200 {object} models.CrossSeedAutomationSettings @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/settings [put]

func (*CrossSeedHandler) UpdateInstanceCompletionSettings added in v1.10.0

func (h *CrossSeedHandler) UpdateInstanceCompletionSettings(w http.ResponseWriter, r *http.Request)

UpdateInstanceCompletionSettings updates the completion settings for a specific instance.

func (*CrossSeedHandler) WebhookCheck added in v1.8.0

func (h *CrossSeedHandler) WebhookCheck(w http.ResponseWriter, r *http.Request)

WebhookCheck godoc @Summary Check if a release can be cross-seeded (autobrr webhook) @Description Accepts release metadata from autobrr and checks if matching torrents exist across instances @Tags cross-seed @Accept json @Produce json @Param request body crossseed.WebhookCheckRequest true "Release metadata from autobrr" @Success 200 {object} crossseed.WebhookCheckResponse "Matches found (torrents complete, recommendation=download)" @Success 202 {object} crossseed.WebhookCheckResponse "Matches found but torrents still downloading (recommendation=download, retry until 200)" @Failure 404 {object} crossseed.WebhookCheckResponse "No matches found (recommendation=skip)" @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/cross-seed/webhook/check [post]

type CustomTheme added in v1.23.0

type CustomTheme struct {
	ID       string `json:"id"`
	Filename string `json:"filename"`
	CSS      string `json:"css"`
}

CustomTheme is a single sideloaded theme file and its raw CSS contents.

type CustomThemesResponse added in v1.23.0

type CustomThemesResponse struct {
	Directory string        `json:"directory"`
	Themes    []CustomTheme `json:"themes"`
}

CustomThemesResponse lists the custom themes directory and the themes found in it.

type DashboardSettingsHandler added in v1.9.0

type DashboardSettingsHandler struct {
	// contains filtered or unexported fields
}

func NewDashboardSettingsHandler added in v1.9.0

func NewDashboardSettingsHandler(store *models.DashboardSettingsStore) *DashboardSettingsHandler

func (*DashboardSettingsHandler) Get added in v1.9.0

func (*DashboardSettingsHandler) Update added in v1.9.0

type DeleteInstanceResponse

type DeleteInstanceResponse struct {
	Message string `json:"message"`
}

DeleteInstanceResponse represents delete operation result

type DirScanDirectoryPayload added in v1.13.0

type DirScanDirectoryPayload struct {
	Path                   *string   `json:"path"`
	QbitPathPrefix         *string   `json:"qbitPathPrefix"`
	Category               *string   `json:"category"`
	Tags                   *[]string `json:"tags"`
	AllowedDownloadClients *[]string `json:"allowedDownloadClients"`
	Enabled                *bool     `json:"enabled"`
	ArrInstanceID          *int      `json:"arrInstanceId"`
	TargetInstanceID       *int      `json:"targetInstanceId"`
	ScanIntervalMinutes    *int      `json:"scanIntervalMinutes"`
}

DirScanDirectoryPayload is the request body for creating/updating directories.

type DirScanHandler added in v1.13.0

type DirScanHandler struct {
	// contains filtered or unexported fields
}

DirScanHandler handles HTTP requests for directory scanning.

func NewDirScanHandler added in v1.13.0

func NewDirScanHandler(service *dirscan.Service, instanceStore *models.InstanceStore) *DirScanHandler

NewDirScanHandler creates a new DirScanHandler.

func (*DirScanHandler) CancelScan added in v1.13.0

func (h *DirScanHandler) CancelScan(w http.ResponseWriter, r *http.Request)

CancelScan cancels a running scan for a directory.

func (*DirScanHandler) CreateDirectory added in v1.13.0

func (h *DirScanHandler) CreateDirectory(w http.ResponseWriter, r *http.Request)

CreateDirectory creates a new scan directory.

func (*DirScanHandler) DeleteDirectory added in v1.13.0

func (h *DirScanHandler) DeleteDirectory(w http.ResponseWriter, r *http.Request)

DeleteDirectory deletes a scan directory.

func (*DirScanHandler) GetDirectory added in v1.13.0

func (h *DirScanHandler) GetDirectory(w http.ResponseWriter, r *http.Request)

GetDirectory returns a specific scan directory.

func (*DirScanHandler) GetSettings added in v1.13.0

func (h *DirScanHandler) GetSettings(w http.ResponseWriter, r *http.Request)

GetSettings returns the global directory scanner settings.

func (*DirScanHandler) GetStatus added in v1.13.0

func (h *DirScanHandler) GetStatus(w http.ResponseWriter, r *http.Request)

GetStatus returns the status of the current or most recent scan.

func (*DirScanHandler) ListDirectories added in v1.13.0

func (h *DirScanHandler) ListDirectories(w http.ResponseWriter, r *http.Request)

ListDirectories returns all configured scan directories.

func (*DirScanHandler) ListFiles added in v1.13.0

func (h *DirScanHandler) ListFiles(w http.ResponseWriter, r *http.Request)

ListFiles returns scanned files for a directory.

func (*DirScanHandler) ListRunInjections added in v1.13.0

func (h *DirScanHandler) ListRunInjections(w http.ResponseWriter, r *http.Request)

ListRunInjections returns injection attempts (added/failed) for a run.

func (*DirScanHandler) ListRuns added in v1.13.0

func (h *DirScanHandler) ListRuns(w http.ResponseWriter, r *http.Request)

ListRuns returns recent scan runs for a directory.

func (*DirScanHandler) ResetFiles added in v1.13.0

func (h *DirScanHandler) ResetFiles(w http.ResponseWriter, r *http.Request)

ResetFiles deletes tracked scan progress for a directory.

func (*DirScanHandler) TriggerScan added in v1.13.0

func (h *DirScanHandler) TriggerScan(w http.ResponseWriter, r *http.Request)

TriggerScan starts a manual scan for a directory.

func (*DirScanHandler) UpdateDirectory added in v1.13.0

func (h *DirScanHandler) UpdateDirectory(w http.ResponseWriter, r *http.Request)

UpdateDirectory updates a scan directory.

func (*DirScanHandler) UpdateSettings added in v1.13.0

func (h *DirScanHandler) UpdateSettings(w http.ResponseWriter, r *http.Request)

UpdateSettings updates the global directory scanner settings.

func (*DirScanHandler) WebhookTriggerScan added in v1.15.0

func (h *DirScanHandler) WebhookTriggerScan(w http.ResponseWriter, r *http.Request)

WebhookTriggerScan triggers a directory scan by matching the provided path against configured scan directories. Accepts native Sonarr/Radarr/Lidarr/Readarr webhook payloads or a simple {"path": "..."} body.

type DirScanSettingsPayload added in v1.13.0

type DirScanSettingsPayload struct {
	Enabled                      *bool    `json:"enabled"`
	MatchMode                    *string  `json:"matchMode"`
	SizeTolerancePercent         *float64 `json:"sizeTolerancePercent"`
	MinPieceRatio                *float64 `json:"minPieceRatio"`
	MaxSearcheesPerRun           *int     `json:"maxSearcheesPerRun"`
	MaxSearcheeAgeDays           *int     `json:"maxSearcheeAgeDays"`
	AllowPartial                 *bool    `json:"allowPartial"`
	SkipPieceBoundarySafetyCheck *bool    `json:"skipPieceBoundarySafetyCheck"`
	StartPaused                  *bool    `json:"startPaused"`
	DownloadMissingFiles         *bool    `json:"downloadMissingFiles"`
	Category                     *string  `json:"category"`
	Tags                         []string `json:"tags"`
}

DirScanSettingsPayload is the request body for updating settings.

type EditTrackerRequest added in v1.0.0

type EditTrackerRequest struct {
	OldURL string `json:"oldURL"`
	NewURL string `json:"newURL"`
}

EditTrackerRequest represents a tracker edit request

type ErrorResponse

type ErrorResponse struct {
	Error string `json:"error"`
}

ErrorResponse represents an API error response

type ExternalProgramsHandler added in v1.7.0

type ExternalProgramsHandler struct {
	// contains filtered or unexported fields
}

func NewExternalProgramsHandler added in v1.7.0

func NewExternalProgramsHandler(
	store *models.ExternalProgramStore,
	service *externalprograms.Service,
	pool *qbittorrent.ClientPool,
	automationStore *models.AutomationStore,
) *ExternalProgramsHandler

func (*ExternalProgramsHandler) CreateExternalProgram added in v1.7.0

func (h *ExternalProgramsHandler) CreateExternalProgram(w http.ResponseWriter, r *http.Request)

CreateExternalProgram handles POST /api/external-programs

func (*ExternalProgramsHandler) DeleteExternalProgram added in v1.7.0

func (h *ExternalProgramsHandler) DeleteExternalProgram(w http.ResponseWriter, r *http.Request)

DeleteExternalProgram handles DELETE /api/external-programs/{id} Query params:

  • force=true: Proceed with deletion even if automations reference this program. The external program action will be removed from all referencing automations.

If automations reference this program and force is not set, returns 409 Conflict with a list of affected automations.

func (*ExternalProgramsHandler) ExecuteExternalProgram added in v1.7.0

func (h *ExternalProgramsHandler) ExecuteExternalProgram(w http.ResponseWriter, r *http.Request)

ExecuteExternalProgram handles POST /api/external-programs/execute

func (*ExternalProgramsHandler) ListExternalPrograms added in v1.7.0

func (h *ExternalProgramsHandler) ListExternalPrograms(w http.ResponseWriter, r *http.Request)

ListExternalPrograms handles GET /api/external-programs

func (*ExternalProgramsHandler) UpdateExternalProgram added in v1.7.0

func (h *ExternalProgramsHandler) UpdateExternalProgram(w http.ResponseWriter, r *http.Request)

UpdateExternalProgram handles PUT /api/external-programs/{id}

type ExtractedArchive added in v1.8.0

type ExtractedArchive struct {
	TempDir      string            // Root temp directory (caller must clean up)
	ManifestPath string            // Path to extracted manifest.json
	TorrentPaths map[string]string // archivePath -> absolute file path on disk
}

ExtractedArchive represents the result of streaming extraction to disk. Caller must call Close() to clean up the temporary directory.

func (*ExtractedArchive) Close added in v1.8.0

func (e *ExtractedArchive) Close() error

Close removes the temporary directory and all extracted files.

type FeedsUpdatePayload added in v1.13.0

type FeedsUpdatePayload struct {
	InstanceID int             `json:"instanceId"`
	Items      json.RawMessage `json:"items"`
	Timestamp  int64           `json:"timestamp"`
}

FeedsUpdatePayload contains the full RSS items tree

type HealthHandler added in v1.0.0

type HealthHandler struct {
}

func NewHealthHandler added in v1.0.0

func NewHealthHandler() *HealthHandler

func (*HealthHandler) HandleHealth added in v1.0.0

func (h *HealthHandler) HandleHealth(w http.ResponseWriter, r *http.Request)

func (*HealthHandler) HandleLiveness added in v1.0.0

func (h *HealthHandler) HandleLiveness(w http.ResponseWriter, r *http.Request)

func (*HealthHandler) HandleReady added in v1.0.0

func (h *HealthHandler) HandleReady(w http.ResponseWriter, r *http.Request)

type HealthResponse added in v1.0.0

type HealthResponse struct {
	Status    string                 `json:"status"`
	Checks    map[string]CheckResult `json:"checks,omitempty"`
	Timestamp time.Time              `json:"timestamp"`
}

type IndexerResponse added in v1.9.0

type IndexerResponse struct {
	*models.TorznabIndexer
	Warnings []string `json:"warnings,omitempty"`
}

IndexerResponse wraps an indexer with optional warnings for partial failures

type InstanceCapabilitiesResponse added in v1.3.0

type InstanceCapabilitiesResponse struct {
	SupportsTorrentCreation     bool   `json:"supportsTorrentCreation"`
	SupportsTorrentExport       bool   `json:"supportsTorrentExport"`
	SupportsSetTags             bool   `json:"supportsSetTags"`
	SupportsSetComment          bool   `json:"supportsSetComment"`
	SupportsTrackerHealth       bool   `json:"supportsTrackerHealth"`
	SupportsTrackerEditing      bool   `json:"supportsTrackerEditing"`
	SupportsRenameTorrent       bool   `json:"supportsRenameTorrent"`
	SupportsRenameFile          bool   `json:"supportsRenameFile"`
	SupportsRenameFolder        bool   `json:"supportsRenameFolder"`
	SupportsFilePriority        bool   `json:"supportsFilePriority"`
	SupportsSubcategories       bool   `json:"supportsSubcategories"`
	SubcategoriesAlwaysEnabled  bool   `json:"subcategoriesAlwaysEnabled"`
	SupportsTorrentTmpPath      bool   `json:"supportsTorrentTmpPath"`
	SupportsPathAutocomplete    bool   `json:"supportsPathAutocomplete"`
	SupportsFreeSpacePathSource bool   `json:"supportsFreeSpacePathSource"`
	SupportsSetRSSFeedURL       bool   `json:"supportsSetRSSFeedURL"`
	SupportsShareLimitsAction   bool   `json:"supportsShareLimitsAction"`
	SupportsShareLimitsMode     bool   `json:"supportsShareLimitsMode"`
	WebAPIVersion               string `json:"webAPIVersion,omitempty"`
}

InstanceCapabilitiesResponse describes supported features for an instance.

func NewInstanceCapabilitiesResponse added in v1.3.0

func NewInstanceCapabilitiesResponse(client *internalqbittorrent.Client) InstanceCapabilitiesResponse

NewInstanceCapabilitiesResponse creates a response payload from a qBittorrent client.

type InstanceReannounceSettingsPayload added in v1.8.0

type InstanceReannounceSettingsPayload struct {
	Enabled                   bool     `json:"enabled"`
	InitialWaitSeconds        int      `json:"initialWaitSeconds"`
	ReannounceIntervalSeconds int      `json:"reannounceIntervalSeconds"`
	MaxAgeSeconds             int      `json:"maxAgeSeconds"`
	MaxRetries                int      `json:"maxRetries"`
	Aggressive                bool     `json:"aggressive"`
	MonitorAll                bool     `json:"monitorAll"`
	ExcludeCategories         bool     `json:"excludeCategories"`
	Categories                []string `json:"categories"`
	ExcludeTags               bool     `json:"excludeTags"`
	Tags                      []string `json:"tags"`
	ExcludeTrackers           bool     `json:"excludeTrackers"`
	Trackers                  []string `json:"trackers"`
}

InstanceReannounceSettingsPayload carries tracker monitoring config.

type InstanceResponse

type InstanceResponse struct {
	ID                       int                               `json:"id"`
	Name                     string                            `json:"name"`
	Host                     string                            `json:"host"`
	Username                 string                            `json:"username"`
	HasAPIKey                bool                              `json:"hasApiKey"`
	BasicUsername            *string                           `json:"basicUsername,omitempty"`
	TLSSkipVerify            bool                              `json:"tlsSkipVerify"`
	HasLocalFilesystemAccess bool                              `json:"hasLocalFilesystemAccess"`
	UseHardlinks             bool                              `json:"useHardlinks"`
	HardlinkBaseDir          string                            `json:"hardlinkBaseDir"`
	HardlinkDirPreset        string                            `json:"hardlinkDirPreset"`
	UseReflinks              bool                              `json:"useReflinks"`
	FallbackToRegularMode    bool                              `json:"fallbackToRegularMode"`
	Connected                bool                              `json:"connected"`
	HasDecryptionError       bool                              `json:"hasDecryptionError"`
	RecentErrors             []models.InstanceError            `json:"recentErrors,omitempty"`
	ConnectionStatus         string                            `json:"connectionStatus,omitempty"`
	SortOrder                int                               `json:"sortOrder"`
	IsActive                 bool                              `json:"isActive"`
	ReannounceSettings       InstanceReannounceSettingsPayload `json:"reannounceSettings"`
}

InstanceResponse represents an instance in API responses

type InstancesHandler

type InstancesHandler struct {
	// contains filtered or unexported fields
}

func NewInstancesHandler

func NewInstancesHandler(instanceStore *models.InstanceStore, reannounceStore *models.InstanceReannounceStore, reannounceCache *reannounce.SettingsCache, clientPool *internalqbittorrent.ClientPool, syncManager *internalqbittorrent.SyncManager, svc *reannounce.Service) *InstancesHandler

func (*InstancesHandler) CreateInstance

func (h *InstancesHandler) CreateInstance(w http.ResponseWriter, r *http.Request)

CreateInstance creates a new instance

func (*InstancesHandler) DeleteInstance

func (h *InstancesHandler) DeleteInstance(w http.ResponseWriter, r *http.Request)

DeleteInstance deletes an instance

func (*InstancesHandler) GetInstanceCapabilities added in v1.3.0

func (h *InstancesHandler) GetInstanceCapabilities(w http.ResponseWriter, r *http.Request)

GetInstanceCapabilities returns lightweight capability metadata for an instance.

func (*InstancesHandler) GetReannounceActivity added in v1.8.0

func (h *InstancesHandler) GetReannounceActivity(w http.ResponseWriter, r *http.Request)

GetReannounceActivity returns recent reannounce events for an instance.

func (*InstancesHandler) GetReannounceCandidates added in v1.8.0

func (h *InstancesHandler) GetReannounceCandidates(w http.ResponseWriter, r *http.Request)

GetReannounceCandidates returns torrents that currently fall within the reannounce monitoring scope and either have tracker problems or are still waiting for their initial tracker contact.

func (*InstancesHandler) GetTransferInfo added in v1.14.0

func (h *InstancesHandler) GetTransferInfo(w http.ResponseWriter, r *http.Request)

GetTransferInfo returns lightweight transfer stats for an instance.

func (*InstancesHandler) ListInstances

func (h *InstancesHandler) ListInstances(w http.ResponseWriter, r *http.Request)

ListInstances returns all instances

func (*InstancesHandler) TestConnection

func (h *InstancesHandler) TestConnection(w http.ResponseWriter, r *http.Request)

TestConnection tests the connection to an instance

func (*InstancesHandler) UpdateInstance

func (h *InstancesHandler) UpdateInstance(w http.ResponseWriter, r *http.Request)

UpdateInstance updates an existing instance

func (*InstancesHandler) UpdateInstanceOrder added in v1.7.0

func (h *InstancesHandler) UpdateInstanceOrder(w http.ResponseWriter, r *http.Request)

UpdateInstanceOrder updates the display order for all instances

func (*InstancesHandler) UpdateInstanceStatus added in v1.8.0

func (h *InstancesHandler) UpdateInstanceStatus(w http.ResponseWriter, r *http.Request)

UpdateInstanceStatus toggles whether an instance should be actively polled

type JackettHandler added in v1.8.0

type JackettHandler struct {
	// contains filtered or unexported fields
}

JackettHandler handles Jackett/Torznab API endpoints

func NewJackettHandler added in v1.8.0

func NewJackettHandler(service *jackett.Service, indexerStore *models.TorznabIndexerStore) *JackettHandler

NewJackettHandler creates a new Jackett handler

func (*JackettHandler) CreateIndexer added in v1.8.0

func (h *JackettHandler) CreateIndexer(w http.ResponseWriter, r *http.Request)

CreateIndexer godoc @Summary Create a new Torznab indexer @Description Creates a new Torznab indexer configuration @Tags torznab @Accept json @Produce json @Success 201 {object} models.TorznabIndexer @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers [post]

func (*JackettHandler) CrossSeedSearch added in v1.8.0

func (h *JackettHandler) CrossSeedSearch(w http.ResponseWriter, r *http.Request)

CrossSeedSearch godoc @Summary Search Jackett for cross-seeds with intelligent category detection @Description Searches Jackett indexers for potential cross-seeds. Automatically detects content type (TV shows, movies, daily shows, XXX, etc.) and applies appropriate Torznab categories based on the search parameters. @Tags torznab @Accept json @Produce json @Param request body jackett.TorznabSearchRequest true "Cross-seed search request" @Success 200 {object} jackett.SearchResponse @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/cross-seed/search [post]

func (*JackettHandler) DeleteIndexer added in v1.8.0

func (h *JackettHandler) DeleteIndexer(w http.ResponseWriter, r *http.Request)

DeleteIndexer godoc @Summary Delete a Torznab indexer @Description Deletes a Torznab indexer @Tags torznab @Param indexerID path int true "Indexer ID" @Success 204 @Failure 404 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID} [delete]

func (*JackettHandler) DiscoverIndexers added in v1.8.0

func (h *JackettHandler) DiscoverIndexers(w http.ResponseWriter, r *http.Request)

DiscoverIndexers godoc @Summary Discover indexers from a Jackett/Prowlarr instance @Description Discovers all configured indexers from a Jackett or Prowlarr instance using its API @Tags torznab @Accept json @Produce json @Success 200 {object} jackett.DiscoveryResult @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/discover [post]

func (*JackettHandler) GetActivityStatus added in v1.8.0

func (h *JackettHandler) GetActivityStatus(w http.ResponseWriter, r *http.Request)

GetActivityStatus godoc @Summary Get scheduler and indexer activity status @Description Returns current scheduler state including queued tasks, in-flight jobs, and rate-limited indexers @Tags torznab @Produce json @Success 200 {object} jackett.ActivityStatus @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/activity [get]

func (*JackettHandler) GetAllHealth added in v1.8.0

func (h *JackettHandler) GetAllHealth(w http.ResponseWriter, r *http.Request)

GetAllHealth godoc @Summary Get health status for all indexers @Description Retrieves health statistics for all Torznab indexers @Tags torznab @Produce json @Success 200 {array} models.TorznabIndexerHealth @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/health [get]

func (*JackettHandler) GetIndexer added in v1.8.0

func (h *JackettHandler) GetIndexer(w http.ResponseWriter, r *http.Request)

GetIndexer godoc @Summary Get a Torznab indexer @Description Retrieves a specific Torznab indexer by ID @Tags torznab @Produce json @Param indexerID path int true "Indexer ID" @Success 200 {object} models.TorznabIndexer @Failure 404 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID} [get]

func (*JackettHandler) GetIndexerErrors added in v1.8.0

func (h *JackettHandler) GetIndexerErrors(w http.ResponseWriter, r *http.Request)

GetIndexerErrors godoc @Summary Get recent errors for an indexer @Description Retrieves recent error history for a specific Torznab indexer @Tags torznab @Produce json @Param indexerID path int true "Indexer ID" @Param limit query int false "Maximum number of errors to return" default(50) @Success 200 {array} models.TorznabIndexerError @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID}/errors [get]

func (*JackettHandler) GetIndexerHealth added in v1.8.0

func (h *JackettHandler) GetIndexerHealth(w http.ResponseWriter, r *http.Request)

GetIndexerHealth godoc @Summary Get health status for an indexer @Description Retrieves health statistics for a specific Torznab indexer @Tags torznab @Produce json @Param indexerID path int true "Indexer ID" @Success 200 {object} models.TorznabIndexerHealth @Failure 404 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID}/health [get]

func (*JackettHandler) GetIndexerStats added in v1.8.0

func (h *JackettHandler) GetIndexerStats(w http.ResponseWriter, r *http.Request)

GetIndexerStats godoc @Summary Get latency statistics for an indexer @Description Retrieves aggregated latency statistics for a specific Torznab indexer @Tags torznab @Produce json @Param indexerID path int true "Indexer ID" @Success 200 {array} models.TorznabIndexerLatencyStats @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID}/stats [get]

func (*JackettHandler) GetIndexerTrackerDomains added in v1.21.0

func (h *JackettHandler) GetIndexerTrackerDomains(w http.ResponseWriter, r *http.Request)

GetIndexerTrackerDomains godoc @Summary List tracker domains for enabled indexers @Description Returns tracker domains derived from enabled indexers whose domain can be resolved reliably (native and Prowlarr backends). Jackett indexers are omitted because their base URL is the Jackett server, not the tracker. Used to populate tracker selectors with trackers that have no active torrents. @Tags torznab @Produce json @Success 200 {array} string @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/tracker-domains [get]

func (*JackettHandler) GetSearchCacheStats added in v1.8.0

func (h *JackettHandler) GetSearchCacheStats(w http.ResponseWriter, r *http.Request)

GetSearchCacheStats returns summary metrics for the search cache.

func (*JackettHandler) GetSearchHistory added in v1.8.0

func (h *JackettHandler) GetSearchHistory(w http.ResponseWriter, r *http.Request)

GetSearchHistory godoc @Summary Get search history @Description Returns recent completed searches from the in-memory history buffer @Tags torznab @Produce json @Param limit query int false "Maximum number of entries to return (default: 50, max: 500)" @Success 200 {object} jackett.SearchHistoryResponseWithOutcome @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/search/history [get]

func (*JackettHandler) ListIndexers added in v1.8.0

func (h *JackettHandler) ListIndexers(w http.ResponseWriter, r *http.Request)

ListIndexers godoc @Summary List all Torznab indexers @Description Retrieves all configured Torznab indexers @Tags torznab @Produce json @Success 200 {array} models.TorznabIndexer @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers [get]

func (*JackettHandler) ListRecentSearches added in v1.8.0

func (h *JackettHandler) ListRecentSearches(w http.ResponseWriter, r *http.Request)

ListRecentSearches returns the latest cached search queries for autocomplete support.

func (*JackettHandler) Routes added in v1.8.0

func (h *JackettHandler) Routes(r chi.Router)

Routes registers the Jackett routes

func (*JackettHandler) Search added in v1.8.0

func (h *JackettHandler) Search(w http.ResponseWriter, r *http.Request)

Search godoc @Summary General Torznab search @Description Performs a general Torznab search across Jackett indexers. Allows specifying categories, IMDb/TVDb IDs, and other search parameters. @Tags torznab @Accept json @Produce json @Param request body jackett.TorznabSearchRequest true "Torznab search request" @Success 200 {object} jackett.SearchResponse @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/search [post]

func (*JackettHandler) SyncIndexerCaps added in v1.8.0

func (h *JackettHandler) SyncIndexerCaps(w http.ResponseWriter, r *http.Request)

SyncIndexerCaps godoc @Summary Refresh Torznab caps from the backend @Description Fetches the latest capabilities and categories from Jackett, Prowlarr, or a native Torznab endpoint and persists them. @Tags torznab @Param indexerID path int true "Indexer ID" @Success 200 {object} models.TorznabIndexer @Failure 400 {object} httphelpers.ErrorResponse @Failure 404 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID}/caps/sync [post]

func (*JackettHandler) TestIndexer added in v1.8.0

func (h *JackettHandler) TestIndexer(w http.ResponseWriter, r *http.Request)

TestIndexer godoc @Summary Test a Torznab indexer connection @Description Tests the connection to a Torznab indexer @Tags torznab @Param indexerID path int true "Indexer ID" @Success 200 @Failure 400 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID}/test [post]

func (*JackettHandler) UpdateIndexer added in v1.8.0

func (h *JackettHandler) UpdateIndexer(w http.ResponseWriter, r *http.Request)

UpdateIndexer godoc @Summary Update a Torznab indexer @Description Updates an existing Torznab indexer @Tags torznab @Accept json @Produce json @Param indexerID path int true "Indexer ID" @Success 200 {object} models.TorznabIndexer @Failure 400 {object} httphelpers.ErrorResponse @Failure 404 {object} httphelpers.ErrorResponse @Failure 500 {object} httphelpers.ErrorResponse @Security ApiKeyAuth @Router /api/torznab/indexers/{indexerID} [put]

func (*JackettHandler) UpdateSearchCacheSettings added in v1.8.0

func (h *JackettHandler) UpdateSearchCacheSettings(w http.ResponseWriter, r *http.Request)

UpdateSearchCacheSettings updates TTL configuration via the API.

type LatestVersionResponse added in v1.1.0

type LatestVersionResponse struct {
	TagName     string `json:"tag_name"`
	Name        string `json:"name,omitempty"`
	HTMLURL     string `json:"html_url"`
	PublishedAt string `json:"published_at"`
}

type LicenseHandler added in v1.0.0

type LicenseHandler struct {
	// contains filtered or unexported fields
}

LicenseHandler handles license related HTTP requests

func NewLicenseHandler added in v1.0.0

func NewLicenseHandler(licenseService *license.Service) *LicenseHandler

NewLicenseHandler creates a new license handler

func (*LicenseHandler) ActivateLicense added in v1.0.0

func (h *LicenseHandler) ActivateLicense(w http.ResponseWriter, r *http.Request)

ActivateLicense activates a license

func (*LicenseHandler) DeleteLicense added in v1.0.0

func (h *LicenseHandler) DeleteLicense(w http.ResponseWriter, r *http.Request)

DeleteLicense removes a license from the system

func (*LicenseHandler) GetAllLicenses added in v1.0.0

func (h *LicenseHandler) GetAllLicenses(w http.ResponseWriter, r *http.Request)

GetAllLicenses returns all licenses for the current user

func (*LicenseHandler) GetLicensedThemes added in v1.0.0

func (h *LicenseHandler) GetLicensedThemes(w http.ResponseWriter, r *http.Request)

GetLicensedThemes returns premium access status

func (*LicenseHandler) RefreshLicenses added in v1.0.0

func (h *LicenseHandler) RefreshLicenses(w http.ResponseWriter, r *http.Request)

RefreshLicenses manually triggers a refresh of all licenses

func (*LicenseHandler) Routes added in v1.0.0

func (h *LicenseHandler) Routes(r chi.Router)

func (*LicenseHandler) ValidateLicense added in v1.0.0

func (h *LicenseHandler) ValidateLicense(w http.ResponseWriter, r *http.Request)

ValidateLicense validates a license

type LicenseInfo

type LicenseInfo struct {
	LicenseKey  string    `json:"licenseKey"`
	ProductName string    `json:"productName"`
	Status      string    `json:"status"`
	Provider    string    `json:"provider,omitempty"`
	CreatedAt   time.Time `json:"createdAt"`
}

LicenseInfo represents basic license information for UI display

type LogExclusionsHandler added in v1.12.0

type LogExclusionsHandler struct {
	// contains filtered or unexported fields
}

func NewLogExclusionsHandler added in v1.12.0

func NewLogExclusionsHandler(store *models.LogExclusionsStore) *LogExclusionsHandler

func (*LogExclusionsHandler) Get added in v1.12.0

func (*LogExclusionsHandler) Update added in v1.12.0

type LogFileEntry added in v1.23.0

type LogFileEntry struct {
	Name      string    `json:"name"`
	SizeBytes int64     `json:"sizeBytes"`
	ModTime   time.Time `json:"modTime"`
}

LogFileEntry describes a log file available for download.

type LoginRequest

type LoginRequest struct {
	Username   string `json:"username"`
	Password   string `json:"password"`
	RememberMe bool   `json:"remember_me"`
}

LoginRequest represents a login request

type LogsHandler added in v1.12.0

type LogsHandler struct {
	// contains filtered or unexported fields
}

LogsHandler handles log settings and streaming endpoints.

func NewLogsHandler added in v1.12.0

func NewLogsHandler(appConfig *config.AppConfig) *LogsHandler

NewLogsHandler creates a new LogsHandler.

func (*LogsHandler) DownloadLogFile added in v1.23.0

func (h *LogsHandler) DownloadLogFile(w http.ResponseWriter, r *http.Request)

DownloadLogFile serves a single log file from the configured log directory.

func (*LogsHandler) GetHub added in v1.12.0

func (h *LogsHandler) GetHub() *logstream.Hub

GetHub returns the log hub from the handler's config. This is useful for testing.

func (*LogsHandler) GetLogSettings added in v1.12.0

func (h *LogsHandler) GetLogSettings(w http.ResponseWriter, r *http.Request)

GetLogSettings returns the current log settings.

func (*LogsHandler) ListLogFiles added in v1.23.0

func (h *LogsHandler) ListLogFiles(w http.ResponseWriter, _ *http.Request)

ListLogFiles returns the log files available for download.

func (*LogsHandler) Routes added in v1.12.0

func (h *LogsHandler) Routes(r chi.Router)

Routes registers the log routes on the provided router.

func (*LogsHandler) StreamLogs added in v1.12.0

func (h *LogsHandler) StreamLogs(w http.ResponseWriter, r *http.Request)

StreamLogs streams log lines via SSE.

func (*LogsHandler) UpdateLogSettings added in v1.12.0

func (h *LogsHandler) UpdateLogSettings(w http.ResponseWriter, r *http.Request)

UpdateLogSettings updates the log settings.

type MarkAsReadRequest added in v1.13.0

type MarkAsReadRequest struct {
	ItemPath  string `json:"itemPath"`
	ArticleID string `json:"articleId,omitempty"`
}

type MoveItemRequest added in v1.13.0

type MoveItemRequest struct {
	ItemPath string `json:"itemPath"`
	DestPath string `json:"destPath"`
}

type NotificationsHandler added in v1.14.0

type NotificationsHandler struct {
	// contains filtered or unexported fields
}

func NewNotificationsHandler added in v1.14.0

func NewNotificationsHandler(store *models.NotificationTargetStore, service *notifications.Service) *NotificationsHandler

func (*NotificationsHandler) CreateTarget added in v1.14.0

func (h *NotificationsHandler) CreateTarget(w http.ResponseWriter, r *http.Request)

CreateTarget handles POST /api/notifications/targets

func (*NotificationsHandler) DeleteTarget added in v1.14.0

func (h *NotificationsHandler) DeleteTarget(w http.ResponseWriter, r *http.Request)

DeleteTarget handles DELETE /api/notifications/targets/{id}

func (*NotificationsHandler) ListEvents added in v1.14.0

func (h *NotificationsHandler) ListEvents(w http.ResponseWriter, _ *http.Request)

ListEvents handles GET /api/notifications/events

func (*NotificationsHandler) ListTargets added in v1.14.0

func (h *NotificationsHandler) ListTargets(w http.ResponseWriter, r *http.Request)

ListTargets handles GET /api/notifications/targets

func (*NotificationsHandler) TestTarget added in v1.14.0

func (h *NotificationsHandler) TestTarget(w http.ResponseWriter, r *http.Request)

TestTarget handles POST /api/notifications/targets/{id}/test

func (*NotificationsHandler) UpdateTarget added in v1.14.0

func (h *NotificationsHandler) UpdateTarget(w http.ResponseWriter, r *http.Request)

UpdateTarget handles PUT /api/notifications/targets/{id}

type OIDCClaims added in v1.3.0

type OIDCClaims struct {
	Email             string `json:"email"`
	PreferredUsername string `json:"preferred_username"`
	Name              string `json:"name"`
	GivenName         string `json:"given_name"`
	Nickname          string `json:"nickname"`
	Sub               string `json:"sub"`
	Picture           string `json:"picture"`
}

OIDCClaims represents the claims returned from the OIDC provider

type OIDCConfigResponse added in v1.3.0

type OIDCConfigResponse struct {
	Enabled             bool   `json:"enabled"`
	AuthorizationURL    string `json:"authorizationUrl"`
	DisableBuiltInLogin bool   `json:"disableBuiltInLogin"`
	IssuerURL           string `json:"issuerUrl"`
}

OIDCConfigResponse represents the OIDC configuration response

type OIDCHandler added in v1.3.0

type OIDCHandler struct {
	// contains filtered or unexported fields
}

func NewOIDCHandler added in v1.3.0

func NewOIDCHandler(cfg *domain.Config, sessionManager *scs.SessionManager) (*OIDCHandler, error)

func (*OIDCHandler) GetConfigResponse added in v1.3.0

func (h *OIDCHandler) GetConfigResponse() (OIDCConfigResponse, string, string, error)

func (*OIDCHandler) Routes added in v1.3.0

func (h *OIDCHandler) Routes(r chi.Router)

type OrphanScanHandler added in v1.12.0

type OrphanScanHandler struct {
	// contains filtered or unexported fields
}

func NewOrphanScanHandler added in v1.12.0

func NewOrphanScanHandler(store *models.OrphanScanStore, instanceStore *models.InstanceStore, service *orphanscan.Service) *OrphanScanHandler

func (*OrphanScanHandler) CancelRun added in v1.12.0

func (h *OrphanScanHandler) CancelRun(w http.ResponseWriter, r *http.Request)

CancelRun cancels a pending, scanning, or preview_ready run.

func (*OrphanScanHandler) ConfirmDeletion added in v1.12.0

func (h *OrphanScanHandler) ConfirmDeletion(w http.ResponseWriter, r *http.Request)

ConfirmDeletion confirms deletion of orphan files from a preview_ready run.

func (*OrphanScanHandler) GetRun added in v1.12.0

GetRun returns a specific orphan scan run with its file list.

func (*OrphanScanHandler) GetSettings added in v1.12.0

func (h *OrphanScanHandler) GetSettings(w http.ResponseWriter, r *http.Request)

GetSettings returns the orphan scan settings for an instance.

func (*OrphanScanHandler) ListRuns added in v1.12.0

func (h *OrphanScanHandler) ListRuns(w http.ResponseWriter, r *http.Request)

ListRuns returns recent orphan scan runs for an instance.

func (*OrphanScanHandler) TriggerScan added in v1.12.0

func (h *OrphanScanHandler) TriggerScan(w http.ResponseWriter, r *http.Request)

TriggerScan starts a manual orphan scan for an instance.

func (*OrphanScanHandler) UpdateSettings added in v1.12.0

func (h *OrphanScanHandler) UpdateSettings(w http.ResponseWriter, r *http.Request)

UpdateSettings updates the orphan scan settings for an instance.

type OrphanScanSettingsPayload added in v1.12.0

type OrphanScanSettingsPayload struct {
	Enabled             *bool    `json:"enabled"`
	GracePeriodMinutes  *int     `json:"gracePeriodMinutes"`
	IgnorePaths         []string `json:"ignorePaths"`
	ScanIntervalHours   *int     `json:"scanIntervalHours"`
	PreviewSort         *string  `json:"previewSort"`
	MaxFilesPerRun      *int     `json:"maxFilesPerRun"`
	AutoCleanupEnabled  *bool    `json:"autoCleanupEnabled"`
	AutoCleanupMaxFiles *int     `json:"autoCleanupMaxFiles"`
}

OrphanScanSettingsPayload is the request body for creating/updating orphan scan settings.

type PreferencesHandler added in v0.3.0

type PreferencesHandler struct {
	// contains filtered or unexported fields
}

func NewPreferencesHandler added in v0.3.0

func NewPreferencesHandler(syncManager *qbittorrent.SyncManager) *PreferencesHandler

func (*PreferencesHandler) GetAlternativeSpeedLimitsMode added in v0.3.0

func (h *PreferencesHandler) GetAlternativeSpeedLimitsMode(w http.ResponseWriter, r *http.Request)

GetAlternativeSpeedLimitsMode returns the current alternative speed limits mode

func (*PreferencesHandler) GetPreferences added in v0.3.0

func (h *PreferencesHandler) GetPreferences(w http.ResponseWriter, r *http.Request)

GetPreferences returns app preferences for an instance TODO: The go-qbittorrent library is missing network interface list endpoints: - /api/v2/app/networkInterfaceList (to get available network interfaces) - /api/v2/app/networkInterfaceAddressList (to get addresses for an interface) These are needed to properly populate network interface dropdowns like the official WebUI. For now, current_network_interface and current_interface_address show actual values but cannot be configured with proper dropdown selections.

func (*PreferencesHandler) ToggleAlternativeSpeedLimits added in v0.3.0

func (h *PreferencesHandler) ToggleAlternativeSpeedLimits(w http.ResponseWriter, r *http.Request)

ToggleAlternativeSpeedLimits toggles alternative speed limits on/off

func (*PreferencesHandler) UpdatePreferences added in v0.3.0

func (h *PreferencesHandler) UpdatePreferences(w http.ResponseWriter, r *http.Request)

UpdatePreferences updates specific preference fields

type PremiumAccessResponse

type PremiumAccessResponse struct {
	HasPremiumAccess bool `json:"hasPremiumAccess"`
}

PremiumAccessResponse represents the response for premium access status

type QBittorrentInfoHandler added in v1.4.0

type QBittorrentInfoHandler struct {
	// contains filtered or unexported fields
}

func NewQBittorrentInfoHandler added in v1.4.0

func NewQBittorrentInfoHandler(clientPool *internalqbittorrent.ClientPool) *QBittorrentInfoHandler

func (*QBittorrentInfoHandler) GetQBittorrentAppInfo added in v1.4.0

func (h *QBittorrentInfoHandler) GetQBittorrentAppInfo(w http.ResponseWriter, r *http.Request)

GetQBittorrentAppInfo returns qBittorrent application version and build information

type RSSHandler added in v1.13.0

type RSSHandler struct {
	// contains filtered or unexported fields
}

RSSHandler handles RSS API endpoints

func NewRSSHandler added in v1.13.0

func NewRSSHandler(syncManager *qbittorrent.SyncManager) *RSSHandler

NewRSSHandler creates a new RSS handler

func (*RSSHandler) AddFeed added in v1.13.0

func (h *RSSHandler) AddFeed(w http.ResponseWriter, r *http.Request)

AddFeed adds a new RSS feed

func (*RSSHandler) AddFolder added in v1.13.0

func (h *RSSHandler) AddFolder(w http.ResponseWriter, r *http.Request)

AddFolder creates a new RSS folder

func (*RSSHandler) GetItems added in v1.13.0

func (h *RSSHandler) GetItems(w http.ResponseWriter, r *http.Request)

GetItems retrieves all RSS feeds and folders

func (*RSSHandler) GetMatchingArticles added in v1.13.0

func (h *RSSHandler) GetMatchingArticles(w http.ResponseWriter, r *http.Request)

GetMatchingArticles gets articles matching a rule for preview

func (*RSSHandler) GetRules added in v1.13.0

func (h *RSSHandler) GetRules(w http.ResponseWriter, r *http.Request)

GetRules retrieves all RSS auto-download rules

func (*RSSHandler) MarkAsRead added in v1.13.0

func (h *RSSHandler) MarkAsRead(w http.ResponseWriter, r *http.Request)

MarkAsRead marks articles as read

func (*RSSHandler) MoveItem added in v1.13.0

func (h *RSSHandler) MoveItem(w http.ResponseWriter, r *http.Request)

MoveItem moves a feed or folder to a new location

func (*RSSHandler) RefreshItem added in v1.13.0

func (h *RSSHandler) RefreshItem(w http.ResponseWriter, r *http.Request)

RefreshItem triggers a manual refresh of a feed or folder. An empty ItemPath refreshes all feeds.

func (*RSSHandler) RemoveItem added in v1.13.0

func (h *RSSHandler) RemoveItem(w http.ResponseWriter, r *http.Request)

RemoveItem removes a feed or folder

func (*RSSHandler) RemoveRule added in v1.13.0

func (h *RSSHandler) RemoveRule(w http.ResponseWriter, r *http.Request)

RemoveRule deletes an auto-download rule

func (*RSSHandler) RenameRule added in v1.13.0

func (h *RSSHandler) RenameRule(w http.ResponseWriter, r *http.Request)

RenameRule renames an existing rule

func (*RSSHandler) ReprocessRules added in v1.13.0

func (h *RSSHandler) ReprocessRules(w http.ResponseWriter, r *http.Request)

ReprocessRules triggers qBittorrent to reprocess all unread articles against rules. It does this by toggling auto-downloading off then on.

func (*RSSHandler) Routes added in v1.13.0

func (h *RSSHandler) Routes(r chi.Router)

Routes registers RSS routes on the given router

func (*RSSHandler) SetFeedURL added in v1.13.0

func (h *RSSHandler) SetFeedURL(w http.ResponseWriter, r *http.Request)

SetFeedURL changes the URL of an existing feed

func (*RSSHandler) SetRule added in v1.13.0

func (h *RSSHandler) SetRule(w http.ResponseWriter, r *http.Request)

SetRule creates or updates an auto-download rule

type RSSSSEHandler added in v1.13.0

type RSSSSEHandler struct {
	// contains filtered or unexported fields
}

RSSSSEHandler manages Server-Sent Events for RSS updates

func NewRSSSSEHandler added in v1.13.0

func NewRSSSSEHandler(syncManager *qbittorrent.SyncManager) *RSSSSEHandler

NewRSSSSEHandler creates a new RSS SSE handler

func (*RSSSSEHandler) HandleSSE added in v1.13.0

func (h *RSSSSEHandler) HandleSSE(w http.ResponseWriter, r *http.Request)

HandleSSE handles the SSE connection for RSS updates

type RefreshItemRequest added in v1.13.0

type RefreshItemRequest struct {
	ItemPath string `json:"itemPath"`
}

type RegexValidationError added in v1.12.0

type RegexValidationError struct {
	Path     string `json:"path"`     // JSON pointer to the condition, e.g., "/conditions/delete/condition/conditions/0"
	Message  string `json:"message"`  // Error message from regex compilation
	Pattern  string `json:"pattern"`  // The invalid pattern
	Field    string `json:"field"`    // Field name being matched
	Operator string `json:"operator"` // Operator (MATCHES or string op with regex flag)
}

RegexValidationError represents a regex compilation error at a specific path in the condition tree.

type RemoveItemRequest added in v1.13.0

type RemoveItemRequest struct {
	Path string `json:"path"`
}

type RemoveTrackerRequest added in v1.0.0

type RemoveTrackerRequest struct {
	URLs string `json:"urls"` // Newline-separated URLs
}

RemoveTrackerRequest represents a tracker remove request

type RenameRuleRequest added in v1.13.0

type RenameRuleRequest struct {
	NewName string `json:"newName"`
}

type SetFeedURLRequest added in v1.13.0

type SetFeedURLRequest struct {
	Path string `json:"path"`
	URL  string `json:"url"`
}

type SetRuleRequest added in v1.13.0

type SetRuleRequest struct {
	Name string                  `json:"name"`
	Rule qbt.RSSAutoDownloadRule `json:"rule"`
}

type SetTorrentFilePriorityRequest added in v1.7.0

type SetTorrentFilePriorityRequest struct {
	Indices  []int `json:"indices"`
	Priority int   `json:"priority"`
}

SetTorrentFilePriorityRequest represents a request to update torrent file priorities.

type SetupRequest

type SetupRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

SetupRequest represents the initial setup request

type SortedPeer added in v1.0.0

type SortedPeer struct {
	Key string `json:"key"`
	qbt.TorrentPeer
}

SortedPeer represents a peer with its key for sorting

type SortedPeersResponse added in v1.0.0

type SortedPeersResponse struct {
	*qbt.TorrentPeersResponse
	SortedPeers []SortedPeer `json:"sorted_peers,omitempty"`
}

SortedPeersResponse wraps the peers response with sorted peers

type TestConnectionResponse

type TestConnectionResponse struct {
	Connected bool   `json:"connected"`
	Message   string `json:"message,omitempty"`
	Error     string `json:"error,omitempty"`
}

TestConnectionResponse represents connection test results

type ThemesHandler added in v1.23.0

type ThemesHandler struct {
	// contains filtered or unexported fields
}

func NewThemesHandler added in v1.23.0

func NewThemesHandler(themesDir themesDirProvider, premium premiumChecker) *ThemesHandler

func (*ThemesHandler) ListCustomThemes added in v1.23.0

func (h *ThemesHandler) ListCustomThemes(w http.ResponseWriter, r *http.Request)

ListCustomThemes returns the sideloaded custom theme CSS files and their contents. It is premium-gated: callers without an active premium-access license receive 403. The directory is scanned fresh on every request so edits are picked up without a restart.

type TorrentsHandler

type TorrentsHandler struct {
	// contains filtered or unexported fields
}

func NewTorrentsHandler

func NewTorrentsHandler(syncManager *qbittorrent.SyncManager, jackettService *jackett.Service, instanceStore *models.InstanceStore) *TorrentsHandler

func NewTorrentsHandlerForTesting added in v1.9.0

func NewTorrentsHandlerForTesting(adder torrentAdder, downloader torrentDownloader) *TorrentsHandler

NewTorrentsHandlerForTesting creates a TorrentsHandler with mock interfaces for testing

func (*TorrentsHandler) AddPeers added in v1.0.0

func (h *TorrentsHandler) AddPeers(w http.ResponseWriter, r *http.Request)

AddPeers adds peers to torrents

func (*TorrentsHandler) AddTorrent

func (h *TorrentsHandler) AddTorrent(w http.ResponseWriter, r *http.Request)

AddTorrent adds a new torrent

func (*TorrentsHandler) AddTorrentTrackers added in v1.0.0

func (h *TorrentsHandler) AddTorrentTrackers(w http.ResponseWriter, r *http.Request)

AddTorrentTrackers adds trackers to a specific torrent

func (*TorrentsHandler) BanPeers added in v1.0.0

func (h *TorrentsHandler) BanPeers(w http.ResponseWriter, r *http.Request)

BanPeers bans peers permanently

func (*TorrentsHandler) BulkAction

func (h *TorrentsHandler) BulkAction(w http.ResponseWriter, r *http.Request)

BulkAction performs bulk operations on torrents

func (*TorrentsHandler) CheckDuplicates added in v1.5.0

func (h *TorrentsHandler) CheckDuplicates(w http.ResponseWriter, r *http.Request)

CheckDuplicates validates if any of the provided hashes already exist in qBittorrent.

func (*TorrentsHandler) CreateCategory

func (h *TorrentsHandler) CreateCategory(w http.ResponseWriter, r *http.Request)

CreateCategory creates a new category

func (*TorrentsHandler) CreateTags

func (h *TorrentsHandler) CreateTags(w http.ResponseWriter, r *http.Request)

CreateTags creates new tags

func (*TorrentsHandler) CreateTorrent added in v1.3.0

func (h *TorrentsHandler) CreateTorrent(w http.ResponseWriter, r *http.Request)

CreateTorrent creates a new torrent file from source path

func (*TorrentsHandler) DeleteTags

func (h *TorrentsHandler) DeleteTags(w http.ResponseWriter, r *http.Request)

DeleteTags deletes tags

func (*TorrentsHandler) DeleteTorrentCreationTask added in v1.3.0

func (h *TorrentsHandler) DeleteTorrentCreationTask(w http.ResponseWriter, r *http.Request)

DeleteTorrentCreationTask deletes a torrent creation task

func (*TorrentsHandler) DownloadTorrentContentFile added in v1.14.0

func (h *TorrentsHandler) DownloadTorrentContentFile(w http.ResponseWriter, r *http.Request)

DownloadTorrentContentFile serves a single file from a torrent's content on disk. GET /api/instances/{instanceID}/torrents/{hash}/files/{fileIndex}/download

func (*TorrentsHandler) DownloadTorrentCreationFile added in v1.3.0

func (h *TorrentsHandler) DownloadTorrentCreationFile(w http.ResponseWriter, r *http.Request)

DownloadTorrentCreationFile downloads the torrent file for a completed task

func (*TorrentsHandler) EditCategory

func (h *TorrentsHandler) EditCategory(w http.ResponseWriter, r *http.Request)

EditCategory edits an existing category

func (*TorrentsHandler) EditTorrentTracker added in v1.0.0

func (h *TorrentsHandler) EditTorrentTracker(w http.ResponseWriter, r *http.Request)

EditTorrentTracker edits a tracker URL for a specific torrent

func (*TorrentsHandler) ExportTorrent added in v1.2.0

func (h *TorrentsHandler) ExportTorrent(w http.ResponseWriter, r *http.Request)

ExportTorrent streams the .torrent file for a specific torrent

func (*TorrentsHandler) GetActiveTaskCount added in v1.3.0

func (h *TorrentsHandler) GetActiveTaskCount(w http.ResponseWriter, r *http.Request)

GetActiveTaskCount returns the number of active torrent creation tasks This is a lightweight endpoint optimized for polling the badge count

func (*TorrentsHandler) GetActiveTrackers added in v1.3.0

func (h *TorrentsHandler) GetActiveTrackers(w http.ResponseWriter, r *http.Request)

GetActiveTrackers returns all active tracker domains with their URLs

func (*TorrentsHandler) GetCategories

func (h *TorrentsHandler) GetCategories(w http.ResponseWriter, r *http.Request)

GetCategories returns all categories

func (*TorrentsHandler) GetContentPathMediaInfo added in v1.15.0

func (h *TorrentsHandler) GetContentPathMediaInfo(w http.ResponseWriter, r *http.Request)

GetContentPathMediaInfo returns MediaInfo summary text and JSON for an instance-relative content path. GET /api/instances/{instanceID}/mediainfo?contentPath=...

func (*TorrentsHandler) GetDirectoryContent added in v1.10.0

func (h *TorrentsHandler) GetDirectoryContent(w http.ResponseWriter, r *http.Request)

func (*TorrentsHandler) GetTags

func (h *TorrentsHandler) GetTags(w http.ResponseWriter, r *http.Request)

GetTags returns all tags

func (*TorrentsHandler) GetTorrentCreationStatus added in v1.3.0

func (h *TorrentsHandler) GetTorrentCreationStatus(w http.ResponseWriter, r *http.Request)

GetTorrentCreationStatus gets status of torrent creation tasks

func (*TorrentsHandler) GetTorrentField added in v1.14.0

func (h *TorrentsHandler) GetTorrentField(w http.ResponseWriter, r *http.Request)

GetTorrentField returns field values for torrents matching either the current filters or an explicit selection payload. Used for copy operations and tag baseline lookups.

func (*TorrentsHandler) GetTorrentFileMediaInfo added in v1.15.0

func (h *TorrentsHandler) GetTorrentFileMediaInfo(w http.ResponseWriter, r *http.Request)

GetTorrentFileMediaInfo returns MediaInfo output for a single torrent content file on disk. GET /api/instances/{instanceID}/torrents/{hash}/files/{fileIndex}/mediainfo

func (*TorrentsHandler) GetTorrentFiles

func (h *TorrentsHandler) GetTorrentFiles(w http.ResponseWriter, r *http.Request)

func (*TorrentsHandler) GetTorrentPeers added in v1.0.0

func (h *TorrentsHandler) GetTorrentPeers(w http.ResponseWriter, r *http.Request)

GetTorrentFiles returns files information for a specific torrent

func (*TorrentsHandler) GetTorrentPieceStates added in v1.13.0

func (h *TorrentsHandler) GetTorrentPieceStates(w http.ResponseWriter, r *http.Request)

GetTorrentPieceStates returns the download state of each piece for a torrent. States: 0 = not downloaded, 1 = downloading, 2 = downloaded

func (*TorrentsHandler) GetTorrentProperties

func (h *TorrentsHandler) GetTorrentProperties(w http.ResponseWriter, r *http.Request)

GetTorrentProperties returns detailed properties for a specific torrent

func (*TorrentsHandler) GetTorrentTrackers

func (h *TorrentsHandler) GetTorrentTrackers(w http.ResponseWriter, r *http.Request)

GetTorrentTrackers returns trackers for a specific torrent

func (*TorrentsHandler) GetTorrentWebSeeds

func (h *TorrentsHandler) GetTorrentWebSeeds(w http.ResponseWriter, r *http.Request)

GetTorrentWebSeeds returns the web seeds (HTTP sources) for a torrent

func (*TorrentsHandler) ListCrossInstanceTorrents added in v1.8.0

func (h *TorrentsHandler) ListCrossInstanceTorrents(w http.ResponseWriter, r *http.Request)

ListCrossInstanceTorrents returns torrents from all instances matching the filter expression

func (*TorrentsHandler) ListTorrents

func (h *TorrentsHandler) ListTorrents(w http.ResponseWriter, r *http.Request)

ListTorrents returns paginated torrents for an instance with enhanced metadata

func (*TorrentsHandler) RemoveCategories

func (h *TorrentsHandler) RemoveCategories(w http.ResponseWriter, r *http.Request)

RemoveCategories removes categories

func (*TorrentsHandler) RemoveTorrentTrackers added in v1.0.0

func (h *TorrentsHandler) RemoveTorrentTrackers(w http.ResponseWriter, r *http.Request)

RemoveTorrentTrackers removes trackers from a specific torrent

func (*TorrentsHandler) RenameTorrent added in v1.4.0

func (h *TorrentsHandler) RenameTorrent(w http.ResponseWriter, r *http.Request)

RenameTorrent updates the display name for a torrent

func (*TorrentsHandler) RenameTorrentFile added in v1.4.0

func (h *TorrentsHandler) RenameTorrentFile(w http.ResponseWriter, r *http.Request)

RenameTorrentFile renames a file within a torrent

func (*TorrentsHandler) RenameTorrentFolder added in v1.4.0

func (h *TorrentsHandler) RenameTorrentFolder(w http.ResponseWriter, r *http.Request)

RenameTorrentFolder renames a folder within a torrent

func (*TorrentsHandler) SetTorrentFilePriority added in v1.7.0

func (h *TorrentsHandler) SetTorrentFilePriority(w http.ResponseWriter, r *http.Request)

SetTorrentFilePriority updates the download priority for one or more files in a torrent.

type TrackerCustomizationHandler added in v1.9.0

type TrackerCustomizationHandler struct {
	// contains filtered or unexported fields
}

func NewTrackerCustomizationHandler added in v1.9.0

func NewTrackerCustomizationHandler(store *models.TrackerCustomizationStore, onMutationHook func()) *TrackerCustomizationHandler

NewTrackerCustomizationHandler creates a new handler for tracker customization endpoints. The onMutationHook parameter is called after any create/update/delete operation to allow external components (like SyncManager) to invalidate caches when customizations change. Pass nil if no cache invalidation is needed.

func (*TrackerCustomizationHandler) Create added in v1.9.0

func (*TrackerCustomizationHandler) Delete added in v1.9.0

func (*TrackerCustomizationHandler) List added in v1.9.0

func (*TrackerCustomizationHandler) Update added in v1.9.0

type TrackerCustomizationPayload added in v1.9.0

type TrackerCustomizationPayload struct {
	DisplayName     string   `json:"displayName"`
	Domains         []string `json:"domains"`
	IncludedInStats []string `json:"includedInStats,omitempty"`
}

type TrackerIconHandler added in v1.3.0

type TrackerIconHandler struct {
	// contains filtered or unexported fields
}

TrackerIconHandler serves cached tracker favicons via the API.

func NewTrackerIconHandler added in v1.3.0

func NewTrackerIconHandler(service TrackerIconProvider) *TrackerIconHandler

NewTrackerIconHandler constructs a new handler for tracker icons.

func (*TrackerIconHandler) GetTrackerIcons added in v1.3.0

func (h *TrackerIconHandler) GetTrackerIcons(w http.ResponseWriter, r *http.Request)

GetTrackerIcons returns all cached tracker icons as a JSON map.

type TrackerIconProvider added in v1.3.0

type TrackerIconProvider interface {
	GetIcon(ctx context.Context, host, trackerURL string) (string, error)
	ListIcons(ctx context.Context) (map[string]string, error)
}

TrackerIconProvider defines the behaviour required to serve tracker icons.

type UpdateInstanceRequest

type UpdateInstanceRequest struct {
	Name                     string                             `json:"name"`
	Host                     string                             `json:"host"`
	Username                 string                             `json:"username"`
	Password                 string                             `json:"password,omitempty"` // Optional for updates
	APIKey                   *string                            `json:"apiKey,omitempty"`
	BasicUsername            *string                            `json:"basicUsername,omitempty"`
	BasicPassword            *string                            `json:"basicPassword,omitempty"`
	TLSSkipVerify            *bool                              `json:"tlsSkipVerify,omitempty"`
	HasLocalFilesystemAccess *bool                              `json:"hasLocalFilesystemAccess,omitempty"`
	UseHardlinks             *bool                              `json:"useHardlinks,omitempty"`
	HardlinkBaseDir          *string                            `json:"hardlinkBaseDir,omitempty"`
	HardlinkDirPreset        *string                            `json:"hardlinkDirPreset,omitempty"`
	UseReflinks              *bool                              `json:"useReflinks,omitempty"`
	FallbackToRegularMode    *bool                              `json:"fallbackToRegularMode,omitempty"`
	ReannounceSettings       *InstanceReannounceSettingsPayload `json:"reannounceSettings,omitempty"`
}

UpdateInstanceRequest represents a request to update an instance

type UpdateInstanceStatusRequest added in v1.8.0

type UpdateInstanceStatusRequest struct {
	IsActive bool `json:"isActive"`
}

type ValidateLicenseRequest

type ValidateLicenseRequest struct {
	LicenseKey string `json:"licenseKey"`
}

ValidateLicenseRequest represents the request body for license validation

type ValidateLicenseResponse

type ValidateLicenseResponse struct {
	Valid       bool       `json:"valid"`
	ProductName string     `json:"productName,omitempty"`
	ExpiresAt   *time.Time `json:"expiresAt,omitempty"`
	Message     string     `json:"message,omitempty"`
	Error       string     `json:"error,omitempty"`
}

ValidateLicenseResponse represents the response for license validation

type VersionHandler added in v1.1.0

type VersionHandler struct {
	// contains filtered or unexported fields
}

func NewVersionHandler added in v1.1.0

func NewVersionHandler(updateService latestReleaseProvider, currentVersion string) *VersionHandler

func (*VersionHandler) GetLatestVersion added in v1.1.0

func (h *VersionHandler) GetLatestVersion(w http.ResponseWriter, r *http.Request)

func (*VersionHandler) GetVersion added in v1.21.0

func (h *VersionHandler) GetVersion(w http.ResponseWriter, r *http.Request)

GetVersion returns the version qui is currently running. When the update service has detected a newer release, LatestVersion and UpdateAvailable are populated from the cached result; otherwise UpdateAvailable is false and LatestVersion is omitted.

type VersionResponse added in v1.21.0

type VersionResponse struct {
	Version         string `json:"version"`
	LatestVersion   string `json:"latestVersion,omitempty"`
	UpdateAvailable bool   `json:"updateAvailable"`
}

VersionResponse reports the version qui is currently running plus whether a newer release has been detected. Intended for monitoring tools (e.g. Argus) that track the deployed version of a service.

type WarningResponse added in v1.13.0

type WarningResponse struct {
	Warning string `json:"warning,omitempty"`
}

WarningResponse represents a success response with optional warnings

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL