~shulhan/karajo

8db3aab9f97b84811bdd5869d01369b53537aead — Shulhan 7 months ago 133f3c8
all: split the memory FS initialization into separate method

This changes also move the public files into separate directory "public"
under testdata, to make it more clear and manageable.
4 files changed, 39 insertions(+), 24 deletions(-)

M internal/cmd/karajo-example/main.go
M karajo.go
R testdata/{index.html => public/index.html}
R testdata/{sub/index.html => public/sub/index.html}
M internal/cmd/karajo-example/main.go => internal/cmd/karajo-example/main.go +1 -1
@@ 29,7 29,7 @@ func main() {
	)

	env.DirBase = `testdata/example`
	env.DirPublic = `testdata`
	env.DirPublic = `testdata/public`
	env.Secret = `s3cret`
	env.IsDevelopment = true


M karajo.go => karajo.go +38 -23
@@ 68,48 68,63 @@ func Sign(payload, secret []byte) (sign string) {
func New(env *Environment) (k *Karajo, err error) {
	var logp = `New`

	err = env.init()
	if err != nil {
		return nil, fmt.Errorf(`%s: %w`, logp, err)
	}

	k = &Karajo{
		env: env,
	}

	err = env.init()
	mlog.SetPrefix(env.Name + `:`)

	err = k.initMemfs()
	if err != nil {
		return nil, fmt.Errorf(`%s: %w`, logp, err)
	}

	mlog.SetPrefix(env.Name + `:`)
	err = k.initHttpd()
	if err != nil {
		return nil, fmt.Errorf(`%s: %w`, logp, err)
	}

	return k, nil
}

// initMemfs initialize the memory file system for serving the WUI and public
// directory.
func (k *Karajo) initMemfs() (err error) {
	var logp = `initMemfs`

	if memfsWww == nil {
		return nil, fmt.Errorf(`%s: empty embedded www`, logp)
		return fmt.Errorf(`%s: empty embedded www`, logp)
	}

	memfsWww.Opts.TryDirect = env.IsDevelopment
	memfsWww.Opts.TryDirect = k.env.IsDevelopment

	if len(env.DirPublic) != 0 {
		var (
			opts = memfs.Options{
				Root:      env.DirPublic,
				TryDirect: true,
			}
			memfsPublic *memfs.MemFS
		)
	if len(k.env.DirPublic) == 0 {
		return nil
	}

		memfsPublic, err = memfs.New(&opts)
		if err != nil {
			return nil, fmt.Errorf(`%s: %w`, logp, err)
	var (
		opts = memfs.Options{
			Root:      k.env.DirPublic,
			TryDirect: true,
		}
		memfsPublic *memfs.MemFS
	)

		memfsWww = memfs.Merge(memfsWww, memfsPublic)
		memfsWww.Root.SysPath = env.DirPublic
		memfsWww.Opts.TryDirect = true
	}

	err = k.initHttpd()
	memfsPublic, err = memfs.New(&opts)
	if err != nil {
		return nil, fmt.Errorf(`%s: %w`, logp, err)
		return fmt.Errorf(`%s: %w`, logp, err)
	}

	return k, nil
	memfsWww = memfs.Merge(memfsWww, memfsPublic)
	memfsWww.Root.SysPath = k.env.DirPublic
	memfsWww.Opts.TryDirect = true

	return nil
}

// Start all the jobs and the HTTP server.

R testdata/index.html => testdata/public/index.html +0 -0
R testdata/sub/index.html => testdata/public/sub/index.html +0 -0