X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=auth.go;h=6e4af5a83f4917c97d71854f0d21b2aeb5a2fbba;hb=59d77e55f0aaa0643c71a5066399f3d7ce740de6;hp=029d5a1f05f8050bf28a8d17001a5416831c2a42;hpb=a457ecff137f07dbdf7f321e86b266a71db91fc1;p=go-anidb.git diff --git a/auth.go b/auth.go index 029d5a1..6e4af5a 100644 --- a/auth.go +++ b/auth.go @@ -92,11 +92,12 @@ func (udp *udpWrap) ReAuth() udpapi.APIReply { defer udp.credLock.Unlock() if c := udp.credentials; c != nil { + logRequest(paramSet{cmd: "AUTH", params: paramMap{"user": decrypt(c.username)}}) r := udp.AniDBUDP.Auth( decrypt(c.username), decrypt(c.password), decrypt(c.udpKey)) - runtime.GC() // any better way to clean the plaintexts? + logReply(r) err := r.Error() @@ -114,6 +115,24 @@ func (udp *udpWrap) ReAuth() udpapi.APIReply { } } udp.connected = err == nil + + if udp.connected { + // We can't use SendRecv here as it would deadlock + ch := make(chan udpapi.APIReply, 1) + udp.sendQueueCh <- paramSet{ + cmd: "USER", + params: paramMap{"user": decrypt(c.username)}, + ch: ch, + } + reply := <-ch + + if reply != nil { + uid, _ := parseUserReply(reply) + udp.user = uid.User() + } + } + + runtime.GC() return r } return &noauthAPIReply{} @@ -158,8 +177,11 @@ func (adb *AniDB) Logout() error { adb.udp.sendLock.Lock() defer adb.udp.sendLock.Unlock() + adb.udp.user = nil + if adb.udp.connected { adb.udp.connected = false + logRequest(paramSet{cmd: "LOGOUT"}) return adb.udp.Logout() } return nil