示例#1
0
        public static void LoginAccount(string user, string pass, UIViewController ctrl, Action<Exception> error = null)
        {
            //Does this user exist?
            var account = Application.Accounts.Find(user);
            var exists = account != null;
            if (!exists)
                account = new Account { Username = user, Password = pass };

            ctrl.DoWork("Logging in...", () => {
                BitbucketSharp.Models.UsersModel userInfo;

                try
                {
                    var client = new BitbucketSharp.Client(user, pass) { Timeout = 30 * 1000 };
                    userInfo = client.Account.GetInfo();
                }
                catch (Exception)
                {
                    throw new Exception("Unable to login as user " + account.Username + ". Please check your credentials and try again. Remember, credentials are case sensitive!");
                }

                account.FullName = (userInfo.User.FirstName ?? string.Empty) + " " + (userInfo.User.LastName ?? string.Empty);
                account.Username = userInfo.User.Username;
                account.Password = pass;
                account.AvatarUrl = userInfo.User.Avatar;

                if (exists)
                    Application.Accounts.Update(account);
                else
                    Application.Accounts.Insert(account);

                Application.SetUser(account);
                ctrl.InvokeOnMainThread(TransitionToSlideout);

            }, (ex) => {
                Console.WriteLine(ex.Message);

                //If there is a login failure, unset the user
                Application.SetUser(null);

                //Show an alert and trigger the callback when the user dismisses it
                Utilities.ShowAlert("Unable to Authenticate", ex.Message, () => {
                    if (error != null)
                        error(ex);
                });
            });
        }