Пример #1
0
        public User GetByNameIdentifier(UserApplication userApp)
        {
            Contract.Requires <ArgumentNullException>(null != userApp);
            Contract.Requires <ArgumentNullException>(null != userApp.Application);
            Contract.Requires <ArgumentNullException>(null != userApp.User);
            Contract.Requires <ArgumentOutOfRangeException>(Guid.Empty != userApp.Application.Identifier);
            Contract.Requires <ArgumentOutOfRangeException>(!string.IsNullOrWhiteSpace(userApp.User.NameIdentifier));

            var source   = new DomainSource();
            var userData = source.GetUserByNameIdentifier(userApp.Application.Identifier, userApp.User.NameIdentifier);

            return(userData == null ? (User)null : userData.Convert());
        }
Пример #2
0
        public ActionResult Profile(FormCollection collection)
        {
            using (new Service.PerformanceMonitor())
            {
                try
                {
                    var preference = new UserPreference()
                    {
                        Application = Application.Current,
                        User        = User.Identity.Data(),
                    };

                    var timeZoneId = collection["TimeZone.Id"];
                    preference               = userCore.Get(preference);
                    preference.TimeZone      = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
                    preference.TwitterHandle = collection["TwitterHandle"];
                    preference.GitHubHandle  = collection["GitHubHandle"];
                    preference.AbcHandle     = collection["AbcHandle"];
                    preference.Country       = collection["Country"];
                    preference.City          = collection["City"];
                    userCore.Save(preference);

                    var source = new DomainSource();

                    var user = source.GetUserByNameIdentifier(Application.Current.Identifier, User.Identity.NameIdentifier());
                    user.Email          = collection["Email"];
                    user.UserName       = collection["UserName"];
                    user.LastActivityOn = DateTime.UtcNow;

                    source.Update(user);
                }
                catch (Exception ex)
                {
                    log.Log(ex, EventTypes.Warning, (int)Fault.Unknown);
                }

                return(this.Profile());
            }
        }
        public void GetUserByNameIdentifier()
        {
            var source = new DomainSource();
            var user   = User();

            user.NameIdentifier = StringHelper.ValidString();
            source.Insert(user);

            var saved = source.GetUserByNameIdentifier(user.ApplicationId, user.NameIdentifier);

            Assert.IsNotNull(saved);
            Assert.AreEqual <DateTime>(saved.CreatedOn, user.CreatedOn);
            Assert.AreEqual <DateTime>(saved.LastLoggedInOn, user.LastLoggedInOn);
            Assert.AreEqual <DateTime>(saved.LastActivityOn, user.LastActivityOn);
            Assert.AreEqual <DateTime>(saved.PasswordLastChangedOn, user.PasswordLastChangedOn);
            Assert.AreEqual <string>(saved.Email, user.Email);
            Assert.AreEqual <string>(saved.OpenId, user.OpenId);
            Assert.AreEqual <string>(saved.UserName, user.UserName);
            Assert.AreEqual <int>(saved.RoleValue, user.RoleValue);
            Assert.AreEqual <bool>(saved.IsApproved, user.IsApproved);
            Assert.AreEqual <bool>(saved.IsLockedOut, user.IsLockedOut);
            Assert.AreEqual <DateTime>(saved.LastLockedOutOn, user.LastLockedOutOn);
        }
