コード例 #1
0
        private static unsafe void HandleSessionError(IntPtr sessionHandlePtr, ErrorCode errorCode, byte *messageBuffer, IntPtr messageLength, IntPtr userInfoPairs, int userInfoPairsLength)
        {
            var handle  = new SessionHandle(sessionHandlePtr);
            var session = new Session(handle);
            var message = Encoding.UTF8.GetString(messageBuffer, (int)messageLength);

            SessionException exception;

            if (errorCode.IsClientResetError())
            {
                var userInfo = MarshalErrorUserInfo(userInfoPairs, userInfoPairsLength);
                exception = new ClientResetException(message, userInfo);
            }
            else if (errorCode == ErrorCode.PermissionDenied)
            {
                var userInfo = MarshalErrorUserInfo(userInfoPairs, userInfoPairsLength);
                exception = new PermissionDeniedException(message, userInfo);
            }
            else
            {
                exception = new SessionException(message, errorCode);
            }

            Session.RaiseError(session, exception);
        }
コード例 #2
0
        private static unsafe void HandleSessionError(IntPtr sessionHandlePtr, ErrorCode errorCode, byte *messageBuffer, IntPtr messageLength, IntPtr userInfoPairs, int userInfoPairsLength, bool isClientReset)
        {
            try
            {
                var handle  = new SessionHandle(sessionHandlePtr);
                var session = new Session(handle);
                var message = Encoding.UTF8.GetString(messageBuffer, (int)messageLength);

                SessionException exception;

                if (isClientReset)
                {
                    var userInfo = StringStringPair.UnmarshalDictionary(userInfoPairs, userInfoPairsLength);
                    exception = new ClientResetException(session.User.App, message, userInfo);
                }
                else if (errorCode == ErrorCode.PermissionDenied)
                {
                    var userInfo = StringStringPair.UnmarshalDictionary(userInfoPairs, userInfoPairsLength);
                    exception = new PermissionDeniedException(session.User.App, message, userInfo);
                }
                else
                {
                    exception = new SessionException(message, errorCode);
                }

                Session.RaiseError(session, exception);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void IsPropertyAccessException_WithPermissionDeniedException_WithIBusinessObjectWithIdentity_ReturnsTrue()
        {
            var bindableProperty = CreateBindableProperty((() => ((ClassWithReferenceType <string>)null).Scalar));

            var businessObjectStub = MockRepository.GenerateStub <IBusinessObjectWithIdentity>();

            businessObjectStub.Stub(_ => _.UniqueIdentifier).Return("TheIdentifier");

            var permissionDeniedException = new PermissionDeniedException("The Exception");
            BusinessObjectPropertyAccessException actualException;
            var actualResult = _strategy.IsPropertyAccessException(
                businessObjectStub,
                bindableProperty,
                permissionDeniedException,
                out actualException);

            Assert.That(actualResult, Is.True);

            Assert.That(actualException, Is.Not.Null);
            Assert.That(
                actualException.Message,
                Is.EqualTo(
                    "A PermissionDeniedException occured while getting the value of property 'Scalar' for business object with ID 'TheIdentifier'."));
            Assert.That(actualException.InnerException, Is.SameAs(permissionDeniedException));
        }
コード例 #4
0
        public void CreateWithpermission()
        {
            TestHelpers.EnsureLanguageIsValid();
            string permission = "Something";
            PermissionDeniedException exception = new PermissionDeniedException(permission);

            Assert.AreEqual("Permission to execute 'Something' has been denied.", exception.Message);
            Assert.AreEqual(permission, exception.Permission);
        }
コード例 #5
0
        public void CreateWithpermissionAndMessage()
        {
            TestHelpers.EnsureLanguageIsValid();
            string permission = "Something";
            string message    = "An error has occured";
            PermissionDeniedException exception = new PermissionDeniedException(permission, message);

            Assert.AreEqual(message, exception.Message);
            Assert.AreEqual(permission, exception.Permission);
        }
コード例 #6
0
        public void PassThroughSerialisation()
        {
            TestHelpers.EnsureLanguageIsValid();
            string permission = "Something";
            PermissionDeniedException exception = new PermissionDeniedException(permission);
            object result = TestHelpers.RunSerialisationTest(exception);

            Assert.IsNotNull(result);
            Assert.That(result, Is.InstanceOf <PermissionDeniedException>());
            Assert.AreEqual("Permission to execute 'Something' has been denied.", exception.Message);
            Assert.AreEqual(permission, (result as PermissionDeniedException).Permission);
        }
コード例 #7
0
ファイル: PatchTableSheetsTest.cs プロジェクト: rheehot/lib9c
        public void CheckPermission()
        {
            var adminAddress = new Address("399bddF9F7B6d902ea27037B907B2486C9910730");
            var adminState   = new AdminState(adminAddress, 100);
            var initStates   = ImmutableDictionary <Address, IValue> .Empty
                               .Add(AdminState.Address, adminState.Serialize())
                               .Add(TableSheetsState.Address, new TableSheetsState(new Dictionary <string, string>()
            {
                ["TestTable"] = "Initial",
            }).Serialize());

            var state =
                new State(initStates, ImmutableDictionary <(Address, Currency), BigInteger> .Empty);
            var action = new PatchTableSheet()
            {
                TableName = "TestTable",
                TableCsv  = "New Value",
            };

            PolicyExpiredException exc1 = Assert.Throws <PolicyExpiredException>(() =>
            {
                action.Execute(
                    new ActionContext()
                {
                    BlockIndex     = 101,
                    PreviousStates = state,
                    Signer         = adminAddress,
                }
                    );
            });

            Assert.Equal(101, exc1.BlockIndex);

            PermissionDeniedException exc2 = Assert.Throws <PermissionDeniedException>(() =>
            {
                action.Execute(
                    new ActionContext()
                {
                    BlockIndex     = 5,
                    PreviousStates = state,
                    Signer         = new Address("019101FEec7ed4f918D396827E1277DEda1e20D4"),
                }
                    );
            });

            Assert.Equal(new Address("019101FEec7ed4f918D396827E1277DEda1e20D4"), exc2.Signer);
        }
コード例 #8
0
        public IActionResult OnException(ExceptionContext context)
        {
            return(context.Exception switch
            {
                // 处理权限类异常
                PermissionDeniedException permissionDenied => HandleException(context, HttpStatusCode.Forbidden, new
                {
                    Code = permissionDenied.Key
                }),

                // 处理其他已知类异常
                AppException appException => HandleException(context, HttpStatusCode.BadRequest, new
                {
                    Code = appException.Key
                }),

                // 处理未知类异常
                _ => HandleException(context, HttpStatusCode.InternalServerError)
            });
コード例 #9
0
        public void CheckPermission()
        {
            var adminAddress = new Address("399bddF9F7B6d902ea27037B907B2486C9910730");
            var adminState   = new AdminState(adminAddress, 100);
            var initStates   = ImmutableDictionary <Address, IValue> .Empty
                               .Add(AdminState.Address, adminState.Serialize());

            var state  = new State(initStates, ImmutableDictionary <(Address, Currency), FungibleAssetValue> .Empty);
            var action = new AddRedeemCode
            {
                redeemCsv = "New Value",
            };

            PolicyExpiredException exc1 = Assert.Throws <PolicyExpiredException>(() =>
            {
                action.Execute(
                    new ActionContext
                {
                    BlockIndex     = 101,
                    PreviousStates = state,
                    Signer         = adminAddress,
                }
                    );
            });

            Assert.Equal(101, exc1.BlockIndex);

            PermissionDeniedException exc2 = Assert.Throws <PermissionDeniedException>(() =>
            {
                action.Execute(
                    new ActionContext
                {
                    BlockIndex     = 5,
                    PreviousStates = state,
                    Signer         = new Address("019101FEec7ed4f918D396827E1277DEda1e20D4"),
                }
                    );
            });

            Assert.Equal(new Address("019101FEec7ed4f918D396827E1277DEda1e20D4"), exc2.Signer);
        }
コード例 #10
0
ファイル: MasterCommunicator.cs プロジェクト: bburhans/vtank
        /// <summary>
        /// Intercepts the login attempt in order to provide some internal handling.
        /// </summary>
        /// <param name="result">Result of the login attempt.</param>
        /// <param name="session">Session proxy, if one exists.</param>
        /// <param name="e">Exception thrown from the callback.</param>
        private void LoginCallback(Result <MainSessionPrx> result)
        {
            System.Exception e = result.Exception;
            if (result.Success)
            {
                if (KeepAlive)
                {
                    keepAliveTimer = new Timer(new TimerCallback(OnKeepAlive),
                                               null, KeepAliveInterval, KeepAliveInterval);
                }

                session = result.ReturnedResult;
                session.GetTankList();

                //session = MainSessionPrxHelper.uncheckedCast(session.ice_router(router));
                pinger = new Pinger(session);
            }
            else
            {
                logger.Error("LoginCallback() Login attempt failed: {0}", e);
                if (e is PermissionDeniedException)
                {
                    PermissionDeniedException ex = (PermissionDeniedException)e;
                    e = new LoginFailedException(ex.reason);
                }
                else
                {
                    e = new LoginFailedException("Unable to login.");
                }

                result.Exception = e;
            }

            remoteCallback(new Result(result.Success, session, result.Exception));
            remoteCallback = null;
        }
コード例 #11
0
        public void TestExceptions()
        {
            {
                AlreadyExistsException v1 = new AlreadyExistsException("ex");
                AlreadyExistsException v2 = (AlreadyExistsException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                ConfigurationException v1 = new ConfigurationException("ex");
                ConfigurationException v2 = (ConfigurationException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                ConnectionBrokenException v1 = new ConnectionBrokenException("ex");
                ConnectionBrokenException v2 = (ConnectionBrokenException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                ConnectionFailedException v1 = new ConnectionFailedException("ex");
                ConnectionFailedException v2 = (ConnectionFailedException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                ConnectorException v1 = new ConnectorException("ex");
                ConnectorException v2 = (ConnectorException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }
            {
                ConnectorIOException v1 = new ConnectorIOException("ex");
                ConnectorIOException v2 = (ConnectorIOException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }
            {
                ConnectorSecurityException v1 = new ConnectorSecurityException("ex");
                ConnectorSecurityException v2 = (ConnectorSecurityException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                InvalidCredentialException v1 = new InvalidCredentialException("ex");
                InvalidCredentialException v2 = (InvalidCredentialException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                InvalidPasswordException v1 = new InvalidPasswordException("ex");
                InvalidPasswordException v2 = (InvalidPasswordException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                PasswordExpiredException v1 = new PasswordExpiredException("ex");
                v1.Uid = (new Uid("myuid"));
                PasswordExpiredException v2 = (PasswordExpiredException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
                Assert.AreEqual("myuid", v2.Uid.GetUidValue());
            }

            {
                OperationTimeoutException v1 = new OperationTimeoutException("ex");
                OperationTimeoutException v2 = (OperationTimeoutException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                PermissionDeniedException v1 = new PermissionDeniedException("ex");
                PermissionDeniedException v2 = (PermissionDeniedException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                UnknownUidException v1 = new UnknownUidException("ex");
                UnknownUidException v2 = (UnknownUidException)CloneObject(v1);
                Assert.AreEqual("ex", v2.Message);
            }

            {
                ArgumentException v1 = new ArgumentException("my msg");
                ArgumentException v2 = (ArgumentException)CloneObject(v1);
                Assert.AreEqual("my msg", v2.Message);
            }

            {
                ArgumentNullException v1 = new ArgumentNullException(null, "my msg 1");
                ArgumentException     v2 = (ArgumentException)CloneObject(v1);
                Assert.AreEqual("my msg 1", v2.Message);
            }

            {
                Exception v1 = new Exception("my msg2");
                Exception v2 = (Exception)CloneObject(v1);
                Assert.AreEqual("my msg2", v2.Message);
            }
        }
コード例 #12
0
        public static void ThrowPermissionDeniedException(PermissionDeniedException ex)
        {
            ErrorData e = new v2.ErrorData(ex, "permission-denied");

            throw new WebFaultException <Error>(new Error(e), HttpStatusCode.Forbidden);
        }