Documentation
¶
Index ¶
- func GetCacheMetrics(options *Options) *storage.CacheMetrics
- type Capabilities
- type CpuStats
- type CustomRecordConfig
- type DNSRecordsConfig
- type DNSServer
- type DeregisterRequest
- type FTPServer
- func (h *FTPServer) AfterCurDirChanged(ctx *ftpserver.Context, oldCurDir, newCurDir string, err error)
- func (h *FTPServer) AfterDirCreated(ctx *ftpserver.Context, dstPath string, err error)
- func (h *FTPServer) AfterDirDeleted(ctx *ftpserver.Context, dstPath string, err error)
- func (h *FTPServer) AfterFileDeleted(ctx *ftpserver.Context, dstPath string, err error)
- func (h *FTPServer) AfterFileDownloaded(ctx *ftpserver.Context, dstPath string, size int64, err error)
- func (h *FTPServer) AfterFilePut(ctx *ftpserver.Context, dstPath string, size int64, err error)
- func (h *FTPServer) AfterUserLogin(ctx *ftpserver.Context, userName, password string, passMatched bool, err error)
- func (h *FTPServer) BeforeChangeCurDir(ctx *ftpserver.Context, oldCurDir, newCurDir string)
- func (h *FTPServer) BeforeCreateDir(ctx *ftpserver.Context, dstPath string)
- func (h *FTPServer) BeforeDeleteDir(ctx *ftpserver.Context, dstPath string)
- func (h *FTPServer) BeforeDeleteFile(ctx *ftpserver.Context, dstPath string)
- func (h *FTPServer) BeforeDownloadFile(ctx *ftpserver.Context, dstPath string)
- func (h *FTPServer) BeforeLoginUser(ctx *ftpserver.Context, userName string)
- func (h *FTPServer) BeforePutFile(ctx *ftpserver.Context, dstPath string)
- func (h *FTPServer) Close()
- func (h *FTPServer) ListenAndServe(tlsConfig *tls.Config, ftpAlive chan bool, ftpsAlive chan bool)
- func (h *FTPServer) Print(sessionID string, message interface{})
- func (h *FTPServer) PrintCommand(sessionID string, command string, params string)
- func (h *FTPServer) PrintResponse(sessionID string, code int, message string)
- func (h *FTPServer) Printf(sessionID string, format string, v ...interface{})
- type HTTPServer
- type Interaction
- type LDAPServer
- type MemoryMetrics
- type Metrics
- type NetworkStats
- type NopAuth
- type NopDriver
- func (n *NopDriver) DeleteDir(c *ftpserver.Context, s string) error
- func (n *NopDriver) DeleteFile(c *ftpserver.Context, s string) error
- func (n *NopDriver) GetFile(c *ftpserver.Context, s1 string, k int64) (int64, io.ReadCloser, error)
- func (n *NopDriver) ListDir(c *ftpserver.Context, s string, f func(os.FileInfo) error) error
- func (n *NopDriver) MakeDir(c *ftpserver.Context, s string) error
- func (n *NopDriver) PutFile(c *ftpserver.Context, s string, r io.Reader, k int64) (int64, error)
- func (n *NopDriver) Rename(c *ftpserver.Context, s1 string, s2 string) error
- func (n *NopDriver) Stat(c *ftpserver.Context, s string) (os.FileInfo, error)
- type OnResultCallback
- type Options
- type PollResponse
- type RegisterRequest
- type RegisterResponse
- type ResponderServer
- type SMBServer
- type SMTPServer
- type UploadError
- type UploadErrorKind
- type UploadFileRequest
- type UploadRequest
- type UploadResponse
- type UploadStore
- func (s *UploadStore) Abort(st *stagedUpload)
- func (s *UploadStore) Close() error
- func (s *UploadStore) Commit(st *stagedUpload) error
- func (s *UploadStore) MaxFileSize() int64
- func (s *UploadStore) MaxFiles() int
- func (s *UploadStore) Open(correlationID, name string) (*os.File, os.FileInfo, error)
- func (s *UploadStore) RemoveSession(correlationID string)
- func (s *UploadStore) Root() string
- func (s *UploadStore) Save(correlationID, name string, data []byte, existingSize int64) (int64, string, error)
- func (s *UploadStore) Stage(correlationID, name string, data []byte, existingSize int64) (*stagedUpload, error)
- func (s *UploadStore) Start()
- type UploadedFileResponse
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetCacheMetrics ¶ added in v1.0.7
func GetCacheMetrics(options *Options) *storage.CacheMetrics
Types ¶
type Capabilities ¶ added in v1.4.0
type Capabilities struct {
Upload bool `json:"upload"`
UploadMaxFileSize int64 `json:"upload-max-file-size,omitempty"`
UploadMaxFiles int `json:"upload-max-files,omitempty"`
FTP bool `json:"ftp"`
}
Capabilities advertises optional server features to clients at registration. Clients use it to decide whether to attempt an upload at all, and which URLs are worth printing.
type CpuStats ¶ added in v1.0.7
type CpuStats struct {
User uint64 `json:"user"`
System uint64 `json:"system"`
Idle uint64 `json:"idle"`
Nice uint64 `json:"nice"`
Total uint64 `json:"total"`
}
func GetCpuMetrics ¶ added in v1.0.7
func GetCpuMetrics() (cpuStats *CpuStats)
type CustomRecordConfig ¶ added in v1.3.1
type CustomRecordConfig struct {
Type string `yaml:"type"`
Value string `yaml:"value"`
TTL uint32 `yaml:"ttl,omitempty"`
Priority uint16 `yaml:"priority,omitempty"` // for MX records
}
CustomRecordConfig represents a custom DNS record configuration
type DNSRecordsConfig ¶ added in v1.3.1
type DNSRecordsConfig map[string][]CustomRecordConfig
DNSRecordsConfig represents the structured DNS records configuration (YAML format)
type DNSServer ¶
type DNSServer struct {
TxtRecord string // used for ACME verification
// contains filtered or unexported fields
}
DNSServer is a DNS server instance that listens on port 53.
func NewDNSServer ¶
NewDNSServer returns a new DNS server.
func (*DNSServer) ListenAndServe ¶
ListenAndServe listens on dns ports for the server.
type DeregisterRequest ¶
type DeregisterRequest struct {
// CorrelationID is an ID for correlation with requests.
CorrelationID string `json:"correlation-id"`
// SecretKey is the secretKey for the interactsh client.
SecretKey string `json:"secret-key"`
}
DeregisterRequest is a request for client deregistration to interactsh server.
type FTPServer ¶ added in v1.0.0
type FTPServer struct {
// contains filtered or unexported fields
}
FTPServer is a ftp server instance
func NewFTPServer ¶ added in v1.0.0
NewFTPServer returns a new TLS & Non-TLS FTP server.
func (*FTPServer) AfterCurDirChanged ¶ added in v1.0.0
func (*FTPServer) AfterDirCreated ¶ added in v1.0.0
func (*FTPServer) AfterDirDeleted ¶ added in v1.0.0
func (*FTPServer) AfterFileDeleted ¶ added in v1.0.0
func (*FTPServer) AfterFileDownloaded ¶ added in v1.0.0
func (*FTPServer) AfterFilePut ¶ added in v1.0.0
func (*FTPServer) AfterUserLogin ¶ added in v1.0.0
func (*FTPServer) BeforeChangeCurDir ¶ added in v1.0.0
func (*FTPServer) BeforeCreateDir ¶ added in v1.0.0
func (*FTPServer) BeforeDeleteDir ¶ added in v1.0.0
func (*FTPServer) BeforeDeleteFile ¶ added in v1.0.0
func (*FTPServer) BeforeDownloadFile ¶ added in v1.0.0
func (*FTPServer) BeforeLoginUser ¶ added in v1.0.0
func (*FTPServer) BeforePutFile ¶ added in v1.0.0
func (*FTPServer) ListenAndServe ¶ added in v1.0.0
ListenAndServe listens on smtp and/or smtps ports for the server.
func (*FTPServer) PrintCommand ¶ added in v1.0.0
func (*FTPServer) PrintResponse ¶ added in v1.0.0
type HTTPServer ¶
type HTTPServer struct {
// contains filtered or unexported fields
}
HTTPServer is a http server instance that listens both TLS and Non-TLS based servers.
func NewHTTPServer ¶
func NewHTTPServer(options *Options) (*HTTPServer, error)
NewHTTPServer returns a new TLS & Non-TLS HTTP server.
func (*HTTPServer) ListenAndServe ¶
func (h *HTTPServer) ListenAndServe(tlsConfig *tls.Config, httpAlive, httpsAlive chan bool)
ListenAndServe listens on http and/or https ports for the server.
type Interaction ¶
type Interaction struct {
// Protocol for interaction, can contains HTTP/DNS/SMTP,etc.
Protocol string `json:"protocol"`
// UniqueID is the uniqueID for the subdomain receiving the interaction.
UniqueID string `json:"unique-id"`
// FullId is the full path for the subdomain receiving the interaction.
FullId string `json:"full-id"`
// QType is the question type for the interaction
QType string `json:"q-type,omitempty"`
// RawRequest is the raw request received by the interactsh server.
RawRequest string `json:"raw-request,omitempty"`
// RawResponse is the raw response sent by the interactsh server.
RawResponse string `json:"raw-response,omitempty"`
// SMTPFrom is the mail form field
SMTPFrom string `json:"smtp-from,omitempty"`
// RemoteAddress is the remote address for interaction
RemoteAddress string `json:"remote-address"`
// Timestamp is the timestamp for the interaction
Timestamp time.Time `json:"timestamp"`
AsnInfo []map[string]string `json:"asninfo,omitempty"`
}
Interaction is an interaction received to the server.
type LDAPServer ¶ added in v1.0.0
type LDAPServer struct {
WithLogger bool
// contains filtered or unexported fields
}
LDAPServer is a ldap server instance
func NewLDAPServer ¶ added in v1.0.0
func NewLDAPServer(options *Options, withLogger bool) (*LDAPServer, error)
NewLDAPServer returns a new LDAP server.
func (*LDAPServer) Close ¶ added in v1.0.0
func (ldapServer *LDAPServer) Close() error
func (*LDAPServer) ListenAndServe ¶ added in v1.0.0
func (ldapServer *LDAPServer) ListenAndServe(tlsConfig *tls.Config, ldapAlive chan bool)
ListenAndServe listens on ldap ports for the server.
type MemoryMetrics ¶ added in v1.0.7
type MemoryMetrics struct {
Alloc string `json:"alloc"`
TotalAlloc string `json:"total_alloc"`
Sys string `json:"sys"`
Lookups uint64 `json:"lookups"`
Mallocs uint64 `json:"mallocs"`
Frees uint64 `json:"frees"`
HeapAlloc string `json:"heap_allo"`
HeapSys string `json:"heap_sys"`
HeapIdle string `json:"head_idle"`
HeapInuse string `json:"heap_in_use"`
HeapReleased string `json:"heap_released"`
HeapObjects uint64 `json:"heap_objects"`
StackInuse string `json:"stack_in_use"`
StackSys string `json:"stack_sys"`
MSpanInuse string `json:"mspan_in_use"`
MSpanSys string `json:"mspan_sys"`
MCacheInuse string `json:"mcache_in_use"`
MCacheSys string `json:"mcache_sys"`
}
func GetMemoryMetrics ¶ added in v1.0.7
func GetMemoryMetrics() *MemoryMetrics
type Metrics ¶ added in v1.0.7
type Metrics struct {
Dns uint64 `json:"dns"`
Ftp uint64 `json:"ftp"`
Http uint64 `json:"http"`
Ldap uint64 `json:"ldap"`
Smb uint64 `json:"smb"`
Smtp uint64 `json:"smtp"`
Sessions int64 `json:"sessions"`
SessionsTotal int64 `json:"sessions_total"`
Cache *storage.CacheMetrics `json:"cache"`
Memory *MemoryMetrics `json:"memory"`
Cpu *CpuStats `json:"cpu"`
Network *NetworkStats `json:"network"`
}
type NetworkStats ¶ added in v1.0.7
type NetworkStats struct {
Rx string `json:"received"`
Tx string `json:"transmitted"`
// contains filtered or unexported fields
}
func GetNetworkMetrics ¶ added in v1.0.7
func GetNetworkMetrics() *NetworkStats
type NopDriver ¶ added in v1.0.0
type NopDriver struct {
// contains filtered or unexported fields
}
func NewNopDriver ¶ added in v1.0.0
func (*NopDriver) DeleteFile ¶ added in v1.0.0
func (*NopDriver) ListDir ¶ added in v1.0.0
ListDir hides interactsh's own upload storage, and nothing else.
NopAuth accepts any credentials, so an anonymous client must not be able to read off every correlation id that currently has uploaded files and then walk into each one. Two rules close that off: the uploads directory never lists its own contents, and it is filtered out of the root listing so that it cannot be discovered in the first place. A client that already knows its own correlation id can still list and RETR inside it.
Only those two rules, deliberately: the root itself lists normally, because -ftp-dir is documented as serving the operator's own directory and a blanket refusal there would silently break that.
type OnResultCallback ¶ added in v1.1.0
type OnResultCallback func(out interface{})
type Options ¶
type Options struct {
// Domains is the list domains for the instance.
Domains []string
// IPAddresses contains the IP addresses (IPv4 and/or IPv6) for the server
IPAddresses []net.IP
// ListenIP is the IP address to listen servers on
ListenIP string
// DomainPort is the port to listen DNS servers on
DnsPort int
// HttpPort is the port to listen HTTP server on
HttpPort int
// HttpsPort is the port to listen HTTPS server on
HttpsPort int
// SmbPort is the port to listen Smb server on
SmbPort int
// SmtpPort is the port to listen Smtp server on
SmtpPort int
// SmtpsPort is the port to listen Smtps server on
SmtpsPort int
// SmtpAutoTLSPort is the port to listen Smtp autoTLS server on
SmtpAutoTLSPort int
// FtpPort is the port to listen Ftp server on
FtpPort int
// FtpsPort is the port to listen Ftps server on
FtpsPort int
// FtpPort is the port to listen Ftp server on
LdapPort int
// Hostmaster is the hostmaster email for the server.
Hostmasters []string
// Storage is a storage for interaction data storage
Storage storage.Storage
// Auth requires client to authenticate
Auth bool
// HTTPIndex is the http index file for server
HTTPIndex string
// HTTPDirectory is the directory for interact server
HTTPDirectory string
// Token required to retrieve interactions
Token string
// Enable root tld interactions
RootTLD bool
// OriginURL for the HTTP Server
OriginURL string
// FTPDirectory or temporary one
FTPDirectory string
// ScanEverywhere for potential correlation id
ScanEverywhere bool
// CorrelationIdLength of preamble
CorrelationIdLength int
// CorrelationIdNonceLength of the unique identifier
CorrelationIdNonceLength int
// Certificate Path
CertificatePath string
// Private Key Path
PrivateKeyPath string
// CustomRecords is a file containing custom DNS records
CustomRecords string
// HTTP header containing origin IP
OriginIPHeader string
// Version is the version of interactsh server
Version string
// DiskStorage enables storing interactions on disk
DiskStorage bool
// DiskStoragePath defines the disk storage location
DiskStoragePath string
// DynamicResp enables dynamic HTTP response
DynamicResp bool
// EnableMetrics enables metrics endpoint
EnableMetrics bool
// ServerToken hide server version in HTTP response X-Interactsh-Version header
NoVersionHeader bool
// HeaderServer use custom string in HTTP response Server header instead of domain
HeaderServer string
// DefaultHTTPResponseFile is a file to serve for all HTTP requests (takes priority over other options)
DefaultHTTPResponseFile string
// Ftp indicates the FTP server is enabled, so uploaded files are also
// reachable over ftp://
Ftp bool
// Upload enables the client file upload endpoint and file hosting
Upload bool
// UploadDirectory is the root directory uploaded files are stored under
UploadDirectory string
// UploadMaxFileSize is the maximum size in bytes of a single uploaded file
UploadMaxFileSize int64
// UploadMaxFiles is the maximum number of files a single session may upload
UploadMaxFiles int
// UploadMaxTotalSize is the maximum total size in bytes of all uploaded files
UploadMaxTotalSize int64
// UploadTTL is the maximum lifetime of uploaded files on disk
UploadTTL time.Duration
// UploadStore serves and stores uploaded files. Nil when uploads are disabled.
UploadStore *UploadStore
// FTPServesUploads reports whether the FTP root and the upload root resolve
// to the same directory, which is what makes hosted files reachable over
// ftp://. Derived at startup from the resolved paths, never from the flags
// as written, so that two spellings of one directory are not mistaken for
// two directories.
FTPServesUploads bool
ACMEStore *acme.Provider
Stats *Metrics
OnResult OnResultCallback
Certificates []tls.Certificate
CertFiles []acme.CertificateFiles
}
Options contains configuration options for the servers
func (*Options) GetIdLength ¶ added in v1.0.2
func (*Options) URLReflection ¶ added in v1.0.2
URLReflection returns a reversed part of the URL payload which is checked in the response.
func (*Options) UploadStorage ¶ added in v1.4.0
func (options *Options) UploadStorage() storage.UploadStorage
UploadStorage returns the configured storage backend's upload-tracking capability, or nil when the backend does not implement it. Only instance-local backends do, since hosted bytes live on the local filesystem; see storage.UploadStorage.
type PollResponse ¶
type PollResponse struct {
Data []string `json:"data"`
Extra []string `json:"extra"`
AESKey string `json:"aes_key"`
TLDData []string `json:"tlddata,omitempty"`
}
PollResponse is the response for a polling request
type RegisterRequest ¶
type RegisterRequest struct {
// PublicKey is the public RSA Key of the client.
PublicKey string `json:"public-key"`
// SecretKey is the secret-key for correlation ID registered for the client.
SecretKey string `json:"secret-key"`
// CorrelationID is an ID for correlation with requests.
CorrelationID string `json:"correlation-id"`
}
RegisterRequest is a request for client registration to interactsh server.
type RegisterResponse ¶ added in v1.4.0
type RegisterResponse struct {
Message string `json:"message"`
Capabilities *Capabilities `json:"capabilities,omitempty"`
}
RegisterResponse is the response to a client registration. The bare {"message": ...} shape older clients expect is preserved, so an old client against a new server simply ignores the extra key, and a new client against an old server sees a nil Capabilities.
type ResponderServer ¶ added in v0.0.5
type ResponderServer struct {
// contains filtered or unexported fields
}
ResponderServer is a Responder-equivalent NTLMv2 hash capture wrapper backed by goimpacket. It replaces the previous dockerized Responder process, and now binds multiple SMB-compatible ports to maximise the chance of catching coerced authentications.
func NewResponderServer ¶ added in v0.0.5
func NewResponderServer(options *Options) (*ResponderServer, error)
NewResponderServer returns a new Responder-equivalent server.
func (*ResponderServer) Close ¶ added in v0.0.5
func (h *ResponderServer) Close()
Close stops every Responder capture listener.
func (*ResponderServer) ListenAndServe ¶ added in v0.0.5
func (h *ResponderServer) ListenAndServe(responderAlive chan bool) error
ListenAndServe spins up an SMB capture listener on each of responderListenPorts. The provided channel is signalled true once at least one listener is ready and false on shutdown.
type SMBServer ¶ added in v0.0.5
type SMBServer struct {
// contains filtered or unexported fields
}
SMBServer is an in-process SMB2 NTLM hash capture server backed by goimpacket. It replaces the previous Python/impacket smbserver wrapper.
func NewSMBServer ¶ added in v0.0.5
NewSMBServer returns a new SMB server.
func (*SMBServer) Close ¶ added in v0.0.5
func (h *SMBServer) Close()
Close stops the SMB capture server.
func (*SMBServer) ListenAndServe ¶ added in v0.0.5
ListenAndServe listens on the configured SMB port and forwards captured NetNTLMv2 hashes into the interactsh storage.
type SMTPServer ¶
type SMTPServer struct {
// contains filtered or unexported fields
}
SMTPServer is a smtp server instance that listens both TLS and Non-TLS based servers.
func NewSMTPServer ¶
func NewSMTPServer(options *Options) (*SMTPServer, error)
NewSMTPServer returns a new TLS & Non-TLS SMTP server.
func (*SMTPServer) ListenAndServe ¶
func (h *SMTPServer) ListenAndServe(tlsConfig *tls.Config, smtpAlive, smtpsAlive chan bool)
ListenAndServe listens on smtp and/or smtps ports for the server.
type UploadError ¶ added in v1.4.0
type UploadError struct {
Kind UploadErrorKind
Err error
}
UploadError is a failure attributable to the uploaded content or to server capacity, as opposed to an internal error.
func (*UploadError) Error ¶ added in v1.4.0
func (e *UploadError) Error() string
func (*UploadError) Unwrap ¶ added in v1.4.0
func (e *UploadError) Unwrap() error
type UploadErrorKind ¶ added in v1.4.0
type UploadErrorKind int
UploadErrorKind classifies upload failures so the HTTP layer can map them to status codes without matching on error strings.
const ( UploadErrOther UploadErrorKind = iota UploadErrBadName UploadErrTooLarge UploadErrTooManyFiles UploadErrOutOfSpace )
type UploadFileRequest ¶ added in v1.4.0
UploadFileRequest is a single file within an upload request.
type UploadRequest ¶ added in v1.4.0
type UploadRequest struct {
CorrelationID string `json:"correlation-id"`
SecretKey string `json:"secret-key"`
Files []UploadFileRequest `json:"files"`
}
UploadRequest is a request to host files against a correlation ID.
type UploadResponse ¶ added in v1.4.0
type UploadResponse struct {
Message string `json:"message"`
Files []UploadedFileResponse `json:"files"`
}
UploadResponse is the response to a successful upload.
type UploadStore ¶ added in v1.4.0
type UploadStore struct {
// contains filtered or unexported fields
}
UploadStore owns the on-disk lifecycle of client-uploaded files.
Layout is <root>/<uploadsDirName>/<correlationID>/<filename>. The session directory is named by correlation ID because FTP has no Host header, so the identifier has to be carried in the path for the FTP view to work. The uploadsDirName level exists so that the root may be shared with -ftp-dir without this store ever touching an operator's files.
func NewUploadStore ¶ added in v1.4.0
func NewUploadStore(options *Options) (*UploadStore, error)
NewUploadStore prepares the upload root and returns a store. It does not start the background goroutines; call Start for that.
func (*UploadStore) Abort ¶ added in v1.4.0
func (s *UploadStore) Abort(st *stagedUpload)
Abort discards a staged file and releases its reservation.
A file that was never committed is only a temp file, so it goes without question. A committed one is a narrower case -- a later rename in the same batch failed -- and is only removed when it did not overwrite anything: the previous content of an overwritten name is already gone, so deleting it would turn a leaked file into lost data. Everything Abort touches resolves to <sessionsRoot>/<correlationID>/<validated name>, so it can never reach another session's files.
func (*UploadStore) Close ¶ added in v1.4.0
func (s *UploadStore) Close() error
Close stops the background goroutines and releases the rooted handle.
func (*UploadStore) Commit ¶ added in v1.4.0
func (s *UploadStore) Commit(st *stagedUpload) error
Commit renames a staged file into place, making it reachable. Writing to a temporary name and renaming is also what stops a reader -- the HTTP handler or the FTP file driver -- from ever observing a partially written file.
func (*UploadStore) MaxFileSize ¶ added in v1.4.0
func (s *UploadStore) MaxFileSize() int64
MaxFileSize returns the per-file byte limit.
func (*UploadStore) MaxFiles ¶ added in v1.4.0
func (s *UploadStore) MaxFiles() int
MaxFiles returns the per-session file count limit.
func (*UploadStore) Open ¶ added in v1.4.0
Open returns a readable handle to an uploaded file. The name is re-validated here rather than trusted from the caller.
func (*UploadStore) RemoveSession ¶ added in v1.4.0
func (s *UploadStore) RemoveSession(correlationID string)
RemoveSession queues a session's directory for deletion. It is safe to call from the storage cache's event goroutine: the send is non-blocking, so filesystem latency can never back-pressure cache maintenance. A dropped request is collected by the janitor instead.
func (*UploadStore) Root ¶ added in v1.4.0
func (s *UploadStore) Root() string
Root returns the directory uploaded files are stored under.
func (*UploadStore) Save ¶ added in v1.4.0
func (s *UploadStore) Save(correlationID, name string, data []byte, existingSize int64) (int64, string, error)
Save stages and immediately commits one file, for callers handling a single file with nothing to unwind.
func (*UploadStore) Stage ¶ added in v1.4.0
func (s *UploadStore) Stage(correlationID, name string, data []byte, existingSize int64) (*stagedUpload, error)
Stage validates one file, reserves its quota and writes it under a temporary name in its session directory. Nothing is reachable until Commit.
It is called from inside Storage.UpdateUploads, i.e. under the correlation ID's lock, so the caller's quota check and this write are atomic with respect to other uploads for the same session.
func (*UploadStore) Start ¶ added in v1.4.0
func (s *UploadStore) Start()
Start launches the deleter and janitor goroutines.
type UploadedFileResponse ¶ added in v1.4.0
type UploadedFileResponse struct {
Name string `json:"name"`
Size int64 `json:"size"`
SHA256 string `json:"sha256"`
HTTPPath string `json:"http-path"`
FTPPath string `json:"ftp-path"`
}
UploadedFileResponse describes one hosted file. Paths rather than URLs: the server does not know which of its domains, or which scheme, the client will use to reference the file.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Taken from https://github.com/chinzhiweiblank/coredns-acme/blob/e0cdfbdd78adfcc6c2d098255902f64ec60daecb/provider.go Copyright @chinzhiweiblank under Apache License 2.0
|
Taken from https://github.com/chinzhiweiblank/coredns-acme/blob/e0cdfbdd78adfcc6c2d098255902f64ec60daecb/provider.go Copyright @chinzhiweiblank under Apache License 2.0 |