full cookie support
This commit is contained in:
@ -41,6 +41,8 @@ func NewPlayer(c *bot.Client, settings Settings, events EventsListener) *Player
|
|||||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundKeepAlive, F: p.handleKeepAlivePacket},
|
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundKeepAlive, F: p.handleKeepAlivePacket},
|
||||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundRespawn, F: p.handleRespawnPacket},
|
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundRespawn, F: p.handleRespawnPacket},
|
||||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundPing, F: p.handlePingPacket},
|
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundPing, F: p.handlePingPacket},
|
||||||
|
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundCookieRequest, F: p.handleCookieRequestPacket},
|
||||||
|
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundStoreCookie, F: p.handleStoreCookiePacket},
|
||||||
)
|
)
|
||||||
events.attach(p)
|
events.attach(p)
|
||||||
return p
|
return p
|
||||||
|
37
bot/basic/cookie.go
Normal file
37
bot/basic/cookie.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package basic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Tnze/go-mc/data/packetid"
|
||||||
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (p *Player) handleCookieRequestPacket(packet pk.Packet) error {
|
||||||
|
var key pk.Identifier
|
||||||
|
err := packet.Scan(&key)
|
||||||
|
if err != nil {
|
||||||
|
return Error{err}
|
||||||
|
}
|
||||||
|
cookieContent := p.c.Cookies[string(key)]
|
||||||
|
err = p.c.Conn.WritePacket(pk.Marshal(
|
||||||
|
packetid.ServerboundCookieResponse,
|
||||||
|
key, pk.OptionEncoder[pk.ByteArray]{
|
||||||
|
Has: cookieContent != nil,
|
||||||
|
Val: pk.ByteArray(cookieContent),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
if err != nil {
|
||||||
|
return Error{err}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Player) handleStoreCookiePacket(packet pk.Packet) error {
|
||||||
|
var key pk.Identifier
|
||||||
|
var payload pk.ByteArray
|
||||||
|
err := packet.Scan(&key, &payload)
|
||||||
|
if err != nil {
|
||||||
|
return Error{err}
|
||||||
|
}
|
||||||
|
p.c.Cookies[string(key)] = []byte(payload)
|
||||||
|
return nil
|
||||||
|
}
|
@ -22,6 +22,7 @@ type Client struct {
|
|||||||
Name string
|
Name string
|
||||||
UUID uuid.UUID
|
UUID uuid.UUID
|
||||||
Registries registry.NetworkCodec
|
Registries registry.NetworkCodec
|
||||||
|
Cookies map[string][]byte
|
||||||
|
|
||||||
// Ingame packet handlers
|
// Ingame packet handlers
|
||||||
Events Events
|
Events Events
|
||||||
|
@ -13,9 +13,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type ConfigHandler interface {
|
type ConfigHandler interface {
|
||||||
GetCookie(key pk.Identifier) []byte
|
|
||||||
SetCookie(key pk.Identifier, payload []byte)
|
|
||||||
|
|
||||||
EnableFeature(features []pk.Identifier)
|
EnableFeature(features []pk.Identifier)
|
||||||
|
|
||||||
PushResourcePack(res ResourcePack)
|
PushResourcePack(res ResourcePack)
|
||||||
@ -60,10 +57,13 @@ func (c *Client) joinConfiguration(conn *net.Conn) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return ConfigErr{"cookie request", err}
|
return ConfigErr{"cookie request", err}
|
||||||
}
|
}
|
||||||
cookieContent := c.ConfigHandler.GetCookie(key)
|
cookieContent := c.Cookies[string(key)]
|
||||||
err = conn.WritePacket(pk.Marshal(
|
err = conn.WritePacket(pk.Marshal(
|
||||||
packetid.ServerboundConfigCookieResponse,
|
packetid.ServerboundConfigCookieResponse,
|
||||||
pk.ByteArray(cookieContent),
|
key, pk.OptionEncoder[pk.ByteArray]{
|
||||||
|
Has: cookieContent != nil,
|
||||||
|
Val: pk.ByteArray(cookieContent),
|
||||||
|
},
|
||||||
))
|
))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ConfigErr{"cookie response", err}
|
return ConfigErr{"cookie response", err}
|
||||||
@ -230,7 +230,7 @@ func (c *Client) joinConfiguration(conn *net.Conn) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return ConfigErr{"store cookie", err}
|
return ConfigErr{"store cookie", err}
|
||||||
}
|
}
|
||||||
c.ConfigHandler.SetCookie(key, []byte(payload))
|
c.Cookies[string(key)] = []byte(payload)
|
||||||
|
|
||||||
case packetid.ClientboundConfigTransfer:
|
case packetid.ClientboundConfigTransfer:
|
||||||
var host pk.String
|
var host pk.String
|
||||||
@ -328,25 +328,15 @@ func (d *DataPack) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DefaultConfigHandler struct {
|
type DefaultConfigHandler struct {
|
||||||
cookies map[pk.Identifier][]byte
|
|
||||||
resourcesPack []ResourcePack
|
resourcesPack []ResourcePack
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDefaultConfigHandler() *DefaultConfigHandler {
|
func NewDefaultConfigHandler() *DefaultConfigHandler {
|
||||||
return &DefaultConfigHandler{
|
return &DefaultConfigHandler{
|
||||||
cookies: make(map[pk.String][]byte),
|
|
||||||
resourcesPack: make([]ResourcePack, 0),
|
resourcesPack: make([]ResourcePack, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DefaultConfigHandler) GetCookie(key pk.Identifier) []byte {
|
|
||||||
return d.cookies[key]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *DefaultConfigHandler) SetCookie(key pk.Identifier, payload []byte) {
|
|
||||||
d.cookies[key] = payload
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *DefaultConfigHandler) EnableFeature(features []pk.Identifier) {}
|
func (d *DefaultConfigHandler) EnableFeature(features []pk.Identifier) {}
|
||||||
|
|
||||||
func (d *DefaultConfigHandler) PushResourcePack(res ResourcePack) {
|
func (d *DefaultConfigHandler) PushResourcePack(res ResourcePack) {
|
||||||
|
20
bot/login.go
20
bot/login.go
@ -124,6 +124,24 @@ func (c *Client) joinLogin(conn *net.Conn) error {
|
|||||||
)); err != nil {
|
)); err != nil {
|
||||||
return LoginErr{"login Plugin", err}
|
return LoginErr{"login Plugin", err}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case packetid.ClientboundLoginCookieRequest:
|
||||||
|
var key pk.Identifier
|
||||||
|
err := p.Scan(&key)
|
||||||
|
if err != nil {
|
||||||
|
return LoginErr{"cookie request", err}
|
||||||
|
}
|
||||||
|
cookieContent := c.Cookies[string(key)]
|
||||||
|
err = conn.WritePacket(pk.Marshal(
|
||||||
|
packetid.ServerboundLoginCookieResponse,
|
||||||
|
key, pk.OptionEncoder[pk.ByteArray]{
|
||||||
|
Has: cookieContent != nil,
|
||||||
|
Val: pk.ByteArray(cookieContent),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
if err != nil {
|
||||||
|
return LoginErr{"cookie response", err}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,7 +321,7 @@ func genEncryptionKeyResponse(shareSecret, publicKey, verifyToken []byte) (erp p
|
|||||||
return erp, err
|
return erp, err
|
||||||
}
|
}
|
||||||
return pk.Marshal(
|
return pk.Marshal(
|
||||||
packetid.ServerboundLoginEncryptionResponse,
|
packetid.ServerboundLoginKey,
|
||||||
pk.ByteArray(cryptPK),
|
pk.ByteArray(cryptPK),
|
||||||
pk.ByteArray(verifyT),
|
pk.ByteArray(verifyT),
|
||||||
), nil
|
), nil
|
||||||
|
Reference in New Issue
Block a user