private async Task SaveToFileStorageAsync(CertificateFile certificateFile) { var filePath = $"SHA-256/{certificateFile.Sha256Thumbprint}{CoreConstants.CertificateFileExtension}"; try { await _fileStorageService.SaveFileAsync( CoreConstants.Folders.UserCertificatesFolderName, filePath, certificateFile.Stream, overwrite : false); } catch (FileAlreadyExistsException) { // A certificate is being uploaded again. // The fact that the certificate already exists in storage is ignorable. } }
public async Task <Certificate> AddCertificateAsync(HttpPostedFileBase file) { if (file == null) { throw new ArgumentNullException(nameof(file)); } _certificateValidator.Validate(file); using (var certificateFile = CertificateFile.Create(file.InputStream)) { var certificate = GetCertificate(certificateFile.Sha256Thumbprint); if (certificate == null) { await SaveToFileStorageAsync(certificateFile); certificate = new Certificate() { #pragma warning disable CS0618 // Only set the SHA1 thumbprint, for backwards compatibility. Never read it. Sha1Thumbprint = certificateFile.Sha1Thumbprint, #pragma warning restore CS0618 Thumbprint = certificateFile.Sha256Thumbprint, UserCertificates = new List <UserCertificate>() }; _certificateRepository.InsertOnCommit(certificate); await _certificateRepository.CommitChangesAsync(); await _auditingService.SaveAuditRecordAsync( new CertificateAuditRecord(AuditedCertificateAction.Add, certificate.Thumbprint)); _telemetryService.TrackCertificateAdded(certificateFile.Sha256Thumbprint); } return(certificate); } }
public async Task <Certificate> AddCertificateAsync(HttpPostedFileBase file) { if (file == null) { throw new ArgumentNullException(nameof(file)); } _certificateValidator.Validate(file); using (var certificateFile = CertificateFile.Create(file.InputStream)) { var certificate = GetCertificate(certificateFile.Sha256Thumbprint); if (certificate == null) { await SaveToFileStorageAsync(certificateFile); certificate = new Certificate() { Sha1Thumbprint = certificateFile.Sha1Thumbprint, Thumbprint = certificateFile.Sha256Thumbprint, UserCertificates = new List <UserCertificate>() }; _certificateRepository.InsertOnCommit(certificate); await _certificateRepository.CommitChangesAsync(); await _auditingService.SaveAuditRecordAsync( new CertificateAuditRecord(AuditedCertificateAction.Add, certificate.Thumbprint)); _telemetryService.TrackCertificateAdded(certificateFile.Sha256Thumbprint); } return(certificate); } }