public ServerAuditHistoryProjectPlugin(IFarmService farmService,
                                        IVelocityViewGenerator viewGenerator,
                                        ISessionRetriever sessionRetriever,
                                        IUrlBuilder urlBuilder)
 {
     plugin = new ServerAuditHistoryServerPlugin(farmService, viewGenerator, sessionRetriever, urlBuilder);
 }
		public ServerUserListProjectPlugin(IFarmService farmService, 
            IVelocityViewGenerator viewGenerator, 
            ISessionRetriever sessionRetriever,
            IUrlBuilder urlBuilder)
		{
            plugin = new ServerUserListServerPlugin(farmService, viewGenerator, sessionRetriever, urlBuilder);
		}
 public QuerySessionActionDecorator(IAction decoratedAction, ISessionRetriever retriever,
     ISessionStorer storer)
 {
     this.decoratedAction = decoratedAction;
     this.retriever = retriever;
     this.storer = storer;
 }
Пример #4
0
 public QuerySessionActionDecorator(IAction decoratedAction, ISessionRetriever retriever,
                                    ISessionStorer storer)
 {
     this.decoratedAction = decoratedAction;
     this.retriever       = retriever;
     this.storer          = storer;
 }
Пример #5
0
 public XmlProjectParametersReportAction(IFarmService farmService,
                                         ICruiseUrlBuilder urlBuilder,
                                         ISessionRetriever retriever)
 {
     this.farmService = farmService;
     this.urlBuilder  = urlBuilder;
     this.retriever   = retriever;
 }
        public RequestWrappingCruiseRequest(IRequest request, 
            ICruiseUrlBuilder urlBuilder,
            ISessionRetriever sessionRetriever)
		{
			this.request = request;
            this.urlBuilder = urlBuilder;
            this.sessionRetriever = sessionRetriever;
		}
 public XmlProjectParametersReportAction(IFarmService farmService, 
     ICruiseUrlBuilder urlBuilder,
     ISessionRetriever retriever)
 {
     this.farmService = farmService;
     this.urlBuilder = urlBuilder;
     this.retriever = retriever;
 }
 public ServerSecurityConfigurationServerPlugin(IFarmService farmService, 
     IVelocityViewGenerator viewGenerator, 
     ISessionRetriever sessionRetriever)
 {
     this.farmService = farmService;
     this.viewGenerator = viewGenerator;
     this.sessionRetriever = sessionRetriever;
 }
 public RequestWrappingCruiseRequest(IRequest request,
                                     ICruiseUrlBuilder urlBuilder,
                                     ISessionRetriever sessionRetriever)
 {
     this.request          = request;
     this.urlBuilder       = urlBuilder;
     this.sessionRetriever = sessionRetriever;
 }
 public ServerSecurityConfigurationServerPlugin(IFarmService farmService,
                                                IVelocityViewGenerator viewGenerator,
                                                ISessionRetriever sessionRetriever)
 {
     this.farmService      = farmService;
     this.viewGenerator    = viewGenerator;
     this.sessionRetriever = sessionRetriever;
 }
 public VelocityProjectGridAction(IFarmService farmService, IVelocityViewGenerator viewGenerator,
                                  IProjectGrid projectGrid,
                                  ISessionRetriever sessionRetriever)
 {
     this.farmService      = farmService;
     this.viewGenerator    = viewGenerator;
     this.projectGrid      = projectGrid;
     this.sessionRetriever = sessionRetriever;
 }
 public VelocityProjectGridAction(IFarmService farmService, IVelocityViewGenerator viewGenerator, 
     IProjectGrid projectGrid,
     ISessionRetriever sessionRetriever)
 {
     this.farmService = farmService;
     this.viewGenerator = viewGenerator;
     this.projectGrid = projectGrid;
     this.sessionRetriever = sessionRetriever;
 }
 public CruiseActionProxyAction(ICruiseAction proxiedAction, 
     ICruiseRequestFactory cruiseRequestFactory,
     ICruiseUrlBuilder urlBuilder,
     ISessionRetriever retriever)
 {
     this.proxiedAction = proxiedAction;
     this.cruiseRequestFactory = cruiseRequestFactory;
     this.urlBuilder = urlBuilder;
     this.retriever = retriever;
 }
