示例#1
0
        private static void FillRecursively(DirectoryDto parent, IList <FileEntry> children)
        {
            foreach (FileEntry child in children)
            {
                if (child.IsDirectory)
                {
                    DirectoryDto directory = new DirectoryDto
                    {
                        Name = child.Name,
                        Path = child.FullPath
                    };

                    FillRecursively(directory, child.Children);

                    parent.ListOfDirectories.Add(directory);
                }
                else
                {
                    parent.ListOfFiles.Add(new FileDto
                    {
                        Name = child.Name,
                        Path = child.FullPath
                    });
                }
            }
        }
        public bool EditDirectory(DirectoryDto directoryDetail)
        {
            var editService        = _iocContext.Resolve <IDirectoryService>();
            var directoyExistOrNot = editService.EditDirectory(directoryDetail);

            return(directoyExistOrNot);
        }
示例#3
0
        //Add Directory
        public bool AddDirectory(DirectoryDto directoryDetail)
        {
            var directoryDataService = _iocContext.Resolve <IDirectoryDataService>();
            var directory            = _iocContext.Resolve <IDirectory>();

            directory.Name = directoryDetail.Name;

            var directoryExist = directoryDataService.AddDirectory(directory);

            return(directoryExist);
        }
示例#4
0
        public async Task <int> AddDirectory(DirectoryDto dirDto, CancellationToken cancellationToken)
        {
            var model = _mapper.Map <Directory>(dirDto);

            model.CreatedBy  = dirDto.CreatedBy;
            model.ModifiedBy = dirDto.CreatedBy;
            model.Thumbnail  = dirDto.Parent_id == 0 ? Configuration["Thumbnail:RootFolder"] : Configuration["Thumbnail:SubFolder"];
            await _repo.AddDirectory(model, cancellationToken).ConfigureAwait(false);

            return(1);
        }
示例#5
0
        public static IDirectory Convert(List <FileEntry> entries)
        {
            DirectoryDto root = new DirectoryDto
            {
                Name = "data",
                Path = "/"
            };

            FillRecursively(root, entries);

            return(root);
        }
示例#6
0
        public async Task <Guid> PutFileAsync(DirectoryDto directory, string fileName, Stream file)
        {
            var args = new MethodArgs
            {
                { "FileName", fileName },
                { "DirectoryId", directory.Id.ToString() }
            };

            return(await PostRequestAsync <Guid>(
                       MethodNames.Files.PutFile,
                       args,
                       new Dictionary <string, IEnumerable <Stream> > {
                { "File", new[] { file } }
            }
                       ));
        }
        protected async Task <Directory> ViewModelToEntityAsync(DirectoryDto viewModel, ActionType actionType)
        {
            Directory directory;

            if (actionType == ActionType.Create)
            {
                directory = new Directory();
                Mapper.Map(viewModel, directory);
            }
            else
            {
                directory = await Repository.FirstOrDefaultAsync(u => u.Id == viewModel.Id);

                Mapper.Map(viewModel, directory);
            }

            return(directory);
        }
示例#8
0
        public IActionResult CreateDirectory([FromBody] DirectoryDto directoryDto)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var webRootPath = _webHostEnvironment.WebRootPath;
                var dirPath     = $"{webRootPath}\\appData\\{directoryDto.Path}\\{directoryDto.Name.Replace(" ", "_").Replace(".", "_").Replace("+","_")}";

                if (!Directory.Exists(dirPath))
                {
                    DirectoryInfo createDir = Directory.CreateDirectory(dirPath);

                    if (createDir != null)
                    {
                        var dir = new E_Learning.Models.Directory()
                        {
                            Name      = directoryDto.Name.Replace(" ", "_"),
                            Path      = dirPath.Replace($"{webRootPath}\\appData\\", "").Replace(" ", "_"),
                            CreatedAt = DateTime.Now
                        };

                        var createdDir = _directoryRepository.Create(dir);
                        return(Ok(new { directory = createdDir }));
                    }
                    else
                    {
                        errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                        return(BadRequest(new { errors = errorMessages }));
                    }
                }
                else
                {
                    errorMessages.Add(_translator.GetTranslation("DIRECTORIES.DIRECTORY_EXISTS", lang));
                    return(BadRequest(new { errors = errorMessages }));
                }
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }
示例#9
0
        public async Task <int> UpdateDirectory(int id, DirectoryDto dirDto, CancellationToken cancellationToken)
        {
            int ReturnId = 0;
            var model    = await _repo.GetDirectoryById(id, cancellationToken);

            if (model != null)
            {
                int tempParentID = model.Parent_id;
                _mapper.Map(dirDto, model);
                model.ModifiedBy   = dirDto.CreatedBy;
                model.ModifiedDate = DateTime.Now;
                model.Parent_id    = tempParentID;
                model.Thumbnail    = dirDto.Parent_id == 0 ? Configuration["Thumbnail:RootFolder"] : Configuration["Thumbnail:SubFolder"];
                await _repo.UpdateDirectory(model, cancellationToken).ConfigureAwait(false);

                ReturnId = 1;
            }
            return(ReturnId);
        }
        private void CreateTreeViewItemsRecursive(DirectoryDto directory, FolderEntryViewModel parentVm, bool isTopLevel)
        {
            var directoryVm = CreateFromDirectory(directory, isTopLevel);

            // Add the Files as SubEntries
            var fileViewModels = directory
                                 .Files
                                 .Select(CreateFromFile)
                                 .OrderBy(f => f.Name)
                                 .ToList();

            directoryVm.SubEntries.AddRange(fileViewModels);

            // Add the Directory as SubEntry
            parentVm.SubEntries.Add(directoryVm);

            foreach (var subDirectory in directory.SubDirectories)
            {
                CreateTreeViewItemsRecursive(subDirectory, directoryVm, false);
            }
        }
