Files

55 lines
1.2 KiB
Go

//go:build !plugin_selective || plugin_activemq || plugin_imap || plugin_pop3 || plugin_redis
package services
import (
"fmt"
"strconv"
"strings"
)
func hasLineBreak(s string) bool {
return strings.ContainsAny(s, "\r\n")
}
func rejectLineBreaks(values ...string) error {
for _, value := range values {
if hasLineBreak(value) {
return fmt.Errorf("credential contains line break")
}
}
return nil
}
func imapQuotedString(s string) (string, error) {
if hasLineBreak(s) {
return "", fmt.Errorf("imap credential contains line break")
}
return strconv.Quote(s), nil
}
func buildIMAPLoginCommand(tag, username, password string) (string, error) {
quotedUser, err := imapQuotedString(username)
if err != nil {
return "", err
}
quotedPass, err := imapQuotedString(password)
if err != nil {
return "", err
}
return fmt.Sprintf("%s LOGIN %s %s\r\n", tag, quotedUser, quotedPass), nil
}
func buildRedisAuthCommand(password string) []byte {
return buildRedisCommand("AUTH", password)
}
func buildRedisCommand(args ...string) []byte {
var b strings.Builder
_, _ = fmt.Fprintf(&b, "*%d\r\n", len(args))
for _, arg := range args {
_, _ = fmt.Fprintf(&b, "$%d\r\n%s\r\n", len(arg), arg)
}
return []byte(b.String())
}