login-validator: also log IP

This commit is contained in:
nemunaire 2018-03-05 17:36:25 +01:00 committed by Pierre-Olivier Mercier
parent ef17e1860e
commit 7ba307e9b3
1 changed files with 20 additions and 18 deletions

View File

@ -155,13 +155,28 @@ func (l loginChecker) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
if err := l.registerUser(lu.Username, r.RemoteAddr); err != nil {
// Find corresponding MAC
var fname string
spl := strings.SplitN(remoteAddr, ":", 2)
if ip := net.ParseIP(spl[0]); ip == nil {
return errors.New("Unable to parse given IPv4: " + spl[0])
} else if arptable, err := ARPAnalyze(); err != nil {
return err
} else if arpent := ARPContainsIP(arptable, ip); arpent == nil {
return errors.New("Unable to find MAC in ARP table")
} else {
fname = fmt.Sprintf("%02x-%02x-%02x-%02x-%02x-%02x-%02x", arpent.HWType, arpent.HWAddress[0], arpent.HWAddress[1], arpent.HWAddress[2], arpent.HWAddress[3], arpent.HWAddress[4], arpent.HWAddress[5])
}
// Register the user remotely
if err := l.registerUser(lu.Username, r.RemoteAddr, fname); err != nil {
log.Println("Error on remote registration:", err)
http.Error(w, "Internal server error. Please retry in a few minutes", http.StatusInternalServerError)
return
}
if err := l.lateLoginAction(lu.Username, r.RemoteAddr); err != nil {
// Generate PXE file
if err := l.lateLoginAction(lu.Username, r.RemoteAddr, fname); err != nil {
log.Println("Error on late login action:", err)
http.Error(w, "Internal server error. Please retry in a few minutes", http.StatusInternalServerError)
return
@ -171,8 +186,8 @@ func (l loginChecker) ServeHTTP(w http.ResponseWriter, r *http.Request) {
http.Error(w, "Success", http.StatusOK)
}
func (l loginChecker) registerUser(username, remoteAddr string) error {
bts, err := json.Marshal(map[string]interface{}{"login": username})
func (l loginChecker) registerUser(username, remoteAddr, mac string) error {
bts, err := json.Marshal(map[string]interface{}{"login": username, "ip": remoteAddr, "mac": mac})
if err != nil {
return nil
}
@ -197,20 +212,7 @@ func (l loginChecker) registerUser(username, remoteAddr string) error {
}
}
func (l loginChecker) lateLoginAction(username, remoteAddr string) error {
// Find corresponding MAC
var fname string
spl := strings.SplitN(remoteAddr, ":", 2)
if ip := net.ParseIP(spl[0]); ip == nil {
return errors.New("Unable to parse given IPv4: " + spl[0])
} else if arptable, err := ARPAnalyze(); err != nil {
return err
} else if arpent := ARPContainsIP(arptable, ip); arpent == nil {
return errors.New("Unable to find MAC in ARP table")
} else {
fname = fmt.Sprintf("%02x-%02x-%02x-%02x-%02x-%02x-%02x", arpent.HWType, arpent.HWAddress[0], arpent.HWAddress[1], arpent.HWAddress[2], arpent.HWAddress[3], arpent.HWAddress[4], arpent.HWAddress[5])
}
func (l loginChecker) lateLoginAction(username, remoteAddr, fname string) error {
if tpl, err := ioutil.ReadFile(path.Join(tftpDir, "pxelinux.cfg", "tpl")); err != nil {
log.Println("Unable to open tpl: ", err)
} else if file, err := os.OpenFile(path.Join(tftpDir, "pxelinux.cfg", fname), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.FileMode(0644)); err != nil {