Exemplo n.º 1
0
        /// <summary>
        /// Cria um novo usuário no sistema.
        /// </summary>
        /// <param name="username">Nome do usuário.</param>
        /// <param name="password">Senha de acesso.</param>
        /// <param name="email">Email associado com o usuário.</param>
        /// <param name="passwordQuestion">Pergunta para a senha.</param>
        /// <param name="passwordAnswer">Resposta da pergunta para a recuperação da senha.</param>
        /// <param name="isApproved">Identifica se o usuário é aprovado.</param>
        /// <param name="identityProvider">Nome do provedor de identidade do usuário.</param>
        /// <param name="userKey">Chave que identifica o usuário.</param>
        /// <param name="ignoreCaptcha">Indica se o usuário irá ignorar o controle por captcha</param>
        /// <param name="status">Situação do usuário.</param>
        /// <param name="fullname">Nome do usuário</param>
        /// <param name="parameters">Parametros adicionais para a criação do usuário</param>
        /// <returns></returns>
        public virtual Security.IUser CreateUser(string username, string password, string fullname, string email, string passwordQuestion, string passwordAnswer, bool isApproved, string identityProvider, string userKey, bool ignoreCaptcha, out UserCreateStatus status, params SecurityParameter[] parameters)
        {
            IIdentityProviderManager providerFlow = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <IIdentityProviderManager>();
            var result = GetUser(username, false) as Security.Authentication.IAutheticableUser;

            if ((result != null) && (!String.IsNullOrEmpty(result.UserKey)))
            {
                status = UserCreateStatus.DuplicateUserName;
                result = null;
            }
            else
            {
                result.UserName                = username;
                result.Email                   = email;
                result.FullName                = fullname;
                result.IdentityProvider        = identityProvider;
                result.LastPasswordChangedDate = ServerData.GetDateTime();
                result.PasswordAnswer          = passwordAnswer;
                result.PasswordQuestion        = passwordQuestion;
                result.UserName                = username;
                result.IdentityProviderId      = providerFlow.GetProviderByName(identityProvider).IdentityProviderId;
                if (InsertUser(result))
                {
                    status = UserCreateStatus.Success;
                    result = GetUser(username, false) as Security.Authentication.IAutheticableUser;
                    IAuthenticate provider = Activator.CreateInstance((providerFlow.GetProviderByName(identityProvider).Type)) as IAuthenticate;
                    if (provider.CanCreateUser)
                    {
                        if (provider.CreateNewUser(result, password, parameters).Success)
                        {
                            status = UserCreateStatus.Success;
                        }
                        else
                        {
                            status = UserCreateStatus.DuplicateProviderUserKey;
                        }
                    }
                }
                else
                {
                    status = UserCreateStatus.ProviderError;
                }
            }
            return(result);
        }