Skip to content

Instantly share code, notes, and snippets.

@saltlakeryan
Forked from lmammino/example.go
Last active January 5, 2021 17:47
Show Gist options
  • Save saltlakeryan/e06b9d340e0eefa0490f52620365ad22 to your computer and use it in GitHub Desktop.
Save saltlakeryan/e06b9d340e0eefa0490f52620365ad22 to your computer and use it in GitHub Desktop.
Ldap filter beautifier
package main
/*
Put ldap.go in ldap subdir
Run: go build example.go
Run: ./example < ldap-filter.txt
*/
import (
"fmt"
"os"
"bufio"
"log"
"bytes"
"./ldap"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
var b bytes.Buffer
for scanner.Scan() {
b.WriteString(scanner.Text())
b.WriteString("\n")
}
fmt.Printf(ldap.FormatFilter(b.String()))
if err := scanner.Err(); err != nil {
log.Println(err)
}
}
package ldap
import (
"strings"
)
// inspired by https://blogs.technet.microsoft.com/389thoughts/2016/11/24/ldap-query-prettyfier/
func FormatFilter(filter string) string {
buffer := new(strings.Builder)
noSpaces := strings.Replace(filter, " ", "", -1)
noSpaces = strings.Replace(noSpaces, "\n", "", -1)
tabLevel := 0
tabString := " "
inline := false
for _, char := range noSpaces {
switch char {
case '(':
buffer.WriteString("\n")
buffer.WriteString(strings.Repeat(tabString, tabLevel))
buffer.WriteString("(")
tabLevel = tabLevel + 1
inline = false
case ')':
tabLevel = tabLevel - 1
if !inline {
buffer.WriteString(strings.Repeat(tabString, tabLevel))
}
buffer.WriteString(")\n")
inline = false
default:
inline = true
buffer.WriteRune(char)
}
}
return buffer.String()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment