internal IEnumerable <NuGetPackageViewModel> FetchInstalledNuGetPackages(SharePointConnection connection) { var result = new List <NuGetPackageViewModel>(); var command = new NuGetListCommand(); command.Url = connection.Url; if (connection.AuthMode.Id == SharePointConnectionAuthMode.SharePointOnline.Id) { command.SharePointVersion = "o365"; command.UserName = connection.UserName; command.UserPassword = connection.UserPassword; } else if (connection.AuthMode.Id == SharePointConnectionAuthMode.WindowsAuthentication.Id) { command.SharePointVersion = "sp2013"; if (!string.IsNullOrEmpty(connection.UserName) && !string.IsNullOrEmpty(connection.UserPassword)) { command.UserName = connection.UserName; command.UserPassword = connection.UserPassword; } } command.Execute(); foreach (var p in command.Packages) { result.Add(new NuGetPackageViewModel(p)); } return(result); }
private List <IPackage> FetchLocalNuGetPackages(SharePointConnection connection) { var repoUrl = "https://www.myget.org/F/subpointsolutions-ci/api/v2"; var repo = PackageRepositoryFactory.Default.CreateRepository(repoUrl); var result = new List <IPackage>(); //try //{ // SPUtils.WithSharePointContext(connection.Url, // connection.UserName, // connection.UserPassword, // context => // { // var packageManager = new SPMeta2SolutionPackageManager(repo, context); // result = packageManager.LocalRepository // .GetPackages() // .GroupBy(p => p.Id) // .Select(g => g.Where(t => t.IsLatestVersion) // .OrderByDescending(p => p.Version) // .FirstOrDefault()) // .Where(a => a != null) // .ToList(); // }); //} //catch (Exception e) //{ // MessageBox.Show(e.ToString()); //} return(result); }
private List <IPackage> FetchOnlineNuGetPackages(SharePointConnection connection) { var repoUrl = "https://www.myget.org/F/subpointsolutions-ci/api/v2"; var repo = PackageRepositoryFactory.Default.CreateRepository(repoUrl); return(repo.GetPackages().Where(p => p.IsLatestVersion).ToList()); }
public ISharePointResult AddFiles(EntityReference regarding, IList <HttpPostedFileBase> files, bool overwrite = true, string folderPath = null) { var context = _dependencies.GetServiceContextForWrite(); var entityPermissionProvider = new CrmEntityPermissionProvider(); var result = new SharePointResult(regarding, entityPermissionProvider, context); if (files == null || !files.Any()) { return(result); } var entityMetadata = context.GetEntityMetadata(regarding.LogicalName); var entity = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id); // assert permission to create the sharepointdocumentlocation entity if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity."); return(result); } var spConnection = new SharePointConnection(SharePointConnectionStringName); var spSite = context.GetSharePointSiteFromUrl(spConnection.Url); var location = GetDocumentLocation(context, entity, entityMetadata, spSite); // assert permission to write the sharepointdocumentlocation entity if (!result.CanWrite) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Write document locations."); return(result); } var factory = new ClientFactory(); using (var client = factory.CreateClientContext(spConnection)) { // retrieve the SharePoint list and folder names for the document location string listUrl, folderUrl; context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl); var folder = client.AddOrGetExistingFolder(listUrl, folderUrl + folderPath); foreach (var postedFile in files) { using (var file = postedFile.InputStream) { // upload a file to the folder client.SaveFile(file, folder, Path.GetFileName(postedFile.FileName), overwrite); } } } return(result); }
public ISharePointResult AddFolder(EntityReference regarding, string name, string folderPath = null) { var context = _dependencies.GetServiceContextForWrite(); var entityPermissionProvider = new CrmEntityPermissionProvider(); var result = new SharePointResult(regarding, entityPermissionProvider, context); if (string.IsNullOrWhiteSpace(name)) { return(result); } // Throw exception if the name begins or ends with a dot, contains consecutive dots, // or any of the following invalid characters ~ " # % & * : < > ? / \ { | } if (Regex.IsMatch(name, @"(\.{2,})|([\~\""\#\%\&\*\:\<\>\?\/\\\{\|\}])|(^\.)|(\.$)")) { throw new Exception("The folder name contains invalid characters. Please use a different name. Valid folder names can't begin or end with a period, can't contain consecutive periods, and can't contain any of the following characters: ~ # % & * : < > ? / \\ { | }."); } var entityMetadata = context.GetEntityMetadata(regarding.LogicalName); var entity = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id); // assert permission to create the sharepointdocumentlocation entity if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity."); return(result); } var spConnection = new SharePointConnection(SharePointConnectionStringName); var spSite = context.GetSharePointSiteFromUrl(spConnection.Url); var location = GetDocumentLocation(context, entity, entityMetadata, spSite); // assert permission to write the sharepointdocumentlocation entity if (!result.CanWrite) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Write document locations."); return(result); } var factory = new ClientFactory(); using (var client = factory.CreateClientContext(spConnection)) { // retrieve the SharePoint list and folder names for the document location string listUrl, folderUrl; context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl); client.AddOrGetExistingFolder(listUrl, "{0}{1}/{2}".FormatWith(folderUrl, folderPath, name)); } return(result); }
private LocalNuGetPackageCacheItem LookupCachedItem(SharePointConnection sharePointConnection) { if (sharePointConnection == null) { return(null); } if (!PackageCache.ContainsKey(sharePointConnection)) { PackageCache.Add(sharePointConnection, new LocalNuGetPackageCacheItem()); } return(PackageCache[sharePointConnection]); }
private static Entity GetDocumentLocation(OrganizationServiceContext context, Entity entity, string folderName) { var spConnection = new SharePointConnection("SharePoint"); var spSite = context.GetSharePointSiteFromUrl(spConnection.Url); var entityPermissionProvider = new CrmEntityPermissionProvider(); var result = new SharePointResult(entity.ToEntityReference(), entityPermissionProvider, context); if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo) { return(null); } return(context.AddOrGetExistingDocumentLocationAndSave <Entity>(spSite, entity, folderName)); }
public ISharePointResult DeleteItem(EntityReference regarding, int id) { var context = _dependencies.GetServiceContextForWrite(); var entityPermissionProvider = new CrmEntityPermissionProvider(); var result = new SharePointResult(regarding, entityPermissionProvider, context); // assert permission to delete the sharepointdocumentlocation entity if (!result.PermissionsExist || !result.CanDelete) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity."); return(result); } var entityMetadata = context.GetEntityMetadata(regarding.LogicalName); var entity = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id); var spConnection = new SharePointConnection(SharePointConnectionStringName); var spSite = context.GetSharePointSiteFromUrl(spConnection.Url); var location = GetDocumentLocation(context, entity, entityMetadata, spSite); var factory = new ClientFactory(); using (var client = factory.CreateClientContext(spConnection)) { // retrieve the SharePoint list and folder names for the document location string listUrl, folderUrl; context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl); var list = client.GetListByUrl(listUrl); var item = list.GetItemById(id); item.DeleteObject(); client.ExecuteQuery(); } return(result); }
internal void DeployNuGetPackageInternal(SharePointConnection connection, IPackage package, bool force) { var appDataServices = ShServiceContainer.Instance.GetAppDataService <MetaPackDataService>(); var command = new DefaultInstallCommand(); command.Url = connection.Url; if (connection.AuthMode.Id == SharePointConnectionAuthMode.SharePointOnline.Id) { command.SharePointVersion = "o365"; command.SharePointApi = "csom"; command.UserName = connection.UserName; command.UserPassword = connection.UserPassword; } else if (connection.AuthMode.Id == SharePointConnectionAuthMode.WindowsAuthentication.Id) { command.SharePointVersion = "sp2013"; command.SharePointApi = "csom"; if (!string.IsNullOrEmpty(connection.UserName) && !string.IsNullOrEmpty(connection.UserPassword)) { command.UserName = connection.UserName; command.UserPassword = connection.UserPassword; } } command.PackageSources = appDataServices.NuGetConnections.Select(s => s.Url).ToList(); command.Id = package.Id; command.Version = package.Version.ToString(); command.PreRelease = package.IsReleaseVersion(); command.Force = force; command.Execute(); }
private static EntitiesGenerator.Definitions.Definition GetDefinitionFromSharePoint(string connectionString) { EntitiesGenerator.Definitions.Definition definition = new EntitiesGenerator.Definitions.Definition(); SharePointConnection sharePointConnection = new SharePointConnection(connectionString); System.Data.DataTable tables = sharePointConnection.GetTables(); SelectTableForm selectTableForm = new SelectTableForm(); foreach (System.Data.DataRow dataRow in tables.Rows) { string tableName = dataRow["Title"] as string; ListViewItem item = new ListViewItem(); item.Text = tableName; item.Tag = dataRow; item.ImageIndex = 0; item.Checked = true; selectTableForm.AddListViewItem(item); } if (selectTableForm.ShowDialog() == DialogResult.OK) { System.Windows.Forms.ListView.CheckedListViewItemCollection checkedItems = selectTableForm.GetCheckedItems(); foreach (ListViewItem item in checkedItems) { System.Data.DataRow dataRow = item.Tag as System.Data.DataRow; string listUrl = (dataRow["RootFolderUrl"] as string); EntitiesGenerator.Definitions.DataTable dataTable = new EntitiesGenerator.Definitions.DataTable(); dataTable.SourceName = listUrl; dataTable.TableName = dataRow["Title"] as string; System.Data.DataTable tableColumns = sharePointConnection.GetTable(listUrl); foreach (System.Data.DataRow tableColumn in tableColumns.Rows) { EntitiesGenerator.Definitions.DataColumn dataColumn = new EntitiesGenerator.Definitions.DataColumn(); string columnName = tableColumn["InternalName"] as string; Type dataType = tableColumn["FieldType"] as Type; dataColumn.ColumnName = columnName; dataColumn.SourceName = columnName; dataColumn.DataType = TypeManager.GetWellKnownDataTypeName(dataType); dataColumn.Type = dataColumn.DataType; dataColumn.AllowDBNull = !((bool)tableColumn["Required"]); dataColumn.PrimaryKey = (dataColumn.ColumnName == "ID"); //dataColumn.Length = GetDataColumnLength(column); dataTable.Columns.Add(dataColumn); } definition.Tables.Add(dataTable); } } return definition; }
public ISharePointCollection GetFoldersAndFiles(EntityReference regarding, string sortExpression = DefaultSortExpression, int page = 1, int pageSize = DefaultPageSize, string pagingInfo = null, string folderPath = null) { var context = _dependencies.GetServiceContextForWrite(); var website = _dependencies.GetWebsite(); var entityPermissionProvider = new CrmEntityPermissionProvider(); var result = new SharePointResult(regarding, entityPermissionProvider, context); // assert permission to create the sharepointdocumentlocation entity if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity."); return(SharePointCollection.Empty(true)); } var entityMetadata = context.GetEntityMetadata(regarding.LogicalName); var entity = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id); var spConnection = new SharePointConnection(SharePointConnectionStringName); var spSite = context.GetSharePointSiteFromUrl(spConnection.Url); var location = GetDocumentLocation(context, entity, entityMetadata, spSite); if (!entityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Read, location)) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Read document locations."); return(SharePointCollection.Empty(true)); } ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Read SharePoint Document Location Permission Granted."); var factory = new ClientFactory(); using (var client = factory.CreateClientContext(spConnection)) { // retrieve the SharePoint list and folder names for the document location string listUrl, folderUrl; context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl); var sharePointFolder = client.AddOrGetExistingFolder(listUrl, folderUrl + folderPath); var list = client.GetListByUrl(listUrl); if (!sharePointFolder.IsPropertyAvailable("ServerRelativeUrl")) { client.Load(sharePointFolder, folder => folder.ServerRelativeUrl); } if (!sharePointFolder.IsPropertyAvailable("ItemCount")) { client.Load(sharePointFolder, folder => folder.ItemCount); } var camlQuery = new CamlQuery { FolderServerRelativeUrl = sharePointFolder.ServerRelativeUrl, ViewXml = @" <View> <Query> <OrderBy> <FieldRef {0}></FieldRef> </OrderBy> <Where></Where> </Query> <RowLimit>{1}</RowLimit> </View>" .FormatWith( ConvertSortExpressionToCaml(sortExpression), pageSize) }; if (page > 1) { camlQuery.ListItemCollectionPosition = new ListItemCollectionPosition { PagingInfo = pagingInfo }; } var folderItems = list.GetItems(camlQuery); client.Load(folderItems, items => items.ListItemCollectionPosition, items => items.Include( item => item.ContentType, item => item["ID"], item => item["FileLeafRef"], item => item["Created"], item => item["Modified"], item => item["FileSizeDisplay"])); client.ExecuteQuery(); var sharePointItems = new List <SharePointItem>(); if (!string.IsNullOrEmpty(folderPath) && folderPath.Contains("/")) { var relativePaths = folderPath.Split('/'); var parentFolderName = relativePaths.Length > 2 ? relativePaths.Skip(relativePaths.Length - 2).First() : "/"; sharePointItems.Add(new SharePointItem() { Name = @"""{0}""".FormatWith(parentFolderName), IsFolder = true, FolderPath = folderPath.Substring(0, folderPath.LastIndexOf('/')), IsParent = true }); } if (folderItems.Count < 1) { return(new SharePointCollection(sharePointItems, null, sharePointItems.Count())); } foreach (var item in folderItems) { var id = item["ID"] as int?; var name = item["FileLeafRef"] as string; var created = item["Created"] as DateTime?; var modified = item["Modified"] as DateTime?; long longFileSize; var fileSize = long.TryParse(item["FileSizeDisplay"] as string, out longFileSize) ? longFileSize : null as long?; if (string.Equals(item.ContentType.Name, "Folder", StringComparison.InvariantCultureIgnoreCase)) { sharePointItems.Add(new SharePointItem { Id = id, Name = name, IsFolder = true, CreatedOn = created, ModifiedOn = modified, FolderPath = "{0}/{1}".FormatWith(folderPath, name) }); } else { sharePointItems.Add(new SharePointItem { Id = id, Name = name, CreatedOn = created, ModifiedOn = modified, FileSize = fileSize, Url = GetAbsolutePath(website, location, name, folderPath) }); } } var pageInfo = folderItems.ListItemCollectionPosition != null ? folderItems.ListItemCollectionPosition.PagingInfo : null; return(new SharePointCollection(sharePointItems, pageInfo, sharePointFolder.ItemCount)); } }
public void ProcessRequest(HttpContext context) { if (!string.Equals(context.Request.HttpMethod, "GET", StringComparison.InvariantCultureIgnoreCase) || SharePointFileUrl == null || string.IsNullOrWhiteSpace(FileName)) { context.Response.StatusCode = (int)HttpStatusCode.NotFound; return; } try { var spConnection = new SharePointConnection("SharePoint"); var factory = new ClientFactory(); var request = factory.CreateHttpWebRequest(spConnection, SharePointFileUrl) as HttpWebRequest; // make sure SharePoint receives the cache control headers from the browser var requestHeaders = _headersToRequest .Select(name => new { Name = name, Value = context.Request.Headers[name] }) .Where(header => !string.IsNullOrWhiteSpace(header.Value)) .ToList(); foreach (var header in requestHeaders) { request.Headers[header.Name] = header.Value; } request.Accept = context.Request.Headers["Accept"]; request.UserAgent = context.Request.Headers["User-Agent"]; DateTime ifModifiedSince; if (DateTime.TryParse(context.Request.Headers["If-Modified-Since"], out ifModifiedSince)) { request.IfModifiedSince = ifModifiedSince; } WebResponse response; try { response = request.GetResponse(); } catch (WebException we) { // handle non-200 response from SharePoint var hwr = we.Response as HttpWebResponse; if (hwr != null && hwr.StatusCode == HttpStatusCode.NotModified) { context.Response.StatusCode = (int)HttpStatusCode.NotModified; return; } ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception thrown trying to download {0}", SharePointFileUrl)); ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("ProcessRequest", "Exception details: {0}", we.ToString())); context.Response.StatusCode = (int)HttpStatusCode.BadRequest; return; } using (var stream = response.GetResponseStream()) { // forward SharePoint response headers back to the browser var responseHeaders = _headersToRespond .Select(name => new { Name = name, Value = response.Headers[name] }) .Where(header => !string.IsNullOrWhiteSpace(header.Value)) .ToList(); foreach (var header in responseHeaders) { context.Response.AppendHeader(header.Name, header.Value); } context.Response.AppendHeader("Content-Disposition", @"attachment; filename=""{0}""".FormatWith(FileName)); int contentLength; if (!int.TryParse(response.Headers["Content-Length"], out contentLength)) { // indeterminant length contentLength = -1; } if (contentLength == 0) { context.Response.StatusCode = (int)HttpStatusCode.NoContent; return; } // start streaming file context.Response.StatusCode = (int)HttpStatusCode.OK; const int bufferSize = 65536; var buffer = new byte[bufferSize]; int bytesRead; do { bytesRead = stream.Read(buffer, 0, bufferSize); context.Response.OutputStream.Write(buffer, 0, bytesRead); } while (bytesRead > 0); } } catch (Exception e) { ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception thrown trying to download {0}", SharePointFileUrl)); ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception details: {0}", e.ToString())); context.Response.StatusCode = (int)HttpStatusCode.BadRequest; } }
public override object BeforeMethod(string method) { if (method == null) { return(null); } using (var serviceContext = PortalViewContext.CreateServiceContext()) { try { Entity location; Guid id; if (!Guid.TryParse(method, out id)) { return(null); } if (!string.IsNullOrWhiteSpace(_folderName)) { // Get documents based on provided folder name. var entity = new Entity(LogicalName) { Id = id }; location = GetDocumentLocation(serviceContext, entity, _folderName); } else { // Get documents based on "primary attribute_id" folder. var metadata = serviceContext.GetEntityMetadata(LogicalName, EntityFilters.Attributes); location = GetDocumentLocation(serviceContext, metadata, id); } if (location == null) { return(null); } var crmEntityPermissionProvider = new CrmEntityPermissionProvider(); if (!crmEntityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Read, location)) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Read document locations."); return(null); } ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Read SharePoint Document Location Permission Granted."); var spConnection = new SharePointConnection("SharePoint"); var factory = new ClientFactory(); using (var client = factory.CreateClientContext(spConnection)) { // retrieve the SharePoint list and folder names for the document location string listName, folderName; serviceContext.GetDocumentLocationListAndFolder(location, out listName, out folderName); var folder = client.AddOrGetExistingFolder(listName, folderName); var fileCollection = folder.Files; client.Load(folder.Files); client.ExecuteQuery(); var files = fileCollection.ToArray().OrderBy(file => file.Name); if (!files.Any()) { return(null); } return(files.Select(file => new SharePointDocumentDrop(this, file, location))); } } catch (FaultException <OrganizationServiceFault> ) { return(null); } } }