예제 #1
0
		public async Task<CertificateTemplate> AddTemplate(string courseId, string name, string archiveName)
		{
			var template = new CertificateTemplate
			{
				Id = Guid.NewGuid(),
				CourseId = courseId,
				Name = name,
				Timestamp = DateTime.Now,
				ArchiveName = archiveName,
			};
			db.CertificateTemplates.Add(template);
			await db.SaveChangesAsync();
			return template;
		}
예제 #2
0
		public async Task RemoveTemplate(CertificateTemplate template)
		{
			template.IsDeleted = true;
			await db.SaveChangesAsync();
		}
예제 #3
0
		public IEnumerable<string> GetTemplateParameters(CertificateTemplate template)
		{
			EnsureCertificateTemplateIsUnpacked(template);

			var templateDirectory = GetTemplateDirectory(template);
			var indexFile = templateDirectory.GetFile(TemplateIndexFile);
			if (!indexFile.Exists)
			{
				log.Error($"Не нашёл файла {TemplateIndexFile} в шаблоне \"{template.Name}\" (Id = {template.Id}, {template.ArchiveName})");
				yield break;
			}

			var parameters = new HashSet<string>();

			var matches = templateParameterRegex.Matches(File.ReadAllText(indexFile.FullName));
			foreach (Match match in matches)
			{
				var parameter = match.Groups[1].Value;
				if (!builtInParameters.Contains(parameter) && !parameters.Contains(parameter))
				{
					yield return parameter;
					parameters.Add(parameter);
				}
			}
		}
예제 #4
0
		public void EnsureCertificateTemplateIsUnpacked(CertificateTemplate template)
		{
			var certificateDirectory = GetTemplateDirectory(template);
			if (!certificateDirectory.Exists)
			{
				log.Info($"Нет директории с распакованным шаблоном сертификата, Id = {template.Id}");

				var certificateArchive = GetTemplateArchivePath(template);
				if (!certificateArchive.Exists)
					throw new Exception("Can\'t find certificate template");

				log.Info($"Распаковываю шаблон сертификата {template.Id}: \"{certificateArchive.FullName}\" в \"{certificateDirectory.FullName}\"");

				using (var zip = ZipFile.Read(certificateArchive.FullName, new ReadOptions { Encoding = Encoding.UTF8 }))
				{
					zip.ExtractAll(certificateDirectory.FullName, ExtractExistingFileAction.OverwriteSilently);
				}
			}
		}
예제 #5
0
		public DirectoryInfo GetTemplateDirectory(CertificateTemplate template)
		{
			return GetTemplateDirectory(template.ArchiveName);
		}
예제 #6
0
		public FileInfo GetTemplateArchivePath(CertificateTemplate template)
		{
			return GetTemplateArchivePath(template.ArchiveName);
		}