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); }