This commit is contained in:
Neale Pickett 2019-11-13 20:47:56 +00:00
parent 8771cf9d4f
commit 8af56b515d
4 changed files with 34 additions and 38 deletions

View File

@ -106,7 +106,7 @@ func (ctx *Instance) answerHandler(w http.ResponseWriter, req *http.Request) {
pointstr := req.FormValue("points") pointstr := req.FormValue("points")
answer := req.FormValue("answer") answer := req.FormValue("answer")
if ! ctx.ValidTeamId(teamId) { if !ctx.ValidTeamId(teamId) {
respond( respond(
w, req, JSendFail, w, req, JSendFail,
"Invalid team ID", "Invalid team ID",
@ -251,7 +251,7 @@ func (ctx *Instance) staticHandler(w http.ResponseWriter, req *http.Request) {
} }
func (ctx *Instance) manifestHandler(w http.ResponseWriter, req *http.Request) { func (ctx *Instance) manifestHandler(w http.ResponseWriter, req *http.Request) {
if (! ctx.Runtime.export_manifest) { if !ctx.Runtime.export_manifest {
http.Error(w, "Endpoint disabled", http.StatusForbidden) http.Error(w, "Endpoint disabled", http.StatusForbidden)
return return
} }
@ -262,7 +262,7 @@ func (ctx *Instance) manifestHandler(w http.ResponseWriter, req *http.Request) {
return return
} }
if (req.Method == http.MethodHead) { if req.Method == http.MethodHead {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
return return
} }
@ -273,13 +273,13 @@ func (ctx *Instance) manifestHandler(w http.ResponseWriter, req *http.Request) {
// Pack up the theme files // Pack up the theme files
theme_root_re := regexp.MustCompile(fmt.Sprintf("^%s/", ctx.ThemeDir)) theme_root_re := regexp.MustCompile(fmt.Sprintf("^%s/", ctx.ThemeDir))
filepath.Walk(ctx.ThemeDir, func (path string, info os.FileInfo, err error) error { filepath.Walk(ctx.ThemeDir, func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
return err return err
} }
if ! info.IsDir() { // Only package up files if !info.IsDir() { // Only package up files
localized_path := theme_root_re.ReplaceAllLiteralString( path, "") localized_path := theme_root_re.ReplaceAllLiteralString(path, "")
manifest = append(manifest, localized_path) manifest = append(manifest, localized_path)
} }
return nil return nil
@ -287,13 +287,13 @@ func (ctx *Instance) manifestHandler(w http.ResponseWriter, req *http.Request) {
// Package up files for currently-unlocked puzzles in categories // Package up files for currently-unlocked puzzles in categories
for category_name, category := range ctx.categories { for category_name, category := range ctx.categories {
if _, ok := ctx.MaxPointsUnlocked[category_name]; ok { // Check that the category is actually unlocked. This should never fail, probably if _, ok := ctx.MaxPointsUnlocked[category_name]; ok { // Check that the category is actually unlocked. This should never fail, probably
for _, file := range category.zf.File { for _, file := range category.zf.File {
parts := strings.Split(file.Name, "/") parts := strings.Split(file.Name, "/")
if (parts[0] == "content") { // Only pick up content files, not thing like map.txt if parts[0] == "content" { // Only pick up content files, not thing like map.txt
for _, puzzlemap := range category.puzzlemap { // Figure out which puzzles are currently unlocked for _, puzzlemap := range category.puzzlemap { // Figure out which puzzles are currently unlocked
if (puzzlemap.Path == parts[1] && puzzlemap.Points <= ctx.MaxPointsUnlocked[category_name]) { if puzzlemap.Path == parts[1] && puzzlemap.Points <= ctx.MaxPointsUnlocked[category_name] {
manifest = append(manifest, path.Join("content", category_name, path.Join(parts[1:]...))) manifest = append(manifest, path.Join("content", category_name, path.Join(parts[1:]...)))
break break

View File

@ -26,16 +26,16 @@ type Instance struct {
ThemeDir string ThemeDir string
AttemptInterval time.Duration AttemptInterval time.Duration
Runtime RuntimeConfig Runtime RuntimeConfig
categories map[string]*Mothball categories map[string]*Mothball
MaxPointsUnlocked map[string]int MaxPointsUnlocked map[string]int
update chan bool update chan bool
jPuzzleList []byte jPuzzleList []byte
jPointsLog []byte jPointsLog []byte
nextAttempt map[string]time.Time nextAttempt map[string]time.Time
nextAttemptMutex *sync.RWMutex nextAttemptMutex *sync.RWMutex
mux *http.ServeMux mux *http.ServeMux
} }
func (ctx *Instance) Initialize() error { func (ctx *Instance) Initialize() error {

View File

@ -12,7 +12,6 @@ import (
"time" "time"
) )
func (pm *PuzzleMap) MarshalJSON() ([]byte, error) { func (pm *PuzzleMap) MarshalJSON() ([]byte, error) {
if pm == nil { if pm == nil {
return []byte("null"), nil return []byte("null"), nil
@ -35,7 +34,6 @@ func (ctx *Instance) generatePuzzleList() {
} }
} }
ret := map[string][]PuzzleMap{} ret := map[string][]PuzzleMap{}
for catName, mb := range ctx.categories { for catName, mb := range ctx.categories {
filtered_puzzlemap := make([]PuzzleMap, 0, 30) filtered_puzzlemap := make([]PuzzleMap, 0, 30)
@ -273,11 +271,11 @@ func (ctx *Instance) isEnabled() bool {
func (ctx *Instance) UpdateConfig() { func (ctx *Instance) UpdateConfig() {
// Handle export manifest // Handle export manifest
if _, err := os.Stat(ctx.StatePath("export_manifest")); err == nil { if _, err := os.Stat(ctx.StatePath("export_manifest")); err == nil {
if (! ctx.Runtime.export_manifest) { if !ctx.Runtime.export_manifest {
log.Print("Enabling manifest export") log.Print("Enabling manifest export")
ctx.Runtime.export_manifest = true ctx.Runtime.export_manifest = true
} }
} else if (ctx.Runtime.export_manifest) { } else if ctx.Runtime.export_manifest {
log.Print("Disabling manifest export") log.Print("Disabling manifest export")
ctx.Runtime.export_manifest = false ctx.Runtime.export_manifest = false
} }

View File

@ -13,16 +13,15 @@ import (
) )
type PuzzleMap struct { type PuzzleMap struct {
Points int Points int
Path string Path string
} }
type Mothball struct { type Mothball struct {
zf *zip.ReadCloser zf *zip.ReadCloser
filename string filename string
puzzlemap []PuzzleMap puzzlemap []PuzzleMap
mtime time.Time mtime time.Time
} }
type MothballFile struct { type MothballFile struct {
@ -161,7 +160,7 @@ func (m *Mothball) Refresh() error {
mf, err := m.Open("map.txt") mf, err := m.Open("map.txt")
if err != nil { if err != nil {
// File isn't in there // File isn't in there
} else { } else {
defer mf.Close() defer mf.Close()
@ -183,11 +182,10 @@ func (m *Mothball) Refresh() error {
pm = append(pm, PuzzleMap{pointval, dir}) pm = append(pm, PuzzleMap{pointval, dir})
} }
m.puzzlemap = pm
}
m.puzzlemap = pm
}
return nil return nil
} }