Пример #14
0
 public ServerAuditHistoryServerPlugin(IFarmService farmService,
                                       IVelocityViewGenerator viewGenerator,
                                       ISessionRetriever sessionRetriever,
                                       IUrlBuilder urlBuilder)
 {
     this.farmService      = farmService;
     this.viewGenerator    = viewGenerator;
     this.sessionRetriever = sessionRetriever;
     this.urlBuilder       = urlBuilder;
 }
 public LoginViewBuilder(ICruiseRequest request, ILinkFactory linkFactory, 
     IVelocityViewGenerator velocityViewGenerator, IDashboardConfiguration configuration,
     ISessionRetriever retriever)
 {
     this.request = request;
     this.linkFactory = linkFactory;
     this.velocityViewGenerator = velocityViewGenerator;
     this.configuration = configuration;
     this.retriever = retriever;
 }
Пример #16
0
 public TopControlsViewBuilder(ICruiseRequest request, ILinkFactory linkFactory, IVelocityViewGenerator velocityViewGenerator,
                               IFarmService farmService, IFingerprintFactory fingerprintFactory, ISessionRetriever sessionRetriever)
 {
     this.request               = request;
     this.linkFactory           = linkFactory;
     this.velocityViewGenerator = velocityViewGenerator;
     this.farmService           = farmService;
     this.fingerprintFactory    = fingerprintFactory;
     this.sessionRetriever      = sessionRetriever;
 }
	    public TopControlsViewBuilder(ICruiseRequest request, ILinkFactory linkFactory, IVelocityViewGenerator velocityViewGenerator,
            IFarmService farmService, IFingerprintFactory fingerprintFactory, ISessionRetriever sessionRetriever)
		{
			this.request = request;
			this.linkFactory = linkFactory;
			this.velocityViewGenerator = velocityViewGenerator;
			this.farmService = farmService;
		    this.fingerprintFactory = fingerprintFactory;
            this.sessionRetriever = sessionRetriever;
		}
Пример #18
0
 public LoginViewBuilder(ICruiseRequest request, ILinkFactory linkFactory,
                         IVelocityViewGenerator velocityViewGenerator, IDashboardConfiguration configuration,
                         ISessionRetriever retriever, ISessionStorer storer)
 {
     this.request               = request;
     this.linkFactory           = linkFactory;
     this.velocityViewGenerator = velocityViewGenerator;
     this.configuration         = configuration;
     this.storer = storer;
 }
 public CruiseActionProxyAction(ICruiseAction proxiedAction,
                                ICruiseRequestFactory cruiseRequestFactory,
                                ICruiseUrlBuilder urlBuilder,
                                ISessionRetriever retriever)
 {
     this.proxiedAction        = proxiedAction;
     this.cruiseRequestFactory = cruiseRequestFactory;
     this.urlBuilder           = urlBuilder;
     this.retriever            = retriever;
 }
 public ServerAuditHistoryServerPlugin(IFarmService farmService, 
     IVelocityViewGenerator viewGenerator, 
     ISessionRetriever sessionRetriever,
     IUrlBuilder urlBuilder)
 {
     this.farmService = farmService;
     this.viewGenerator = viewGenerator;
     this.sessionRetriever = sessionRetriever;
     this.urlBuilder = urlBuilder;
 }
	    public HtmlBuildLogAction(IBuildRetriever buildRetriever, IVelocityViewGenerator viewGenerator,
		                          ICruiseUrlBuilder urlBuilder, IFingerprintFactory fingerprintFactory,
            ISessionRetriever retriever)
		{
			this.buildRetriever = buildRetriever;
			this.viewGenerator = viewGenerator;
			this.urlBuilder = urlBuilder;
		    this.fingerprintFactory = fingerprintFactory;
            this.retriever = retriever;
		}
