"crypto/aes"
"crypto/cipher"
"crypto/rand"
- "github.com/Kovensky/go-anidb/udp"
+ "github.com/EliasFleckenstein03/go-anidb/udp"
"io"
"runtime"
)
defer udp.credLock.Unlock()
if c := udp.credentials; c != nil {
+ udp.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?
+ udp.logReply(r)
err := r.Error()
}
}
udp.connected = err == nil
+
+ if udp.connected {
+ if user := UserByName(decrypt(c.username)); user != nil {
+ udp.user = user
+ } else {
+ // 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{}
adb.udp.sendLock.Lock()
defer adb.udp.sendLock.Unlock()
+ adb.udp.user = nil
+
if adb.udp.connected {
adb.udp.connected = false
+ adb.udp.logRequest(paramSet{cmd: "LOGOUT"})
return adb.udp.Logout()
}
return nil