예제 #1
0
        public ImportResultDto Import(int zoneId, string name, Stream stream, Action <Exception> logException)
        {
            Log.Add("import app start");
            var result = new ImportResultDto();

            if (!string.IsNullOrEmpty(name))
            {
                Log.Add($"new app name: {name}");
            }

            //var helper = Factory.Resolve<IImportExportEnvironment>().Init(Log);
            var zipImport = Factory.Resolve <ZipImport>();

            try
            {
                /*var zipImport = *//*new ZipImport(helper)*/ zipImport.Init(zoneId, null, _user.IsSuperUser, Log);
                var temporaryDirectory = _http.MapPath(Path.Combine(Eav.ImportExport.Settings.TemporaryDirectory, Guid.NewGuid().ToString().Substring(0, 8)));

                // Increase script timeout to prevent timeouts
                result.Succeeded = zipImport.ImportZip(stream, temporaryDirectory, name);
                result.Messages  = zipImport.Messages;
            }
            catch (Exception ex)
            {
                logException(ex);
                result.Succeeded = false;
                result.Messages  = zipImport.Messages;
            }
            return(result);
        }
예제 #2
0
        public ImportResultDto Import(int zoneId, string name, Stream stream)
        {
            Log.Add("import app start");
            var result = new ImportResultDto();

            if (!string.IsNullOrEmpty(name))
            {
                Log.Add($"new app name: {name}");
            }

            var zipImport = _zipImport;

            try
            {
                zipImport.Init(zoneId, null, _user.IsSuperUser, Log);
                var temporaryDirectory = Path.Combine(_globalConfiguration.TemporaryFolder, Mapper.GuidCompress(Guid.NewGuid()).Substring(0, 8));

                // Increase script timeout to prevent timeouts
                result.Success = zipImport.ImportZip(stream, temporaryDirectory, name);
                result.Messages.AddRange(zipImport.Messages);
            }
            catch (Exception ex)
            {
                _envLogger.LogException(ex);
                result.Success = false;
                result.Messages.AddRange(zipImport.Messages);
            }
            return(result);
        }
예제 #3
0
        public async Task <IActionResult> PostContent(string app, string name, [FromBody] ImportContentsDto request)
        {
            await contentQuery.GetSchemaOrThrowAsync(Context, name);

            var command = request.ToCommand();

            var context = await CommandBus.PublishAsync(command);

            var result   = context.Result <ImportResult>();
            var response = result.Select(x => ImportResultDto.FromImportResult(x, HttpContext)).ToArray();

            return(Ok(response));
        }
예제 #4
0
        public ImportResultDto Reset(int zoneId, int appId, string defaultLanguage)
        {
            Log.Add($"Reset App {zoneId}/{appId}");
            var result = new ImportResultDto();

            SecurityHelpers.ThrowIfNotAdmin(_user);

            var contextZoneId = _zoneMapper.GetZoneId(_siteId);
            var currentApp    = _impExpHelpers.Init(Log).GetAppAndCheckZoneSwitchPermissions(zoneId, appId, _user, contextZoneId);

            // 1. Verify the file exists before we flush
            var path = currentApp.PhysicalPath + "\\" + Eav.Constants.FolderData;

            if (!Directory.Exists(path))
            {
                result.Success = false;
                result.Messages.Add(new Message("Error: Path to app.xml not found on hard disk", Message.MessageTypes.Error));
                return(result);
            }

            var filePath = Path.Combine(path, Eav.Constants.AppDataFile);

            if (!File.Exists(filePath))
            {
                result.Success = false;
                result.Messages.Add(new Message($"Can't find the {Eav.Constants.AppDataFile} in the folder", Message.MessageTypes.Error));
                return(result);
            }

            // 2. Now we can delete the app before we prepare the import
            _cmsZones.Init(zoneId, Log).AppsMan.RemoveAppInSiteAndEav(appId, false);

            // 3. Now import the App.xml
            var allowSystemChanges = _user.IsSuperUser;
            var xmlImport          = _xmlImportWithFilesLazy.Value.Init(defaultLanguage, allowSystemChanges, Log);
            var imp = new ImportXmlReader(filePath, xmlImport, Log);

            result.Success = xmlImport.ImportXml(zoneId, appId, imp.XmlDoc);
            result.Messages.AddRange(xmlImport.Messages);
            return(result);
        }
