Exemplo n.º 1
0
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,
	})
}
Exemplo n.º 2
0
Arquivo: pttweb.go Projeto: ptt/pttweb
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
}
Exemplo n.º 3
0
Arquivo: pttweb.go Projeto: ptt/pttweb
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
}
Exemplo n.º 4
0
Arquivo: pttweb.go Projeto: ptt/pttweb
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,
	})
}