✨ Improved settings support
This commit is contained in:
parent
ce6530acef
commit
dd43f0bf22
|
@ -1,6 +1,7 @@
|
|||
package config
|
||||
|
||||
type Repository interface {
|
||||
GetBool(key string) bool
|
||||
GetInt(key string) int
|
||||
GetString(key string) string
|
||||
}
|
||||
|
|
|
@ -23,3 +23,7 @@ func (v *viperConfigRepository) GetString(key string) string {
|
|||
func (v *viperConfigRepository) GetInt(key string) int {
|
||||
return v.viper.GetInt(key)
|
||||
}
|
||||
|
||||
func (v *viperConfigRepository) GetBool(key string) bool {
|
||||
return v.viper.GetBool(key)
|
||||
}
|
||||
|
|
|
@ -37,3 +37,20 @@ func TestGetInt(t *testing.T) {
|
|||
|
||||
assert.Equal(t, 42, repository.NewViperConfigRepository(v).GetInt("testing.answer"))
|
||||
}
|
||||
|
||||
func TestGetBool(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
v := viper.New()
|
||||
_ = v.MergeConfigMap(map[string]interface{}{
|
||||
"testing": map[string]interface{}{
|
||||
"answer": 42,
|
||||
"enabled": true,
|
||||
"disabled": false,
|
||||
},
|
||||
})
|
||||
|
||||
assert.False(t, repository.NewViperConfigRepository(v).GetBool("testing.answer"))
|
||||
assert.True(t, repository.NewViperConfigRepository(v).GetBool("testing.enabled"))
|
||||
assert.False(t, repository.NewViperConfigRepository(v).GetBool("testing.disabled"))
|
||||
}
|
||||
|
|
|
@ -1,9 +1,26 @@
|
|||
package config
|
||||
|
||||
import "time"
|
||||
|
||||
type UseCase interface {
|
||||
Addr() string
|
||||
DBFileName() string
|
||||
Host() string
|
||||
Port() int
|
||||
URL() string
|
||||
GetDatabasePath() string
|
||||
GetDatabaseType() string
|
||||
GetIndieAuthAccessTokenExpirationTime() time.Duration
|
||||
GetIndieAuthEnabled() bool
|
||||
GetIndieAuthJWTSecret() string
|
||||
GetIndieAuthJWTSigningAlgorithm() string
|
||||
GetIndieAuthJWTSigningPrivateKeyFile() string
|
||||
GetName() string
|
||||
GetRunMode() string
|
||||
GetServerAddress() string
|
||||
GetServerCertificate() string
|
||||
GetServerDomain() string
|
||||
GetServerEnablePPROF() bool
|
||||
GetServerHost() string
|
||||
GetServerKey() string
|
||||
GetServerPort() int
|
||||
GetServerProtocol() string
|
||||
GetServerRootURL() string
|
||||
GetServerStaticRootPath() string
|
||||
GetServerStaticURLPrefix() string
|
||||
}
|
||||
|
|
|
@ -2,6 +2,10 @@ package usecase
|
|||
|
||||
import (
|
||||
"net"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/valyala/fasttemplate"
|
||||
|
||||
"source.toby3d.me/website/oauth/internal/config"
|
||||
)
|
||||
|
@ -16,22 +20,95 @@ func NewConfigUseCase(repo config.Repository) config.UseCase {
|
|||
}
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) URL() string {
|
||||
return useCase.repo.GetString("url")
|
||||
func (useCase *configUseCase) GetName() string {
|
||||
return useCase.repo.GetString("name")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) Host() string {
|
||||
func (useCase *configUseCase) GetRunMode() string {
|
||||
return useCase.repo.GetString("runMode")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerProtocol() string {
|
||||
return useCase.repo.GetString("server.protocol")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerDomain() string {
|
||||
return useCase.repo.GetString("server.domain")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerRootURL() string {
|
||||
t := fasttemplate.New(useCase.repo.GetString("server.rootUrl"), "{{", "}}")
|
||||
|
||||
data := make(map[string]interface{})
|
||||
for _, key := range []string{
|
||||
"domain",
|
||||
"httpAddr",
|
||||
"httpPort",
|
||||
"protocol",
|
||||
} {
|
||||
data[key] = useCase.repo.GetString("server." + key)
|
||||
}
|
||||
|
||||
return t.ExecuteString(data)
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerStaticURLPrefix() string {
|
||||
return useCase.repo.GetString("server.staticUrlPrefix")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerHost() string {
|
||||
return useCase.repo.GetString("server.host")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) Port() int {
|
||||
func (useCase *configUseCase) GetServerPort() int {
|
||||
return useCase.repo.GetInt("server.port")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) Addr() string {
|
||||
return net.JoinHostPort(useCase.repo.GetString("server.host"), useCase.repo.GetString("server.port"))
|
||||
func (useCase *configUseCase) GetServerAddress() string {
|
||||
return net.JoinHostPort(useCase.repo.GetString("server.host"),
|
||||
useCase.repo.GetString("server.port"))
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) DBFileName() string {
|
||||
return useCase.repo.GetString("database.connection.filename")
|
||||
func (useCase *configUseCase) GetServerCertificate() string {
|
||||
return filepath.Clean(useCase.repo.GetString("server.certFile"))
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerKey() string {
|
||||
return filepath.Clean(useCase.repo.GetString("server.keyFile"))
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerStaticRootPath() string {
|
||||
return useCase.repo.GetString("server.staticRootPath")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetServerEnablePPROF() bool {
|
||||
return useCase.repo.GetBool("server.enablePprof")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetDatabaseType() string {
|
||||
return useCase.repo.GetString("database.type")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetDatabasePath() string {
|
||||
return filepath.Clean(useCase.repo.GetString("database.path"))
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetIndieAuthEnabled() bool {
|
||||
return useCase.repo.GetBool("indieauth.enabled")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetIndieAuthAccessTokenExpirationTime() time.Duration {
|
||||
return time.Duration(useCase.repo.GetInt("indieauth.accessTokenExpirationTime")) * time.Second
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetIndieAuthJWTSigningAlgorithm() string {
|
||||
return useCase.repo.GetString("indieauth.jwtSigningAlgorithm")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetIndieAuthJWTSecret() string {
|
||||
return useCase.repo.GetString("indieauth.jwtSecret")
|
||||
}
|
||||
|
||||
func (useCase *configUseCase) GetIndieAuthJWTSigningPrivateKeyFile() string {
|
||||
return filepath.Clean(useCase.repo.GetString("indieauth.jwtSigningPrivateKeyFile"))
|
||||
}
|
||||
|
|
|
@ -1,64 +0,0 @@
|
|||
package usecase_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"source.toby3d.me/website/oauth/internal/config"
|
||||
repository "source.toby3d.me/website/oauth/internal/config/repository/viper"
|
||||
"source.toby3d.me/website/oauth/internal/config/usecase"
|
||||
)
|
||||
|
||||
//nolint: gochecknoglobals
|
||||
var ucase config.UseCase
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
v := viper.New()
|
||||
|
||||
for key, val := range map[string]interface{}{
|
||||
"database.client": "bolt",
|
||||
"database.connection.filename": "./data/development.db",
|
||||
"server.host": "127.0.0.1",
|
||||
"server.port": 3000,
|
||||
"url": "https://127.0.0.1:3000/",
|
||||
} {
|
||||
v.Set(key, val)
|
||||
}
|
||||
|
||||
ucase = usecase.NewConfigUseCase(repository.NewViperConfigRepository(v))
|
||||
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
|
||||
func TestAddr(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert.Equal(t, "127.0.0.1:3000", ucase.Addr())
|
||||
}
|
||||
|
||||
func TestDBFileName(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert.Equal(t, "./data/development.db", ucase.DBFileName())
|
||||
}
|
||||
|
||||
func TestHost(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert.Equal(t, "127.0.0.1", ucase.Host())
|
||||
}
|
||||
|
||||
func TestPort(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert.Equal(t, 3000, ucase.Port())
|
||||
}
|
||||
|
||||
func TestURL(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert.Equal(t, "https://127.0.0.1:3000/", ucase.URL())
|
||||
}
|
Loading…
Reference in New Issue