Enha: avoid nil panics
This commit is contained in:
		| @@ -42,8 +42,9 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) { | ||||
| 		return | ||||
| 	} | ||||
| 	fi, err := getFullInfoByCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := validateMove(fi, models.UserRoleGuesser); err != nil { | ||||
| @@ -206,8 +207,9 @@ func HandleMarkCard(w http.ResponseWriter, r *http.Request) { | ||||
| 		return | ||||
| 	} | ||||
| 	fi, err := getFullInfoByCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := validateMove(fi, models.UserRoleGuesser); err != nil { | ||||
| @@ -274,8 +276,9 @@ func HandleMarkCard(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| func HandleActionHistory(w http.ResponseWriter, r *http.Request) { | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	tmpl, err := template.ParseGlob("components/*.html") | ||||
| @@ -293,8 +296,9 @@ func HandleAddBot(w http.ResponseWriter, r *http.Request) { | ||||
| 	team := r.URL.Query().Get("team") | ||||
| 	role := r.URL.Query().Get("role") | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	var botname string | ||||
| @@ -319,8 +323,9 @@ func HandleRemoveBot(w http.ResponseWriter, r *http.Request) { | ||||
| 	botName := r.URL.Query().Get("bot") | ||||
| 	log.Debug("got remove-bot request", "bot_name", botName) | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := llmapi.RemoveBot(botName, fi.Room); err != nil { | ||||
|   | ||||
| @@ -72,8 +72,9 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) { | ||||
| 	} | ||||
| 	// get username | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	if fi.Room == nil { | ||||
| @@ -111,8 +112,9 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) { | ||||
| func HandleEndTurn(w http.ResponseWriter, r *http.Request) { | ||||
| 	// get username | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	// check if one who pressed it is from the team who has the turn | ||||
| @@ -143,8 +145,9 @@ func HandleEndTurn(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| func HandleStartGame(w http.ResponseWriter, r *http.Request) { | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	// check if enough players | ||||
| @@ -293,8 +296,9 @@ func HandleGiveClue(w http.ResponseWriter, r *http.Request) { | ||||
| 	clue := r.PostFormValue("clue") | ||||
| 	num := r.PostFormValue("number") | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	guessLimitU64, err := strconv.ParseUint(num, 10, 8) | ||||
| @@ -360,8 +364,9 @@ func HandleGiveClue(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| func HandleRenotifyBot(w http.ResponseWriter, r *http.Request) { | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	notifyBotIfNeeded(fi.Room) | ||||
|   | ||||
| @@ -75,8 +75,9 @@ func HandleExit(w http.ResponseWriter, r *http.Request) { | ||||
| 		return | ||||
| 	} | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 	if err != nil || fi == nil { | ||||
| 		log.Error("failed to fetch fi", "error", err) | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	if fi.Room.IsRunning { | ||||
|   | ||||
							
								
								
									
										10
									
								
								todos.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								todos.md
									
									
									
									
									
								
							| @@ -21,8 +21,8 @@ | ||||
| - redo card .revealed use: it should mean that card is revealed for everybody, while mime should be able to see cards as is; + | ||||
| - better styles and fluff; | ||||
| - common auth system between sites; | ||||
| - signup vs login; | ||||
| - passwords (to room and to login); | ||||
| - signup vs login; + | ||||
| - passwords (to room and to login); + | ||||
| === | ||||
| - show in backlog (and with that in prompt to llm) how many cards are left to open, also additional comment: if guess was right; | ||||
| - gameover to backlog; | ||||
| @@ -33,7 +33,7 @@ | ||||
| - possibly turn markings into parts of names of users (first three letters?); + | ||||
| - at game creation list languages and support them at backend; + | ||||
| - sql ping goroutine with reconnect on fail; + | ||||
| - player stats: played games, lost, won, rating elo, opened opposite words, opened white words, opened black words. | ||||
| - player stats: played games, lost, won, rating elo, opened opposite words, opened white words, opened black words. + | ||||
| - at the end of the game, all colors should be revealed; | ||||
| - tracing; | ||||
|  | ||||
| @@ -91,5 +91,5 @@ | ||||
| - mime sees the clue input out of turn; (eh) | ||||
| - there is a problem of two timers, they both could switch turn, but it is not easy to stop them from llmapi or handlers. + | ||||
| - journal still does not work; + | ||||
| - lose/win game; then exit room (while being the creator), then press to stats -> cannot find session in db, although cookie in place and session in db; | ||||
| - exit endpoints delets player from db; | ||||
| - lose/win game; then exit room (while being the creator), then press to stats -> cannot find session in db, although cookie in place and session in db; + | ||||
| - exit endpoints delets player from db; + | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder