private MSession CreateNewSession() { var ClientToken = CreateNewClientToken(); var session = new MSession(); session.ClientToken = ClientToken; WriteLogin(session); return(session); }
public static MSession GetOfflineSession(string username) { var login = new MSession(); login.Username = username; login.AccessToken = "access_token"; login.UUID = "user_uuid"; login.Result = MLoginResult.Success; login.Message = ""; login.ClientToken = ""; return(login); }
private MSession errorHandle(string json) { try { var result = new MSession(); var job = JObject.Parse(json); var error = job["error"]?.ToString(); // error type result.Message = job["message"]?.ToString() ?? ""; // detail error message result._RawResponse = json; switch (error) { case "Method Not Allowed": case "Not Found": case "Unsupported Media Type": result.Result = MLoginResult.BadRequest; break; case "IllegalArgumentException": case "ForbiddenOperationException": result.Result = MLoginResult.WrongAccount; break; default: result.Result = MLoginResult.UnknownError; break; } return(result); } catch (JsonReaderException) { return(new MSession() { Result = MLoginResult.UnknownError, Message = json, _RawResponse = json }); } catch (Exception ex) { return(new MSession() { Result = MLoginResult.UnknownError, Message = ex.Message, _RawResponse = json }); } }
public MSession Refresh() { var result = new MSession(); try { var session = GetLocalToken(); var req = new JObject { { "accessToken", session.AccessToken }, { "clientToken", session.ClientToken }, { "selectedProfile", new JObject() { { "id", session.UUID }, { "name", session.Username } } } }; var resHeader = mojangRequest("refresh", req.ToString()); using (var res = new StreamReader(resHeader.GetResponseStream())) { var response = res.ReadToEnd(); if ((int)resHeader.StatusCode / 100 == 2) { JObject job = JObject.Parse(response); result.AccessToken = job["accessToken"].ToString(); result.UUID = job["selectedProfile"]["id"].ToString(); result.Username = job["selectedProfile"]["name"].ToString(); result.ClientToken = session.ClientToken; WriteLogin(result); result.Result = MLoginResult.Success; } else { return(errorHandle(response)); } } } catch (Exception) { result.Result = MLoginResult.UnknownError; } return(result); }
private void WriteLogin(MSession session) { if (!SaveSession) { return; } Directory.CreateDirectory(Path.GetDirectoryName(TokenFile) ?? string.Empty); if (string.IsNullOrEmpty(session.ClientToken)) { session.ClientToken = CreateNewClientToken(); } var json = JsonConvert.SerializeObject(session); File.WriteAllText(TokenFile, json, Encoding.UTF8); }
public MSession Authenticate(string id, string pw) { MSession result = new MSession(); string ClientToken = GetLocalToken().ClientToken; var job = new JObject { { "username", id }, { "password", pw }, { "clientToken", ClientToken }, { "agent", new JObject { { "name", "Minecraft" }, { "version", 1 } } } }; var resHeader = mojangRequest("authenticate", job.ToString()); using (var res = new StreamReader(resHeader.GetResponseStream())) { var Response = res.ReadToEnd(); result.ClientToken = ClientToken; if (resHeader.StatusCode == HttpStatusCode.OK) // ResultCode == 200 { var jObj = JObject.Parse(Response); //json parse result.AccessToken = jObj["accessToken"].ToString(); result.UUID = jObj["selectedProfile"]["id"].ToString(); result.Username = jObj["selectedProfile"]["name"].ToString(); WriteLogin(result); result.Result = MLoginResult.Success; } else // fail to login { return(errorHandle(Response)); } return(result); } }
internal void CheckValid() { string exMsg = null; // error message if (MaximumRamMb < 1) { exMsg = "MaximumRamMb is too small."; } if (StartProfile == null) { exMsg = "StartProfile is null"; } if (Session == null) { Session = MSession.GetOfflineSession("tester123"); } if (!Session.CheckIsValid()) { exMsg = "Invalid Session"; } if (ServerPort < 0 || ServerPort > 65535) { exMsg = "Invalid ServerPort"; } if (ScreenWidth < 0 || ScreenHeight < 0) { exMsg = "Screen Size must be greater than or equal to zero."; } if (exMsg != null) // if launch option is invalid, throw exception { throw new ArgumentException(exMsg); } }
public MSession Validate() { var result = new MSession(); try { var session = GetLocalToken(); JObject job = new JObject { { "accessToken", session.AccessToken }, { "clientToken", session.ClientToken } }; var resHeader = mojangRequest("validate", job.ToString()); using (var res = new StreamReader(resHeader.GetResponseStream())) { if (resHeader.StatusCode == HttpStatusCode.NoContent) // StatusCode == 204 { result.Result = MLoginResult.Success; result.AccessToken = session.AccessToken; result.UUID = session.UUID; result.Username = session.Username; result.ClientToken = session.ClientToken; } else { result.Result = MLoginResult.NeedLogin; } } } catch (Exception ex) { result.Result = MLoginResult.UnknownError; throw ex; } return(result); }