all repos — felt @ 4e3ef2d27d1ac4129cc54af577923e7e508ae40a

virtual tabletop for dungeons and dragons (and similar) using Go, MongoDB, and websockets

fetch table data and go back to table list
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmPl2eUACgkQO3+8IhRO
Y5jjsw//T8Awu9p4OMAiqzR1924hlpNozEgGkYDkdv/0bRaGpm5rR1FM0NvbnnMW
Idoe6HKcu4oB+i8LR/UCohlTHNM+3OYsxEjx+oJF0FUY0M9LQkgW0gP0atfkdZN4
wcBWw2hkt6qOAAZNZcf8aT8xR9gaFPpxlQCaZxKLc3fO5Ch5RE51R2eftkBQGGHk
HnAQk9VFjyhjtdVoLXh5ThK8vXT1vqi9+rYCynRUqHLPRpJGaXh4DGRM2b/Aflr4
OZb+nSAxRXUnZC57CVXCZjsAFV5oCAdzPflcaI8R67GWwRwEkEeKu7UKoifuQLI9
Gsy5cbJSVZ+BFK3bAS/8KACOFAQlFri1HOFxxxQ6NxIMkvXjSbXRL5LHMaADJHna
EPQyzIDfDRFRlJbH3OWAgN3tN9xEyad3snQCV9jLb6tj3qg69EKdL5/WNjcN32Jp
xcTI7EKuxImLxUHZ5UPScjUf2vctRzZ7O5PBe9TW3JnqgGB87Zxpw4jp694Gm0uy
tH4bDzUoQp2k1RNjalTjVGSM5nPWSi+groJUDM8KTvScNDja7r8vhe8aToYoaaJw
4/i/ZcZKmZ3l226imYTZA5foh52OusX/iH04Bu+EhA66zTCrU7paV8bwP75AL7AO
4JIjuMS9lTFaZ5hhTH3Xf0qPecfDWVyTEC8/Hp5tLrzTa+iIYJE=
=4WHZ
-----END PGP SIGNATURE-----
commit

4e3ef2d27d1ac4129cc54af577923e7e508ae40a

parent

92a30dd9fcf0ceb15b9afa443a7c91672bad5bd3

5 files changed, 43 insertions(+), 18 deletions(-)

jump to
M admin/admin.goadmin/admin.go

@@ -2,8 +2,7 @@ package admin

import ( "encoding/json" - "html/template" - "net/http" + _ "fmt" "hacklab.nilfm.cc/felt/admin/util" "hacklab.nilfm.cc/felt/models" "hacklab.nilfm.cc/felt/mongodb"

@@ -12,6 +11,8 @@ . "hacklab.nilfm.cc/quartzgun/middleware"

"hacklab.nilfm.cc/quartzgun/renderer" "hacklab.nilfm.cc/quartzgun/router" . "hacklab.nilfm.cc/quartzgun/util" + "html/template" + "net/http" ) func apiGetTableList(next http.Handler, udb auth.UserStore) http.Handler {

@@ -33,12 +34,11 @@

func apiGetTableData(next http.Handler, udb auth.UserStore, dbAdapter mongodb.DbAdapter) http.Handler { handlerFunc := func(w http.ResponseWriter, req *http.Request) { - tableName := req.Context().Value("Slug") - tablePass := req.Form["passcode"][0] - + urlParams := req.Context().Value("params").(map[string]string) + tableName := urlParams["Slug"] tableKey := models.TableKey{ - Name: tableName.(string), - Passcode: tablePass, + Name: tableName, + Passcode: req.FormValue("passcode"), } if dbAdapter.CheckTable(tableKey) {

@@ -46,10 +46,12 @@ mapUrl, _ := dbAdapter.GetMapImageUrl(tableKey)

auxMessage, _ := dbAdapter.GetAuxMessage(tableKey) availableTokens, _ := dbAdapter.GetTokens(tableKey, true) activeTokens, _ := dbAdapter.GetTokens(tableKey, false) + diceRolls, _ := dbAdapter.GetDiceRolls(tableKey) AddContextValue(req, "tableData", models.Table{ - Name: tableName.(string), - Passcode: tablePass, + Name: tableKey.Name, + Passcode: tableKey.Passcode, + DiceRolls: diceRolls, MapImageUrl: mapUrl, Tokens: activeTokens, AvailableTokens: availableTokens,
M admin/util/util.goadmin/util/util.go

@@ -2,9 +2,9 @@ package util

import ( "encoding/base64" - "net/http" "hacklab.nilfm.cc/felt/models" "hacklab.nilfm.cc/quartzgun/auth" + "net/http" "strings" )
M gametable/server.gogametable/server.go

@@ -4,16 +4,16 @@ import (

"context" "errors" "golang.org/x/time/rate" - "io/ioutil" - "log" - "net/http" - "nhooyr.io/websocket" "hacklab.nilfm.cc/felt/admin" "hacklab.nilfm.cc/felt/models" "hacklab.nilfm.cc/felt/mongodb" "hacklab.nilfm.cc/quartzgun/auth" "hacklab.nilfm.cc/quartzgun/cookie" "hacklab.nilfm.cc/quartzgun/renderer" + "io/ioutil" + "log" + "net/http" + "nhooyr.io/websocket" "sync" "time" )
M main.gomain.go

@@ -2,12 +2,12 @@ package main

import ( "context" + "hacklab.nilfm.cc/felt/gametable" + "hacklab.nilfm.cc/felt/mongodb" + "hacklab.nilfm.cc/quartzgun/indentalUserDB" "log" "net" "net/http" - "hacklab.nilfm.cc/felt/gametable" - "hacklab.nilfm.cc/felt/mongodb" - "hacklab.nilfm.cc/quartzgun/indentalUserDB" "os" "os/signal" "time"
M static/admin.jsstatic/admin.js

@@ -5,6 +5,29 @@ const createTableForm = document.getElementById("createTableForm");

const newTableName = document.getElementById("newTableName"); const newTablePass = document.getElementById("newTablePass"); +async function getTable(name, pass) { + try { + const headers = new Headers(); + headers.set('Authorization', 'Bearer ' + adminToken.access_token); + const res = await fetch(`/admin/api/table/${name}?passcode=${pass}`, { + method: 'GET', + headers: headers, + }); + + if (res.ok) { + infoHtml = "<a href='#' onclick='getTables()'>&larr; table list</a><br><pre>"; + infoHtml += await res.text(); + infoHtml += "</pre>" + adminZone.innerHTML = infoHtml; + } + else { + console.log(res.status); + } + } catch (err) { + console.dir(err) + } +} + async function getTables() { try { const headers = new Headers();

@@ -17,7 +40,7 @@ if (res.ok) {

const tableList = await res.json(); let tableListHTML = "<ul>\n"; for (const t of tableList) { - tableListHTML += `<li><a href="#">${t.name}</a></li>\n` + tableListHTML += `<li><a href="#" onclick="getTable('${t.name}','${t.passcode}');return false;">${t.name}</a></li>\n` } tableListHTML += "</ul>" adminZone.innerHTML = tableListHTML;