]> git.lizzy.rs Git - go-anidb.git/blobdiff - auth.go
Modernize
[go-anidb.git] / auth.go
diff --git a/auth.go b/auth.go
index 029d5a1f05f8050bf28a8d17001a5416831c2a42..c0c7efaf050b75043ba88c0d7f089728289e9361 100644 (file)
--- a/auth.go
+++ b/auth.go
@@ -4,7 +4,7 @@ import (
        "crypto/aes"
        "crypto/cipher"
        "crypto/rand"
-       "github.com/Kovensky/go-anidb/udp"
+       "github.com/EliasFleckenstein03/go-anidb/udp"
        "io"
        "runtime"
 )
@@ -92,11 +92,12 @@ func (udp *udpWrap) ReAuth() udpapi.APIReply {
        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()
 
@@ -114,6 +115,28 @@ func (udp *udpWrap) ReAuth() udpapi.APIReply {
                        }
                }
                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{}
@@ -158,8 +181,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
+               adb.udp.logRequest(paramSet{cmd: "LOGOUT"})
                return adb.udp.Logout()
        }
        return nil