65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
// Package signedurl provides interfaces and implementations for signing and verifying URLs.
|
|
package signedurl
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type Signer interface {
|
|
// Sign signs a URL
|
|
Sign(url, principal string, ttl time.Duration) (string, error)
|
|
}
|
|
|
|
type Verifier interface {
|
|
// Verify verifies a signed URL
|
|
Verify(signedURL string) (string, error)
|
|
}
|
|
|
|
type SignedURLError struct {
|
|
innerErr error
|
|
message string
|
|
}
|
|
|
|
// NewSignedURLError creates a new SignedURLError with the provided inner error and message.
|
|
func NewSignedURLError(innerErr error, message string) SignedURLError {
|
|
return SignedURLError{
|
|
innerErr: innerErr,
|
|
message: message,
|
|
}
|
|
}
|
|
|
|
var ErrInvalidKey = NewSignedURLError(nil, "invalid key provided")
|
|
|
|
type SignatureVerificationError struct {
|
|
SignedURLError
|
|
}
|
|
|
|
func NewSignatureVerificationError(innerErr error) SignatureVerificationError {
|
|
return SignatureVerificationError{
|
|
SignedURLError: SignedURLError{
|
|
innerErr: innerErr,
|
|
message: "signature verification failed",
|
|
},
|
|
}
|
|
}
|
|
|
|
func (e SignatureVerificationError) Is(tgt error) bool {
|
|
// Check if the target error is of type SignatureVerificationError
|
|
if _, ok := tgt.(SignatureVerificationError); ok {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Error implements the error interface for errorConst.
|
|
func (e SignedURLError) Error() string {
|
|
if e.innerErr != nil {
|
|
return e.message + ": " + e.innerErr.Error()
|
|
}
|
|
return e.message
|
|
}
|
|
|
|
func (e SignedURLError) Unwrap() error {
|
|
return e.innerErr
|
|
}
|