示例#11
0
        public async Task <IActionResult> AddDirectory(DirectoryDto dir, CancellationToken cancellationToken)
        {
            try
            {
                int result = await _dirService.AddDirectory(dir, cancellationToken).ConfigureAwait(false);

                if (result == 0)
                {
                    return(BadRequest("No data found!"));
                }
                else
                {
                    return(Ok("Category added successfully"));
                }
            }
            catch (Exception ex)
            {
                await _errorlogService.InsertError(Request.GetDisplayUrl(), ControllerContext.ActionDescriptor.ActionName.ToString(), ex.Message, ex.ToString()).ConfigureAwait(false);

                return(StatusCode(500, ex.InnerException));
            }
        }
        public IActionResult CreateDirectory([FromRoute] string username, [FromBody] DirectoryDto directoryDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            // TODO: Check for what is 'Path' used and introduce new property 'Url'
            string physicalPath;

            if (String.IsNullOrWhiteSpace(directoryDto.Path))
            {
                physicalPath = Path.Combine(appEnv.WebRootPath,
                                            String.Format(@"dataspace/{0}/{1}", username, directoryDto.Name)); // TODO FIX THIS AND ADD URL FIELD TO DTO MODEL
                directoryDto.Url  = $"{Request.Scheme}://{Request.Host}/dataspace/{username}/directories/{directoryDto.Name}";
                directoryDto.Path = "";
            }
            else
            {
                physicalPath = Path.Combine(appEnv.WebRootPath,
                                            String.Format(@"dataspace/{0}/{1}/{2}", username, directoryDto.Path, directoryDto.Name));
                directoryDto.Url  = $"{Request.Scheme}://{Request.Host}/dataspace/{username}/directories/{directoryDto.Path}/{directoryDto.Name}";
                directoryDto.Path = directoryDto.Path;
            }


            var appId       = Request.Headers["AppId"];
            var phonenumber = Request.Headers["OwnerPhoneNumber"]; // Remove this and use Authentication and User obj.

            if (System.IO.Directory.Exists(directoryDto.Path + '/' + directoryDto.Name))
            {
                return(BadRequest());
            }

            System.IO.Directory.CreateDirectory(physicalPath);

            dataSpaceSignalRClient.SaveDirectoryMetadata(phonenumber, directoryDto);
            return(Ok());
        }
