Skip to content

Commit

Permalink
Pass version to UI through AppConfig, instead of login payload.master
Browse files Browse the repository at this point in the history
This makes the version info updated with a browser refresh (no need to logout and login again)
  • Loading branch information
deluan committed Apr 8, 2020
1 parent db24690 commit 089a921
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 14 deletions.
1 change: 0 additions & 1 deletion server/app/auth.go
Expand Up @@ -63,7 +63,6 @@ func handleLogin(ds model.DataStore, username string, password string, w http.Re
"name": user.Name,
"username": username,
"isAdmin": user.IsAdmin,
"version": consts.Version(),
})
}

Expand Down
31 changes: 21 additions & 10 deletions server/app/serve_index.go
Expand Up @@ -19,22 +19,16 @@ func ServeIndex(ds model.DataStore, fs http.FileSystem) http.HandlerFunc {
c, err := ds.User(r.Context()).CountAll()
firstTime := c == 0 && err == nil

t := template.New("initial state")
indexHtml, err := fs.Open("index.html")
if err != nil {
log.Error(r, "Could not find `index.html` template", err)
}
indexStr, err := ioutil.ReadAll(indexHtml)
if err != nil {
log.Error(r, "Could not read from `index.html`", err)
}
t, _ = t.Parse(string(indexStr))
t := getIndexTemplate(r, fs)

appConfig := map[string]interface{}{
"version": consts.Version(),
"firstTime": firstTime,
"baseURL": strings.TrimSuffix(conf.Server.BaseURL, "/"),
"loginBackgroundURL": conf.Server.UILoginBackgroundURL,
}
j, _ := json.Marshal(appConfig)

data := map[string]interface{}{
"AppConfig": string(j),
"Version": consts.Version(),
Expand All @@ -45,3 +39,20 @@ func ServeIndex(ds model.DataStore, fs http.FileSystem) http.HandlerFunc {
}
}
}

func getIndexTemplate(r *http.Request, fs http.FileSystem) *template.Template {
t := template.New("initial state")
indexHtml, err := fs.Open("index.html")
if err != nil {
log.Error(r, "Could not find `index.html` template", err)
}
indexStr, err := ioutil.ReadAll(indexHtml)
if err != nil {
log.Error(r, "Could not read from `index.html`", err)
}
t, err = t.Parse(string(indexStr))
if err != nil {
log.Error(r, "Error parsing `index.html`", err)
}
return t
}
11 changes: 11 additions & 0 deletions server/app/serve_index_test.go
Expand Up @@ -9,6 +9,7 @@ import (
"strconv"

"github.com/deluan/navidrome/conf"
"github.com/deluan/navidrome/consts"
"github.com/deluan/navidrome/model"
"github.com/deluan/navidrome/persistence"
. "github.com/onsi/ginkgo"
Expand Down Expand Up @@ -79,6 +80,16 @@ var _ = Describe("ServeIndex", func() {
config := extractAppConfig(w.Body.String())
Expect(config).To(HaveKeyWithValue("loginBackgroundURL", "my_background_url"))
})

It("sets the version", func() {
r := httptest.NewRequest("GET", "/index.html", nil)
w := httptest.NewRecorder()

ServeIndex(ds, fs)(w, r)

config := extractAppConfig(w.Body.String())
Expect(config).To(HaveKeyWithValue("version", consts.Version()))
})
})

var appConfigRegex = regexp.MustCompile(`(?m)window.__APP_CONFIG__="([^"]*)`)
Expand Down
2 changes: 0 additions & 2 deletions ui/src/authProvider.js
Expand Up @@ -26,7 +26,6 @@ const authProvider = {
jwtDecode(response.token)
localStorage.removeItem('initialAccountCreation')
localStorage.setItem('token', response.token)
localStorage.setItem('version', response.version)
localStorage.setItem('name', response.name)
localStorage.setItem('username', response.username)
localStorage.setItem('role', response.isAdmin ? 'admin' : 'regular')
Expand Down Expand Up @@ -77,7 +76,6 @@ const removeItems = () => {
localStorage.removeItem('name')
localStorage.removeItem('username')
localStorage.removeItem('role')
localStorage.removeItem('version')
localStorage.removeItem('subsonic-salt')
localStorage.removeItem('subsonic-token')
}
Expand Down
1 change: 1 addition & 0 deletions ui/src/config.js
@@ -1,4 +1,5 @@
const defaultConfig = {
version: 'dev',
firstTime: false,
baseURL: '',
loginBackgroundURL: 'https://source.unsplash.com/random/1600x900?music'
Expand Down
3 changes: 2 additions & 1 deletion ui/src/layout/AppBar.js
Expand Up @@ -7,6 +7,7 @@ import {
} from 'react-admin'
import { makeStyles } from '@material-ui/core'
import InfoIcon from '@material-ui/icons/Info'
import config from '../config'

const useStyles = makeStyles((theme) => ({
menuItem: {
Expand All @@ -22,7 +23,7 @@ const VersionMenu = forwardRef((props, ref) => {
ref={ref}
to="#"
primaryText={translate('menu.version', {
version: localStorage.getItem('version')
version: config.version
})}
leftIcon={<InfoIcon />}
className={classes.menuItem}
Expand Down

0 comments on commit 089a921

Please sign in to comment.