Пример #4
0
        /// <summary>
        /// Register user on site
        /// </summary>
        /// <param name="userIdentity">user Identity</param>
        /// <returns>New User</returns>
        private bool Register(IIdentity userIdentity)
        {
            using (new Service.PerformanceMonitor())
            {
                if (userIdentity.IsAuthenticated)
                {
                    var identity = (IClaimsIdentity)userIdentity;

                    var register = new RegisterModel()
                    {
                        Email          = User.Identity.EmailAddress(),
                        NameIdentifier = User.Identity.NameIdentifier(),
                        UserName       = identity.Name,
                    };

                    var      source = new DomainSource();
                    UserData user   = null;
                    if (!string.IsNullOrWhiteSpace(register.NameIdentifier) && null != (user = source.GetUserByNameIdentifier(ServerConfiguration.ApplicationIdentifier, register.NameIdentifier)))
                    {
                        user.LastLoggedInOn = DateTime.UtcNow;
                        user.LastActivityOn = DateTime.UtcNow;

                        source.Update(user);
                    }
                    else if (!string.IsNullOrWhiteSpace(register.Email) && null != (user = source.GetUserByEmail(ServerConfiguration.ApplicationIdentifier, register.Email)))
                    {
                        user.LastLoggedInOn = DateTime.UtcNow;
                        user.LastActivityOn = DateTime.UtcNow;
                        user.NameIdentifier = register.NameIdentifier;

                        source.Update(user);
                    }
                    else
                    {
                        var provider = new TableMembershipProvider();
                        MembershipCreateStatus status;
                        provider.CreateUser(register.UserName, Guid.NewGuid().ToString(), register.Email, null, null, true, register.NameIdentifier, out status);
                        if (status == MembershipCreateStatus.Success)
                        {
                            log.Log("New user signed up.");
                            return(true);
                        }
                        else
                        {
                            log.Log("New user failed to signed up; status: '{0}'".FormatWithCulture(status));
                        }
                    }
                }
            }

            return(false);
        }
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool approved, object providerUserKey, out MembershipCreateStatus status)
        {
            using (new PerformanceMonitor())
            {
                MembershipUser membership = null;
                status = MembershipCreateStatus.UserRejected;

                UserData userValidation = null;
                if (!string.IsNullOrWhiteSpace(email))
                {
                    userValidation = source.GetUserByEmail(Application.Default.Identifier, email);
                    if (null != userValidation)
                    {
                        status = MembershipCreateStatus.DuplicateEmail;
                    }
                }

                if (!string.IsNullOrWhiteSpace(username))
                {
                    userValidation = source.GetUserByEmail(Application.Default.Identifier, username);
                    if (null != userValidation)
                    {
                        status = MembershipCreateStatus.DuplicateUserName;
                    }
                }

                if (null == userValidation)
                {
                    userValidation = source.GetUserByNameIdentifier(Application.Default.Identifier, providerUserKey.ToString());
                    if (null != userValidation)
                    {
                        status = MembershipCreateStatus.DuplicateProviderUserKey;
                    }
                    else
                    {
                        var user = new UserData(email, providerUserKey.ToString(), username)
                        {
                            RoleValue = (int)TableMembershipProvider.DetermineRoleType(email),
                        };

                        source.Insert(user);

                        var returnedUser = source.GetUserById(Application.Default.Identifier, user.Id);
                        if (null == returnedUser)
                        {
                            status = MembershipCreateStatus.ProviderError;
                        }
                        else if (!returnedUser.IsApproved)
                        {
                            status = MembershipCreateStatus.UserRejected;
                        }
                        else if (returnedUser.IsLockedOut)
                        {
                            status = MembershipCreateStatus.UserRejected;
                        }
                        else
                        {
                            status     = MembershipCreateStatus.Success;
                            membership = new MembershipUser(ProviderName, returnedUser.UserName, returnedUser.NameIdentifier, returnedUser.Email, passwordQuestion, string.Empty, returnedUser.IsApproved, returnedUser.IsLockedOut, returnedUser.CreatedOn, returnedUser.LastLoggedInOn, returnedUser.LastActivityOn, returnedUser.PasswordLastChangedOn, returnedUser.LastLockedOutOn);

                            logger.Log("New user signed up.");
                        }
                    }
                }

                return(membership);
            }
        }
