This commit is contained in:
@@ -140,6 +140,27 @@ unbanned, err := client.Players.Unban(ctx, rudder.UnbanPlayersParameters{
|
|||||||
err = client.Players.Delete(ctx, rudder.DeletePlayersParameters{
|
err = client.Players.Delete(ctx, rudder.DeletePlayersParameters{
|
||||||
PlayerIDs: []string{"p3"},
|
PlayerIDs: []string{"p3"},
|
||||||
})
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Верификация авторизации
|
||||||
|
|
||||||
|
`Players.VerifyAuth` — одиночный (не batch) вызов `POST /players/auth/verify`:
|
||||||
|
проверяет access token игрока и возвращает `playerId`, `projectId` и `status`
|
||||||
|
(`active`/`banned`/`deleted`).
|
||||||
|
|
||||||
|
```go
|
||||||
|
verification, err := client.Players.VerifyAuth(ctx, accessToken)
|
||||||
|
// verification.PlayerID, verification.ProjectID, verification.Status
|
||||||
|
```
|
||||||
|
|
||||||
|
`VerifyWebhookSignature` — пакетный хелпер для приёма webhook'ов с подписью
|
||||||
|
`X-Signature` (hex HMAC-SHA256 от сырого тела, ключ — webhook secret проекта):
|
||||||
|
|
||||||
|
```go
|
||||||
|
if !rudder.VerifyWebhookSignature(secret, body, r.Header.Get("X-Signature")) {
|
||||||
|
// подпись не сошлась — отклонить запрос
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
err = client.Quests.Reset(ctx, rudder.PlayerQuestsParameters{
|
err = client.Quests.Reset(ctx, rudder.PlayerQuestsParameters{
|
||||||
Items: []rudder.PlayerQuestRef{
|
Items: []rudder.PlayerQuestRef{
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// Code generated by apigen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package models
|
||||||
|
|
||||||
|
type VerifyPlayerAuthRequest struct {
|
||||||
|
AccessToken string `json:"accessToken,omitempty"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// Code generated by apigen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package models
|
||||||
|
|
||||||
|
type VerifyPlayerAuthResponse struct {
|
||||||
|
PlayerID string `json:"playerId,omitempty"`
|
||||||
|
ProjectID string `json:"projectId,omitempty"`
|
||||||
|
Status string `json:"status,omitempty"`
|
||||||
|
}
|
||||||
+10
@@ -46,6 +46,16 @@ func (s *PlayersService) Get(ctx context.Context, playerID string) (*PlayerDetai
|
|||||||
return &response, nil
|
return &response, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *PlayersService) VerifyAuth(ctx context.Context, accessToken string) (*PlayerAuthVerification, error) {
|
||||||
|
body := models.VerifyPlayerAuthRequest{AccessToken: accessToken}
|
||||||
|
|
||||||
|
var response PlayerAuthVerification
|
||||||
|
if err := s.transport.do(ctx, http.MethodPost, "/players/auth/verify", nil, body, &response); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &response, nil
|
||||||
|
}
|
||||||
|
|
||||||
type UpdatePlayersParameters struct {
|
type UpdatePlayersParameters struct {
|
||||||
IdempotencyKey string
|
IdempotencyKey string
|
||||||
Items []PlayerUpdate
|
Items []PlayerUpdate
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ type PlayerDetails = models.AdminPlayerDetails
|
|||||||
type PlayerList = models.ListPlayersResponse
|
type PlayerList = models.ListPlayersResponse
|
||||||
type PlayerUpdate = models.BatchUpdatePlayersItem
|
type PlayerUpdate = models.BatchUpdatePlayersItem
|
||||||
type PlayerBan = models.BatchBanPlayersItem
|
type PlayerBan = models.BatchBanPlayersItem
|
||||||
|
type PlayerAuthVerification = models.VerifyPlayerAuthResponse
|
||||||
|
|
||||||
type WalletBalance = models.WalletDetails
|
type WalletBalance = models.WalletDetails
|
||||||
type WalletTransaction = models.WalletAudit
|
type WalletTransaction = models.WalletAudit
|
||||||
|
|||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
package rudder
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
)
|
||||||
|
|
||||||
|
func VerifyWebhookSignature(secret string, body []byte, signature string) bool {
|
||||||
|
mac := hmac.New(sha256.New, []byte(secret))
|
||||||
|
mac.Write(body)
|
||||||
|
|
||||||
|
expected, err := hex.DecodeString(signature)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return hmac.Equal(mac.Sum(nil), expected)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user