mirror of https://gitlab.com/ngerakines/tavern.git
86 lines
2.4 KiB
Go
86 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
"github.com/ngerakines/tavern/common"
|
|
)
|
|
|
|
var AssetStorageFlag = cli.StringFlag{
|
|
Name: "asset-storage",
|
|
Usage: "The type of asset storage system to use",
|
|
Value: "file",
|
|
EnvVars: []string{"ASSET_STORAGE"},
|
|
}
|
|
|
|
var AssetStorageFileBaseFlag = cli.StringFlag{
|
|
Name: "asset-storage-file-base",
|
|
Usage: "The base path used for file asset storage.",
|
|
Value: "./assets/",
|
|
EnvVars: []string{"ASSET_STORAGE_FILE_BASE"},
|
|
}
|
|
|
|
var AssetStorageRemoteAllowFlag = cli.StringSliceFlag{
|
|
Name: "asset-storage-remote-allow",
|
|
Usage: "Asset storage remote allow list.",
|
|
EnvVars: []string{"ASSET_STORAGE_REMOTE_ALLOW"},
|
|
}
|
|
|
|
var AssetStorageRemoteDenyFlag = cli.StringSliceFlag{
|
|
Name: "asset-storage-remote-deny",
|
|
Usage: "Asset storage remote deny list.",
|
|
EnvVars: []string{"ASSET_STORAGE_REMOTE_DENY"},
|
|
}
|
|
|
|
var AssetStorageRemoteMaxFlag = cli.Int64Flag{
|
|
Name: "asset-storage-max",
|
|
Usage: "Asset storage remote max file size.",
|
|
Value: 5000000,
|
|
EnvVars: []string{"ASSET_STORAGE_REMOTE_MAX"},
|
|
}
|
|
|
|
type AssetStore interface {
|
|
Close() error
|
|
Create(ctx context.Context, location string, reader io.Reader) (string, error)
|
|
Delete(ctx context.Context, location string) error
|
|
Exists(ctx context.Context, location string) (bool, error)
|
|
Read(ctx context.Context, location string) (io.ReadCloser, error)
|
|
Upload(ctx context.Context, checksum string, source string) (string, error)
|
|
}
|
|
|
|
type AssetStorageConfig struct {
|
|
Type string
|
|
FileBasePath string
|
|
MaxFileSize int64
|
|
|
|
AllowDomains []common.AllowDenyMatcher
|
|
DenyDomains []common.AllowDenyMatcher
|
|
}
|
|
|
|
func AssetStorage(c *cli.Context) AssetStorageConfig {
|
|
allowDomains := make([]common.AllowDenyMatcher, 0)
|
|
denyDomains := make([]common.AllowDenyMatcher, 0)
|
|
|
|
denyDomains = append(denyDomains, common.NewAllowDenyMatcher(c.String("domain")))
|
|
|
|
for _, value := range c.StringSlice("asset-storage-remote-allow") {
|
|
allowDomains = append(allowDomains, common.NewAllowDenyMatcher(value))
|
|
}
|
|
|
|
for _, value := range c.StringSlice("asset-storage-remote-deny") {
|
|
denyDomains = append(denyDomains, common.NewAllowDenyMatcher(value))
|
|
}
|
|
|
|
return AssetStorageConfig{
|
|
Type: c.String("asset-storage"),
|
|
FileBasePath: c.String("asset-storage-file-base"),
|
|
MaxFileSize: c.Int64("asset-storage-max"),
|
|
|
|
AllowDomains: allowDomains,
|
|
DenyDomains: denyDomains,
|
|
}
|
|
}
|