GetConfigContext 新方法,允许传入上下文,避免协程泄漏
(ctx context2.Context, uri string)
| 45 | |
| 46 | // GetConfigContext 新方法,允许传入上下文,避免协程泄漏 |
| 47 | func (js *Js) GetConfigContext(ctx context2.Context, uri string) (config *Config, err error) { |
| 48 | var accessToken string |
| 49 | // 类型断言,如果断言成功,调用安全的 GetAccessTokenContext 方法 |
| 50 | if ctxHandle, ok := js.Context.AccessTokenHandle.(credential.AccessTokenContextHandle); ok { |
| 51 | accessToken, err = ctxHandle.GetAccessTokenContext(ctx) |
| 52 | } else { |
| 53 | // 如果没有实现 AccessTokenContextHandle 接口,调用旧的 GetAccessToken 方法 |
| 54 | accessToken, err = js.Context.GetAccessToken() |
| 55 | } |
| 56 | if err != nil { |
| 57 | return |
| 58 | } |
| 59 | |
| 60 | var ticketStr string |
| 61 | // 类型断言 jsTicket |
| 62 | if ticketCtxHandle, ok := js.JsTicketHandle.(credential.JsTicketContextHandle); ok { |
| 63 | ticketStr, err = ticketCtxHandle.GetTicketContext(ctx, accessToken) |
| 64 | } else { |
| 65 | // 如果没有实现 JsTicketContextHandle 接口,调用旧的 GetTicket 方法 |
| 66 | ticketStr, err = js.GetTicket(accessToken) |
| 67 | } |
| 68 | if err != nil { |
| 69 | return |
| 70 | } |
| 71 | |
| 72 | nonceStr := util.RandomStr(16) |
| 73 | timestamp := util.GetCurrTS() |
| 74 | str := fmt.Sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%d&url=%s", ticketStr, nonceStr, timestamp, uri) |
| 75 | sigStr := util.Signature(str) |
| 76 | |
| 77 | config = new(Config) |
| 78 | config.AppID = js.AppID |
| 79 | config.NonceStr = nonceStr |
| 80 | config.Timestamp = timestamp |
| 81 | config.Signature = sigStr |
| 82 | return |
| 83 | } |
no test coverage detected