all repos — felt @ 1fd828f6fd9aef1ccbd335c0d31dfc3126a30e27

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

GameTableServer: implement 2-level priveleges for publishing messages, publish map image changes
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmRVwYsACgkQO3+8IhRO
Y5hisw/+LjZqbsYafGkhJhiy/sX2oXJsqRRkmRuiCo50k4mTsz2KAfGKTYCtUcYc
tibfXcorzB/I9990veXgemQOkYHrrJV/RQ+F0SgI1GPp2ZTMyzvWbN5LnL84YV3H
bvXgtCaarRS7caC+vIV0jA3TWL+sR43uJRAG1Ptb46z2UDJDhD6aK4he4sXb0oAc
VzuznyN8CgFi7VQccLNJFHl46tOgElC1r/IR7yhfai9QDfUI973HakETpV68adZe
zdrpjH3Cn3dQB2Kz/7i5DNtD0gmlqSb7Ajtffa+UcJk9LAbGHHt1Yqq5UwziCSoa
j8iZbGiSPR079iSrs9srbezueNb/qgLaREQGEim+1bjEcBlPIUYeahavW3ga4hhe
gWlGVRdYqjsHNtR3ozSjM939S+c0Dgoax1vGhpW4RoBPVkETM0kltknOhDITZhom
qMlOn+mqIRLrMLAzwmTH5MRyJ01SWmOvLT1G4U2ZQafe5xQmENcO84aNTM7rqDL/
TPyZQKKQPgMejPfsE1ktSlREsJ2gbk8s3uxECXeciT5hI6Mbci6ssEzJOS5xWQqW
XngPDrp1/2NB+XxUm1Z17znkYKf67TZBuyVujfgNUjDKlPC8MWHTeeI1JBDm15UB
UOxJzmNfzxSoea0mkHNUsG6fXwOFNdf8GGCBuQCHk86aPex+zgM=
=2902
-----END PGP SIGNATURE-----
commit

1fd828f6fd9aef1ccbd335c0d31dfc3126a30e27

parent

8f4eb7e9582b5057050d7177bd4a0e5aaacf5118

1 files changed, 22 insertions(+), 2 deletions(-)

jump to
M gametable/server.gogametable/server.go

@@ -34,6 +34,7 @@ serveMux http.ServeMux

subscribersLock sync.Mutex subscribers map[*Subscriber]models.TableKey dbAdapter mongodb.DbAdapter + udb auth.UserStore } func New(adapter mongodb.DbAdapter, udb auth.UserStore, uploads string, uploadMaxMB int) *GameTableServer {

@@ -43,6 +44,7 @@ logf: log.Printf,

subscribers: make(map[*Subscriber]models.TableKey), publishLimiter: rate.NewLimiter(rate.Every(time.Millisecond*100), 8), dbAdapter: adapter, + udb: udb, } srvr.serveMux.Handle("/table/", http.StripPrefix("/table/", renderer.Subtree("./static"))) srvr.serveMux.Handle("/uploads/", http.StripPrefix("/uploads/", renderer.Subtree(uploads)))

@@ -162,8 +164,12 @@ fmt.Println(err.Error())

return } - self.writeToDB(tableMsg) + err = self.writeToDB(tableMsg) + if err != nil { + fmt.Println(err.Error()) + return + } self.publishLimiter.Wait(context.Background()) for s, k := range self.subscribers {

@@ -175,6 +181,7 @@ go s.closeSlow()

} } } + } func (self *GameTableServer) getCurrentState(tableKey models.TableKey) []byte {

@@ -210,7 +217,20 @@ key := *tableMsg.Key

if tableMsg.DiceRoll != nil { err := self.dbAdapter.InsertDiceRoll(key, *tableMsg.DiceRoll) if err != nil { - fmt.Println(err.Error()) + return err + } + } + + // map image change and token addition/removal require admin authorization + if tableMsg.Auth != nil { + authorized, _ := self.udb.ValidateToken(*tableMsg.Auth) + if authorized { + if tableMsg.MapImg != nil { + err := self.dbAdapter.SetMapImageUrl(key, *tableMsg.MapImg) + if err != nil { + return err + } + } } } return nil