From 6a184e6662b8fa28178705d15d3dd516195257cf Mon Sep 17 00:00:00 2001 From: jypelle Date: Sat, 8 Jan 2022 14:32:27 +0100 Subject: [PATCH] Fix config file corruption on ssl pining for console client --- internal/cli/config/config.go | 2 +- internal/cliwa/app_wasm.go | 63 +++++++++++++++++-- internal/cliwa/component.go | 5 ++ internal/cliwa/homeComponent_wasm.go | 9 --- .../cliwa/homeHeaderButtonsComponent_wasm.go | 2 +- internal/cliwa/startComponent_wasm.go | 42 +------------ internal/srv/serverApp.go | 5 +- internal/version/version.go | 2 +- 8 files changed, 70 insertions(+), 60 deletions(-) create mode 100644 internal/cliwa/component.go diff --git a/internal/cli/config/config.go b/internal/cli/config/config.go index 28418fc..0dbf27d 100644 --- a/internal/cli/config/config.go +++ b/internal/cli/config/config.go @@ -106,7 +106,7 @@ func (c *ClientConfig) GetCert() []byte { } func (c *ClientConfig) SetCert(cert []byte) error { - err := os.WriteFile(c.GetCompleteConfigFilename(), cert, 0660) + err := os.WriteFile(filepath.Join(c.ConfigDir, configCertFilename), cert, 0660) if err != nil { return err } diff --git a/internal/cliwa/app_wasm.go b/internal/cliwa/app_wasm.go index 3b915ee..d13f732 100644 --- a/internal/cliwa/app_wasm.go +++ b/internal/cliwa/app_wasm.go @@ -40,8 +40,6 @@ func NewApp(debugMode bool) *App { eventFunc: make(chan func(), 100), } - app.StartComponent = NewStartComponent(app) - logrus.Infof("Client created") return app @@ -50,7 +48,34 @@ func NewApp(debugMode bool) *App { func (a *App) Start() { a.retrieveServerCredentials() a.HideLoader() - a.StartComponent.Render() + + // Autolog ? + func() { + username := jst.LocalStorage.Get("mifasolUsername").String() + password := jst.LocalStorage.Get("mifasolPassword").String() + if username != "" || password != "" { + a.config.Username = username + a.config.Password = password + + // Create rest Client + var err error + a.restClient, err = restClientV1.NewRestClient(&a.config, true) + if err != nil { + logrus.Errorf("Unable to instantiate mifasol rest client: %v", err) + } else { + if a.ConnectedUserId() == restApiV1.UndefinedUserId { + logrus.Errorf("Wrong credentials") + + jst.LocalStorage.Set("mifasolUsername", "") + jst.LocalStorage.Set("mifasolPassword", "") + } else { + a.ConnectAction() + return + } + } + } + a.DisconnectAction() + }() // Keep wasm app alive with event func loop func() { @@ -142,7 +167,11 @@ func (a *App) retrieveServerCredentials() { } func (a *App) ConnectedUserId() restApiV1.UserId { - return a.restClient.UserId() + if a.restClient == nil { + return restApiV1.UndefinedUserId + } else { + return a.restClient.UserId() + } } func (a *App) IsConnectedUserAdmin() bool { @@ -171,3 +200,29 @@ func (c *App) ShowLoader(message string) { func (c *App) HideLoader() { jst.Document.Get("body").Get("classList").Call("remove", "loading") } + +func (c *App) ConnectAction() { + c.localDb = localdb.NewLocalDb(c.restClient, c.config.Collator()) + c.HomeComponent = NewHomeComponent(c) + c.StartComponent = nil + c.Render() + c.HomeComponent.Reload() +} + +func (c *App) DisconnectAction() { + jst.LocalStorage.Set("mifasolUsername", "") + jst.LocalStorage.Set("mifasolPassword", "") + c.restClient = nil + c.localDb = nil + c.HomeComponent = nil + c.StartComponent = NewStartComponent(c) + c.Render() +} + +func (c *App) Render() { + if c.ConnectedUserId() == restApiV1.UndefinedUserId { + c.StartComponent.Render() + } else { + c.HomeComponent.Render() + } +} diff --git a/internal/cliwa/component.go b/internal/cliwa/component.go new file mode 100644 index 0000000..a0f0514 --- /dev/null +++ b/internal/cliwa/component.go @@ -0,0 +1,5 @@ +package cliwa + +type Component interface { + Render() +} diff --git a/internal/cliwa/homeComponent_wasm.go b/internal/cliwa/homeComponent_wasm.go index c33eb85..2ea7ff0 100644 --- a/internal/cliwa/homeComponent_wasm.go +++ b/internal/cliwa/homeComponent_wasm.go @@ -37,9 +37,6 @@ func (c *HomeComponent) Render() { c.LibraryComponent.Render() c.CurrentComponent.Render() c.PlayerComponent.Render() - - c.Reload() - } func (c *HomeComponent) uploadSongsAction() { @@ -49,12 +46,6 @@ func (c *HomeComponent) uploadSongsAction() { component.Render() } -func (c *HomeComponent) logOutAction() { - jst.LocalStorage.Set("mifasolUsername", "") - jst.LocalStorage.Set("mifasolPassword", "") - c.app.StartComponent.Render() -} - func (c *HomeComponent) refreshAction() { c.Reload() } diff --git a/internal/cliwa/homeHeaderButtonsComponent_wasm.go b/internal/cliwa/homeHeaderButtonsComponent_wasm.go index c20bac0..1a8d60c 100644 --- a/internal/cliwa/homeHeaderButtonsComponent_wasm.go +++ b/internal/cliwa/homeHeaderButtonsComponent_wasm.go @@ -26,7 +26,7 @@ func (c *HomeHeaderButtonsComponent) Render() { uploadSongsButton := jst.Id("uploadSongsButton") uploadSongsButton.Call("addEventListener", "click", c.app.AddEventFunc(c.app.HomeComponent.uploadSongsAction)) logOutButton := jst.Id("logOutButton") - logOutButton.Call("addEventListener", "click", c.app.AddEventFunc(c.app.HomeComponent.logOutAction)) + logOutButton.Call("addEventListener", "click", c.app.AddEventFunc(c.app.DisconnectAction)) refreshButton := jst.Id("refreshButton") refreshButton.Call("addEventListener", "click", c.app.AddEventFunc(c.app.HomeComponent.refreshAction)) } diff --git a/internal/cliwa/startComponent_wasm.go b/internal/cliwa/startComponent_wasm.go index 5513182..17ee333 100644 --- a/internal/cliwa/startComponent_wasm.go +++ b/internal/cliwa/startComponent_wasm.go @@ -2,7 +2,6 @@ package cliwa import ( "github.com/jypelle/mifasol/internal/cliwa/jst" - "github.com/jypelle/mifasol/internal/localdb" "github.com/jypelle/mifasol/restApiV1" "github.com/jypelle/mifasol/restClientV1" "github.com/sirupsen/logrus" @@ -21,34 +20,6 @@ func NewStartComponent(app *App) *StartComponent { } func (c *StartComponent) Render() { - c.app.restClient = nil - c.app.localDb = nil - - // Autolog ? - username := jst.LocalStorage.Get("mifasolUsername").String() - password := jst.LocalStorage.Get("mifasolPassword").String() - if username != "" || password != "" { - c.app.config.Username = username - c.app.config.Password = password - - // Create rest Client - var err error - c.app.restClient, err = restClientV1.NewRestClient(&c.app.config, true) - if err != nil { - logrus.Errorf("Unable to instantiate mifasol rest client: %v", err) - } else { - if c.app.ConnectedUserId() == restApiV1.UndefinedUserId { - logrus.Errorf("Wrong credentials") - - jst.LocalStorage.Set("mifasolUsername", "") - jst.LocalStorage.Set("mifasolPassword", "") - } else { - c.goHome() - return - } - } - } - // No autolog or autolog failed mainComponent := jst.Id("mainComponent") mainComponent.Set("innerHTML", c.app.RenderTemplate(nil, "start/index")) @@ -57,10 +28,8 @@ func (c *StartComponent) Render() { jst.Id("mifasolUsername").Call("focus") // Set button - //js.Global().Set("logInAction", c.app.AddEventFunc(c.logInAction)) startForm := jst.Id("startForm") startForm.Call("addEventListener", "submit", c.app.AddEventFuncPreventDefault(c.logInAction)) - } func (c *StartComponent) logInAction() { @@ -96,14 +65,5 @@ func (c *StartComponent) logInAction() { jst.LocalStorage.Set("mifasolPassword", c.app.config.Password) } - c.goHome() -} - -func (c *StartComponent) goHome() { - // c.app.restClient = restClient - c.app.localDb = localdb.NewLocalDb(c.app.restClient, c.app.config.Collator()) - - c.app.HomeComponent = NewHomeComponent(c.app) - c.app.HomeComponent.Render() - + c.app.ConnectAction() } diff --git a/internal/srv/serverApp.go b/internal/srv/serverApp.go index 865714b..59635f3 100644 --- a/internal/srv/serverApp.go +++ b/internal/srv/serverApp.go @@ -12,7 +12,6 @@ import ( "github.com/jypelle/mifasol/internal/tool" "github.com/jypelle/mifasol/internal/version" "github.com/sirupsen/logrus" - "io/ioutil" _ "modernc.org/sqlite" "net/http" "os" @@ -30,7 +29,7 @@ type ServerApp struct { func NewServerApp(configDir string, debugMode bool) *ServerApp { - logrus.Debugf("Creation of mifasol server %s ...", version.AppVersion.String()) + logrus.Infof("Creation of mifasol server %s ...", version.AppVersion.String()) app := &ServerApp{ ServerConfig: config.ServerConfig{ @@ -63,7 +62,7 @@ func NewServerApp(configDir string, debugMode bool) *ServerApp { // Open configuration file var draftServerEditableConfig *config.ServerEditableConfig - rawConfig, err := ioutil.ReadFile(app.ServerConfig.GetCompleteConfigFilename()) + rawConfig, err := os.ReadFile(app.ServerConfig.GetCompleteConfigFilename()) if err == nil { // Interpret configuration file draftServerEditableConfig = &config.ServerEditableConfig{} diff --git a/internal/version/version.go b/internal/version/version.go index cb6bf7d..313a747 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -8,6 +8,6 @@ var ( AppVersion = restApiV1.Version{ MajorNumber: 0, MinorNumber: 4, - PatchNumber: 3, + PatchNumber: 4, } )