Example #1
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="entity"></param>
 public Membership(MembershipEntity entity)
 {
     this._entity = entity;
     this.Users = new Collection<long>();
     this.Roles = new Collection<long>();
     this.Authorizations = new Collection<long>();
 }
        public ActionResult SignIn(MembershipEntity model)
        {
            if (!this.TryValidateModel(model)) { this.View(@"SignIn", model); }
            else if (!Membership.ValidateUser(model.Name, model.Password[0])) { return this.View(@"SignIn", model); }

            var user = Membership.GetUser(model.Name);
            var id = (long)user.ProviderUserKey;

            FormsAuthentication.RedirectFromLoginPage(id.ToString(CultureInfo.InvariantCulture), true);

            return new EmptyResult();
        }
        public ActionResult SignUp(MembershipEntity entity)
        {
            var status = MembershipCreateStatus.ProviderError;
            var user = Membership.CreateUser(entity.Name, entity.Password[0], entity.Email, null, null, true, null, out status);
            if (status != MembershipCreateStatus.Success) { return this.View(@"SignUp", entity); }

            var name = ((long)user.ProviderUserKey).ToString(CultureInfo.InvariantCulture);

            FormsAuthentication.RedirectFromLoginPage(name, true);

            return new EmptyResult();
        }
        public static async Task<int> UpdateAsync(MembershipEntity entity, DbConnection connection, DbTransaction transaction, CancellationToken token)
        {
            var command = _factory.CreateCommand(connection, transaction);
            command.CommandText = @"usp_UpdateMemberships";

            KandaDbDataMapper.MapToParameters(command, entity);
            var _ = KandaTableDataGateway._factory.CreateParameter(KandaTableDataGateway.RETURN_VALUE, DbType.Int32, sizeof(int), ParameterDirection.ReturnValue, null);

            var affected = await command.ExecuteNonQueryAsync(token);

            return affected;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="connection"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        public static int Update(MembershipEntity entity, DbConnection connection, DbTransaction transaction)
        {
            var command = KandaTableDataGateway._factory.CreateCommand(connection, transaction);

            command.CommandText = @"usp_UpdateMemberships";

            KandaDbDataMapper.MapToParameters(command, entity);

            var result = KandaTableDataGateway._factory.CreateParameter(KandaTableDataGateway.RETURN_VALUE, DbType.Int32, sizeof(int), ParameterDirection.ReturnValue, DBNull.Value);
            command.Parameters.Add(result);

            command.ExecuteNonQuery();

            return (int)result.Value;
        }
        public static async Task<long> InsertAsync(MembershipEntity entity, DbConnection connection, DbTransaction transaction, CancellationToken token)
        {
            var command = _factory.CreateCommand(connection, transaction);

            command.CommandText = @"usp_InsertMemberships";

            KandaDbDataMapper.MapToParameters(command, entity);
            var identity = KandaTableDataGateway._factory.CreateParameter(@"identity", DbType.Decimal, sizeof(decimal), ParameterDirection.Output, DBNull.Value);
            command.Parameters.Add(identity);
            var _ = KandaTableDataGateway._factory.CreateParameter(KandaTableDataGateway.RETURN_VALUE, DbType.Int32, sizeof(int), ParameterDirection.ReturnValue, DBNull.Value);
            command.Parameters.Add(_);

            var affected = await command.ExecuteNonQueryAsync(token);

            return Convert.ToInt64(identity.Value);
        }
        /// <summary>
        /// 指定のユーザー名とパスワードがデータソースに存在しているかどうかを検証します。
        /// </summary>
        /// <returns>
        /// 指定したユーザー名とパスワードが有効な場合は true。それ以外の場合は false。
        /// </returns>
        /// <param name="username">検証対象のユーザー名。</param>
        /// <param name="password">指定したユーザーのパスワード。</param>
        public override bool ValidateUser(string username, string password)
        {
            // 文字列の保護
            var secure = new SecureString();
            secure.AppendString(password);

            // Name、Password 検証
            var entity = new MembershipEntity
                             {
                                 Name = username,
                                 Password = secure,
                             };
            var membership = new DomainModels.Membership(entity);
            membership.Find();

            return (0 < membership.ID);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="connection"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        public static int Insert(MembershipEntity entity, DbConnection connection, DbTransaction transaction)
        {
            var command = KandaTableDataGateway._factory.CreateCommand(connection, transaction);

            command.CommandText = @"usp_InsertMemberships";

            KandaDbDataMapper.MapToParameters(command, entity);

            var identity = KandaTableDataGateway._factory.CreateParameter("@identity", DbType.Decimal, sizeof(decimal), ParameterDirection.Output, DBNull.Value);
            command.Parameters.Add(identity);

            var error = KandaTableDataGateway._factory.CreateParameter(KandaTableDataGateway.RETURN_VALUE, DbType.Int32, sizeof(int), ParameterDirection.ReturnValue, DBNull.Value);
            command.Parameters.Add(error);

            var affected = command.ExecuteNonQuery();

            entity.ID = Convert.ToInt64(identity.Value);

            return (int)error.Value;
        }
        public void InsertMembershipsFact()
        {
            var connection = default(DbConnection);
            var transaction = default(DbTransaction);
            var command = default(DbCommand);

            try
            {
                connection = this._factory.CreateConnection();
                connection.Open();

                transaction = connection.BeginTransaction(IsolationLevel.Serializable);

                command = this._factory.CreateCommand(connection, transaction);

                command.CommandText = @"usp_InsertMemberships";

                var entity = new MembershipEntity { Name = new Random().Next().ToString(), Password = @"sadasfsa", CreatedOn = DateTime.Now, Enabled = true, };

                KandaDbDataMapper.MapToParameters(command, entity);

                var identity = this._factory.CreateParameter("@identity", DbType.Decimal, sizeof(decimal), ParameterDirection.Output, DBNull.Value);
                command.Parameters.Add(identity);

                var result = this._factory.CreateParameter(KandaTableDataGateway.RETURN_VALUE, DbType.Int32, sizeof(int), ParameterDirection.ReturnValue, DBNull.Value);
                command.Parameters.Add(result);

                var affected = command.ExecuteNonQuery();
                Assert.Equal(KandaTableDataGateway.NO_ERRORS, result.Value);
                Assert.Equal(1, affected);
            }
            finally
            {
                if (transaction != null) { transaction.Rollback(); }
                if (connection != null) { connection.Close(); }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="connection"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        public bool Update(MembershipEntity entity, DbConnection connection, DbTransaction transaction)
        {
            var updated = MembershipsGateway.Update(entity, connection, transaction);

            return (updated == 1);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="connection"></param>
        /// <param name="transaction"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        public bool Create(MembershipEntity entity, DbConnection connection, DbTransaction transaction, out MembershipCreateStatus status)
        {
            status = MembershipCreateStatus.ProviderError;

            entity.Password = KandaHashAlgorithm.ComputeHash(typeof(SHA512Managed).FullName, ((SecureString)entity.Password).GetString(), Encoding.Unicode);

            var error = MembershipsGateway.Insert(entity, connection, transaction);

            switch (error)
            {
                case KandaTableDataGateway.NO_ERRORS:
                    status = MembershipCreateStatus.Success;
                    return true;

                case KandaTableDataGateway.DUPLICATE_USER_NAME:
                    status = MembershipCreateStatus.DuplicateUserName;
                    break;

                //case KandaTableDataGateway.DUPLICATE_PROVIDER_USER_KEY:
                //    status = MembershipCreateStatus.DuplicateProviderUserKey;
                //    break;

                default:
                    break;
            }

            return false;

            //return (error == KandaTableDataGateway.NO_ERRORS);
        }
 /// <summary>
 /// コンストラクター。
 /// </summary>
 /// <param name="membership"></param>
 public KandaMembershipUser(MembershipEntity membership)
     : base(Membership.Provider.Name, membership.Name, membership.ID, membership.Email, @"", @"", membership.Enabled, false, membership.CreatedOn, default(DateTime), default(DateTime), default(DateTime), default(DateTime))
 {
     this.doNothing();
 }
        public void DeleteForeighKeyOnMembershipIDFact()
        {
            var connection = default(DbConnection);
            var transaction = default(DbTransaction);

            try
            {
                connection = this._factory.CreateConnection();
                connection.Open();

                transaction = connection.BeginTransaction();

                // Memberships
                var membership = new MembershipEntity() { Name = new Random().Next().ToString(CultureInfo.InvariantCulture), Password = @"password", };
                var memberships = new MembershipsRepository();
                membership.CreatedOn = KandaRepository.GetUtcDateTime(connection, transaction);
                var status = MembershipCreateStatus.ProviderError;
                if (!memberships.Create(membership , connection, transaction, out status)) { Assert.True(!true); }

                // Users
                var user = new UserEntity() { /*ID = @"",*/ FamilyName = @"family name", GivenName = @"given name", AdditionalName = @"additional name", Description = @"description", CreatedOn = membership.CreatedOn, Enabled = true, };
                var users = new UsersRepository();
                if (!users.Create(user, connection, transaction)) { Assert.True(!true); }

                // MembershipUsers
                var entity = new MembershipUserEntity() { MembershipID = membership.ID, UserID = user.ID };
                var repository = new MembershipUsersRepository();
                if (!repository.Create(entity, connection, transaction)) { Assert.True(!true); }

                // 削除
                if (!repository.Delete(new MembershipUsersCriteria() { MembershipID = entity.MembershipID, UserID = entity.UserID, }, connection, transaction)) { Assert.True(!true); }
                if (!memberships.Delete(entity.MembershipID, connection, transaction)) { Assert.True(!true); }
                if (!users.Delete(entity.UserID, connection, transaction)) { Assert.True(!true); }

                Assert.True(true);
            }
            finally
            {
                if (transaction != null) { transaction.Rollback(); }
                if (connection != null) { connection.Close(); }
            }
        }