public override void ValidateSolution(SPSolutionValidationProperties properties)
        {
            base.ValidateSolution(properties);
            AddSolutionToCatalog(properties.Name, properties.SolutionId, properties.Site.Url);

            properties.Valid = true;
        }
 //This method is called once for every Assembly in the solution
 public override void ValidateAssembly(SPSolutionValidationProperties properties, SPSolutionFile assembly)
 {
     base.ValidateAssembly(properties, assembly);
     //In this example, we run no special check on assemblies
     //But we must set Valid = true or the solution activation will not complete
     properties.Valid = true;
 }
        //This method is called once for every Solution as it activates
        public override void ValidateSolution(SPSolutionValidationProperties properties)
        {
            base.ValidateSolution(properties);
            //We will mark every solution as valid, then log its activation to a SharePoint list
            //The Valid property is false by default. We must set it to true or else the
            //Solution activation will fail. Usually you'd do this only after making
            //your checks.
            properties.Valid = true;
            //NOTE: If the user solution fails your tests, you should use the
            //ValidationErrorMessage and ValidationErrorUrl properties to tell the
            //user why.

            //Get the SPSite where the solution was activated, ensuring correct disposal
            using (SPSite site = properties.Site)
            {
                //Get the top level SPWeb
                using (SPWeb topWeb = site.RootWeb)
                {
                    //Get the Annoucements list
                    SPList annoucementsList = topWeb.Lists["Announcements"];

                    //Create a new announcement
                    SPListItem newAnnouncement = annoucementsList.Items.Add();
                    newAnnouncement["Title"] = "A user solution has been activated";
                    newAnnouncement["Body"]  = "The user solution name was: " + properties.Name;
                    newAnnouncement.Update();
                }
            }
        }
        public override void ValidateAssembly(SPSolutionValidationProperties properties, SPSolutionFile assembly)
        {
            IReadOnlyCollection<byte> bytes = assembly.OpenBinary();

            if (bytes.LongCount() > 10000000)
            {
                properties.ValidationErrorMessage = "Assembly is too large";
                properties.Valid = false;
            }
        }
        public override void ValidateSolution(SPSolutionValidationProperties properties)
        {
            foreach (SPSolutionFile file in properties.Files)
                if (file.Location.Contains(".jpg"))
                {
                    properties.Valid = false;
                    properties.ValidationErrorMessage = "Solution may not contain image";
                }
 
        }
        /// <summary>
        /// Checks if the solution has JavaScript files.
        /// </summary>
        /// <param name="properties">Solution validation properties.</param>
        public override void ValidateSolution(SPSolutionValidationProperties properties)
        {
            base.ValidateSolution(properties);

            bool isValidSolution = true;

            // Check if the solution file contains any JavaScript file.
            foreach (SPSolutionFile file in properties.Files)
            {
                if (file.Location.EndsWith(".js", StringComparison.OrdinalIgnoreCase))
                {
                    isValidSolution = false;
                    properties.ValidationErrorMessage = "Contoso IT : Sandboxed solutions should not contain JavaScript files.";
                    properties.ValidationErrorUrl     = "/_layouts/Contoso.SharePoint.Administration/ContosoError.aspx";
                    break;
                }
            }

            properties.Valid = isValidSolution;
        }
        public override void ValidateAssembly(SPSolutionValidationProperties properties, SPSolutionFile assembly)
        {
            properties.ValidationErrorUrl = "/_layouts/SolutionValidatorDemo/SolutionValidationErrorPage.aspx";
            bool   valid             = true;
            string blockAssemblyName = "SandboxedWebPart";//"TestSolution";
            string blockPKT          = "29d96910438b4111";

            // base.ValidateAssembly(properties, assembly);

            byte[]   fileBytes = LoadBytes(assembly.OpenBinary());
            Assembly a         = Assembly.Load(fileBytes);

            string[] assemblyFullName = a.FullName.ToLower().Split(',');
            string   assemblyName     = assemblyFullName[0];
            string   version          = assemblyFullName[1].Replace("version=", "").Trim();
            string   culture          = assemblyFullName[2].Replace("culture=", "").Trim();
            string   publicKeyToken   = assemblyFullName[3].Replace("publickeytoken=", "").Trim();

            //Validate AssemblyName
            if (assemblyName.Equals(blockAssemblyName.ToLower()))
            {
                valid = false;
                properties.ValidationErrorMessage += "Assembly name '" + assemblyName + "' not valid. ";
            }
            //Validate PublicKeyToken
            if (publicKeyToken.Equals(blockPKT.ToLower()))
            {
                valid = false;
                properties.ValidationErrorMessage += "Assembly PublicKeyToken '" + publicKeyToken + "' not valid. ";
            }



            if (!valid)
            {
                properties.ValidationErrorUrl += "?ErrorMessage=" + properties.ValidationErrorMessage;
            }

            properties.Valid = valid;
        }
        public override void ValidateSolution(SPSolutionValidationProperties properties)
        {
            properties.ValidationErrorUrl = "/_layouts/SolutionValidatorDemo/SolutionValidationErrorPage.aspx";
            bool   valid           = true;
            string blockSolutionID = "{3CCB9CAF-54A7-42FF-A03F-F6D6D881BC70}";

            string[] blockFileName    = { "SandboxedWebPart", "Test" };
            string[] blockFileExt     = { "xml", "jpg", "webpart" };
            string[] blockFileContent = { "Sand", "box" };



            ReadOnlyCollection <SPSolutionFile> files = properties.Files;

            foreach (SPSolutionFile file in files)
            {
                // Block Filenames
                foreach (string filename in blockFileName)
                {
                    if (file.Location.ToLower().Equals(filename))
                    {
                        valid = false;
                        properties.ValidationErrorMessage += "Filename '" + filename + "' is blocked. ";
                    }
                }

                // Block FileExtensions
                foreach (string ext in blockFileExt)
                {
                    if (file.Location.ToLower().EndsWith(ext))
                    {
                        valid = false;
                        properties.ValidationErrorMessage += "File extension '" + ext + "' is blocked. ";
                    }
                }

                if (file.Location.ToLower().EndsWith("xml"))
                {
                    byte[] fileBytes = LoadBytes(file.OpenBinary());

                    string fileContents = ASCIIEncoding.ASCII.GetString(fileBytes);

                    // Check for file content
                    foreach (string content in blockFileContent)
                    {
                        if (fileContents.ToLower().Contains(content))
                        {
                            valid = false;
                            properties.ValidationErrorMessage += "File '" + file.Location + "' contains blocked characters. ";
                        }
                    }

                    // Check for Features like ContentType, CustomAction, Workflow, Receivers, ReceiverAssembly, ListTemplate, Module, Field, WebPart

                    if (CheckForFeature(fileContents, "ListTemplate"))
                    {
                        valid = false;
                        properties.ValidationErrorMessage = "Solution is blocked from including List Definitions. ";
                    }
                }
            }
            // Block SolutionID
            if (properties.SolutionId.Equals(new Guid(blockSolutionID)))
            {
                valid = false;
                properties.ValidationErrorMessage += "SolutionID is not valid. ";
            }

            // Block SolutionID stored in SharePoint List
            string strListName = "block";

            using (SPSite site = properties.Site)
            {
                SPList list = site.OpenWeb().Lists.TryGetList(strListName);
                if (list != null)
                {
                    SPListItemCollection items = list.GetItems();
                    foreach (SPListItem item in items)
                    {
                        if (properties.SolutionId.Equals(new Guid(item.Title)))
                        {
                            valid = false;
                            properties.ValidationErrorMessage += "SolutionID is not valid. ";
                            break;
                        }
                    }
                }
            }



            if (!valid)
            {
                properties.ValidationErrorUrl += "?ErrorMessage=" + properties.ValidationErrorMessage;
            }

            properties.Valid = valid;
        }
 public override void ValidateAssembly(SPSolutionValidationProperties properties, SPSolutionFile assembly)
 {
     Console.WriteLine("");
     base.ValidateAssembly(properties, assembly);
 }