1
4
mirror of https://github.com/yunginnanet/HellPot synced 2024-07-01 02:00:48 +00:00
HellPot/heffalump/heffalump.go

62 lines
1.3 KiB
Go
Raw Normal View History

2021-09-15 13:43:01 +00:00
/*
Package heffalump attempts to encapsulate the original work by carlmjohnson on heffalump
https://github.com/carlmjohnson/heffalump
2021-09-15 21:25:02 +00:00
*/
2021-09-15 13:43:01 +00:00
package heffalump
import (
2021-09-15 16:52:18 +00:00
"bufio"
2021-09-15 13:43:01 +00:00
"io"
"sync"
2022-09-11 10:04:46 +00:00
"github.com/yunginnanet/HellPot/internal/config"
2021-09-15 13:43:01 +00:00
)
var log = config.GetLogger()
// DefaultHeffalump represents a Heffalump type
2022-09-11 10:04:46 +00:00
var DefaultHeffalump *Heffalump
2021-09-15 13:43:01 +00:00
// Heffalump represents our buffer pool and markov map from Heffalump
type Heffalump struct {
2022-09-11 10:04:46 +00:00
pool *sync.Pool
2021-09-15 13:43:01 +00:00
buffsize int
mm MarkovMap
}
// NewHeffalump instantiates a new Heffalump for markov generation and buffer/io operations
func NewHeffalump(mm MarkovMap, buffsize int) *Heffalump {
return &Heffalump{
2022-09-11 10:04:46 +00:00
pool: &sync.Pool{New: func() interface{} {
b := make([]byte, buffsize)
return b
}},
2021-09-15 13:43:01 +00:00
buffsize: buffsize,
mm: mm,
}
}
// WriteHell writes markov chain heffalump hell to the provided io.Writer
2021-09-15 17:33:48 +00:00
func (h *Heffalump) WriteHell(bw *bufio.Writer) (int64, error) {
var n int64
var err error
2021-09-15 16:13:16 +00:00
defer func() {
if r := recover(); r != nil {
log.Error().Interface("caller", r).Msg("panic recovered!")
}
}()
2022-09-11 10:04:46 +00:00
buf := h.pool.Get().([]byte)
defer h.pool.Put(buf)
2021-09-15 13:43:01 +00:00
2022-09-11 10:04:46 +00:00
if _, err = bw.WriteString("<html>\n<body>\n"); err != nil {
2021-09-15 17:33:48 +00:00
return n, err
2021-09-15 13:43:01 +00:00
}
2021-09-15 16:52:18 +00:00
if n, err = io.CopyBuffer(bw, h.mm, buf); err != nil {
2021-09-15 17:33:48 +00:00
return n, nil
2021-09-15 13:43:01 +00:00
}
2021-09-15 17:33:48 +00:00
return n, nil
2021-09-15 13:43:01 +00:00
}