private static JObject GetFile(AssetAggregate asset) { if (asset == null) { throw new ArgumentNullException(nameof(asset)); } return(AssetResponse.Create(asset.Name, asset.Hash, Constants.VolumeId + "_", asset.Children.Any(), asset.ResourceParentHash, asset.MimeType, asset.ResourceId, asset.AuthPolicyIds, new AssetSecurity(asset.CanRead, asset.CanWrite, asset.IsLocked)).GetJson()); }
private async Task <PasteOperation> Copy(AssetAggregate asset, AssetAggregate source, AssetAggregate target, bool isCut = false) { var children = await _assetRepository.GetAllChildren(asset.Hash); var hashLst = new List <string> { asset.Hash }; hashLst.AddRange(children.Select(c => c.Hash)); var previousPath = target.Path; var newPath = target.Path + Constants.PathSeparator + asset.Name; asset.Path = newPath; asset.Hash = HashHelper.GetHash(asset.Path); asset.ResourceParentHash = target.Hash; foreach (var child in children) { var childPath = child.Path.Replace(source.Path, target.Path); var splittedPath = childPath.Split(Constants.PathSeparator); var parentPath = string.Join(Constants.PathSeparator.ToString(), splittedPath.Take(splittedPath.Count() - 1)); child.Path = childPath; child.Hash = HashHelper.GetHash(childPath); child.ResourceParentHash = HashHelper.GetHash(parentPath); } var newAssets = new List <AssetAggregate> { asset }; newAssets.AddRange(children); if (!await _assetRepository.Add(newAssets)) { return(new PasteOperation(true)); } if (isCut) { if (!await _assetRepository.Remove(hashLst)) { return(new PasteOperation(true)); } } return(new PasteOperation(!isCut ? new List <string>() : hashLst, newAssets)); }
/// <summary> /// https://github.com/Studio-42/elFinder/wiki/Client-Server-API-2.0#mkfile /// </summary> /// <param name="elFinderParameter"></param> /// <returns></returns> private async Task <JObject> ExecuteMkfile(ElFinderParameter elFinderParameter) { var target = elFinderParameter.Target; if (string.IsNullOrWhiteSpace(target)) { return(new ErrorResponse(string.Format(Constants.Errors.ErrParamNotSpecified, Constants.ElFinderDtoNames.Target)).GetJson()); } var asset = await _assetRepository.Get(target); if (asset == null) { return(new ErrorResponse(Constants.ElFinderErrors.ErrTrgFolderNotFound).GetJson()); } var recordPath = asset.Path + Constants.PathSeparator + elFinderParameter.Name; var record = new AssetAggregate { CanRead = true, CanWrite = true, IsLocked = false, Name = elFinderParameter.Name, CreatedAt = DateTime.UtcNow, ResourceParentHash = asset.Hash, Path = recordPath, Hash = HashHelper.GetHash(recordPath), MimeType = Constants.MimeNames.TextPlain }; if (!(await _assetRepository.Add(new[] { record }))) { return(new ErrorResponse(Constants.Errors.ErrInsertAsset).GetJson()); } var files = new JArray(GetFile(record)); var result = new JObject(); result.Add(Constants.ElFinderResponseNames.Added, files); return(result); }
public static AssetResponse ToDto(this AssetAggregate asset) { if (asset == null) { throw new ArgumentNullException(nameof(asset)); } return(new AssetResponse { CanRead = asset.CanRead, CanWrite = asset.CanWrite, CreatedAt = asset.CreatedAt, Hash = asset.Hash, IsDefaultWorkingDirectory = asset.IsDefaultWorkingDirectory, IsLocked = asset.IsLocked, MimeType = asset.MimeType, Name = asset.Name, Path = asset.Path, ResourceId = asset.ResourceId, ResourceParentHash = asset.ResourceParentHash }); }
private void Rename(AssetAggregate asset, string newName, IEnumerable <AssetAggregate> children) { var previousPath = asset.Path; var splittedPath = asset.Path.Split(Constants.PathSeparator); int rootIndex = splittedPath.Count() - 1; splittedPath.SetValue(newName, rootIndex); var newPath = string.Join(Constants.PathSeparator.ToString(), splittedPath); asset.Name = newName; asset.Path = newPath; asset.Hash = HashHelper.GetHash(newPath); foreach (var child in children) { splittedPath = child.Path.Split(Constants.PathSeparator); splittedPath.SetValue(newName, rootIndex); var parentSplittedPath = splittedPath.Take(splittedPath.Count() - 1); newPath = string.Join(Constants.PathSeparator.ToString(), splittedPath); var parentPath = string.Join(Constants.PathSeparator.ToString(), parentSplittedPath); child.Path = newPath; child.Hash = HashHelper.GetHash(newPath); child.ResourceParentHash = HashHelper.GetHash(parentPath); } }
/* * private async Task<GrantedToken> GetToken(string key, IEnumerable<string> scopes) * { * GrantedToken grantedToken = null; * var clientId = GetClientId(); * var clientSecret = GetClientSecret(); * var wellKnownConfiguration = GetWellKnownAuthConfigurationUrl(); * var storageRecord = await _storageHelper.GetAsync<GrantedToken>(key); * var clientSelector = _identityServerClientFactory.CreateAuthSelector() * .UseClientSecretPostAuth(clientId, clientSecret); * if (storageRecord != null && storageRecord.Obj != null) * { * var currentDate = DateTime.UtcNow; * var expirationDate = DateTime.UtcNow.AddSeconds(storageRecord.Obj.ExpiresIn); * if (currentDate >= expirationDate) // Check expiration. * { * var refreshToken = storageRecord.Obj.RefreshToken; * await _storageHelper.SetAsync<GrantedToken>(key, null); * if (!string.IsNullOrWhiteSpace(storageRecord.Obj.RefreshToken)) // Get an access token by using the refresh token. * { * try * { * grantedToken = await clientSelector.UseRefreshToken(storageRecord.Obj.RefreshToken).ResolveAsync(wellKnownConfiguration); * } * catch (Exception) { } * } * } * else * { * grantedToken = storageRecord.Obj; * } * } * * if (grantedToken != null) * { * return grantedToken; * } * * grantedToken = await _identityServerClientFactory.CreateAuthSelector() * .UseClientSecretPostAuth(clientId, clientSecret) * .UseClientCredentials(scopes.ToArray()) * .ResolveAsync(wellKnownConfiguration); * await _storageHelper.SetAsync(key, grantedToken); * return grantedToken; * } */ private async Task <KeyValuePair <bool, IEnumerable <AssetAggregate> > > Duplicate(AssetAggregate asset) { var children = await _assetRepository.GetAllChildren(asset.Hash); Rename(asset, asset.Name.Split('_').First() + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture), children); asset.ResourceId = null; asset.AuthPolicyIds = null; var newAssets = new List <AssetAggregate> { asset }; newAssets.AddRange(children); foreach (var child in children) { child.ResourceId = null; child.AuthPolicyIds = null; } if (!await _assetRepository.Add(newAssets)) { return(new KeyValuePair <bool, IEnumerable <AssetAggregate> >(false, null)); } return(new KeyValuePair <bool, IEnumerable <AssetAggregate> >(true, newAssets));; }
/// <summary> /// https://github.com/Studio-42/elFinder/wiki/Client-Server-API-2.0#open /// </summary> /// <param name="elFinderParameter"></param> /// <returns></returns> private async Task <JObject> ExecuteOpen(ElFinderParameter elFinderParameter) { if (!elFinderParameter.Init && string.IsNullOrWhiteSpace(elFinderParameter.Target)) { return(new ErrorResponse(string.Format(Constants.Errors.ErrParamNotSpecified, Constants.ElFinderDtoNames.Target)).GetJson()); } var assets = new List <AssetAggregate>(); AssetAggregate rootDirectory = null; if (!string.IsNullOrWhiteSpace(elFinderParameter.Target)) // Search the target. { rootDirectory = await _assetRepository.Get(elFinderParameter.Target); } if (elFinderParameter.Init || rootDirectory == null) // Returns the default root directory of the default volume. { var searchRootParameter = new SearchAssetsParameter { AssetLevelType = AssetLevelTypes.ROOT, IsDefaultWorkingDirectory = true }; rootDirectory = (await _assetRepository.Search(searchRootParameter)).First(); } assets.Add(rootDirectory); foreach (var child in rootDirectory.Children) { assets.Add(child); } if (elFinderParameter.Tree) { var searchRootParameter = new SearchAssetsParameter // Search all the roots. { AssetLevelType = AssetLevelTypes.ROOT, ExcludedHashLst = assets.Select(a => a.Hash) }; var searchResult = await _assetRepository.Search(searchRootParameter); foreach (var record in searchResult) { assets.Add(record); foreach (var child in record.Children) { if (assets.Any(a => a.Hash == child.Hash)) { continue; } assets.Add(child); } } if (!string.IsNullOrWhiteSpace(elFinderParameter.Target)) // Search the parents. { var parents = await _assetRepository.GetAllParents(elFinderParameter.Target); foreach (var parent in parents) { if (!assets.Any(a => a.Hash == parent.Hash)) { assets.Add(parent); } foreach (var child in parent.Children) { if (assets.Any(a => a.Hash == child.Hash)) { continue; } assets.Add(child); } } } } var files = new JArray(); foreach (var asset in assets) { files.Add(GetFile(asset)); } var result = new JObject(); // 3. Return the result. if (elFinderParameter.Init) { result.Add(Constants.ElFinderResponseNames.Api, "2.1"); } var opts = new JObject(); opts.Add(Constants.ElFinderOptionNames.Disabled, new JArray(new[] { "chmod" })); opts.Add(Constants.ElFinderOptionNames.Separator, Constants.PathSeparator); opts.Add(Constants.ElFinderOptionNames.Path, rootDirectory.Path); result.Add(Constants.ElFinderResponseNames.UplMaxSize, "0"); result.Add(Constants.ElFinderResponseNames.Cwd, GetFile(rootDirectory)); result.Add(Constants.ElFinderResponseNames.Files, files); result.Add(Constants.ElFinderResponseNames.Options, opts); return(result); }