示例#13
0
        // Check how we'll create new dirs based on path not on parentDirName
        public async Task <NodeDto> NewDirectory(string ownerPhoneNumber, DirectoryDto directoryDto)
        {
            var ownerAccount = await dbContext.Accounts
                               .Where(a => a.PhoneNumber == ownerPhoneNumber)
                               .SingleOrDefaultAsync();

            if (ownerAccount == null)
            {
                return(null);
            }

            DSDirectory dsDirectory = await dbContext.DSDirectories
                                      .Where(d => d.Node.Name == directoryDto.Name &&
                                             d.Node.Path == directoryDto.Path &&
                                             d.Node.OwnerId == ownerAccount.Id)
                                      .SingleOrDefaultAsync();

            if (dsDirectory == null)
            {
                DSNode dsNode = new DSNode();
                dsDirectory = new DSDirectory();

                await dbContext.DSNodes.AddAsync(dsNode);

                dsDirectory.Node = dsNode;

                await dbContext.DSDirectories.AddAsync(dsDirectory);
            }

            // Fetch parent directory by both path and name
            int    lastSegmentPos        = directoryDto.Path.LastIndexOf('/'); // Get the positon of the last slash
            string parentDirectoryName   = directoryDto.Path;
            string pathToParentDirectory = "";

            if (lastSegmentPos > -1)
            {
                parentDirectoryName   = directoryDto.Path.Substring(lastSegmentPos + 1); // Extract last segment (dir name)
                pathToParentDirectory = directoryDto.Path.Remove(lastSegmentPos);        // Extract the path up to the last segment
            }

            if (!String.IsNullOrEmpty(parentDirectoryName))
            {
                DSDirectory parentDir = await dbContext.DSDirectories
                                        .Where(d => d.Node.Name == parentDirectoryName &&
                                               d.Node.Path == pathToParentDirectory)
                                        .SingleOrDefaultAsync();

                dsDirectory.ParentDirectoryId = parentDir.Id;
            }

            dsDirectory.Node.Name     = directoryDto.Name;
            dsDirectory.Node.Path     = directoryDto.Path;
            dsDirectory.Node.Url      = directoryDto.Url;
            dsDirectory.Node.Private  = directoryDto.Private;
            dsDirectory.Node.NodeType = NodeType.Directory;
            dsDirectory.Node.Owner    = ownerAccount;

            await dbContext.SaveChangesAsync();

            return(autoMapper.Map <NodeDto>(dsDirectory));
        }
示例#14
0
 public Task SaveDirectoryMetadata(string phonenumber, DirectoryDto directoryDto)
 {
     return(Clients.User(MicroserviceHandlerIdentifier)
            .SendAsync("SaveDirectoryMetadata", phonenumber, directoryDto));
 }
示例#15
0
        public List <DirectoryDto> GetDirectoryTree(IEnumerable <DirectoryDto> directoryTree, DirectoryDto currentDirectory = null)
        {
            if (currentDirectory != null)
            {
                foreach (var item in directoryTree)
                {
                    item.DirectoryChildren = GetChildernRecursive(directoryTree, item);
                }

                return(directoryTree.Where(b => b.ParentId == currentDirectory.Id).ToList());
            }
            else
            {
                foreach (var item in directoryTree)
                {
                    item.DirectoryChildren = GetChildernRecursive(directoryTree, item);
                }

                return(directoryTree.Where(b => b.ParentId == null).ToList());
            }
        }
 public void SaveDirectoryMetadata(string phonenumber, DirectoryDto directoryDto)
 {
     hubConnection.SendAsync("SaveDirectoryMetadata", phonenumber, directoryDto);
 }
 public Task <ApiResponse <Guid> > CreateAsync([FromBody] DirectoryDto viewModel)
 {
     return(ExecuteSafely(() => _crudServiceMethods.CreateAsync(viewModel, ViewModelToEntityAsync)));
 }
示例#18
0
 public Directory(DirectoryDto directoryDto, IFileMetadata[] fileChilds, IMinimalDirectoryMetadata[] directoryChilds) : base(directoryDto, (uint)(fileChilds.Length + directoryChilds.Length))
 {
     this.directoryDto = directoryDto;
     FileChilds        = fileChilds;
     DirectoryChilds   = directoryChilds;
 }
        /// <inheritdoc />
        public async Task <bool> InsertDirectory(string requestingUserId, string parentDirectoryId, string directoryName, string newDirectoryId)
        {
            using var session = await client.StartSessionAsync();

            try
            {
                session.StartTransaction();

                var parentDirectory = await directoryCollection.AsQueryable()
                                      .Where(x =>
                                             x.Id == parentDirectoryId &&
                                             x.Permissions.Any(y =>
                                                               y.Permission.HasFlag(Permission.ReadWrite) &&
                                                               y.UserId == requestingUserId
                                                               ))
                                      .Select(x => new
                {
                    Owner       = x.OwnerId,
                    Permissions = x.Permissions,
                    Path        = x.PathIds
                })
                                      .FirstOrDefaultAsync();

                if (parentDirectory == null)
                {
                    throw new ObjectNotResolvableException(
                              $"Parent directory {parentDirectoryId} could not be found or accessed by user {requestingUserId} during directory insertion");
                }

                var newPath = parentDirectory.Path.ToList();
                newPath.Add(newDirectoryId);

                var newDirectory = new DirectoryDto
                {
                    Id = newDirectoryId,
                    IsRootDirectory   = false,
                    OwnerId           = parentDirectory.Owner,
                    ObjectName        = directoryName,
                    DirectoryIds      = new List <string>(),
                    FileIds           = new List <string>(),
                    Permissions       = parentDirectory.Permissions,
                    PathIds           = newPath.ToArray(),
                    ParentDirectoryId = parentDirectoryId
                };

                var insertDirectoryTask = directoryCollection.InsertOneAsync(session, newDirectory);

                var update = Builders <DirectoryDto> .Update.Push(e => e.DirectoryIds, newDirectoryId);

                var updateResultTask = directoryCollection.UpdateOneAsync(session, x => x.Id == parentDirectoryId, update);

                await Task.WhenAll(insertDirectoryTask, updateResultTask);

                if (updateResultTask.Result.ModifiedCount != 1)
                {
                    throw new UnexpectedBehaviourException(
                              $"Insertion of new directory {newDirectoryId} to {parentDirectoryId} changed {updateResultTask.Result.ModifiedCount} parent directories but must exactly change 1");
                }

                await session.CommitTransactionAsync();

                return(true);
            }
            catch (ObjectNotResolvableException)
            {
                await session.AbortTransactionAsync();

                throw;
            }
            catch (InvalidParameterException)
            {
                await session.AbortTransactionAsync();

                throw;
            }
            catch (UnexpectedBehaviourException)
            {
                await session.AbortTransactionAsync();

                throw;
            }
            catch (MongoException e)
            {
                await session.AbortTransactionAsync();

                throw new DatabaseException("Database error during file inserting. See inner exception.", e);
            }
            catch (Exception e)
            {
                await session.AbortTransactionAsync();

                throw new Exception("Unknown error during file inserting. See inner exception.", e);
            }
        }
 public Task <ApiResponse <Guid> > UpdateAsync(DirectoryDto viewModel)
 {
     throw new NotImplementedException();
 }
