Skip to content

Commit 2721503

Browse files
committed
refining
1 parent a04b64d commit 2721503

File tree

8 files changed

+59
-69
lines changed

8 files changed

+59
-69
lines changed

coordinator/internal/config/proxy_config.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ type UpStream struct {
4545
type ProxyConfig struct {
4646
ProxyManager *ProxyManager `json:"proxy_manager"`
4747
ProxyName string `json:"proxy_name"`
48-
Auth *Auth `json:"auth"`
4948
Coordinators map[string]*UpStream `json:"coondiators"`
5049
}
5150

coordinator/internal/controller/proxy/auth.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,13 @@ const ProverTypesKey = "prover_types"
2929
const SignatureKey = "prover_signature"
3030

3131
// NewAuthController returns an LoginController instance
32-
func NewAuthController(cfg *config.ProxyConfig, clients Clients, vf *verifier.Verifier, proverMgr *ProverManager) *AuthController {
32+
func NewAuthController(cfg *config.ProxyConfig, clients Clients, proverMgr *ProverManager) *AuthController {
3333

34-
loginLogic := auth.NewLoginLogicWithSimpleDEduplicator(cfg.ProxyManager.Verifier, vf)
34+
// use a dummy Verifier to create login logic (we do not use any information in verifier)
35+
dummyVf := verifier.Verifier{
36+
OpenVMVkMap: make(map[string]struct{}),
37+
}
38+
loginLogic := auth.NewLoginLogicWithSimpleDeduplicator(cfg.ProxyManager.Verifier, &dummyVf)
3539

3640
authController := &AuthController{
3741
apiLogin: api.NewAuthControllerWithLogic(loginLogic),

coordinator/internal/controller/proxy/client.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ func newUpClient(cfg *config.UpStream) *upClient {
3030
}
3131
}
3232

33+
func (c *upClient) Token() string {
34+
return c.loginToken
35+
}
36+
37+
// need a parsable schema defination
38+
type loginSchema struct {
39+
Time string `json:"time"`
40+
Token string `json:"token"`
41+
}
42+
3343
// FullLogin performs the complete login process: get challenge then login
3444
func (c *upClient) Login(ctx context.Context, genLogin func(string) (*types.LoginParameter, error)) (*types.LoginSchema, error) {
3545
// Step 1: Get challenge
@@ -44,22 +54,24 @@ func (c *upClient) Login(ctx context.Context, genLogin func(string) (*types.Logi
4454
if err != nil {
4555
return nil, fmt.Errorf("failed to get challenge: %w", err)
4656
}
47-
defer challengeResp.Body.Close()
4857

49-
if challengeResp.StatusCode != http.StatusOK {
50-
return nil, fmt.Errorf("challenge request failed with status: %d", challengeResp.StatusCode)
58+
parsedResp, err := handleHttpResp(challengeResp)
59+
if err != nil {
60+
return nil, err
61+
} else if parsedResp.ErrCode != 0 {
62+
return nil, fmt.Errorf("challenge failed: %d (%s)", parsedResp.ErrCode, parsedResp.ErrMsg)
5163
}
5264

53-
// Step 2: Parse challenge response
54-
var loginSchema types.LoginSchema
55-
if err := json.NewDecoder(challengeResp.Body).Decode(&loginSchema); err != nil {
65+
// Ste p2: Parse challenge response
66+
var challengeSchema loginSchema
67+
if err := parsedResp.DecodeData(&challengeSchema); err != nil {
5668
return nil, fmt.Errorf("failed to parse challenge response: %w", err)
5769
}
5870

5971
// Step 3: Use the token from challenge as Bearer token for login
6072
url = fmt.Sprintf("%s/coordinator/v1/login", c.baseURL)
6173

62-
param, err := genLogin(loginSchema.Token)
74+
param, err := genLogin(challengeSchema.Token)
6375
if err != nil {
6476
return nil, fmt.Errorf("failed to setup login parameter: %w", err)
6577
}
@@ -75,26 +87,32 @@ func (c *upClient) Login(ctx context.Context, genLogin func(string) (*types.Logi
7587
}
7688

7789
req.Header.Set("Content-Type", "application/json")
78-
req.Header.Set("Authorization", "Bearer "+loginSchema.Token)
90+
req.Header.Set("Authorization", "Bearer "+challengeSchema.Token)
7991

8092
loginResp, err := c.httpClient.Do(req)
8193
if err != nil {
8294
return nil, fmt.Errorf("failed to perform login request: %w", err)
8395
}
8496

85-
parsedResp, err := handleHttpResp(loginResp)
97+
parsedResp, err = handleHttpResp(loginResp)
8698
if err != nil {
8799
return nil, err
100+
} else if parsedResp.ErrCode != 0 {
101+
return nil, fmt.Errorf("login failed: %d (%s)", parsedResp.ErrCode, parsedResp.ErrMsg)
88102
}
89103

90-
var loginResult types.LoginSchema
104+
var loginResult loginSchema
91105
err = parsedResp.DecodeData(&loginResult)
92106
if err != nil {
93107
return nil, fmt.Errorf("login parsing data fail: %v", err)
94108
}
95109
c.loginToken = loginResult.Token
96-
return &loginResult, nil
97110

111+
// TODO: we need to parse time if we start making use of it
112+
113+
return &types.LoginSchema{
114+
Token: loginResult.Token,
115+
}, nil
98116
}
99117

100118
func handleHttpResp(resp *http.Response) (*ctypes.Response, error) {

coordinator/internal/controller/proxy/client_manager.go

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ func (cliMgr *ClientManager) Client(ctx context.Context) *upClient {
126126
// Set new completion context and launch login goroutine
127127
ctx, completionDone := context.WithCancel(context.TODO())
128128
loginCli := newUpClient(cliMgr.cfg)
129-
cliMgr.cachedCli.completionCtx = context.WithValue(ctx, "cli", loginCli)
129+
completionCtx = context.WithValue(ctx, "cli", loginCli)
130+
cliMgr.cachedCli.completionCtx = completionCtx
130131

131132
// Launch keep-login goroutine
132133
go func() {
@@ -138,40 +139,6 @@ func (cliMgr *ClientManager) Client(ctx context.Context) *upClient {
138139
cliMgr.cachedCli.cli = loginCli
139140
cliMgr.cachedCli.completionCtx = nil
140141

141-
// Launch waiting thread to clear cached client before expiration
142-
// go func() {
143-
// now := time.Now()
144-
// clearTime := expiredT.Add(-10 * time.Second) // 10s before expiration
145-
146-
// // If clear time is too soon (less than 10s from now), set it to 10s from now
147-
// if clearTime.Before(now.Add(10 * time.Second)) {
148-
// clearTime = now.Add(10 * time.Second)
149-
// log.Error("token expiration time is too close, delaying clear time",
150-
// "name", cliMgr.name,
151-
// "expiredT", expiredT,
152-
// "adjustedClearTime", clearTime)
153-
// }
154-
155-
// waitDuration := time.Until(clearTime)
156-
// log.Info("token expiration monitor started",
157-
// "name", cliMgr.name,
158-
// "expiredT", expiredT,
159-
// "clearTime", clearTime,
160-
// "waitDuration", waitDuration)
161-
162-
// timer := time.NewTimer(waitDuration)
163-
// select {
164-
// case <-ctx.Done():
165-
// timer.Stop()
166-
// log.Info("token expiration monitor cancelled", "name", cliMgr.name)
167-
// case <-timer.C:
168-
// log.Info("clearing cached client before token expiration",
169-
// "name", cliMgr.name,
170-
// "expiredT", expiredT)
171-
// cliMgr.clearCachedCli(loginCli)
172-
// }
173-
// }()
174-
175142
cliMgr.cachedCli.Unlock()
176143

177144
}()

coordinator/internal/controller/proxy/controller.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package proxy
22

33
import (
44
"github.com/prometheus/client_golang/prometheus"
5-
"github.com/scroll-tech/go-ethereum/log"
65

76
"scroll-tech/coordinator/internal/config"
8-
"scroll-tech/coordinator/internal/logic/verifier"
97
)
108

119
var (
@@ -26,13 +24,6 @@ func InitController(cfg *config.ProxyConfig, reg prometheus.Registerer) {
2624
// normalize cfg
2725
cfg.ProxyManager.Normalize()
2826

29-
vf, err := verifier.NewVerifier(cfg.ProxyManager.Verifier)
30-
if err != nil {
31-
panic("proof receiver new verifier failure")
32-
}
33-
34-
log.Info("verifier created", "openVmVerifier", vf.OpenVMVkMap)
35-
3627
clients := make(map[string]Client)
3728

3829
for nm, upCfg := range cfg.Coordinators {
@@ -45,7 +36,7 @@ func InitController(cfg *config.ProxyConfig, reg prometheus.Registerer) {
4536

4637
proverManager := NewProverManager()
4738

48-
Auth = NewAuthController(cfg, clients, vf, proverManager)
39+
Auth = NewAuthController(cfg, clients, proverManager)
4940
GetTask = NewGetTaskController(cfg, clients, proverManager, reg)
5041
SubmitProof = NewSubmitProofController(cfg, clients, proverManager, reg)
5142
}

coordinator/internal/logic/auth/login.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (s *SimpleDeduplicator) InsertChallenge(ctx context.Context, challengeStrin
4040
}
4141

4242
// NewLoginLogicWithSimpleDEduplicator new a LoginLogic, do not use db to deduplicate challege
43-
func NewLoginLogicWithSimpleDEduplicator(vcfg *config.VerifierConfig, vf *verifier.Verifier) *LoginLogic {
43+
func NewLoginLogicWithSimpleDeduplicator(vcfg *config.VerifierConfig, vf *verifier.Verifier) *LoginLogic {
4444
return newLoginLogic(&SimpleDeduplicator{}, vcfg, vf)
4545
}
4646

coordinator/internal/middleware/login_jwt.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ func nonIdendityAuthorizator(data interface{}, _ *gin.Context) bool {
2121
}
2222

2323
// LoginMiddleware jwt auth middleware
24-
func LoginMiddleware(conf *config.Config) *jwt.GinJWTMiddleware {
24+
func LoginMiddleware(auth *config.Auth) *jwt.GinJWTMiddleware {
2525
jwtMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{
2626
PayloadFunc: api.Auth.PayloadFunc,
2727
IdentityHandler: api.Auth.IdentityHandler,
2828
IdentityKey: types.PublicKey,
29-
Key: []byte(conf.Auth.Secret),
30-
Timeout: time.Second * time.Duration(conf.Auth.LoginExpireDurationSec),
29+
Key: []byte(auth.Secret),
30+
Timeout: time.Second * time.Duration(auth.LoginExpireDurationSec),
3131
Authenticator: api.Auth.Login,
3232
Authorizator: nonIdendityAuthorizator,
3333
Unauthorized: unauthorized,
@@ -49,13 +49,13 @@ func LoginMiddleware(conf *config.Config) *jwt.GinJWTMiddleware {
4949
}
5050

5151
// ProxyLoginMiddleware jwt auth middleware for proxy login
52-
func ProxyLoginMiddleware(conf *config.ProxyConfig) *jwt.GinJWTMiddleware {
52+
func ProxyLoginMiddleware(auth *config.Auth) *jwt.GinJWTMiddleware {
5353
jwtMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{
5454
PayloadFunc: api.Auth.PayloadFunc,
5555
IdentityHandler: api.Auth.IdentityHandler,
5656
IdentityKey: types.PublicKey,
57-
Key: []byte(conf.Auth.Secret),
58-
Timeout: time.Second * time.Duration(conf.Auth.LoginExpireDurationSec),
57+
Key: []byte(auth.Secret),
58+
Timeout: time.Second * time.Duration(auth.LoginExpireDurationSec),
5959
Authenticator: proxy.Auth.Login,
6060
Authorizator: nonIdendityAuthorizator,
6161
Unauthorized: unauthorized,

coordinator/internal/route/route.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func v1(router *gin.RouterGroup, conf *config.Config) {
2929
challengeMiddleware := middleware.ChallengeMiddleware(conf.Auth)
3030
r.GET("/challenge", challengeMiddleware.LoginHandler)
3131

32-
loginMiddleware := middleware.LoginMiddleware(conf)
32+
loginMiddleware := middleware.LoginMiddleware(conf.Auth)
3333
r.POST("/login", challengeMiddleware.MiddlewareFunc(), loginMiddleware.LoginHandler)
3434

3535
// need jwt token api
@@ -41,13 +41,24 @@ func v1(router *gin.RouterGroup, conf *config.Config) {
4141
}
4242
}
4343

44+
// Route register route for coordinator
45+
func ProxyRoute(router *gin.Engine, cfg *config.ProxyConfig, reg prometheus.Registerer) {
46+
router.Use(gin.Recovery())
47+
48+
observability.Use(router, "coordinator", reg)
49+
50+
r := router.Group("coordinator")
51+
52+
v1_proxy(r, cfg)
53+
}
54+
4455
func v1_proxy(router *gin.RouterGroup, conf *config.ProxyConfig) {
4556
r := router.Group("/v1")
4657

47-
challengeMiddleware := middleware.ChallengeMiddleware(conf.Auth)
58+
challengeMiddleware := middleware.ChallengeMiddleware(conf.ProxyManager.Auth)
4859
r.GET("/challenge", challengeMiddleware.LoginHandler)
4960

50-
loginMiddleware := middleware.ProxyLoginMiddleware(conf)
61+
loginMiddleware := middleware.ProxyLoginMiddleware(conf.ProxyManager.Auth)
5162
r.POST("/login", challengeMiddleware.MiddlewareFunc(), loginMiddleware.LoginHandler)
5263

5364
// need jwt token api

0 commit comments

Comments
 (0)