public void ASimpleDryRun() { var request = new Request() { Id = Guid.NewGuid(), LoginId = "AdminUser1", Password = "******" }; var authenticationHandler = new AuthenticationRequestHandler(); var authorizationHandler = new AuthorizationRequestHandler(); var accessHandler = new AccessRequestHandler(); authenticationHandler.SetNextHandler(authorizationHandler); authorizationHandler.SetNextHandler(accessHandler); authenticationHandler.Invoke(request); }
/// <summary> /// Handles a received client message. /// </summary> /// <param name="connection"> /// The connection over which the message was received. /// </param> /// <param name="message"> /// The client's message to us. /// </param> private void OnClientMessage(IPipeServer server, BaseMessage message) { // This is so gross, but unfortuantely we can't just switch on a type. We can come up // with a nice mapping system so we can do a switch, but this can wait. m_logger.Debug("Got IPC message from client."); if (m_ipcQueue.HandleMessage(message)) { return; } var msgRealType = message.GetType(); Action <BaseMessage> callback = null; if (m_callbacks.TryGetValue(msgRealType, out callback)) { m_logger.Debug("Client message is {0}", msgRealType.Name); callback?.Invoke(message); } if (msgRealType == typeof(Messages.AuthenticationMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.AuthenticationMessage)); var cast = (Messages.AuthenticationMessage)message; if (cast != null) { if (string.IsNullOrEmpty(cast.Username) || string.IsNullOrWhiteSpace(cast.Username)) { PushMessage(new AuthenticationMessage(AuthenticationAction.InvalidInput)); return; } if (cast.Password == null || cast.Password.Length <= 0) { PushMessage(new AuthenticationMessage(AuthenticationAction.InvalidInput)); return; } var args = new AuthenticationRequestArgs(cast); AttemptAuthentication?.Invoke(args); } } else if (msgRealType == typeof(Messages.DeactivationMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.DeactivationMessage)); var cast = (Messages.DeactivationMessage)message; if (cast != null && cast.Command == DeactivationCommand.Requested) { var args = new DeactivationRequestEventArgs(); // This fills args.DeactivationCommand. DeactivationRequested?.Invoke(args); PushMessage(new DeactivationMessage(args.DeactivationCommand)); } } else if (msgRealType == typeof(Messages.RelaxedPolicyMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.RelaxedPolicyMessage)); var cast = (Messages.RelaxedPolicyMessage)message; if (cast != null) { var args = new RelaxedPolicyEventArgs(cast); RelaxedPolicyRequested?.Invoke(args); } } else if (msgRealType == typeof(Messages.ClientToClientMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.ClientToClientMessage)); var cast = (Messages.ClientToClientMessage)message; if (cast != null) { // Just relay this message to all clients. PushMessage(cast); } } else if (msgRealType == typeof(Messages.FilterStatusMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.FilterStatusMessage)); var cast = (Messages.FilterStatusMessage)message; if (cast != null) { ClientServerStateQueried?.Invoke(new StateChangeEventArgs(cast)); } } else if (msgRealType == typeof(Messages.ClientUpdateResponseMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.ClientUpdateResponseMessage)); var cast = (Messages.ClientUpdateResponseMessage)message; if (cast != null) { if (cast.Accepted) { m_logger.Debug("Client has accepted update."); ClientAcceptedPendingUpdate?.Invoke(); } } } else if (msgRealType == typeof(Messages.BlockActionReviewRequestMessage)) { m_logger.Debug("Client message is {0}", nameof(Messages.BlockActionReviewRequestMessage)); var cast = (Messages.BlockActionReviewRequestMessage)message; if (cast != null) { Uri output; if (Uri.TryCreate(cast.FullRequestUrl, UriKind.Absolute, out output)) { // Here we'll just recycle the block action message and handler. ClientRequestsBlockActionReview?.Invoke(new NotifyBlockActionMessage(BlockType.OtherContentClassification, output, string.Empty, cast.CategoryName, DateTime.Now)); } else { m_logger.Info("Failed to create absolute URI for string \"{0}\".", cast.FullRequestUrl); } } } else if (msgRealType == typeof(Messages.CaptivePortalDetectionMessage)) { m_logger.Debug("Server message is {0}", nameof(Messages.CaptivePortalDetectionMessage)); var cast = (Messages.CaptivePortalDetectionMessage)message; if (cast != null) { RequestCaptivePortalDetection?.Invoke(cast); } } else if (msgRealType == typeof(Messages.CertificateExemptionMessage)) { m_logger.Debug("Server message is {0}", nameof(Messages.CertificateExemptionMessage)); var cast = (Messages.CertificateExemptionMessage)message; if (cast != null) { this.OnCertificateExemptionGranted?.Invoke(new CertificateExemptionEventArgs(cast)); } } else if (msgRealType == typeof(Messages.DiagnosticsMessage)) { m_logger.Debug("Server message is {0}", nameof(Messages.DiagnosticsMessage)); var cast = (Messages.DiagnosticsMessage)message; if (cast != null) { this.OnDiagnosticsEnable?.Invoke(cast); } } else { // Unknown type. } }