Getting things going
This commit is contained in:
parent
1905f2c009
commit
0850550be4
@ -11,7 +11,10 @@ func handleAdminClients(w http.ResponseWriter, req *http.Request, page *pageData
|
|||||||
vars := mux.Vars(req)
|
vars := mux.Vars(req)
|
||||||
page.SubTitle = "Clients"
|
page.SubTitle = "Clients"
|
||||||
clientId := vars["id"]
|
clientId := vars["id"]
|
||||||
client := m.GetClient(clientId)
|
client, err := m.GetClient(clientId)
|
||||||
|
if err != nil {
|
||||||
|
client = NewClient(clientId)
|
||||||
|
}
|
||||||
clientIp, _, _ := net.SplitHostPort(req.RemoteAddr)
|
clientIp, _, _ := net.SplitHostPort(req.RemoteAddr)
|
||||||
if clientId == "" {
|
if clientId == "" {
|
||||||
type clientsPageData struct {
|
type clientsPageData struct {
|
||||||
|
@ -51,6 +51,7 @@ func handleAdminTeams(w http.ResponseWriter, req *http.Request, page *pageData)
|
|||||||
mbrName := req.FormValue("newmembername")
|
mbrName := req.FormValue("newmembername")
|
||||||
mbr, err := NewTeamMember(tm.UUID, "")
|
mbr, err := NewTeamMember(tm.UUID, "")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
mbr.Name = mbrName
|
||||||
mbr.SlackId = req.FormValue("newmemberslackid")
|
mbr.SlackId = req.FormValue("newmemberslackid")
|
||||||
mbr.Twitter = req.FormValue("newmembertwitter")
|
mbr.Twitter = req.FormValue("newmembertwitter")
|
||||||
mbr.Email = req.FormValue("newmemberemail")
|
mbr.Email = req.FormValue("newmemberemail")
|
||||||
|
18
assets.go
18
assets.go
@ -12113,16 +12113,16 @@ XzHfrrS2uzLN6JsOkTvo3Iny7fxf2KYCxs3I30osvf4OAAD//yR+jxHtAwAA
|
|||||||
|
|
||||||
"/templates/admin-votes.html": {
|
"/templates/admin-votes.html": {
|
||||||
local: "templates/admin-votes.html",
|
local: "templates/admin-votes.html",
|
||||||
size: 837,
|
size: 848,
|
||||||
modtime: 1506689947,
|
modtime: 1508506407,
|
||||||
compressed: `
|
compressed: `
|
||||||
H4sIAAAJbogA/3xSTW/cIBC9768YWXusbam9RRip2lxy6SFd9Y7NJIuKwYJZS1WU/94Bm5Av5cTM4w3z
|
H4sIAAAJbogA/3xSPW/cMAzd/SsI48b6DLRbIAsoLkuWDsGhu2wxOaGyZEg8A0WQ/15KtqPcRzOJfHoU
|
||||||
5g1CmxUmq2IcmoDxaim2k3ekjMPQyIO4fJenawjoCO63e9Ezdnh6gqDcI8LRfIPjCjcDdGecF6sIbxWp
|
Hx8ltJlhsCrGrg4Yz5ZiM3hHyjgMtazE6bs8nENAR/C83IuWsertDYJyrwg78w12Mzx0sD/iOFlF+KhI
|
||||||
bmfD8/MBoLIp0SnzjytXqHmnZBJD98r9ZeQmp7R2v9SMnIsxQC+3p9DpVFMj0fMYLJbUaBGMHprVE8Y2
|
7Vc2vL9XAIVNiU6Zv5u5Qo0rJZMYelbuDyMPOaV5/0uNyLnoA7RyeQqdTjUlEi2PwWJJ9RbB6K6ePWFs
|
||||||
502ZL/qwEZZrwPZ92I4+aAyoYeJh8/AAgi6otMzyBIUtyLA8mxkjqXkRPWevLk7WJLfubt9fpMmMe4wV
|
cl5v80UfFsJ0Dthch03vg8aAGgYeNg8PIOiESsssT1BYggzLoxkxkhon0XL26eJgTXLr6fH6Ik1m3Gss
|
||||||
5yi/mZC9j6DR63+yGPK1xz+t/ZMGLQ6+kajlZuiL0ORiT/ojY1N8pz8h7CEn3takCpuSsqms83TxZqpy
|
OEf5zYSsfQT1Xv+VmyFfe/zT2t9p0M3BC4laLoZ+CE0utqRvGYviJ32HsIaceFuSImxIyoZtnYeTN0OR
|
||||||
9kprcp+p7rJn6PVj+xpfKvrarAoqZr2tYLQYJujBe/pkWbr8AIsPxN/B27goNzQ/miTMooPutyHsipdw
|
s1Zak/sMZZctQ58fW9f4UdGWZkXQZtZlBaObYYJevKc7y9LbD7D4QvwdvI2Tcl39o07CLLr/2wpHT8pC
|
||||||
9qQs5PRjfz63PhykjyMP/wMAAP//x7l0qEUDAAA=
|
Tm+l8Lm05CD9IVn9CwAA//8Mc47HUAMAAA==
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
24
main.go
24
main.go
@ -58,7 +58,6 @@ type menuItem struct {
|
|||||||
var sessionSecret = "JCOP5e8ohkTcOzcSMe74"
|
var sessionSecret = "JCOP5e8ohkTcOzcSMe74"
|
||||||
|
|
||||||
var sessionStore = sessions.NewCookieStore([]byte(sessionSecret))
|
var sessionStore = sessions.NewCookieStore([]byte(sessionSecret))
|
||||||
var site *siteData
|
|
||||||
var r *mux.Router
|
var r *mux.Router
|
||||||
var m *model
|
var m *model
|
||||||
|
|
||||||
@ -69,7 +68,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadConfig()
|
loadConfig()
|
||||||
if err = site.SaveToDB(); err != nil {
|
if err = m.site.SaveToDB(); err != nil {
|
||||||
errorExit("Unable to save site config to DB: " + err.Error())
|
errorExit("Unable to save site config to DB: " + err.Error())
|
||||||
}
|
}
|
||||||
initialize()
|
initialize()
|
||||||
@ -109,8 +108,8 @@ func main() {
|
|||||||
|
|
||||||
chain := alice.New(loggingHandler).Then(r)
|
chain := alice.New(loggingHandler).Then(r)
|
||||||
|
|
||||||
fmt.Printf("Listening on port %d\n", site.Port)
|
fmt.Printf("Listening on port %d\n", m.site.Port)
|
||||||
log.Fatal(http.ListenAndServe("127.0.0.1:"+strconv.Itoa(site.Port), chain))
|
log.Fatal(http.ListenAndServe("127.0.0.1:"+strconv.Itoa(m.site.Port), chain))
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfig() {
|
func loadConfig() {
|
||||||
@ -187,6 +186,7 @@ func initialize() {
|
|||||||
gjName, _ := reader.ReadString('\n')
|
gjName, _ := reader.ReadString('\n')
|
||||||
gjName = strings.TrimSpace(gjName)
|
gjName = strings.TrimSpace(gjName)
|
||||||
m.jam.Name = gjName
|
m.jam.Name = gjName
|
||||||
|
assertError(m.jam.SaveToDB())
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.jam.Name != "" {
|
if m.jam.Name != "" {
|
||||||
@ -201,14 +201,14 @@ func loggingHandler(h http.Handler) http.Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func InitPageData(w http.ResponseWriter, req *http.Request) *pageData {
|
func InitPageData(w http.ResponseWriter, req *http.Request) *pageData {
|
||||||
if site.DevMode {
|
if m.site.DevMode {
|
||||||
w.Header().Set("Cache-Control", "no-cache")
|
w.Header().Set("Cache-Control", "no-cache")
|
||||||
}
|
}
|
||||||
p := new(pageData)
|
p := new(pageData)
|
||||||
// Get session
|
// Get session
|
||||||
var err error
|
var err error
|
||||||
var s *sessions.Session
|
var s *sessions.Session
|
||||||
if s, err = sessionStore.Get(req, site.SessionName); err != nil {
|
if s, err = sessionStore.Get(req, m.site.SessionName); err != nil {
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
@ -222,7 +222,7 @@ func InitPageData(w http.ResponseWriter, req *http.Request) *pageData {
|
|||||||
// With a valid account
|
// With a valid account
|
||||||
p.LoggedIn = m.isValidUserEmail(userEmail)
|
p.LoggedIn = m.isValidUserEmail(userEmail)
|
||||||
|
|
||||||
p.Site = site
|
p.Site = m.site
|
||||||
p.SubTitle = "GameJam Voting"
|
p.SubTitle = "GameJam Voting"
|
||||||
p.Stylesheets = make([]string, 0, 0)
|
p.Stylesheets = make([]string, 0, 0)
|
||||||
p.Stylesheets = append(p.Stylesheets, "/assets/vendor/css/pure-min.css")
|
p.Stylesheets = append(p.Stylesheets, "/assets/vendor/css/pure-min.css")
|
||||||
@ -258,7 +258,11 @@ func InitPageData(w http.ResponseWriter, req *http.Request) *pageData {
|
|||||||
p.HideAdminMenu = true
|
p.HideAdminMenu = true
|
||||||
|
|
||||||
p.ClientId = p.session.getClientId()
|
p.ClientId = p.session.getClientId()
|
||||||
cl := m.GetClient(p.ClientId)
|
var cl *Client
|
||||||
|
if cl, err = m.GetClient(p.ClientId); err != nil {
|
||||||
|
// A new client
|
||||||
|
cl = NewClient(p.ClientId)
|
||||||
|
}
|
||||||
p.ClientIsAuth = cl.Auth
|
p.ClientIsAuth = cl.Auth
|
||||||
p.ClientIsServer = clientIsServer(req)
|
p.ClientIsServer = clientIsServer(req)
|
||||||
|
|
||||||
@ -290,8 +294,8 @@ func (p *pageData) show(tmplName string, w http.ResponseWriter) error {
|
|||||||
// Spit out a template
|
// Spit out a template
|
||||||
func outputTemplate(tmplName string, tmplData interface{}, w http.ResponseWriter) error {
|
func outputTemplate(tmplName string, tmplData interface{}, w http.ResponseWriter) error {
|
||||||
n := "/templates/" + tmplName
|
n := "/templates/" + tmplName
|
||||||
l := template.Must(template.New("layout").Parse(FSMustString(site.DevMode, n)))
|
l := template.Must(template.New("layout").Parse(FSMustString(m.site.DevMode, n)))
|
||||||
t := template.Must(l.Parse(FSMustString(site.DevMode, n)))
|
t := template.Must(l.Parse(FSMustString(m.site.DevMode, n)))
|
||||||
return t.Execute(w, tmplData)
|
return t.Execute(w, tmplData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,23 +127,23 @@ func (m *model) SaveClient(cl *Client) error {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Return a client by it's UUID
|
// Return a client by it's UUID
|
||||||
func (m *model) GetClient(id string) *Client {
|
func (m *model) GetClient(id string) (*Client, error) {
|
||||||
for i := range m.clients {
|
for i := range m.clients {
|
||||||
if m.clients[i].UUID == id {
|
if m.clients[i].UUID == id {
|
||||||
return &m.clients[i]
|
return &m.clients[i], nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil, errors.New("Invalid Id")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a client by it's IP address
|
// Return a client by it's IP address
|
||||||
func (m *model) GetClientByIp(ip string) *Client {
|
func (m *model) GetClientByIp(ip string) (*Client, error) {
|
||||||
for i := range m.clients {
|
for i := range m.clients {
|
||||||
if m.clients[i].IP == ip {
|
if m.clients[i].IP == ip {
|
||||||
return &m.clients[i]
|
return &m.clients[i], nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil, errors.New("Invalid Ip")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add/Update a client in the data model
|
// Add/Update a client in the data model
|
||||||
|
@ -61,6 +61,9 @@ func (gj *Gamejam) SaveToDB() error {
|
|||||||
defer gj.m.closeDB()
|
defer gj.m.closeDB()
|
||||||
|
|
||||||
var errs []error
|
var errs []error
|
||||||
|
if err := gj.m.bolt.SetValue(gj.mPath, "name", gj.Name); err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
// Save all Teams
|
// Save all Teams
|
||||||
for _, tm := range gj.Teams {
|
for _, tm := range gj.Teams {
|
||||||
if err := gj.SaveTeam(&tm); err != nil {
|
if err := gj.SaveTeam(&tm); err != nil {
|
||||||
|
@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,16 +60,16 @@ func (s *siteData) LoadFromDB() error {
|
|||||||
}
|
}
|
||||||
defer s.m.closeDB()
|
defer s.m.closeDB()
|
||||||
|
|
||||||
if title, err := s.m.bolt.GetValue(s.mPath, "title"); err == nil {
|
if title, _ := s.m.bolt.GetValue(s.mPath, "title"); strings.TrimSpace(title) != "" {
|
||||||
s.Title = title
|
s.Title = title
|
||||||
}
|
}
|
||||||
if port, err := s.m.bolt.GetInt(s.mPath, "port"); err == nil {
|
if port, err := s.m.bolt.GetInt(s.mPath, "port"); err == nil {
|
||||||
s.Port = port
|
s.Port = port
|
||||||
}
|
}
|
||||||
if sessionName, err := s.m.bolt.GetValue(s.mPath, "session-name"); err == nil {
|
if sessionName, _ := s.m.bolt.GetValue(s.mPath, "session-name"); strings.TrimSpace(sessionName) != "" {
|
||||||
s.SessionName = sessionName
|
s.SessionName = sessionName
|
||||||
}
|
}
|
||||||
if serverDir, err := s.m.bolt.GetValue(s.mPath, "server-dir"); err == nil {
|
if serverDir, _ := s.m.bolt.GetValue(s.mPath, "server-dir"); strings.TrimSpace(serverDir) != "" {
|
||||||
s.ServerDir = serverDir
|
s.ServerDir = serverDir
|
||||||
}
|
}
|
||||||
s.changed = false
|
s.changed = false
|
||||||
|
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/pborman/uuid"
|
"github.com/pborman/uuid"
|
||||||
)
|
)
|
||||||
@ -23,8 +24,11 @@ func NewTeam(id string) *Team {
|
|||||||
if id == "" {
|
if id == "" {
|
||||||
id = uuid.New()
|
id = uuid.New()
|
||||||
}
|
}
|
||||||
|
// Create an emtpy game for the team
|
||||||
|
gm, _ := NewGame(id)
|
||||||
return &Team{
|
return &Team{
|
||||||
UUID: id,
|
UUID: id,
|
||||||
|
Game: gm,
|
||||||
mPath: []string{"jam", "teams", id},
|
mPath: []string{"jam", "teams", id},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,7 +118,8 @@ func (gj *Gamejam) LoadAllTeams() []Team {
|
|||||||
|
|
||||||
var tmUUIDs []string
|
var tmUUIDs []string
|
||||||
tmsPath := append(gj.mPath, "teams")
|
tmsPath := append(gj.mPath, "teams")
|
||||||
if tmUUIDs, err = m.bolt.GetBucketList(tmsPath); err != nil {
|
if tmUUIDs, err = gj.m.bolt.GetBucketList(tmsPath); err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
for _, v := range tmUUIDs {
|
for _, v := range tmUUIDs {
|
||||||
@ -276,10 +281,10 @@ func (gj *Gamejam) DeleteTeamMember(tm *Team, mbr *TeamMember) error {
|
|||||||
|
|
||||||
// Add a team
|
// Add a team
|
||||||
func (gj *Gamejam) AddTeam(tm *Team) error {
|
func (gj *Gamejam) AddTeam(tm *Team) error {
|
||||||
if _, err := gj.GetTeamById(tm.UUID); err != nil {
|
if _, err := gj.GetTeamById(tm.UUID); err == nil {
|
||||||
return errors.New("A team with that ID already exists")
|
return errors.New("A team with that ID already exists")
|
||||||
}
|
}
|
||||||
if _, err := gj.GetTeamByName(tm.Name); err != nil {
|
if _, err := gj.GetTeamByName(tm.Name); err == nil {
|
||||||
return errors.New("A team with that Name already exists")
|
return errors.New("A team with that Name already exists")
|
||||||
}
|
}
|
||||||
gj.Teams = append(gj.Teams, *tm)
|
gj.Teams = append(gj.Teams, *tm)
|
||||||
|
@ -85,13 +85,13 @@ func (gj *Gamejam) LoadAllVotes() []Vote {
|
|||||||
|
|
||||||
votesPath := []string{"jam", "votes"}
|
votesPath := []string{"jam", "votes"}
|
||||||
var cliUUIDs []string
|
var cliUUIDs []string
|
||||||
if cliUUIDs, err = m.bolt.GetBucketList(votesPath); err != nil {
|
if cliUUIDs, err = gj.m.bolt.GetBucketList(votesPath); err != nil {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
for _, cId := range cliUUIDs {
|
for _, cId := range cliUUIDs {
|
||||||
vtsPth := append(votesPath, cId)
|
vtsPth := append(votesPath, cId)
|
||||||
var times []string
|
var times []string
|
||||||
if times, err = m.bolt.GetBucketList(vtsPth); err != nil {
|
if times, err = gj.m.bolt.GetBucketList(vtsPth); err != nil {
|
||||||
// Error reading this bucket, move on to the next
|
// Error reading this bucket, move on to the next
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,9 @@ func (p *pageSession) getClientId() string {
|
|||||||
fmt.Println(" Client IP:" + clientIp)
|
fmt.Println(" Client IP:" + clientIp)
|
||||||
if clientIp != "127.0.0.1" {
|
if clientIp != "127.0.0.1" {
|
||||||
fmt.Println(" Pulling data by IP")
|
fmt.Println(" Pulling data by IP")
|
||||||
cli = m.GetClientByIp(clientIp)
|
if cli, err = m.GetClientByIp(clientIp); err != nil {
|
||||||
|
cli = NewClient(clientId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if cli != nil {
|
if cli != nil {
|
||||||
clientId = cli.UUID
|
clientId = cli.UUID
|
||||||
|
@ -71,7 +71,10 @@ func handlePublicSaveVote(w http.ResponseWriter, req *http.Request) {
|
|||||||
fmt.Println("Error parsing timestamp: " + ts)
|
fmt.Println("Error parsing timestamp: " + ts)
|
||||||
redirect("/", w, req)
|
redirect("/", w, req)
|
||||||
}
|
}
|
||||||
client := m.GetClient(page.ClientId)
|
client, err := m.GetClient(page.ClientId)
|
||||||
|
if err != nil {
|
||||||
|
client = NewClient(page.ClientId)
|
||||||
|
}
|
||||||
|
|
||||||
// voteSlice is an ordered string slice of the voters preferences
|
// voteSlice is an ordered string slice of the voters preferences
|
||||||
voteCSV := req.FormValue("uservote")
|
voteCSV := req.FormValue("uservote")
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="left" colspan="3">{{ len .Site.Votes }} Total Votes</td>
|
<td class="left" colspan="3">{{ len .TemplateData.AllVotes }} Total Votes</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
Loading…
Reference in New Issue
Block a user