Пример #22
0
 public HtmlBuildLogAction(IBuildRetriever buildRetriever, IVelocityViewGenerator viewGenerator,
                           ICruiseUrlBuilder urlBuilder, IFingerprintFactory fingerprintFactory,
                           ISessionRetriever retriever)
 {
     this.buildRetriever     = buildRetriever;
     this.viewGenerator      = viewGenerator;
     this.urlBuilder         = urlBuilder;
     this.fingerprintFactory = fingerprintFactory;
     this.retriever          = retriever;
 }
Пример #23
0
            /// <summary>
            /// Attempt to retrieve a session token
            /// </summary>
            /// <returns></returns>
            public virtual string RetrieveSessionToken(ISessionRetriever sessionRetriever)
            {
                // Attempt to find a session token
                string sessionToken = request.GetText("sessionToken");

                if (string.IsNullOrEmpty(sessionToken) && (sessionRetriever != null))
                {
                    sessionToken = sessionRetriever.RetrieveSessionToken(request);
                }
                return(sessionToken);
            }
 public RecentBuildLister(IFarmService farmService, IVelocityTransformer velocityTransformer,
                          IVelocityViewGenerator viewGenerator, ILinkFactory linkFactory, ILinkListFactory linkListFactory, IFingerprintFactory fingerprintFactory,
                          ICruiseUrlBuilder urlBuilder, ISessionRetriever retriever)
 {
     this.farmService           = farmService;
     this.velocityTransformer   = velocityTransformer;
     this.velocityViewGenerator = viewGenerator;
     this.linkFactory           = linkFactory;
     this.linkListFactory       = linkListFactory;
     this.urlBuilder            = urlBuilder;
     this.fingerprintFactory    = fingerprintFactory;
     this.retriever             = retriever;
 }
Пример #25
0
        public LoginViewBuilder(ICruiseRequest request, ILinkFactory linkFactory,
                                IVelocityViewGenerator velocityViewGenerator, IDashboardConfiguration configuration,
                                ISessionRetriever retriever)
        {
            this.request               = request;
            this.linkFactory           = linkFactory;
            this.velocityViewGenerator = velocityViewGenerator;
            this.configuration         = configuration;
            this.retriever             = retriever;

            this.BuildServerName = request.ServerName;
            this.ProjectName     = request.ProjectName;
        }
Пример #26
0
        public RecentBuildLister(IFarmService farmService, IVelocityTransformer velocityTransformer, 
			IVelocityViewGenerator viewGenerator, ILinkFactory linkFactory, ILinkListFactory linkListFactory, IFingerprintFactory fingerprintFactory,
            ICruiseUrlBuilder urlBuilder, ISessionRetriever retriever)
        {
            this.farmService = farmService;
            this.velocityTransformer = velocityTransformer;
            this.velocityViewGenerator = viewGenerator;
            this.linkFactory = linkFactory;
            this.linkListFactory = linkListFactory;
            this.urlBuilder = urlBuilder;
            this.fingerprintFactory = fingerprintFactory;
            this.retriever = retriever;
        }
		public ICruiseRequest CreateCruiseRequest (IRequest request, 
            ICruiseUrlBuilder urlBuilder,
            ISessionRetriever retriever)
		{
			return new RequestWrappingCruiseRequest(request, urlBuilder, retriever);
		}
 /// <summary>
 /// Attempt to retrieve a session token
 /// </summary>
 /// <returns></returns>
 public virtual string RetrieveSessionToken(ISessionRetriever sessionRetriever)
 {
     // Attempt to find a session token
     string sessionToken = request.GetText("sessionToken");
     if (string.IsNullOrEmpty(sessionToken) && (sessionRetriever != null))
     {
         sessionToken = sessionRetriever.RetrieveSessionToken(request);
     }
     return sessionToken;
 }
