mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-04 03:09:33 -06:00
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package assets
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/owncloud/ocis/ocis-pkg/log"
|
|
"github.com/owncloud/ocis/settings/pkg/config"
|
|
|
|
// Fake the import to make the dep tree happy.
|
|
_ "golang.org/x/net/context"
|
|
|
|
// Fake the import to make the dep tree happy.
|
|
_ "golang.org/x/net/webdav"
|
|
)
|
|
|
|
//go:generate go run github.com/UnnoTed/fileb0x embed.yml
|
|
|
|
// assets gets initialized by New and provides the handler.
|
|
type assets struct {
|
|
logger log.Logger
|
|
config *config.Config
|
|
}
|
|
|
|
// Open just implements the HTTP filesystem interface.
|
|
func (a assets) Open(original string) (http.File, error) {
|
|
if a.config.Asset.Path != "" {
|
|
if stat, err := os.Stat(a.config.Asset.Path); err == nil && stat.IsDir() {
|
|
custom := filepath.Join(
|
|
a.config.Asset.Path,
|
|
original,
|
|
)
|
|
|
|
if _, err := os.Stat(custom); !os.IsNotExist(err) {
|
|
f, err := os.Open(custom)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return f, nil
|
|
}
|
|
} else {
|
|
a.logger.Warn().
|
|
Str("path", a.config.Asset.Path).
|
|
Msg("Assets directory doesn't exist")
|
|
}
|
|
}
|
|
|
|
return FS.OpenFile(
|
|
CTX,
|
|
original,
|
|
os.O_RDONLY,
|
|
0644,
|
|
)
|
|
}
|
|
|
|
// New returns a new http filesystem to serve assets.
|
|
func New(opts ...Option) http.FileSystem {
|
|
options := newOptions(opts...)
|
|
|
|
return assets{
|
|
config: options.Config,
|
|
}
|
|
}
|