// PubHandle implements the handle for the room's public directory (GET). func PubHandle(newConn net.Conn, roomName, httpPayload string, rooms *config.CherryRooms, preprocessor *html.Preprocessor) { pubdir := rooms.GetPublicDirectory(roomName) var httpReq string var spaceNr int for _, h := range httpPayload { if h == ' ' { spaceNr++ } if h == '\n' || h == '\r' || spaceNr > 1 { break } httpReq += string(h) } var replyBuffer []byte if len(pubdir) == 0 || !strings.HasPrefix(httpReq, "GET /pub/"+pubdir) { replyBuffer = rawhttp.MakeReplyBuffer(html.GetBadAssErrorData(), 404, true) } else { relativeLocalPath := httpReq[9:] _, err := os.Stat(relativeLocalPath) if os.IsNotExist(err) { replyBuffer = rawhttp.MakeReplyBuffer(html.GetBadAssErrorData(), 404, true) } else { replyBuffer = rawhttp.MakeReplyBufferByFilePath(relativeLocalPath, 200, true) } } newConn.Write(replyBuffer) newConn.Close() }