11package proxy
22
33import (
4+ "context"
45 "fmt"
6+ "sync"
7+ "time"
58
69 jwt "github.com/appleboy/gin-jwt/v2"
710 "github.com/gin-gonic/gin"
@@ -21,6 +24,7 @@ type AuthController struct {
2124 proverMgr * ProverManager
2225}
2326
27+ const upstreamConnTimeout = time .Second * 5
2428const LoginParamCache = "login_param"
2529const ProverTypesKey = "prover_types"
2630const SignatureKey = "prover_signature"
@@ -59,17 +63,25 @@ func (a *AuthController) Login(c *gin.Context) (interface{}, error) {
5963 session := a .proverMgr .GetOrCreate (loginParam .PublicKey )
6064 log .Debug ("start handling login" , "cli" , loginParam .Message .ProverName )
6165
66+ loginCtx , cf := context .WithTimeout (context .Background (), upstreamConnTimeout )
67+ var wg sync.WaitGroup
6268 for _ , cli := range a .clients {
63-
69+ wg . Add ( 1 )
6470 go func (cli Client ) {
65- if err := session .ProxyLogin (c , cli , & loginParam .LoginParameter ); err != nil {
71+ defer wg .Done ()
72+ if err := session .ProxyLogin (loginCtx , cli , & loginParam .LoginParameter ); err != nil {
6673 log .Error ("proxy login failed during token cache update" ,
6774 "userKey" , loginParam .PublicKey ,
6875 "upstream" , cli .Name (),
6976 "error" , err )
7077 }
7178 }(cli )
7279 }
80+ go func (cliName string ) {
81+ wg .Wait ()
82+ cf ()
83+ log .Debug ("first login attempt has completed" , "cli" , cliName )
84+ }(loginParam .Message .ProverName )
7385
7486 return loginParam .LoginParameter , nil
7587}
0 commit comments