package fs import ( "mime" "os" "strings" "unicode/utf8" ) func mediaType(filePath string) string { if strings.HasSuffix(filePath, ".gmi") { // This may not be present in the listings searched by mime.TypeByExtension, // so provide a dedicated fast path for it here. return "text/gemini" } slashIdx := strings.LastIndex(filePath, "/") dotIdx := strings.LastIndex(filePath[slashIdx+1:], ".") if dotIdx == -1 { return "application/octet-stream" } ext := filePath[slashIdx+1+dotIdx:] mtype := mime.TypeByExtension(ext) if mtype == "" { if contentsAreText(filePath) { return "text/plain" } return "application/octet-stream" } return mtype } func isPrivate(fullpath string) bool { for _, segment := range strings.Split(fullpath, "/") { if len(segment) > 1 && segment[0] == '.' { return true } } return false } func contentsAreText(filepath string) bool { f, err := os.Open(filepath) if err != nil { return false } defer func() { _ = f.Close() }() var buf [1024]byte n, err := f.Read(buf[:]) if err != nil { return false } for i, c := range string(buf[:n]) { if i+utf8.UTFMax > n { // incomplete last char break } if c == 0xFFFD || c < ' ' && c != '\n' && c != '\t' && c != '\f' { return false } } return true }