예제 #5
0
        public ImportResultDto Import(int zoneId, int appId, string fileName, Stream stream, string defaultLanguage,
                                      Action <Exception> logException)
        {
            Log.Add("import content start");
            var result = new ImportResultDto();

            var allowSystemChanges = _user.IsSuperUser;

            if (fileName.EndsWith(".zip"))
            {   // ZIP
                try
                {
                    var zipImport = Factory.Resolve <ZipImport>();

                    zipImport.Init(zoneId, appId, _user.IsSuperUser, Log);
                    var temporaryDirectory = _http.MapPath(Path.Combine(Eav.ImportExport.Settings.TemporaryDirectory,
                                                                        Guid.NewGuid().ToString()));
                    result.Succeeded = zipImport.ImportZip(stream, temporaryDirectory);
                    result.Messages  = zipImport.Messages;
                }
                catch (Exception ex)
                {
                    logException(ex);
                }
            }
            else
            {   // XML
                using (var fileStreamReader = new StreamReader(stream))
                {
                    var xmlImport   = new XmlImportWithFiles(Log, defaultLanguage, allowSystemChanges);
                    var xmlDocument = XDocument.Parse(fileStreamReader.ReadToEnd());
                    result.Succeeded = xmlImport.ImportXml(zoneId, appId, xmlDocument);
                    result.Messages  = xmlImport.Messages;
                }
            }
            return(result);
        }
예제 #6
0
        public async Task <ImportResultDto> GetAsync(long id)
        {
            var resultDto = new ImportResultDto()
            {
                Items = new List <ImportResultDetailDto>()
            };
            var result = await __ImportResultRepo
                         .QueryAsNoTracking()
                         .Include(item => item.ImportResultDetails)
                         .FirstOrDefaultAsync(item => item.Id == id);

            if (result is object)
            {
                resultDto.ImportedAt = result.ImportedAt;
                resultDto.Items      = result.ImportResultDetails.Select(item => new ImportResultDetailDto
                {
                    ExternalId = item.ExternalId,
                    Status     = item.Status.ToString(),
                    Message    = item.Message
                });
            }

            return(resultDto);
        }
예제 #7
0
        public ImportResultDto Import(int zoneId, int appId, string fileName, Stream stream, string defaultLanguage)
        {
            Log.Add("import content start");
            var result = new ImportResultDto();

            var allowSystemChanges = _user.IsSuperUser;

            if (fileName.EndsWith(".zip"))
            {   // ZIP
                try
                {
                    var zipImport = _zipImport;

                    zipImport.Init(zoneId, appId, _user.IsSuperUser, Log);
                    var temporaryDirectory = Path.Combine(_globalConfiguration.TemporaryFolder, Mapper.GuidCompress(Guid.NewGuid()).Substring(0, 8));

                    result.Success = zipImport.ImportZip(stream, temporaryDirectory);
                    result.Messages.AddRange(zipImport.Messages);
                }
                catch (Exception ex)
                {
                    _envLogger.LogException(ex);
                }
            }
            else
            {   // XML
                using (var fileStreamReader = new StreamReader(stream))
                {
                    var xmlImport   = _xmlImportWithFilesLazy.Value.Init(defaultLanguage, allowSystemChanges, Log);
                    var xmlDocument = XDocument.Parse(fileStreamReader.ReadToEnd());
                    result.Success = xmlImport.ImportXml(zoneId, appId, xmlDocument);
                    result.Messages.AddRange(xmlImport.Messages);
                }
            }
            return(result);
        }
예제 #8
0
        public async Task <ImportResultDto> ImportExcel(ImportExcelInput input)
        {
            IExcelImporter Importer = new ExcelImporter();
            var            stream   = new MemoryStream(input.Bytes);
            var            import   = await Importer.Import <ArticleImportDto>(stream);

            var result = new ImportResultDto
            {
                HasError       = import.HasError,
                RowErrors      = import.RowErrors,
                TemplateErrors = import.TemplateErrors,
            };

            if (import.RowErrors != null && import.RowErrors.Count > 0)
            {
                var newStream = new MemoryStream(stream.ToArray());
                Importer.OutputBussinessErrorData <ArticleImportDto>(newStream, import.RowErrors.ToList(), out byte[] fileByte);
                var createFileOutput = await _fileService.CreateAsync(new CreateFileInput
                {
                    FileContainerName = FileContainerNameConsts.Temp,
                    FileName          = input.FileName,
                    MimeType          = input.MimeType,
                    FileType          = FileType.RegularFile,
                    ParentId          = null,
                    OwnerUserId       = CurrentUser.Id,
                    Content           = fileByte
                });

                result.ErrorFile = createFileOutput;
                return(result);
            }
            var entitys = ObjectMapper.Map <List <ArticleImportDto>, List <Article> >(import.Data.ToList());
            await _repository.InsertManyAsync(entitys);

            return(result);
        }
