示例#1
0
        /// <summary>
        /// Sends a login request to the server
        /// </summary>
        public static string[] LoginServer(string Username, string Password)
        {
            string url = CurrentUrl;

            Status.LoginResponseObject payload;
            Status.LoginRequestObject  request = new Status.LoginRequestObject();
            request.Username     = Username;
            request.PasswordHash = Password;

            string msg;

            switch (AccountServer.LoginAccount(request, CurrentUrl, out payload))
            {
            case Status.LoginStatusCode.Ok:
                string[] getPayload = { payload.TicketId.ToString(), payload.Username };
                return(getPayload);

            case Status.LoginStatusCode.InvalidCredentials:
                msg = "Error: Invalid username/password";
                MessageBox.Show(string.IsNullOrWhiteSpace(AccountServer.Reason) ? msg : "Error: " + AccountServer.Reason, "Login Request");
                if (passwordCount++ >= 3)
                {
                    if (ShowReminder != null)
                    {
                        ShowReminder(passwordCount);
                    }
                }
                break;

            case Status.LoginStatusCode.MalformedData:
                msg = "Error: malformed username/password";
                MessageBox.Show(string.IsNullOrWhiteSpace(AccountServer.Reason) ? msg : "Error: " + AccountServer.Reason, "Login Request");
                if (passwordCount++ >= 3)
                {
                    if (ShowReminder != null)
                    {
                        ShowReminder(passwordCount);
                    }
                }
                break;

            case Status.LoginStatusCode.ServerError:
                msg = "Server error, could not connect.\r\n Is your firewall enabled?";
                MessageBox.Show(string.IsNullOrWhiteSpace(AccountServer.Reason) ? msg : AccountServer.Reason, "Login Request");
                break;

            case Status.LoginStatusCode.NoResponse:
                msg = "Server error, received no response from the server.";
                MessageBox.Show(string.IsNullOrWhiteSpace(AccountServer.Reason) ? msg : AccountServer.Reason, "Login Request");
                break;
            }

            return(null);
        }
        /// <summary>
        /// Sends a login request to our account server
        /// </summary>
        public static Status.LoginStatusCode LoginAccount(Status.LoginRequestObject requestModel, string LoginUrl, out Status.LoginResponseObject payload)
        {
            if (requestModel == null)
            {
                throw new ArgumentNullException("requestModel");
            }

            byte[]         bytes          = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(requestModel));
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(LoginUrl);

            httpWebRequest.Method        = "POST";
            httpWebRequest.ContentType   = "application/json";
            httpWebRequest.ContentLength = bytes.Length;
            try
            {
                httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
            }
            catch (WebException)
            {
                payload = null;
                return(Status.LoginStatusCode.ServerError);
            }

            try
            {
                using (StreamReader streamReader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream()))
                {
                    string str = streamReader.ReadToEnd();
                    payload = JsonConvert.DeserializeObject <Status.LoginResponseObject>(str);
                    if (string.IsNullOrWhiteSpace(payload.TicketId.ToString()) || string.IsNullOrWhiteSpace(payload.Username))
                    {
                        payload = null;
                        Reason  = "Incorrect username or password.";
                        return(Status.LoginStatusCode.MalformedData);
                    }
                    return(Status.LoginStatusCode.Ok);
                }
            }
            catch (WebException ex)
            {
                if ((HttpWebResponse)ex.Response == null)
                {
                    payload = null;
                    return(Status.LoginStatusCode.NoResponse);
                }

                switch (((HttpWebResponse)ex.Response).StatusCode)
                {
                case HttpStatusCode.BadRequest:
                    payload = null;
                    Reason  = ((HttpWebResponse)ex.Response).StatusDescription;
                    return(Status.LoginStatusCode.MalformedData);

                case HttpStatusCode.NotFound:
                    payload = null;
                    Reason  = ((HttpWebResponse)ex.Response).StatusDescription;
                    return(Status.LoginStatusCode.InvalidCredentials);

                default:
                    payload = null;
                    return(Status.LoginStatusCode.ServerError);
                }
            }
        }