diff --git a/client/src/components/admin/AdminTileGames.vue b/client/src/components/admin/AdminTileGames.vue new file mode 100644 index 0000000..4c645e1 --- /dev/null +++ b/client/src/components/admin/AdminTileGames.vue @@ -0,0 +1,28 @@ + + + + + Game name + # players + + + {{ games[id].name }} + {{ games[id].players.length }} + + + + + + + + diff --git a/client/src/pages/admin.vue b/client/src/pages/admin.vue new file mode 100644 index 0000000..5373961 --- /dev/null +++ b/client/src/pages/admin.vue @@ -0,0 +1,54 @@ + + + + + + + + + + + + You are not an admin. + + + + + + + diff --git a/client/src/pages/gamemaster.vue b/client/src/pages/gamemaster.vue index b315dd7..a4084e9 100644 --- a/client/src/pages/gamemaster.vue +++ b/client/src/pages/gamemaster.vue @@ -1,9 +1,6 @@ - - You are not a game master. - - + @@ -16,6 +13,9 @@ + + You are not a game master. + @@ -33,10 +33,6 @@ export default { } }, computed: { - isGamemasterOrAdmin() { - const user = this.$store.state.engine.user - return user && ['gamemaster', 'admin'].indexOf(user.role) != -1 - }, user() { return this.$store.state.engine.user || {} }, diff --git a/client/src/plugins/engine/fetchGames.js b/client/src/plugins/engine/fetchGames.js new file mode 100644 index 0000000..052ce0e --- /dev/null +++ b/client/src/plugins/engine/fetchGames.js @@ -0,0 +1,13 @@ +export default async function() { + const { store } = this.context + + try { + const response = await this.callApi('/api/games') + store.commit('engine/setGames', response.data) + } catch(e) { + store.commit('engine/setGames', undefined) + return false + } + + return true +} diff --git a/client/src/plugins/engine/index.js b/client/src/plugins/engine/index.js index 6eb4719..a052349 100644 --- a/client/src/plugins/engine/index.js +++ b/client/src/plugins/engine/index.js @@ -4,6 +4,7 @@ import stop from './stop' import fetchUpdate from './fetchUpdate' import fetchUserInfo from './fetchUserInfo' import fetchGameInfo from './fetchGameInfo' +import fetchGames from './fetchGames' import setGameName from './setGameName' import savePlayer from './savePlayer' import deletePlayer from './deletePlayer' @@ -32,6 +33,7 @@ export default (context, inject) => { fetchUpdate, fetchUserInfo, fetchGameInfo, + fetchGames, setGameName, savePlayer, deletePlayer, diff --git a/client/src/store/engine.js b/client/src/store/engine.js index e1491eb..1157e18 100644 --- a/client/src/store/engine.js +++ b/client/src/store/engine.js @@ -3,6 +3,7 @@ export const state = () => ({ version: -1, user: undefined, gameinfo: undefined, + games: undefined, }) export const mutations = { @@ -19,4 +20,7 @@ export const mutations = { setGameInfo(state, gameinfo) { state.gameinfo = gameinfo }, + setGames(state, games) { + state.games = games + } } diff --git a/server/src/application/getGames.go b/server/src/application/getGames.go new file mode 100644 index 0000000..3ebb781 --- /dev/null +++ b/server/src/application/getGames.go @@ -0,0 +1,35 @@ +package application + +import ( + "encoding/json" + "fmt" + "net/http" + "sirlab.de/go/knowyt/game" + "sirlab.de/go/knowyt/user" +) + +type Games struct { + Games map[string]*game.GameInfoJson `json:"games"` +} + +func (app *Application) GetGames(usr *user.User, w http.ResponseWriter, r *http.Request) { + if !usr.IsAdmin() { + w.WriteHeader(http.StatusForbidden) + fmt.Fprintf(w, "forbidden") + return + } + + app.mu.Lock() + defer app.mu.Unlock() + + games := Games{ + Games: make(map[string]*game.GameInfoJson), + } + for k, gm := range app.games { + games.Games[k] = gm.GetGameInfo() + } + + w.Header().Add("Content-Type", "application/json") + jsonString, _ := json.Marshal(games) + fmt.Fprintf(w, string(jsonString)) +} diff --git a/server/src/knowyt.go b/server/src/knowyt.go index dae21d2..b56c71b 100644 --- a/server/src/knowyt.go +++ b/server/src/knowyt.go @@ -22,6 +22,7 @@ func main() { mux.PublicHandleFunc("/api/logout", mux.Logout) mux.PrivateHandleFunc("/api/userinfo", mux.GetUserInfo) mux.PrivateHandleFunc("/api/gameinfo", app.GetGameInfo) + mux.PrivateHandleFunc("/api/games", app.GetGames) mux.PrivateHandleFunc("/api/setGameName", app.SetGameName) mux.PrivateHandleFunc("/api/savePlayer", app.SavePlayer) mux.PrivateHandleFunc("/api/deletePlayer", app.DeletePlayer)
You are not an admin.
You are not a game master.