Detailed changes
@@ -32,6 +32,7 @@ export interface LoginFormProps {
errorMessage?: string;
}
+// Sync rules with protocol.go.
export function LoginForm(props: LoginFormProps) {
const classes = useStyles();
const { control, handleSubmit, errors, setValue, register } = useForm<LoginFormData>({});
@@ -54,7 +55,7 @@ export function LoginForm(props: LoginFormProps) {
label="Nickname"
defaultValue=""
error={!!errors.nickname}
- rules={{ required: true, minLength: 3, maxLength: 16 }}
+ rules={{ required: true, minLength: 1, maxLength: 16 }}
fullWidth={true}
inputProps={noComplete}
autoFocus
@@ -71,7 +72,7 @@ export function LoginForm(props: LoginFormProps) {
label="Room name"
defaultValue=""
error={!!errors.roomName}
- rules={{ required: true, minLength: 3, maxLength: 16 }}
+ rules={{ required: true, minLength: 1, maxLength: 20 }}
fullWidth={true}
inputProps={noComplete}
/>
@@ -23,16 +23,20 @@ type RoomRequest struct {
Create bool `json:"create"`
}
-func (r *RoomRequest) Valid() bool {
- if len(r.RoomName) < 3 || len(r.RoomName) > 16 {
- return false
+func (r *RoomRequest) Valid() (msg string, valid bool) {
+ if len(r.RoomName) == 0 {
+ return "Room name cannot be empty.", false
+ }
+
+ if len(r.RoomName) > 20 {
+ return "Room name too long.", false
}
if len(r.RoomPass) == 0 {
- return false
+ return "Room pass cannot be empty.", false
}
- return true
+ return "", true
}
//easyjson:json
@@ -58,20 +62,24 @@ type WSQuery struct {
Nickname string `queryparam:"nickname"`
}
-func (w *WSQuery) Valid() bool {
+func (w *WSQuery) Valid() (msg string, valid bool) {
if w.RoomID == "" {
- return false
+ return "Room ID cannot be empty.", false
}
if w.PlayerID == uuid.Nil {
- return false
+ return "Player ID cannot be empty", false
+ }
+
+ if len(w.Nickname) == 0 {
+ return "Nickname cannot be empty.", false
}
- if len(w.Nickname) < 3 || len(w.Nickname) > 16 {
- return false
+ if len(w.Nickname) > 16 {
+ return "Nickname too long.", false
}
- return true
+ return "", true
}
//easyjson:json
@@ -370,7 +370,7 @@ func (r *Room) handleNote(playerID game.PlayerID, note *protocol.ClientNote) err
}
// Sync with protocol.go's validation method.
- if len(params.Nickname) < 3 || len(params.Nickname) > 16 {
+ if len(params.Nickname) == 0 || len(params.Nickname) > 16 {
return nil
}
@@ -128,15 +128,19 @@ func main() {
return
}
- if !req.Valid() {
- httpErr(w, http.StatusBadRequest)
+ w.Header().Add("Content-Type", "application/json")
+
+ if msg, valid := req.Valid(); !valid {
+ resp := &protocol.RoomResponse{
+ Error: stringPtr(msg),
+ }
+ w.WriteHeader(http.StatusBadRequest)
+ _ = json.NewEncoder(w).Encode(resp)
return
}
resp := &protocol.RoomResponse{}
- w.Header().Add("Content-Type", "application/json")
-
if req.Create {
room, err := srv.CreateRoom(req.RoomName, req.RoomPass)
if err != nil {
@@ -176,7 +180,7 @@ func main() {
return
}
- if !query.Valid() {
+ if _, valid := query.Valid(); !valid {
httpErr(w, http.StatusBadRequest)
return
}