/// <summary> /// Rename the directory /// </summary> /// <param name="sourcePath">Path to the source directory</param> /// <param name="newName">New name of the directory</param> /// <returns>A task that represents the completion of the operation</returns> protected virtual async Task RenameDirectoryAsync(string sourcePath, string newName) { var fullSourcePath = GetFullPath(GetVirtualPath(sourcePath)); var destinationDirectory = _fileProvider.Combine(_fileProvider.GetParentDirectory(fullSourcePath), newName); if (GetVirtualPath(sourcePath) == GetRootDirectory()) { throw new Exception(GetLanguageResource("E_CannotRenameRoot")); } if (!_fileProvider.DirectoryExists(fullSourcePath)) { throw new Exception(GetLanguageResource("E_RenameDirInvalidPath")); } if (_fileProvider.DirectoryExists(destinationDirectory)) { throw new Exception(GetLanguageResource("E_DirAlreadyExists")); } try { _fileProvider.DirectoryMove(fullSourcePath, destinationDirectory); await HttpContext.Response.WriteAsync(GetSuccessResponse()); } catch { throw new Exception($"{GetLanguageResource("E_RenameDir")} \"{sourcePath}\""); } }
/// <summary> /// Perform file deploy /// </summary> /// <param name="plug">Plugin file info</param> /// <param name="applicationPartManager">Application part manager</param> /// <param name="config">Config</param> /// <param name="shadowCopyPath">Shadow copy path</param> /// <returns>Assembly</returns> private static Assembly PerformFileDeploy(string plug, ApplicationPartManager applicationPartManager, GSConfig config, string shadowCopyPath = "") { var parent = string.IsNullOrEmpty(plug) ? string.Empty : _fileProvider.GetParentDirectory(plug); if (string.IsNullOrEmpty(parent)) { throw new InvalidOperationException($"The plugin directory for the {_fileProvider.GetFileName(plug)} file exists in a folder outside of the allowed nopCommerce folder hierarchy"); } if (!config.UsePluginsShadowCopy) { return(RegisterPluginDefinition(config, applicationPartManager, plug)); } //in order to avoid possible issues we still copy libraries into ~/Plugins/bin/ directory if (string.IsNullOrEmpty(shadowCopyPath)) { shadowCopyPath = _shadowCopyFolder; } _fileProvider.CreateDirectory(shadowCopyPath); var shadowCopiedPlug = ShadowCopyFile(plug, shadowCopyPath); Assembly shadowCopiedAssembly = null; try { shadowCopiedAssembly = RegisterPluginDefinition(config, applicationPartManager, shadowCopiedPlug); } catch (FileLoadException) { if (!config.CopyLockedPluginAssembilesToSubdirectoriesOnStartup || !shadowCopyPath.Equals(_shadowCopyFolder)) { throw; } } return(shadowCopiedAssembly ?? PerformFileDeploy(plug, applicationPartManager, config, _reserveShadowCopyFolder)); }