Initial commit: Эфир мессенджер

This commit is contained in:
2026-04-06 14:57:36 +03:00
commit ff93679b6d
50 changed files with 5642 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
package logger
import (
"log/slog"
"os"
)
var Log *slog.Logger
func Init(environment string) {
var handler slog.Handler
if environment == "production" {
handler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelInfo,
})
} else {
handler = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
})
}
Log = slog.New(handler)
slog.SetDefault(Log)
}
func Info(msg string, args ...any) {
Log.Info(msg, args...)
}
func Debug(msg string, args ...any) {
Log.Debug(msg, args...)
}
func Error(msg string, args ...any) {
Log.Error(msg, args...)
}
func Warn(msg string, args ...any) {
Log.Warn(msg, args...)
}

View File

@@ -0,0 +1,52 @@
package validator
import (
"regexp"
"strings"
"unicode"
)
// ValidateLogin проверяет логин (только буквы, цифры, underscore, от 3 до 32 символов)
func ValidateLogin(login string) bool {
if len(login) < 3 || len(login) > 32 {
return false
}
matched, _ := regexp.MatchString("^[a-zA-Z0-9_]+$", login)
return matched
}
// ValidatePassword проверяет пароль (минимум 6 символов)
func ValidatePassword(password string) bool {
return len(password) >= 6
}
// SanitizeString очищает строку от лишних пробелов
func SanitizeString(s string) string {
return strings.TrimSpace(s)
}
// ValidateDisplayName проверяет отображаемое имя (не более 100 символов)
func ValidateDisplayName(name string) bool {
return len(name) <= 100
}
// ValidateBio проверяет биографию (не более 500 символов)
func ValidateBio(bio string) bool {
return len(bio) <= 500
}
// IsValidUUID проверяет валидность UUID
func IsValidUUID(uuid string) bool {
matched, _ := regexp.MatchString("^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$", uuid)
return matched
}
// ContainsOnlyPrintable проверяет, что строка содержит только печатаемые символы
func ContainsOnlyPrintable(s string) bool {
for _, r := range s {
if !unicode.IsPrint(r) {
return false
}
}
return true
}