@@ -172,7 +172,11 @@ func (d Dialer) DialContext(ctx context.Context, network, address string) (conn
172
172
if err != nil {
173
173
return nil , & net.OpError {Op : "dial" , Net : "minecraft" , Err : err }
174
174
}
175
- d .IdentityData = readChainIdentityData ([]byte (chainData ))
175
+ identityData , err := readChainIdentityData ([]byte (chainData ))
176
+ if err != nil {
177
+ return nil , & net.OpError {Op : "dial" , Net : "minecraft" , Err : err }
178
+ }
179
+ d .IdentityData = identityData
176
180
}
177
181
178
182
n , ok := networkByID (network , d .ErrorLog )
@@ -274,26 +278,26 @@ func (d Dialer) DialContext(ctx context.Context, network, address string) (conn
274
278
275
279
// readChainIdentityData reads a login.IdentityData from the Mojang chain
276
280
// obtained through authentication.
277
- func readChainIdentityData (chainData []byte ) login.IdentityData {
281
+ func readChainIdentityData (chainData []byte ) ( login.IdentityData , error ) {
278
282
chain := struct { Chain []string }{}
279
283
if err := json .Unmarshal (chainData , & chain ); err != nil {
280
- panic ( "invalid chain data from authentication: " + err . Error () )
284
+ return login. IdentityData {}, fmt . Errorf ( "read chain: read json: %w" , err )
281
285
}
282
286
data := chain .Chain [1 ]
283
287
claims := struct {
284
288
ExtraData login.IdentityData `json:"extraData"`
285
289
}{}
286
290
tok , err := jwt .ParseSigned (data )
287
291
if err != nil {
288
- panic ( "invalid chain data from authentication: " + err . Error () )
292
+ return login. IdentityData {}, fmt . Errorf ( "read chain: parse jwt: %w" , err )
289
293
}
290
294
if err := tok .UnsafeClaimsWithoutVerification (& claims ); err != nil {
291
- panic ( "invalid chain data from authentication: " + err . Error ())
295
+ return login. IdentityData {}, fmt . Errorf ( "read chain: read claims: %w" , err )
292
296
}
293
297
if claims .ExtraData .Identity == "" {
294
- panic ( " chain data contained no data" )
298
+ return login. IdentityData {}, fmt . Errorf ( "read chain: no extra data found " )
295
299
}
296
- return claims .ExtraData
300
+ return claims .ExtraData , nil
297
301
}
298
302
299
303
// listenConn listens on the connection until it is closed on another goroutine. The channel passed will
0 commit comments