RPC return an authenticated PsyNetRPC client and a PlayerID for easy setup in examples.
()
| 13 | |
| 14 | // RPC return an authenticated PsyNetRPC client and a PlayerID for easy setup in examples. |
| 15 | func RPC() (*rlapi.PsyNetRPC, rlapi.PlayerID) { |
| 16 | egs := rlapi.NewEGS() |
| 17 | var auth *rlapi.TokenResponse |
| 18 | var authToken *rlapi.EOSTokenResponse |
| 19 | |
| 20 | if refreshTokenData, err := os.ReadFile(".rlshops"); err == nil && len(strings.TrimSpace(string(refreshTokenData))) > 0 { |
| 21 | refreshToken := strings.TrimSpace(string(refreshTokenData)) |
| 22 | auth, err = egs.AuthenticateWithRefreshToken(refreshToken) |
| 23 | if err != nil { |
| 24 | slog.Error("Failed to authenticate with refresh token", slog.Any("err", err)) |
| 25 | auth = authenticateWithCode(egs) |
| 26 | } |
| 27 | } else { |
| 28 | auth = authenticateWithCode(egs) |
| 29 | } |
| 30 | |
| 31 | err := os.WriteFile(".rlshops", []byte(auth.RefreshToken), 0644) |
| 32 | if err != nil { |
| 33 | slog.Error("Failed to save refresh token", slog.Any("err", err)) |
| 34 | } |
| 35 | |
| 36 | code, err := egs.GetExchangeCode(auth.AccessToken) |
| 37 | if err != nil { |
| 38 | log.Fatalf("Failed to get exchange code: %v", err) |
| 39 | } |
| 40 | |
| 41 | authToken, err = egs.ExchangeEOSToken(code) |
| 42 | if err != nil { |
| 43 | log.Fatalf("Failed to exchange EOS token: %v", err) |
| 44 | } |
| 45 | |
| 46 | psyNet := rlapi.NewPsyNet() |
| 47 | rpc, err := psyNet.AuthPlayer(authToken.AccessToken, authToken.AccountID, auth.DisplayName) |
| 48 | if err != nil { |
| 49 | log.Fatalf("Failed to authenticate player: %v", err) |
| 50 | } |
| 51 | |
| 52 | return rpc, rlapi.NewPlayerID(rlapi.PlatformEpic, authToken.AccountID) |
| 53 | } |
| 54 | |
| 55 | func authenticateWithCode(egs *rlapi.EGS) *rlapi.TokenResponse { |
| 56 | authURL := egs.GetAuthURL() |
no test coverage detected