func handleCls(c *Context, w http.ResponseWriter) error { vars := mux.Vars(c.R) bid, err := strconv.Atoi(vars["bid"]) if err != nil { return err } children, err := ptt.GetBoardChildren(bid) if err != nil { return err } boards := make([]pttbbs.Board, 0, 16) for _, bid := range children { if brd, err := ptt.GetBoard(bid); err == nil { if pttbbs.IsValidBrdName(brd.BrdName) && !brd.Over18 && !brd.Hidden { boards = append(boards, brd) } } } return page.ExecutePage(w, &page.Classlist{ Boards: boards, }) }
func hasPermViewBoard(c *Context, brd *pttbbs.Board) error { if !pttbbs.IsValidBrdName(brd.BrdName) || brd.Hidden { return NewNotFoundError(fmt.Errorf("no permission: %s", brd.BrdName)) } if brd.Over18 { if config.EnableOver18Cookie { if c.IsCrawler() { // Crawlers don't have age } else if !c.IsOver18() { return shouldAskOver18Error(c) } } else { return NewNotFoundError(ErrOver18CookieNotEnabled) } } return nil }
func getBoardByName(c *Context, brdname string) (*pttbbs.Board, error) { if !pttbbs.IsValidBrdName(brdname) { return nil, NewNotFoundError(fmt.Errorf("invalid board name: %s", brdname)) } brd, err := getBoardByNameCached(brdname) if err != nil { return nil, err } err = hasPermViewBoard(c, brd) if err != nil { return nil, err } return brd, nil }
func handleClsWithBid(c *Context, w http.ResponseWriter, bid int) error { if bid < 1 { return NewNotFoundError(fmt.Errorf("invalid bid: %v", bid)) } children, err := ptt.GetBoardChildren(bid) if err != nil { return err } boards := make([]pttbbs.Board, 0, 16) for _, bid := range children { if brd, err := ptt.GetBoard(bid); err == nil { if pttbbs.IsValidBrdName(brd.BrdName) && !brd.Over18 && !brd.Hidden { boards = append(boards, brd) } } } return page.ExecutePage(w, &page.Classlist{ Boards: boards, }) }