Пример #29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProjectXmlReport"/> class.
 /// </summary>
 /// <param name="farmService">The farm service.</param>
 /// <param name="sessionRetriever">The session retriever.</param>
 public ProjectXmlReport(IFarmService farmService, ISessionRetriever sessionRetriever)
 {
     this.sessionRetriever = sessionRetriever;
     this.farmService      = farmService;
 }
		public ServerSecurityConfigurationProjectPlugin(IFarmService farmService, 
            IVelocityViewGenerator viewGenerator, 
            ISessionRetriever sessionRetriever)
		{
            plugin = new ServerSecurityConfigurationServerPlugin(farmService, viewGenerator, sessionRetriever);
		}
Пример #31
0
        public void SetupObjectSourceForFirstRequest(HttpContext context)
        {
            _objectionManager.AddInstanceForType(typeof(ObjectSource), _objectionManager);

            ObjectSource objectSource = UpdateObjectSourceForRequest(context);

            DefaultUrlBuilder urlBuilder = new DefaultUrlBuilder();

            _objectionManager.AddInstanceForType(typeof(IUrlBuilder),
                                                 new AbsolutePathUrlBuilderDecorator(
                                                     urlBuilder,
                                                     context.Request.ApplicationPath));

            _objectionManager.SetImplementationType(typeof(ICruiseRequest), typeof(RequestWrappingCruiseRequest));

            _objectionManager.SetImplementationType(typeof(IMultiTransformer), typeof(PathMappingMultiTransformer));

            _objectionManager.SetDependencyImplementationForType(typeof(PathMappingMultiTransformer), typeof(IMultiTransformer), typeof(HtmlAwareMultiTransformer));

            IDashboardConfiguration config = GetDashboardConfiguration(objectSource, context);

            _objectionManager.AddInstanceForType(typeof(IDashboardConfiguration), config);

            IRemoteServicesConfiguration remoteServicesConfig = config.RemoteServices;

            _objectionManager.AddInstanceForType(typeof(IRemoteServicesConfiguration), remoteServicesConfig);

            IPluginConfiguration pluginConfig = config.PluginConfiguration;

            _objectionManager.AddInstanceForType(typeof(IPluginConfiguration), pluginConfig);

            ISessionRetriever sessionRetriever = pluginConfig.SessionStore.RetrieveRetriever();

            _objectionManager.AddInstanceForType(typeof(ISessionRetriever), sessionRetriever);

            ISessionStorer sessionStorer = pluginConfig.SessionStore.RetrieveStorer();

            _objectionManager.AddInstanceForType(typeof(ISessionStorer), sessionStorer);

            LoadFarmPlugins(pluginConfig);
            LoadServerPlugins(pluginConfig);
            LoadProjectPlugins(pluginConfig);

            // Even if the user hasn't specified to use this plugin, we still need it registered since there are links to it elsewhere
            try
            {
                objectSource.GetByName(LatestBuildReportProjectPlugin.ACTION_NAME.ToLowerInvariant());
            }
            catch (ApplicationException)
            {
                IPlugin latestBuildPlugin = (IPlugin)objectSource.GetByType(typeof(LatestBuildReportProjectPlugin));
                AddActionInstance(latestBuildPlugin.NamedActions[0])
                .Decorate(typeof(ServerCheckingProxyAction))
                .Decorate(typeof(ProjectCheckingProxyAction))
                .Decorate(typeof(CruiseActionProxyAction))
                .Decorate(typeof(ExceptionCatchingActionProxy))
                .Decorate(typeof(SiteTemplateActionDecorator));
            }

            LoadBuildPlugins(pluginConfig);
            LoadSecurityPlugins(pluginConfig, sessionStorer);

            AddRequiredSecurityAction(LogoutSecurityAction.ActionName.ToLowerInvariant(), typeof(LogoutSecurityAction));
            AddRequiredSecurityAction(ChangePasswordSecurityAction.ActionName.ToLowerInvariant(), typeof(ChangePasswordSecurityAction));

            // ToDo - make this kind of thing specifiable by Plugins (note that this action is not wrapped with a SiteTemplateActionDecorator
            // See BuildLogBuildPlugin for linked todo
            _objectionManager.AddTypeForName(XmlBuildLogAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlBuildLogAction))
            .Decorate(typeof(ServerCheckingProxyAction))
            .Decorate(typeof(BuildCheckingProxyAction))
            .Decorate(typeof(ProjectCheckingProxyAction))
            .Decorate(typeof(CruiseActionProxyAction));

            // TODO - Xml Exceptions?
            _objectionManager.AddTypeForName(ForceBuildXmlAction.ACTION_NAME.ToLowerInvariant(), typeof(ForceBuildXmlAction))
            .Decorate(typeof(ServerCheckingProxyAction))
            .Decorate(typeof(ProjectCheckingProxyAction))
            .Decorate(typeof(CruiseActionProxyAction));

            // Supporting xml project status queries from CCTray or clients earlier than version 1.3
            // Also still used by the web dashboard for displaying farm/server reports
            _objectionManager.AddTypeForName(XmlReportAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlReportAction));
            _objectionManager.AddTypeForName(ProjectXmlReport.ActionName.ToLowerInvariant(), typeof(ProjectXmlReport))
            .Decorate(typeof(CruiseActionProxyAction));

            // Supporting cruise server project and queue status queries from CCTray or clients 1.3 or later
            _objectionManager.AddTypeForName(XmlServerReportAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlServerReportAction));

            // Security handler for CCTray or client 1.5 or later
            _objectionManager.AddTypeForName(XmlServerSecurityAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlServerSecurityAction));

            // RSS publisher
            _objectionManager.AddTypeForName(Plugins.RSS.RSSFeed.ACTION_NAME.ToLowerInvariant(), typeof(Plugins.RSS.RSSFeed))
            .Decorate(typeof(CruiseActionProxyAction));

            // Status data
            _objectionManager.AddTypeForName(ProjectStatusAction.ActionName.ToLowerInvariant(), typeof(ProjectStatusAction))
            .Decorate(typeof(ServerCheckingProxyAction))
            .Decorate(typeof(ProjectCheckingProxyAction))
            .Decorate(typeof(CruiseActionProxyAction));

            // File downloads
            _objectionManager.AddTypeForName(ProjectFileDownload.ActionName.ToLowerInvariant(), typeof(ProjectFileDownload))
            .Decorate(typeof(CruiseActionProxyAction));
            _objectionManager.AddTypeForName(BuildFileDownload.ActionName.ToLowerInvariant(), typeof(BuildFileDownload))
            .Decorate(typeof(CruiseActionProxyAction));

            // Parameters handler for CCTray or client 1.5 or later
            _objectionManager.AddInstanceForName(XmlProjectParametersReportAction.ACTION_NAME.ToLowerInvariant(),
                                                 objectSource.GetByType(typeof(XmlProjectParametersReportAction)));

            // Raw XML request handler
            _objectionManager.AddTypeForName(MessageHandlerPlugin.ActionName.ToLowerInvariant(), typeof(MessageHandlerPlugin))
            .Decorate(typeof(CruiseActionProxyAction));
        }
 public ServerSecurityConfigurationProjectPlugin(IFarmService farmService,
                                                 IVelocityViewGenerator viewGenerator,
                                                 ISessionRetriever sessionRetriever)
 {
     plugin = new ServerSecurityConfigurationServerPlugin(farmService, viewGenerator, sessionRetriever);
 }
