53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package auth
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
)
|
|
|
|
var authLogger *log.Logger
|
|
|
|
// InitAuthLog otvara log fajl za auth događaje (pokušaji prijave, zaključavanja)
|
|
func InitAuthLog() {
|
|
putanje := []string{"/var/log/ntech/auth.log", "./logs/auth.log"}
|
|
for _, p := range putanje {
|
|
if err := os.MkdirAll(filepath.Dir(p), 0755); err != nil {
|
|
continue
|
|
}
|
|
f, err := os.OpenFile(p, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
authLogger = log.New(f, "", 0)
|
|
log.Printf("Auth log: %s", p)
|
|
return
|
|
}
|
|
// fallback — logujemo u standardni izlaz
|
|
authLogger = log.New(os.Stdout, "", 0)
|
|
}
|
|
|
|
func zapisiAuth(nivo, ip, korisnik, razlog string) {
|
|
if authLogger == nil {
|
|
return
|
|
}
|
|
authLogger.Printf("%s %s user=%s ip=%s reason=%s",
|
|
time.Now().Format("2006-01-02 15:04:05"), nivo, korisnik, ip, razlog)
|
|
}
|
|
|
|
// LogNeuspehPrijave beleži neuspeli pokušaj prijave u fail2ban-kompatibilnom formatu
|
|
func LogNeuspehPrijave(ip, korisnik, razlog string) {
|
|
zapisiAuth("[FAILED]", ip, korisnik, razlog)
|
|
}
|
|
|
|
// LogUspehPrijave beleži uspešnu prijavu
|
|
func LogUspehPrijave(ip, korisnik string) {
|
|
zapisiAuth("[SUCCESS]", ip, korisnik, "ok")
|
|
}
|
|
|
|
// LogZaklucano beleži pokušaj prijave sa zaključanog IP-a
|
|
func LogZaklucano(ip, korisnik string) {
|
|
zapisiAuth("[LOCKED]", ip, korisnik, "too_many_attempts")
|
|
}
|