66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
// Package client provides a client for interacting with the ImageKit API.
|
|
package client
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/rclone/rclone/fs"
|
|
"github.com/rclone/rclone/fs/fshttp"
|
|
"github.com/rclone/rclone/lib/rest"
|
|
)
|
|
|
|
// ImageKit main struct
|
|
type ImageKit struct {
|
|
Prefix string
|
|
UploadPrefix string
|
|
Timeout int64
|
|
UploadTimeout int64
|
|
PrivateKey string
|
|
PublicKey string
|
|
URLEndpoint string
|
|
HTTPClient *rest.Client
|
|
}
|
|
|
|
// NewParams is a struct to define parameters to imagekit
|
|
type NewParams struct {
|
|
PrivateKey string
|
|
PublicKey string
|
|
URLEndpoint string
|
|
}
|
|
|
|
// New returns ImageKit object from environment variables
|
|
func New(ctx context.Context, params NewParams) (*ImageKit, error) {
|
|
|
|
privateKey := params.PrivateKey
|
|
publicKey := params.PublicKey
|
|
endpointURL := params.URLEndpoint
|
|
|
|
switch {
|
|
case privateKey == "":
|
|
return nil, fmt.Errorf("ImageKit.io URL endpoint is required")
|
|
case publicKey == "":
|
|
return nil, fmt.Errorf("ImageKit.io public key is required")
|
|
case endpointURL == "":
|
|
return nil, fmt.Errorf("ImageKit.io private key is required")
|
|
}
|
|
|
|
cliCtx, cliCfg := fs.AddConfig(ctx)
|
|
|
|
cliCfg.UserAgent = "rclone/imagekit"
|
|
client := rest.NewClient(fshttp.NewClient(cliCtx))
|
|
|
|
client.SetUserPass(privateKey, "")
|
|
client.SetHeader("Accept", "application/json")
|
|
|
|
return &ImageKit{
|
|
Prefix: "https://api.imagekit.io/v2",
|
|
UploadPrefix: "https://upload.imagekit.io/api/v2",
|
|
Timeout: 60,
|
|
UploadTimeout: 3600,
|
|
PrivateKey: params.PrivateKey,
|
|
PublicKey: params.PublicKey,
|
|
URLEndpoint: params.URLEndpoint,
|
|
HTTPClient: client,
|
|
}, nil
|
|
}
|