Пример #33
0
 public ICruiseRequest CreateCruiseRequest(IRequest request,
                                           ICruiseUrlBuilder urlBuilder,
                                           ISessionRetriever retriever)
 {
     return(new RequestWrappingCruiseRequest(request, urlBuilder, retriever));
 }
Пример #34
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProjectXmlReport"/> class.
 /// </summary>
 /// <param name="farmService">The farm service.</param>
 /// <param name="sessionRetriever">The session retriever.</param>
 public ProjectXmlReport(IFarmService farmService, ISessionRetriever sessionRetriever)
 {
     this.sessionRetriever = sessionRetriever;
     this.farmService = farmService;
 }
        // This all needs breaking up a bit (to make it testable, apart from anything else)
        public ObjectSource SetupObjectSourceForRequest(HttpContext context)
        {
            ObjectSource objectSource = (ObjectSource)objectionManager; // Yuch - put this in Object Wizard somewhere

            objectionManager.AddInstanceForType(typeof(ObjectSource), objectionManager);

            objectionManager.AddInstanceForType(typeof(HttpContext), context);
            HttpRequest request = context.Request;

            objectionManager.AddInstanceForType(typeof(HttpRequest), request);

            NameValueCollection parametersCollection = new NameValueCollection();

            parametersCollection.Add(request.QueryString);
            parametersCollection.Add(request.Form);
            objectionManager.AddInstanceForType(typeof(IRequest),
                                                new NameValueCollectionRequest(parametersCollection, request.Headers, request.Path,
                                                                               request.RawUrl, request.ApplicationPath));

            DefaultUrlBuilder urlBuilder = new DefaultUrlBuilder();

            objectionManager.AddInstanceForType(typeof(IUrlBuilder),
                                                new AbsolutePathUrlBuilderDecorator(
                                                    urlBuilder,
                                                    request.ApplicationPath));

            objectionManager.SetImplementationType(typeof(ICruiseRequest), typeof(RequestWrappingCruiseRequest));

            objectionManager.SetImplementationType(typeof(IMultiTransformer), typeof(PathMappingMultiTransformer));

            objectionManager.SetDependencyImplementationForType(typeof(PathMappingMultiTransformer), typeof(IMultiTransformer), typeof(HtmlAwareMultiTransformer));

            IDashboardConfiguration config = GetDashboardConfiguration(objectSource, context);

            objectionManager.AddInstanceForType(typeof(IDashboardConfiguration), config);

            IRemoteServicesConfiguration remoteServicesConfig = config.RemoteServices;

            objectionManager.AddInstanceForType(typeof(IRemoteServicesConfiguration), remoteServicesConfig);

            IPluginConfiguration pluginConfig = config.PluginConfiguration;

            objectionManager.AddInstanceForType(typeof(IPluginConfiguration), pluginConfig);

            ISessionRetriever sessionRetriever = pluginConfig.SessionStore.RetrieveRetriever();

            objectionManager.AddInstanceForType(typeof(ISessionRetriever), sessionRetriever);

            ISessionStorer sessionStorer = pluginConfig.SessionStore.RetrieveStorer();

            objectionManager.AddInstanceForType(typeof(ISessionStorer), sessionStorer);
            urlBuilder.SessionStorer = sessionStorer;


            System.Collections.Generic.List <string> LoadedPlugins = new System.Collections.Generic.List <string>();
            bool UnknownPluginDetected = false;

            foreach (IPlugin plugin in pluginConfig.FarmPlugins)
            {
                if (plugin == null)
                {
                    UnknownPluginDetected = true;
                }
                else
                {
                    LoadedPlugins.Add(plugin.LinkDescription);

                    foreach (INamedAction action in plugin.NamedActions)
                    {
                        if ((action as INoSiteTemplateAction) == null)
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(SiteTemplateActionDecorator)).Decorate(typeof(QuerySessionActionDecorator)).Decorate(typeof(NoCacheabilityActionProxy));
                        }
                        else
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(QuerySessionActionDecorator)).Decorate(typeof(NoCacheabilityActionProxy));
                        }
                    }
                }
            }


            if (UnknownPluginDetected)
            {
                ThrowExceptionShouwingLoadedPlugins(LoadedPlugins, "FarmPlugins");
            }
            LoadedPlugins = new System.Collections.Generic.List <string>();

            foreach (IPlugin plugin in pluginConfig.ServerPlugins)
            {
                if (plugin == null)
                {
                    UnknownPluginDetected = true;
                }
                else
                {
                    LoadedPlugins.Add(plugin.LinkDescription);
                    foreach (INamedAction action in plugin.NamedActions)
                    {
                        if ((action as INoSiteTemplateAction) == null)
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(SiteTemplateActionDecorator)).Decorate(typeof(QuerySessionActionDecorator)).Decorate(typeof(NoCacheabilityActionProxy));
                        }
                        else
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(QuerySessionActionDecorator)).Decorate(typeof(NoCacheabilityActionProxy));
                        }
                    }
                }
            }

            if (UnknownPluginDetected)
            {
                ThrowExceptionShouwingLoadedPlugins(LoadedPlugins, "ServerPlugins");
            }
            LoadedPlugins = new System.Collections.Generic.List <string>();


            foreach (IPlugin plugin in pluginConfig.ProjectPlugins)
            {
                if (plugin == null)
                {
                    UnknownPluginDetected = true;
                }
                else
                {
                    LoadedPlugins.Add(plugin.LinkDescription);
                    foreach (INamedAction action in plugin.NamedActions)
                    {
                        if ((action as INoSiteTemplateAction) == null)
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(SiteTemplateActionDecorator)).Decorate(typeof(QuerySessionActionDecorator));
                        }
                        else
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(QuerySessionActionDecorator));
                        }
                    }
                }
            }

            if (UnknownPluginDetected)
            {
                ThrowExceptionShouwingLoadedPlugins(LoadedPlugins, "ProjectPlugins");
            }


            // Even if the user hasn't specified to use this plugin, we still need it registered since there are links to it elsewhere
            try
            {
                objectSource.GetByName(LatestBuildReportProjectPlugin.ACTION_NAME.ToLowerInvariant());
            }
            catch (ApplicationException)
            {
                IPlugin latestBuildPlugin = (IPlugin)objectSource.GetByType(typeof(LatestBuildReportProjectPlugin));
                objectionManager.AddInstanceForName(latestBuildPlugin.NamedActions[0].ActionName.ToLowerInvariant(), latestBuildPlugin.NamedActions[0].Action)
                .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(SiteTemplateActionDecorator)).Decorate(typeof(QuerySessionActionDecorator));
            }


            LoadedPlugins = new System.Collections.Generic.List <string>();

            foreach (IBuildPlugin plugin in pluginConfig.BuildPlugins)
            {
                if (plugin == null)
                {
                    UnknownPluginDetected = true;
                }
                else
                {
                    LoadedPlugins.Add(plugin.LinkDescription);
                    foreach (INamedAction action in plugin.NamedActions)
                    {
                        if ((action as INoSiteTemplateAction) == null)
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant() + "_CONDITIONAL_GET_FINGERPRINT_CHAIN", action.Action)
                            .Decorate(typeof(CruiseActionProxyAction)).Decorate(typeof(SiteTemplateActionDecorator))
                            .Decorate(typeof(QuerySessionActionDecorator));
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(BuildCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction))
                            .Decorate(typeof(CachingActionProxy)).Decorate(typeof(ExceptionCatchingActionProxy)).Decorate(typeof(SiteTemplateActionDecorator))
                            .Decorate(typeof(QuerySessionActionDecorator));
                        }
                        else
                        {
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant() + "_CONDITIONAL_GET_FINGERPRINT_CHAIN", action.Action)
                            .Decorate(typeof(CruiseActionProxyAction))
                            .Decorate(typeof(QuerySessionActionDecorator));
                            objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(BuildCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction))
                            .Decorate(typeof(CachingActionProxy)).Decorate(typeof(ExceptionCatchingActionProxy))
                            .Decorate(typeof(QuerySessionActionDecorator));
                        }
                    }
                }
            }

            if (UnknownPluginDetected)
            {
                ThrowExceptionShouwingLoadedPlugins(LoadedPlugins, "BuildPlugins");
            }
            LoadedPlugins = new System.Collections.Generic.List <string>();

            // Security plugins (for handling authentication)
            foreach (ISecurityPlugin plugin in pluginConfig.SecurityPlugins)
            {
                plugin.SessionStorer = sessionStorer;
                foreach (INamedAction action in plugin.NamedActions)
                {
                    if ((action as INoSiteTemplateAction) == null)
                    {
                        objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                        .Decorate(typeof(ServerCheckingProxyAction))
                        .Decorate(typeof(CruiseActionProxyAction))
                        .Decorate(typeof(ExceptionCatchingActionProxy))
                        .Decorate(typeof(SiteTemplateActionDecorator))
                        .Decorate(typeof(QuerySessionActionDecorator))
                        .Decorate(typeof(NoCacheabilityActionProxy));
                    }
                    else
                    {
                        objectionManager.AddInstanceForName(action.ActionName.ToLowerInvariant(), action.Action)
                        .Decorate(typeof(ServerCheckingProxyAction))
                        .Decorate(typeof(CruiseActionProxyAction))
                        .Decorate(typeof(ExceptionCatchingActionProxy))
                        .Decorate(typeof(QuerySessionActionDecorator))
                        .Decorate(typeof(NoCacheabilityActionProxy));
                    }
                }
            }

            if (UnknownPluginDetected)
            {
                ThrowExceptionShouwingLoadedPlugins(LoadedPlugins, "SecurityPlugins");
            }

            AddRequiredSecurityAction(LogoutSecurityAction.ActionName.ToLowerInvariant(), typeof(LogoutSecurityAction));
            AddRequiredSecurityAction(ChangePasswordSecurityAction.ActionName.ToLowerInvariant(), typeof(ChangePasswordSecurityAction));

            // ToDo - make this kind of thing specifiable by Plugins (note that this action is not wrapped with a SiteTemplateActionDecorator
            // See BuildLogBuildPlugin for linked todo
            objectionManager.AddTypeForName(XmlBuildLogAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlBuildLogAction))
            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(BuildCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction));

            // TODO - Xml Exceptions?
            objectionManager.AddTypeForName(ForceBuildXmlAction.ACTION_NAME.ToLowerInvariant(), typeof(ForceBuildXmlAction))
            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction));

            // Supporting xml project status queries from CCTray or clients earlier than version 1.3
            // Also still used by the web dashboard for displaying farm/server reports
            objectionManager.AddTypeForName(XmlReportAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlReportAction));
            objectionManager.AddTypeForName(ProjectXmlReport.ActionName.ToLowerInvariant(), typeof(ProjectXmlReport)).Decorate(typeof(CruiseActionProxyAction));

            // Supporting cruise server project and queue status queries from CCTray or clients 1.3 or later
            objectionManager.AddTypeForName(XmlServerReportAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlServerReportAction));

            // Security handler for CCTray or client 1.5 or later
            objectionManager.AddTypeForName(XmlServerSecurityAction.ACTION_NAME.ToLowerInvariant(), typeof(XmlServerSecurityAction));

            // RSS publisher
            objectionManager.AddTypeForName(Plugins.RSS.RSSFeed.ACTION_NAME.ToLowerInvariant(), typeof(Plugins.RSS.RSSFeed)).Decorate(typeof(CruiseActionProxyAction));

            // Status data
            objectionManager.AddTypeForName(ProjectStatusAction.ActionName.ToLowerInvariant(), typeof(ProjectStatusAction))
            .Decorate(typeof(ServerCheckingProxyAction)).Decorate(typeof(ProjectCheckingProxyAction)).Decorate(typeof(CruiseActionProxyAction));

            // File downloads
            objectionManager.AddTypeForName(ProjectFileDownload.ActionName.ToLowerInvariant(), typeof(ProjectFileDownload)).Decorate(typeof(CruiseActionProxyAction));
            objectionManager.AddTypeForName(BuildFileDownload.ActionName.ToLowerInvariant(), typeof(BuildFileDownload)).Decorate(typeof(CruiseActionProxyAction));

            // Parameters handler for CCTray or client 1.5 or later
            objectionManager.AddInstanceForName(XmlProjectParametersReportAction.ACTION_NAME.ToLowerInvariant(),
                                                objectSource.GetByType(typeof(XmlProjectParametersReportAction)));

            // Raw XML request handler
            objectionManager.AddTypeForName(MessageHandlerPlugin.ActionName.ToLowerInvariant(),
                                            typeof(MessageHandlerPlugin)).Decorate(typeof(CruiseActionProxyAction));

            return(objectSource);
        }