Exemplo n.º 1
0
        private MSession CreateNewSession()
        {
            var ClientToken = CreateNewClientToken();

            var session = new MSession();

            session.ClientToken = ClientToken;

            WriteLogin(session);
            return(session);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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
                });
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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);
        }