Skip to content

Commit

Permalink
Move contenttype checks to util package
Browse files Browse the repository at this point in the history
  • Loading branch information
caitlinelfring committed Aug 22, 2020
1 parent 328452b commit 2ccf795
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 33 deletions.
35 changes: 2 additions & 33 deletions pkg/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package parser

import (
"bufio"
"fmt"
"go/token"
"net/http"
"os"
"strings"
"time"

"github.com/caitlinelfring/woke/pkg/rule"
"github.com/caitlinelfring/woke/pkg/util"
"github.com/rs/zerolog/log"
)

Expand Down Expand Up @@ -47,7 +45,7 @@ func (p *Parser) Parse(filename string) (results rule.Results, err error) {
}
defer f.Close()

if err = errIsNotTextFile(f); err != nil {
if err = util.IsTextFile(f); err != nil {
return
}

Expand Down Expand Up @@ -83,32 +81,3 @@ func (p *Parser) Parse(filename string) (results rule.Results, err error) {

return results, scanner.Err()
}

func detectContentType(file *os.File) (string, error) {
// Only the first 512 bytes are used to sniff the content type.
buffer := make([]byte, 512)
n, err := file.Read(buffer)
// Reset the file so a scanner can scan
_, _ = file.Seek(0, 0)

if err != nil {
return "", err
}
return http.DetectContentType(buffer[:n]), nil
}

func isTextFile(file *os.File) bool {
contentType, err := detectContentType(file)
if err != nil {
return false
}

return strings.HasPrefix(contentType, "text/plain")
}

func errIsNotTextFile(file *os.File) error {
if !isTextFile(file) {
return fmt.Errorf("%s is not a text file", file.Name())
}
return nil
}
37 changes: 37 additions & 0 deletions pkg/util/contenttype.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package util

import (
"fmt"
"net/http"
"os"
"strings"
)

func detectContentType(file *os.File) (string, error) {
// Only the first 512 bytes are used to sniff the content type.
buffer := make([]byte, 512)
n, err := file.Read(buffer)
// Reset the file so a scanner can scan
_, _ = file.Seek(0, 0)

if err != nil {
return "", err
}
return http.DetectContentType(buffer[:n]), nil
}

func isTextFile(file *os.File) bool {
contentType, err := detectContentType(file)
if err != nil {
return false
}

return strings.HasPrefix(contentType, "text/plain")
}

func IsTextFile(file *os.File) error {
if !isTextFile(file) {
return fmt.Errorf("%s is not a text file", file.Name())
}
return nil
}

0 comments on commit 2ccf795

Please sign in to comment.