示例#21
0
        private IEnumerable <DirectoryDto> GetChildernRecursive(IEnumerable <DirectoryDto> allDirectories, DirectoryDto directory)
        {
            if (allDirectories.All(b => b.ParentId != directory.Id))
            {
                return(null);
            }

            directory.DirectoryChildren = allDirectories
                                          .Where(b => b.ParentId == directory.Id)
                                          .ToList();

            foreach (var item in directory.DirectoryChildren)
            {
                item.DirectoryChildren = GetChildernRecursive(allDirectories, item);
            }

            return(directory.DirectoryChildren);
        }
 private FolderEntryViewModel CreateFromDirectory(DirectoryDto directory, bool isTopLevel) => new FolderEntryViewModel(
     FolderEntryViewModelType.Directory,
     isTopLevel ? directory.Path : directory.DirectoryName,
     directory.Path,
     _structureEntryIconFactory.CreateIconPathForDirectory(),
     string.Empty);
示例#23
0
        /// <inheritdoc />
        public async Task <bool> InsertUser(string userId, string rootDirectoryId, string email, string hashedPassword, string salt,
                                            string publicKey, string encryptedPrivateKey)
        {
            using (var session = await client.StartSessionAsync())
            {
                // Begin transaction
                session.StartTransaction();

                try
                {
                    var newRootDirectory = new DirectoryDto
                    {
                        Id = rootDirectoryId,
                        IsRootDirectory = true,
                        OwnerId         = userId,
                        ObjectName      = "__root_dir__",
                        DirectoryIds    = new List <string>(),
                        FileIds         = new List <string>(),
                        PathIds         = new[] { rootDirectoryId },
                        Permissions     = new[]
                        {
                            new BasicPermissionDto
                            {
                                UserId     = userId,
                                Permission = Permission.Read | Permission.ReadWrite | Permission.ReadPermissions | Permission.ReadWritePermissions
                            }
                        },
                    };
                    var insertRootDirectoryTask = directoryCollection.InsertOneAsync(session, newRootDirectory);

                    var newUser = new UserDto
                    {
                        Id                  = userId,
                        RootDirectory       = newRootDirectory.Id,
                        Email               = email,
                        PasswordHash        = hashedPassword,
                        Salt                = salt,
                        PublicKey           = publicKey,
                        EncryptedPrivateKey = encryptedPrivateKey
                    };
                    var insertUserTask = userCollection.InsertOneAsync(session, newUser);

                    await Task.WhenAll(insertRootDirectoryTask, insertUserTask);

                    await session.CommitTransactionAsync();
                }
                catch (MongoException e)
                {
                    await session.AbortTransactionAsync();

                    throw new DatabaseException("Database error during user creating. See inner exception.", e);
                }
                catch (Exception e)
                {
                    await session.AbortTransactionAsync();

                    throw new Exception("Unknown error during file inserting. See inner exception.", e);
                }
            }

            return(true);
        }