private void WriteUserEvent(
     UserManagementMessage.UserManagementRequestMessage message, UserData userData, string eventType,
     long expectedVersion, Action after)
 {
     WriteUserEvent(
         userData, eventType, expectedVersion, completed => WriteUserCreatedCompleted(completed, message, after));
 }
        private static void ReplyByWriteResult(
            UserManagementMessage.UserManagementRequestMessage message, OperationResult operationResult)
        {
            switch (operationResult)
            {
            case OperationResult.Success:
                ReplyUpdated(message);
                break;

            case OperationResult.PrepareTimeout:
            case OperationResult.CommitTimeout:
            case OperationResult.ForwardTimeout:
                ReplyTryAgain(message);
                break;

            case OperationResult.WrongExpectedVersion:
            case OperationResult.StreamDeleted:
                ReplyConflict(message);
                break;

            default:
                ReplyInternalError(message);
                break;
            }
        }
        private void WriteStreamAcl(
            UserManagementMessage.UserManagementRequestMessage message, string loginName, Action onSucceeded)
        {
            WriteStreamAcl(
                loginName, completed =>
            {
                switch (completed.Result)
                {
                case OperationResult.Success:
                    onSucceeded();
                    break;

                case OperationResult.CommitTimeout:
                case OperationResult.ForwardTimeout:
                case OperationResult.PrepareTimeout:
                case OperationResult.WrongExpectedVersion:
                    ReplyTryAgain(message);
                    break;

                default:
                    ReplyInternalError(message);
                    break;
                }
            });
        }
        private void WritePasswordChangedEventCompleted(
            UserManagementMessage.UserManagementRequestMessage message,
            ClientMessage.WriteEventsCompleted eventsCompleted, Action onCompleted)
        {
            switch (eventsCompleted.Result)
            {
            case OperationResult.Success:
                onCompleted();
                break;

            case OperationResult.CommitTimeout:
            case OperationResult.ForwardTimeout:
            case OperationResult.PrepareTimeout:
                ReplyTryAgain(message);
                break;

            case OperationResult.AccessDenied:
                ReplyUnauthorized(message);
                break;

            case OperationResult.WrongExpectedVersion:
                ReplyConflict(message);
                break;

            default:
                ReplyInternalError(message);
                break;
            }
        }
 private bool DemandAdmin(UserManagementMessage.UserManagementRequestMessage message)
 {
     if (message.Principal == null || !message.Principal.IsInRole(SystemRoles.Admins))
     {
         ReplyUnauthorized(message);
         return(false);
     }
     return(true);
 }
 private static void WriteUserCreatedCompleted(
     ClientMessage.WriteEventsCompleted completed, UserManagementMessage.UserManagementRequestMessage message)
 {
     if (completed.Result == OperationResult.Success)
     {
         ReplyUpdated(message);
         return;
     }
     ReplyByWriteResult(message, completed.Result);
 }
 private static void ReplyError(
     UserManagementMessage.UserManagementRequestMessage message, UserManagementMessage.Error error)
 {
     //TODO: avoid 'is'
     if (message is UserManagementMessage.Get)
     {
         message.Envelope.ReplyWith(new UserManagementMessage.UserDetailsResult(error));
     }
     else
     {
         message.Envelope.ReplyWith(new UserManagementMessage.UpdateResult(message.LoginName, error));
     }
 }
 private void WritePasswordChangedEventConditionalAnd(
     UserManagementMessage.UserManagementRequestMessage message, bool resetPasswordCache, Action onCompleted)
 {
     if (resetPasswordCache)
     {
         BeginWritePasswordChangedEvent(
             message.LoginName,
             eventsCompleted => WritePasswordChangedEventCompleted(message, eventsCompleted, onCompleted));
     }
     else
     {
         onCompleted();
     }
 }
示例#9
0
 private void ReadUpdateWriteReply(
     UserManagementMessage.UserManagementRequestMessage message, Func <UserData, UserData> update,
     bool resetPasswordCache)
 {
     ReadUpdateCheckAnd(
         message, (completed, data) => {
         var updated = update(data);
         if (updated != null)
         {
             WritePasswordChangedEventConditionalAnd(
                 message, resetPasswordCache,
                 () => WriteUserEvent(message, updated, UserUpdated, completed.FromEventNumber, null));
         }
     });
 }
        private void ReadUserDetailsAnd(
            UserManagementMessage.UserManagementRequestMessage message,
            Action <ClientMessage.ReadStreamEventsBackwardCompleted, UserData> action)
        {
            string loginName = message.LoginName;

            BeginReadUserDetails(
                loginName, completed =>
            {
                switch (completed.Result)
                {
                case ReadStreamResult.NoStream:
                    ReplyNotFound(message);
                    break;

                case ReadStreamResult.StreamDeleted:
                    ReplyNotFound(message);
                    break;

                case ReadStreamResult.Success:
                    if (completed.Events.Length == 0)
                    {
                        ReplyNotFound(message);
                    }
                    else
                    {
                        var data1 = completed.Events[0].Event.Data.ParseJson <UserData>();
                        action(completed, data1);
                    }
                    break;

                default:
                    ReplyInternalError(message);
                    break;
                }
            });
        }
 private static void ReplyUpdated(UserManagementMessage.UserManagementRequestMessage message)
 {
     message.Envelope.ReplyWith(new UserManagementMessage.UpdateResult(message.LoginName));
 }
 private static void ReplyTryAgain(UserManagementMessage.UserManagementRequestMessage message)
 {
     ReplyError(message, UserManagementMessage.Error.TryAgain);
 }
 private static void ReplyUnauthorized(UserManagementMessage.UserManagementRequestMessage message)
 {
     //NOTE: probably unauthorized iis not correct reply here.
     // been converted to http 401 status code it will prompt for authorization
     ReplyError(message, UserManagementMessage.Error.Unauthorized);
 }
 private static void ReplyConflict(UserManagementMessage.UserManagementRequestMessage message)
 {
     ReplyError(message, UserManagementMessage.Error.Conflict);
 }
 private static void ReplyNotFound(UserManagementMessage.UserManagementRequestMessage message)
 {
     ReplyError(message, UserManagementMessage.Error.NotFound);
 }
 private static void ReplyInternalError(UserManagementMessage.UserManagementRequestMessage message)
 {
     ReplyError(message, UserManagementMessage.Error.Error);
 }
 private void ReadUpdateCheckAnd(
     UserManagementMessage.UserManagementRequestMessage message,
     Action <ClientMessage.ReadStreamEventsBackwardCompleted, UserData> action)
 {
     ReadUserDetailsAnd(message, action);
 }