Пример #6
0
        /// <summary>
        /// GitHub Auth API
        /// </summary>
        /// <remarks>
        /// GET: /Auth/GitHub
        /// </remarks>
        /// <returns></returns>
        public ActionResult GitHub()
        {
            var code = Request.Params["code"];

            if (!string.IsNullOrWhiteSpace(code))
            {
                try
                {
                    string responseData = null;
                    using (var client = new WebClient())
                    {
                        var nameValuePairs = new NameValueCollection();
                        nameValuePairs.Add("code", code);
                        nameValuePairs.Add("client_secret", ServerConfiguration.GitHubSecret);
                        nameValuePairs.Add("client_id", ServerConfiguration.GitHubClientId);
                        client.Headers.Add("content-type", "application/x-www-form-urlencoded");
                        var response = client.UploadValues(GitHubAuthorizationPost, nameValuePairs);
                        responseData = client.Encoding.GetString(response);
                    }

                    if (!string.IsNullOrWhiteSpace(responseData))
                    {
                        var    gitHubResponse = GitHubResponse.Parse(responseData);
                        string profileJson    = null;
                        using (var client = new WebClient())
                        {
                            profileJson = client.DownloadString(string.Format(GitHubApi, "user", gitHubResponse.AccessToken));
                        }

                        if (!string.IsNullOrWhiteSpace(profileJson))
                        {
                            var serializer = new JavaScriptSerializer();

                            var profile = serializer.Deserialize <GitHubProfile>(profileJson);
                            if (this.Login(profile)) //New User
                            {
                                var source     = new DomainSource();
                                var user       = source.GetUserByNameIdentifier(Application.Default.Identifier, string.Format("github{0}", profile.Id));
                                var preference = profile.Convert();
                                preference.Application = Application.Default;
                                preference.User        = user.Convert();
                                var core = new UserCore();
                                core.Save(preference);
                                var profilePage = ((IConvert <ProfilePage>)profile).Convert();
                                profilePage.ApplicationIdentifier = Application.Default.Identifier;
                                profilePage.OwnerIdentifier       = user.Id;
                                profilePage.GitCode        = code;
                                profilePage.GitAccessToken = gitHubResponse.AccessToken;
                                core.Save(profilePage);
                                return(this.RedirectToAction("Welcome", "Home"));
                            }
                            else
                            {
                                return(this.RedirectToAction("Index", "Profile", new { username = profile.Login }));
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.Log(ex, Abc.Services.Contracts.EventTypes.Critical, (int)ServiceFault.Unknown);
                }
            }

            return(this.RedirectToAction("Index", "Auth"));
        }
Пример #7
0
        private bool Login(GitHubProfile profile)
        {
            var newUser  = false;
            var register = new RegisterModel()
            {
                Email          = profile.Email,
                NameIdentifier = string.Format("github{0}", profile.Id),
                UserName       = profile.Name,
            };

            var      source = new DomainSource();
            UserData user   = null;

            if (!string.IsNullOrWhiteSpace(register.NameIdentifier) && null != (user = source.GetUserByNameIdentifier(Application.Default.Identifier, register.NameIdentifier)))
            {
                user.LastLoggedInOn = DateTime.UtcNow;
                user.LastActivityOn = DateTime.UtcNow;

                source.Update(user);
            }
            else if (!string.IsNullOrWhiteSpace(register.Email) && null != (user = source.GetUserByEmail(Application.Default.Identifier, register.Email)))
            {
                user.LastLoggedInOn = DateTime.UtcNow;
                user.LastActivityOn = DateTime.UtcNow;
                user.NameIdentifier = register.NameIdentifier;

                source.Update(user);
            }
            else
            {
                var provider = new TableMembershipProvider();
                MembershipCreateStatus status;
                provider.CreateUser(register.UserName, Guid.NewGuid().ToString(), register.Email, null, null, true, register.NameIdentifier, out status);
                if (status == MembershipCreateStatus.Success)
                {
                    log.Log("New user signed up.");
                    newUser = true;
                }
                else
                {
                    log.Log(string.Format("New user failed to signed up; status: '{0}'", status));
                }
            }

            FormsAuthentication.SetAuthCookie(register.Email, true);

            return(newUser);
        }
        public void GetUserByOpenIdInvalidApplicationId()
        {
            var source = new DomainSource();

            source.GetUserByNameIdentifier(Guid.Empty, StringHelper.ValidString());
        }
        public void GetUserByOpenIdInvalidOpenId()
        {
            var source = new DomainSource();

            source.GetUserByNameIdentifier(Guid.NewGuid(), StringHelper.NullEmptyWhiteSpace());
        }