diff --git a/yggdrasil/authenticate.go b/yggdrasil/authenticate.go index caacf0e..c32f7f3 100644 --- a/yggdrasil/authenticate.go +++ b/yggdrasil/authenticate.go @@ -6,7 +6,6 @@ import ( type Access struct { ar authResp - ct string } // agent is a struct of auth @@ -20,7 +19,8 @@ type proof struct { Password string `json:"password"` } -type tokens struct { +// Tokens store AccessToken and ClientToken +type Tokens struct { AccessToken string `json:"accessToken"` ClientToken string `json:"clientToken"` } @@ -34,17 +34,18 @@ var defaultAgent = agent{ type authPayload struct { Agent agent `json:"agent"` proof - ClientToken string `json:"clientToken"` + ClientToken string `json:"clientToken,omitempty"` RequestUser bool `json:"requestUser"` } // authResp is the response from Mojang's auth server type authResp struct { - tokens + Tokens AvailableProfiles []Profile `json:"availableProfiles"` // only present if the agent field was received SelectedProfile Profile `json:"selectedProfile"` // only present if the agent field was received - User struct { // only present if requestUser was true in the request authPayload + User struct { + // only present if requestUser was true in the request authPayload ID string `json:"id"` // hexadecimal Properties []struct { Name string `json:"name"` @@ -86,7 +87,7 @@ func Authenticate(user, password string) (*Access, error) { return nil, *ar.Error } - return &Access{ar: ar, ct: pl.ClientToken}, nil + return &Access{ar}, nil } func (a *Access) SelectedProfile() (ID, Name string) { @@ -100,3 +101,10 @@ func (a *Access) AccessToken() string { func (a *Access) AvailableProfiles() []Profile { return a.ar.AvailableProfiles } + +func (a *Access) SetTokens(tokens Tokens) { + a.ar.Tokens = tokens +} +func (a *Access) GetTokens() Tokens { + return a.ar.Tokens +} diff --git a/yggdrasil/refresh.go b/yggdrasil/refresh.go index 37c2d22..d8fbd49 100644 --- a/yggdrasil/refresh.go +++ b/yggdrasil/refresh.go @@ -3,7 +3,7 @@ package yggdrasil import "fmt" type refreshPayload struct { - tokens + Tokens SelectedProfile *Profile `json:"selectedProfile,omitempty"` RequestUser bool `json:"requestUser"` @@ -16,7 +16,7 @@ type refreshPayload struct { // the user's password in a file func (a *Access) Refresh(profile *Profile) error { pl := refreshPayload{ - tokens: a.ar.tokens, + Tokens: a.ar.Tokens, SelectedProfile: profile, //used to change profile, don't use now RequestUser: true, } diff --git a/yggdrasil/validate.go b/yggdrasil/validate.go index 31abe7d..b01baa9 100644 --- a/yggdrasil/validate.go +++ b/yggdrasil/validate.go @@ -7,7 +7,7 @@ import ( // Validate checks if an accessToken is usable for authentication with a Minecraft server. func (a *Access) Validate() (bool, error) { - pl := a.ar.tokens + pl := a.ar.Tokens resp, err := rawPost("/validate", pl) if err != nil { @@ -19,7 +19,7 @@ func (a *Access) Validate() (bool, error) { // Invalidate invalidates accessTokens using a client/access token pair. func (a *Access) Invalidate() error { - pl := a.ar.tokens + pl := a.ar.Tokens resp, err := rawPost("/invalidate", pl) if err != nil {