예제 #9
0
        public IHttpActionResult ImportUsers(dynamic xmlData)
        {
            var    importResult   = new ImportResultDto();
            var    importUsesrDto = new List <ImportUserDto>();
            var    savedCount     = 0;
            var    skippedCount   = 0;
            var    totalCount     = 0;
            var    failedCount    = 0;
            string xmlDataString  = xmlData.xmlData;

            xmlDataString = Regex.Replace(xmlDataString, @"[^\u0020-\u007F]", String.Empty);
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xmlDataString);
            var nodes = doc.ChildNodes;

            foreach (var node in nodes)
            {
                var userNode = node as XmlNode;
                if (userNode.Name == "Users")
                {
                    foreach (var innerNode in userNode.ChildNodes)
                    {
                        var importUserDto    = new ImportUserDto();
                        var contentUserNodes = (innerNode as XmlNode).ChildNodes;
                        var firstName        = contentUserNodes.Item(0).InnerText;
                        var lastName         = contentUserNodes.Item(1).InnerText;
                        var userName         = contentUserNodes.Item(2).InnerText;
                        var email            = contentUserNodes.Item(3).InnerText;
                        importUserDto.FirstName = firstName;
                        importUserDto.LastName  = lastName;
                        importUserDto.UserLogin = userName;
                        importUserDto.Email     = email;
                        try
                        {
                            if (userService.IsEmailExist(email))
                            {
                                skippedCount++;
                                totalCount++;
                                importUserDto.Status = "Skipped";
                            }
                            else
                            {
                                if (ModelState.IsValid == false)
                                {
                                    return(BadRequest(ModelState));
                                }

                                var newUser = userService.Create(userName, email, firstName,
                                                                 "", lastName);

                                #region Send one time code for initial change password
                                var userCode = userCodeRepo.Create(new UserCode()
                                {
                                    UserK = newUser.Id
                                });
                                string code = userCode.Code;

                                var      adminSecurity = adminSecurityService.GetAdministrationSecurity();
                                EmailDto emaildto      = new EmailDto()
                                {
                                    EmailBody      = String.Format("Hi {0} {1}. You have been added as a new user to siteTRAX Evolution. <br/><br/> Your Onetime code is: <b>{2}</b> <br/> This Onetime code is valid until: <b>{3}</b> at which time it will expire and a new one code will be required to be requested. <br/><br/> To enter your onetime code. Click on \"Forget my password\" then click on \"I have a onetime code\" <br/><br/>If you did not request this password reset, please ignore this message. <br/> Do not reply to this email message as the mail box is un-monitored.", newUser.FirstName, newUser.LastName, userCode.Code, userCode.ExpirationDateUtc.ToLocalTime().ToString("dd-MMMM-yyyy hh:mm tt")),
                                    EmailSubject   = "New User - siteTRAX Evolution",
                                    EmailSender    = "*****@*****.**",
                                    EmailRecipient = newUser.Email
                                };

                                CustomEmail.SendPasswordEmail(adminSecurity.MailerServer, adminSecurity.MailerServerPort.Value, adminSecurity.MailerUsername, adminSecurity.MailerPassword, adminSecurity.PasswordResetEmail, newUser.Email, emaildto.EmailSubject, emaildto.EmailBody);
                                #endregion
                                savedCount++;
                                importUserDto.Status = "Added";
                            }
                        }
                        catch (Exception)
                        {
                            failedCount++;
                            importUserDto.Status = "Failed";
                        }

                        importUsesrDto.Add(importUserDto);
                    }

                    importResult.ImportUsersDto = importUsesrDto;
                    importResult.Added          = savedCount;
                    importResult.Skipped        = skippedCount;
                    importResult.Total          = totalCount;
                    importResult.Failed         = failedCount;
                }
            }


            return(Ok(importResult));
        }