Compare commits

...

55 Commits

Author SHA1 Message Date
Developer01
286e17a900 layout specihern 2025-07-18 15:42:07 +02:00
Developer01
a21db6d6c5 Button AccessCode manuell versenden 2025-07-15 07:27:01 +02:00
Developer01
fe7030b9d7 Resend AccessCode Manually 2025-07-14 15:19:05 +02:00
Developer01
888c04b5c9 EnvelopeDomain Add Comment 2025-07-14 13:45:14 +02:00
de2cc62f95 Merge branch 'master' of http://git.dd:3000/AppStd/EnvelopeGenerator 2025-07-02 14:26:08 +02:00
0cfa732d87 Fix StatusTranslated property for correct enum translation
Updated the `StatusTranslated` property to cast the `Status` integer to the `Constants.EnvelopeStatus` enum before calling `ToString()`. This ensures accurate string representation based on the enum rather than the integer value.
2025-07-02 14:25:14 +02:00
Developer01
b14d9169f2 Fild editor msgbox 2025-07-02 13:18:01 +02:00
be51ca31dd Add initial migration for database schema setup
This commit introduces the `InitialCreate` migration class, establishing the initial database schema with multiple tables including `TBDD_CLIENT_USER`, `TBDD_GROUPS`, `TBDD_MODULES`, and `TBDD_USER`. Foreign key relationships are defined to ensure referential integrity, and a `Down` method is included for rollback functionality.

Additionally, the `InitialCreate.Designer.cs` file is generated to capture the model snapshot post-migration, while the `EGDbContextModelSnapshot.cs` file is updated to reflect the current state of the database model for future migrations.
2025-07-01 17:22:13 +02:00
bb8d7cd208 Update AddedWho property in EnvelopeReceiverReadOnly
Modified the `AddedWho` property to use `nvarchar(250)`
and increased the string length constraint from 100 to 250
characters, allowing for more extensive data storage.
2025-07-01 17:17:24 +02:00
b6588db615 Increase email address length in data models
Updated `ReceiverMail` and `EmailAddress` columns to
support `nvarchar(250)` for longer email addresses.
Retained `[NotMapped]` attribute for `Envelope` in
`EnvelopeReceiverReadOnly.cs` with a note for future
standardization of `EnvelopeId` data type.
2025-07-01 17:08:30 +02:00
9a9aa2608b Refactor EnvelopeHistory and update DbContext for migrations
Removed Sender and Receiver properties from EnvelopeHistory.
Added ActionDate and Comment properties. Introduced IsMigration
property in EGDbContext to conditionally configure foreign key
relationships for EnvelopeHistory. Updated EGDbContextFactory
to set IsMigration during context creation for migration operations.
2025-07-01 16:38:42 +02:00
349d65d050 Update DbTriggerParams and EF Core package versions
- Changed DbTriggerParams to use ICollection<string> for flexibility.
- Updated Microsoft.EntityFrameworkCore.SqlServer to version 9.0.6.
- Made _logger in EGDbContext nullable and optional in constructor.
- Updated logging statements to prevent null reference exceptions.
- Added Microsoft.EntityFrameworkCore.SqlServer package for net8.0 and net9.0.
- Introduced appsettings.migration.json for connection strings and trigger parameters.
- Added EGDbContextFactory for design-time DbContext creation.
2025-07-01 13:07:40 +02:00
93593226e2 Add conditional DB connection string selection
Updated `Program.cs` to conditionally select the database connection string based on an environment variable or configuration setting. Introduced a new variable `cnnStrName` for determining the use of a migration test database.

Added a new setting `"UseDbMigration": true` in `appsettings.json` to enable the migration test database, and included the corresponding connection string as `"DbMigrationTest"`. Removed the previous `"Dev"` connection string.
2025-06-30 16:19:22 +02:00
351cead423 Update Entity Framework packages and add Design package
The project file `EnvelopeGenerator.Infrastructure.csproj` has been modified to include the `Microsoft.EntityFrameworkCore.Design` package for net7.0, net8.0, and net9.0, with appropriate configurations for `PrivateAssets` and `IncludeAssets`. Additionally, the versions of `Microsoft.EntityFrameworkCore` and `Microsoft.EntityFrameworkCore.Relational` have been updated for net8.0 (from 8.0.15 to 8.0.17) and net9.0 (from 9.0.5 to 9.0.6).
2025-06-30 15:59:35 +02:00
07cab88e0d Refactor service registration with lambda expression 2025-06-30 15:53:38 +02:00
faa019355a Add DbMigrationTest key and update connection logic
Introduced a new static readonly string `DbMigrationTest` in the `Key` class for database migration tests. Updated connection string logic in `Program.cs` to use `DbMigrationTest` when `useDbMigration` is true, allowing for dynamic connection string selection based on environment configuration.
2025-06-30 15:38:01 +02:00
df9bcf3221 Remove IUserReceiverService registration 2025-06-30 15:29:57 +02:00
cda19e2b83 Add migration support and update launch settings
Introduce `useDbMigration` variable in `Program.cs` to conditionally manage database migrations based on environment settings. Update `launchSettings.json` to include a new `httpsDbMigration` profile for testing with Swagger UI. Modify `appsettings.json` to add `UseDbMigration` setting and replace the "Dev" connection string with "DbMigrationTest" for migration testing.
2025-06-30 15:29:47 +02:00
1586009a72 Add development connection string to appsettings.json 2025-06-30 15:07:04 +02:00
408b1e9f0d Merge branch 'refactor/split-common' 2025-06-30 14:59:37 +02:00
9158933333 Refactor security key handling and culture info setup
Updated `IssuerSigningKeyResolver` to use array syntax for returning security keys. Changed supported culture names declaration to use square brackets and modified the creation of the `CultureInfo` list to utilize the spread operator. Adjusted exception handling to throw `InvalidOperationException` when no supported culture is found.
2025-06-30 14:36:55 +02:00
902848958d Refactor empty array initialization 2025-06-30 14:26:26 +02:00
f5418499a7 Refactor envelope generator service registration 2025-06-30 14:25:32 +02:00
47d190d9ea Remove UserReceiver repository registration 2025-06-30 14:23:20 +02:00
35f46d3182 Remove UserReceiver repository and related entities
This commit removes the `IUserReceiverRepository` service registration from `DIExtensions`, indicating it is no longer needed. The `UserReceiver` and `Config` DbSet properties have been eliminated from the `EGDbContext`, along with their initialization in the constructor. Additionally, the `UserReceiver` entity has been removed from the model builder configuration and the associated trigger has been deleted. These changes reflect a refactoring of the data model to simplify the architecture and improve maintainability.
2025-06-30 14:23:00 +02:00
425d21084b Refactor TestSanitizeController for improved clarity
- Updated namespace for consistency.
- Changed constructor and method parameters to non-nullable strings.
- Enhanced method signatures for `Sanitize` and `Encoder`.
- Improved overall class structure and formatting for better readability.
2025-06-30 14:13:36 +02:00
6aeba4d1e7 Deprecate methods and streamline controller code
Added [Obsolete("Use MediatR")] attribute to several methods
across `DocumentController`, `HomeController`,
`TestConfigController`, `TestDocumentReceiverElementController`,
and `TestEnvelopeController` to indicate they should no longer
be used.

Refactored constructors in `TestConfigController` and
`TestEnvelopeController` to remove unnecessary empty blocks.

Improved formatting and structure of the `GetAll` method in
`TestEnvelopeController` for better clarity while maintaining
functionality.

Updated `Program.cs` to suppress warnings about obsolete
types/members during service registrations, indicating a
transition to newer implementations.
2025-06-30 14:11:56 +02:00
6930d7a431 Mark CommandManager as obsolete; add warning suppression
Updated `CommandManager` to mark the `_envelopeReceiverService` field and its constructor as obsolete, recommending the use of `MediatR`. Added a new obsolete property `EnvelopeReceiver` for accessing the service. In `Program.cs`, added warning suppression for the obsolete member during command manager runner registration.
2025-06-30 14:07:39 +02:00
c453a1650a Suppress obsolete warnings and update auth options
Added pragma directives to suppress warnings for obsolete
types when configuring user manager and envelope generator
services. Also set a logout path and enabled sliding
expiration for authentication options.
2025-06-30 14:06:26 +02:00
b9f5ae826a Deprecate user service interfaces in controllers
Added [Obsolete] attributes to _userService in AuthController,
_repository in EmailTemplateController, and _userRepository
in EnvelopeExecutor. These changes guide developers to
transition to using MediatR and IRepository.
2025-06-30 14:05:36 +02:00
532dc41004 Remove DocumentPath, add SignatureHost to Config
Removed the `DocumentPath` property from the `Config` class. Added a new required property `SignatureHost` of type `string`, mapped to the database column `SIGNATURE_HOST` (nvarchar(128)). Other properties remain unchanged.
2025-06-30 14:01:30 +02:00
13899cf70a Refactor ConfigDto class and update properties
- Change namespace to `EnvelopeGenerator.Application.DTOs`
- Remove `DocumentPath` property
- Update `SignatureHost` to be a required string
2025-06-30 13:59:18 +02:00
9756303d6e Refactor repositories and enhance documentation
- Mark `IEmailTemplateRepository` and `_repository` in `ReadEmailTemplateQueryHandler` as obsolete, suggesting the use of `IRepository`.
- Update `ResetEmailTemplateCommand` with additional documentation and examples for `Type`.
- Change return type of `CreateEnvelopeReceiverCommand` to `IRequest<CreateEnvelopeReceiverResponse>`.
- Improve caching methods in `CacheExtensions.cs` for better functionality and clarity.
- Add XML documentation to the `Ok` method in `MappingExtensions`.
- Make `UserReference` property required in `ReadHistoryResponse`.
2025-06-30 13:56:49 +02:00
1c51fafb69 Remove UserReceiver functionality and related components
This commit marks the `IUserReceiverRepository` and `IUserReceiverService` as obsolete and removes their implementations. The `UserReceiverDto`, `UserReceiver`, `UserReceiverService`, and `UserReceiverRepository` classes have been deleted, along with their mappings in the `MappingProfile`. Additionally, the `TestUserReceiverController` has been removed, reflecting the complete removal of user receiver functionality from the codebase.
2025-06-30 13:44:43 +02:00
94d43bce24 Deprecate repositories and update service interfaces
- Marked `IEnvelopeReceiverRepository` and several repository classes as obsolete, recommending the use of `IRepository`.
- Corrected `using` directive in `IReceiverService.cs`.
- Removed `UpdateAsync` method from `IReceiverService`.
- Enhanced `ISmsSender` interface with new properties and methods.
- Updated `ReceiverCreateDto`, `ReceiverReadDto`, and `UserReceiverDto` to enforce non-nullable properties.
- Refactored `TestReceiverController` to suggest using `MediatR`.
2025-06-30 13:37:54 +02:00
f5733228bf Merge branch 'refactor/split-common' 2025-06-30 11:28:32 +02:00
e3cb2ec219 Add new library references and update packages
- Added references to `DigitalData.UserManager.Domain` v3.2.2.0, `System.ComponentModel.Annotations` v4.2.1.0, and `System.Drawing.Common` v4.0.0.2 in `EnvelopeGenerator.Form.vbproj`.
- Updated `packages.config` to include `System.ComponentModel.Annotations` v4.7.0, `System.Drawing.Common` v4.7.3, and `UserManager.Domain` v3.2.2.
2025-06-30 11:27:26 +02:00
Developer01
260c1c174d Merge Master 2025-06-30 11:26:46 +02:00
1c90e693da Deprecate services in favor of MediatR integration
This commit introduces the `[Obsolete("Use MediatR")]` attribute to various service fields and methods across multiple controllers and extension classes, signaling a transition to MediatR for handling requests and commands.

Key changes include:
- Marking `IEnvelopeService`, `IEnvelopeReceiverService`, and `IEnvelopeTypeService` as obsolete in their respective controllers.
- Updating `AddEnvelopeGeneratorInfrastructureServices` to utilize `IRepository`.
- Refactoring `AddCommandManagerRunner` and `CreateHost` methods to indicate obsolescence.
- Replacing `DigitalData.Core.DTO` with `DigitalData.Core.Abstraction.Application.DTO` in using directives.

These changes modernize the codebase and improve command and query handling while cleaning up service dependencies.
2025-06-30 10:05:36 +02:00
e4c6714677 Behebung von Post-Merge-Fehlern.
- CommonServices in den Ordner core verschieben
2025-06-27 14:51:50 +02:00
812b49cfcb Merge master branch 2025-06-27 14:43:47 +02:00
f039437f4c Merge master branch 2025-06-27 14:43:02 +02:00
6f73ba929c Refactor controllers and update envelope status handling
- Updated `TestEnvelopeHistoryController` to use `EnvelopeStatus` for status parameters and marked it as obsolete.
- Modified `TestViewController` with new route attributes, simplified constructor, and improved error handling in HTTP methods.
- Cleaned up `DebugEnvelopes.cshtml` by removing unnecessary using directives and ensuring type safety in envelope grouping.
2025-06-27 13:51:51 +02:00
fcbe956095 Refactor controllers and views for MediatR integration
Updated several C# controllers to use the new
`DigitalData.Core.Abstraction.Application.DTO` namespace
and removed references to `DigitalData.Core.DTO`. Added
`[Obsolete("Use MediatR")]` attributes to indicate a shift
towards MediatR for request handling. Improved error
handling and code organization in key methods. Updated
Razor view files to reflect namespace changes for
consistency across the application.
2025-06-27 13:24:12 +02:00
e628309734 Refactor TestEnvelopeMailController for clarity
Updated using directives, added Obsolete attributes, and improved error handling in SendAccessCode method. Enhanced code clarity while preserving overall structure.
2025-06-27 13:14:14 +02:00
d6cbd0597e Mark TestEnvelopeDocumentController as obsolete
The `TestEnvelopeDocumentController` class has been marked as obsolete, with a recommendation to use MediatR instead. This change reflects a shift in the architecture, promoting the use of MediatR for handling requests and responses in the application.
2025-06-27 13:12:14 +02:00
9d45082bfc Refactor TestEmailTemplateController and update namespaces
- Updated `using` directives to include new namespaces.
- Marked `TestEmailTemplateController` as obsolete with a suggestion to use MediatR.
- Simplified the constructor by removing an empty block.
- Modified `GetAll` method to include `[HttpGet]` and `[Obsolete]` attributes while retaining functionality.
- Added a non-action `GetAll` method that overrides the base implementation.
2025-06-27 13:11:40 +02:00
3304b01d7b Refactor TestDocumentStatusController
Added [Obsolete] attribute to indicate replacement with MediatR. Updated constructor to include logger parameter and removed empty constructor body for clarity.
2025-06-27 13:09:13 +02:00
f5d33846d5 Refactor TestControllerBase and update using directives
Consolidated using directives and removed unnecessary ones.
Added attributes to the namespace declaration for API routing
and deprecation notice. Simplified the class definition by
removing the IUnique<TId> constraint and cleaned up the
constructor by eliminating empty braces.
2025-06-27 12:13:13 +02:00
231140505e Refactor ReadOnlyController to use MediatR
Updated service dependencies to use MediatR, marking
several fields and methods as obsolete. Modified import
statements to include new namespaces and removed old
ones. Adjusted the CreateAsync method to correctly
access IDs and updated the RecordAsync call to use
the new EnvelopeStatus reference. These changes
enhance code maintainability and align with modern
architectural patterns.
2025-06-27 12:08:30 +02:00
62a73e4967 Refactor HomeController for MediatR and domain model
- Added new using directives for domain-driven design.
- Marked several fields and methods as obsolete to transition to MediatR for request handling.
- Updated action methods to use middleware for exception management.
- Changed response type in EnvelopeSigned method for consistency with new domain model.
- Overall improvements for maintainability and adherence to best practices.
2025-06-27 12:06:41 +02:00
dedfb924d8 Refactor EnvelopeController and EnvelopeOldService
Significantly refactored `EnvelopeController.cs` to improve structure, add logging, and enhance error handling in methods. Introduced new private fields and updated constructor parameters, with some marked as obsolete.

Updated `EnvelopeOldService.cs` to add private fields, improve logging, and enhance error handling in key methods. Introduced `ReceiverAlreadySigned` method and marked `GetDocument` as obsolete. Improved overall functionality and maintainability.
2025-06-27 10:59:52 +02:00
452077e86a Enhance error reporting for envelope creation failure
Added detailed parameter information to the error message
in `InvalidOperationException` for better debugging context
when envelope creation fails.
2025-06-26 11:56:49 +02:00
Developer01
a1688608ab Exception TFA Null Verweis 2025-06-25 13:49:55 +02:00
Developer01
f1920e16fa MS Job 2025-05-27 14:04:45 +02:00
111 changed files with 5139 additions and 1157 deletions

View File

@@ -3,6 +3,6 @@
/// <summary>
///
/// </summary>
public class DbTriggerParams : Dictionary<string, IEnumerable<string>>
public class DbTriggerParams : Dictionary<string, ICollection<string>>
{
}

View File

@@ -7,7 +7,7 @@ namespace EnvelopeGenerator.Application.Contracts.Repositories;
/// <summary>
///
/// </summary>
[Obsolete("Use Read-method returning IReadQuery<TEntity> instead.")]
[Obsolete("Use IRepository")]
public interface IEmailTemplateRepository : ICRUDRepository<EmailTemplate, int>
{
/// <summary>

View File

@@ -6,6 +6,7 @@ namespace EnvelopeGenerator.Application.Contracts.Repositories;
/// <summary>
///
/// </summary>
[Obsolete("Use IRepository")]
public interface IEnvelopeReceiverRepository : ICRUDRepository<EnvelopeReceiver, (int Envelope, int Receiver)>
{
/// <summary>

View File

@@ -1,12 +0,0 @@
using DigitalData.Core.Abstraction.Application.Repository;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Application.Contracts.Repositories;
/// <summary>
///
/// </summary>
[Obsolete("Use IRepository")]
public interface IUserReceiverRepository : ICRUDRepository<UserReceiver, int>
{
}

View File

@@ -1,5 +1,4 @@
using DigitalData.Core.Abstractions;
using DigitalData.Core.Abstraction.Application;
using DigitalData.Core.Abstraction.Application;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.DTOs.Receiver;
using EnvelopeGenerator.Domain.Entities;
@@ -27,12 +26,4 @@ public interface IReceiverService : ICRUDService<ReceiverCreateDto, ReceiverRead
/// <param name="signature"></param>
/// <returns></returns>
Task<Result> DeleteByAsync(string? emailAddress = null, string? signature = null);
/// <summary>
///
/// </summary>
/// <typeparam name="TUpdateDto"></typeparam>
/// <param name="updateDto"></param>
/// <returns></returns>
Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto);
}

View File

@@ -3,9 +3,21 @@
namespace EnvelopeGenerator.Application.Contracts.Services;
//TODO: move to DigitalData.Core
/// <summary>
///
/// </summary>
public interface ISmsSender
{
/// <summary>
///
/// </summary>
string ServiceProvider { get; }
/// <summary>
///
/// </summary>
/// <param name="recipient"></param>
/// <param name="message"></param>
/// <returns></returns>
Task<SmsResponse> SendSmsAsync(string recipient, string message);
}

View File

@@ -1,13 +0,0 @@
using DigitalData.Core.Abstraction.Application;
using EnvelopeGenerator.Application.DTOs;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Application.Contracts.Services;
/// <summary>
///
/// </summary>
[Obsolete("Use MediatR")]
public interface IUserReceiverService : IBasicCRUDService<UserReceiverDto, UserReceiver, int>
{
}

View File

@@ -8,11 +8,6 @@ namespace EnvelopeGenerator.Application.DTOs;
[ApiExplorerSettings(IgnoreApi = true)]
public class ConfigDto
{
/// <summary>
/// Gets or sets the path to the document.
/// </summary>
public string? DocumentPath { get; set; }
/// <summary>
/// Gets or sets the sending profile identifier.
/// </summary>
@@ -21,7 +16,7 @@ public class ConfigDto
/// <summary>
/// Gets or sets the signature host URL or name.
/// </summary>
public string? SignatureHost { get; set; }
public required string SignatureHost { get; set; }
/// <summary>
/// Gets or sets the name of the external program.

View File

@@ -37,7 +37,6 @@ public class MappingProfile : Profile
CreateMap<Domain.Entities.Receiver, ReceiverReadDto>();
CreateMap<Domain.Entities.Receiver, ReceiverCreateDto>();
CreateMap<Domain.Entities.Receiver, ReceiverUpdateDto>();
CreateMap<UserReceiver, UserReceiverDto>();
CreateMap<Domain.Entities.EnvelopeReceiverReadOnly, EnvelopeReceiverReadOnlyDto>();
// DTO to Entity mappings
@@ -55,7 +54,6 @@ public class MappingProfile : Profile
CreateMap<ReceiverReadDto, Domain.Entities.Receiver>().ForMember(rcv => rcv.EnvelopeReceivers, rcvReadDto => rcvReadDto.Ignore());
CreateMap<ReceiverCreateDto, Domain.Entities.Receiver>();
CreateMap<ReceiverUpdateDto, Domain.Entities.Receiver>();
CreateMap<UserReceiverDto, UserReceiver>();
CreateMap<EnvelopeReceiverBase, EnvelopeReceiverBasicDto>();
CreateMap<EnvelopeReceiverReadOnlyCreateDto, Domain.Entities.EnvelopeReceiverReadOnly>();
CreateMap<EnvelopeReceiverReadOnlyUpdateDto, Domain.Entities.EnvelopeReceiverReadOnly>();

View File

@@ -18,7 +18,7 @@ public record ReceiverCreateDto
{
_sha256HexOfMail = new(() =>
{
var bytes_arr = Encoding.UTF8.GetBytes(EmailAddress.ToUpper());
var bytes_arr = Encoding.UTF8.GetBytes(EmailAddress!.ToUpper());
var hash_arr = SHA256.HashData(bytes_arr);
var hexa_str = BitConverter.ToString(hash_arr);
return hexa_str.Replace("-", string.Empty);
@@ -37,7 +37,7 @@ public record ReceiverCreateDto
public string? TotpSecretkey { get; init; }
/// <summary>
/// var bytes_arr = Encoding.UTF8.GetBytes(EmailAddress.ToUpper());<br>
/// var bytes_arr = Encoding.UTF8.GetBytes(EmailAddress.ToUpper());<br/>
/// var hash_arr = SHA256.HashData(bytes_arr);
/// var hexa_str = BitConverter.ToString(hash_arr);
/// return hexa_str.Replace("-", string.Empty);

View File

@@ -4,26 +4,57 @@ using System.Text.Json.Serialization;
namespace EnvelopeGenerator.Application.DTOs.Receiver;
/// <summary>
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public class ReceiverReadDto
{
/// <summary>
///
/// </summary>
public int Id { get; set; }
public string EmailAddress { get; set; }
/// <summary>
///
/// </summary>
public required string EmailAddress { get; set; }
public string Signature { get; set; }
/// <summary>
///
/// </summary>
public required string Signature { get; set; }
/// <summary>
///
/// </summary>
public DateTime AddedWhen { get; set; }
/// <summary>
///
/// </summary>
[JsonIgnore]
public IEnumerable<EnvelopeReceiverBasicDto>? EnvelopeReceivers { get; set; }
/// <summary>
///
/// </summary>
public string? LastUsedName => EnvelopeReceivers?.LastOrDefault()?.Name;
/// <summary>
///
/// </summary>
public string? TotpSecretkey { get; set; } = null;
/// <summary>
///
/// </summary>
public DateTime? TfaRegDeadline { get; set; }
/// <summary>
///
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return Id.GetHashCode();

View File

@@ -1,45 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace EnvelopeGenerator.Application.DTOs;
/// <summary>
/// Data Transfer Object representing a user receiver with associated details.
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
public class UserReceiverDto
{
/// <summary>
/// Gets or sets the unique identifier of the user receiver.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Gets or sets the identifier of the user associated with the receiver.
/// </summary>
public int UserId { get; set; }
/// <summary>
/// Gets or sets the identifier of the receiver.
/// </summary>
public int ReceiverId { get; set; }
/// <summary>
/// Gets or sets the name of the receiver.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Gets or sets the company name of the receiver.
/// </summary>
public string CompanyName { get; set; }
/// <summary>
/// Gets or sets the job title of the receiver.
/// </summary>
public string JobTitle { get; set; }
/// <summary>
/// Gets or sets the timestamp when the user receiver was added.
/// </summary>
public DateTime AddedWhen { get; set; }
}

View File

@@ -38,7 +38,6 @@ public static class DependencyInjection
services.TryAddScoped<IEnvelopeReceiverService, EnvelopeReceiverService>();
services.TryAddScoped<IEnvelopeTypeService, EnvelopeTypeService>();
services.TryAddScoped<IReceiverService, ReceiverService>();
services.TryAddScoped<IUserReceiverService, UserReceiverService>();
services.TryAddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
//Auto mapping profiles

View File

@@ -5,20 +5,19 @@ namespace EnvelopeGenerator.Application.EmailTemplates.Commands.Reset;
/// <summary>
/// Ein Befehl zum Zurücksetzen einer E-Mail-Vorlage auf die Standardwerte.
/// Erbt von <see cref="EmailTemplateQuery"/> und ermöglicht die Angabe einer optionalen ID und eines Typs der E-Mail-Vorlage.
/// Erbt von <see cref="EmailTemplateQuery"/> und ermöglicht die Angabe einer optionalen ID und eines Typs der E-Mail-Vorlage.<br/><br/>
/// Beispiele:<br/>
/// 0 - DocumentReceived: Benachrichtigung über den Empfang eines Dokuments.<br/>
/// 1 - DocumentSigned: Benachrichtigung über die Unterzeichnung eines Dokuments.<br/>
/// 2 - DocumentDeleted: Benachrichtigung über das Löschen eines Dokuments.<br/>
/// 3 - DocumentCompleted: Benachrichtigung über den Abschluss eines Dokuments.<br/>
/// 4 - DocumentAccessCodeReceived: Benachrichtigung über den Erhalt eines Zugangscodes.<br/>
/// 5 - DocumentShared: Benachrichtigung über das Teilen eines Dokuments.<br/>
/// 6 - TotpSecret: Benachrichtigung über ein TOTP-Geheimnis.<br/>
/// 7 - DocumentRejected_ADM (Für den Absender): Mail an den Absender, wenn das Dokument abgelehnt wird.<br/>
/// 8 - DocumentRejected_REC (Für den ablehnenden Empfänger): Mail an den ablehnenden Empfänger, wenn das Dokument abgelehnt wird.<br/>
/// 9 - DocumentRejected_REC_2 (Für sonstige Empfänger): Mail an andere Empfänger (Brief), wenn das Dokument abgelehnt wird.<br/>
/// </summary>
/// Beispiele:
/// 0 - DocumentReceived: Benachrichtigung über den Empfang eines Dokuments.
/// 1 - DocumentSigned: Benachrichtigung über die Unterzeichnung eines Dokuments.
/// 2 - DocumentDeleted: Benachrichtigung über das Löschen eines Dokuments.
/// 3 - DocumentCompleted: Benachrichtigung über den Abschluss eines Dokuments.
/// 4 - DocumentAccessCodeReceived: Benachrichtigung über den Erhalt eines Zugangscodes.
/// 5 - DocumentShared: Benachrichtigung über das Teilen eines Dokuments.
/// 6 - TotpSecret: Benachrichtigung über ein TOTP-Geheimnis.
/// 7 - DocumentRejected_ADM (Für den Absender): Mail an den Absender, wenn das Dokument abgelehnt wird.
/// 8 - DocumentRejected_REC (Für den ablehnenden Empfänger): Mail an den ablehnenden Empfänger, wenn das Dokument abgelehnt wird.
/// 9 - DocumentRejected_REC_2 (Für sonstige Empfänger): Mail an andere Empfänger (Brief), wenn das Dokument abgelehnt wird.
/// </param>
public record ResetEmailTemplateCommand : EmailTemplateQuery, IRequest
{
/// <summary>
@@ -34,7 +33,7 @@ public record ResetEmailTemplateCommand : EmailTemplateQuery, IRequest
///
/// </summary>
/// <param name="Id">Die optionale ID der E-Mail-Vorlage, die zurückgesetzt werden soll.</param>
/// <param name="Type">Der Typ der E-Mail-Vorlage, z. B. <see cref="Constants.EmailTemplateType"/> (optional).
/// <param name="Type">Der Typ der E-Mail-Vorlage, z. B. <see cref="Constants.EmailTemplateType"/> (optional).</param>
public ResetEmailTemplateCommand(int? Id = null, Constants.EmailTemplateType? Type = null) : base(Id, Type)
{
}

View File

@@ -12,6 +12,7 @@ public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQu
{
private readonly IMapper _mapper;
[Obsolete("Use Read-method returning IReadQuery<TEntity> instead.")]
private readonly IEmailTemplateRepository _repository;
/// <summary>
@@ -21,6 +22,7 @@ public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQu
/// <param name="repository">
/// Die AutoMapper-Instanz, die zum Zuordnen von Objekten verwendet wird.
/// </param>
[Obsolete("Use Read-method returning IReadQuery<TEntity> instead.")]
public ReadEmailTemplateQueryHandler(IMapper mapper, IEmailTemplateRepository repository)
{
_mapper = mapper;
@@ -34,6 +36,7 @@ public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQu
/// <param name="cancellationToken"></param>
/// <returns></returns>
/// <exception cref="InvalidOperationException"></exception>
[Obsolete("Use IRepository")]
public async Task<ReadEmailTemplateResponse?> Handle(ReadEmailTemplateQuery request, CancellationToken cancellationToken)
{
var temp = request.Id is int id
@@ -46,4 +49,4 @@ public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQu
return res;
}
}
}

View File

@@ -18,4 +18,4 @@ public record CreateEnvelopeReceiverCommand(
[Required] DocumentCreateCommand Document,
[Required] IEnumerable<ReceiverGetOrCreateCommand> Receivers,
bool TFAEnabled = false
) : CreateEnvelopeCommand(Title, Message, TFAEnabled), IRequest<CreateEnvelopeReceiverResponse?>;
) : CreateEnvelopeCommand(Title, Message, TFAEnabled), IRequest<CreateEnvelopeReceiverResponse>;

View File

@@ -64,4 +64,4 @@ public class CreateEnvelopeReceiverCommandHandler : IRequestHandler<CreateEnvelo
res.SentReceiver = _mapper.Map<IEnumerable<ReceiverReadDto>>(sentRecipients);
return res;
}
}
}

View File

@@ -1,131 +1,222 @@
using Microsoft.Extensions.Caching.Distributed;
namespace EnvelopeGenerator.Application.Extensions
namespace EnvelopeGenerator.Application.Extensions;
/// <summary>
///
/// </summary>
public static class CacheExtensions
{
public static class CacheExtensions
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="options"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static Task SetLongAsync(this IDistributedCache cache, string key, long value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> options is null
? cache.SetAsync(key, BitConverter.GetBytes(value), token: cToken)
: cache.SetAsync(key, BitConverter.GetBytes(value), options: options, token: cToken);
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<long?> GetLongAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
public static Task SetLongAsync(this IDistributedCache cache, string key, long value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> options is null
? cache.SetAsync(key, BitConverter.GetBytes(value), token: cToken)
: cache.SetAsync(key, BitConverter.GetBytes(value), options: options, token: cToken);
public static async Task<long?> GetLongAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : BitConverter.ToInt64(value, 0);
}
public static Task SetDateTimeAsync(this IDistributedCache cache, string key, DateTime value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> cache.SetLongAsync(key: key, value: value.Ticks, options: options, cToken: cToken);
public static async Task<DateTime?> GetDateTimeAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : new(BitConverter.ToInt64(value, 0));
}
public static Task SetTimeSpanAsync(this IDistributedCache cache, string key, TimeSpan value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> cache.SetLongAsync(key: key, value: value.Ticks, options: options, cToken);
public static async Task<TimeSpan?> GetTimeSpanAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : new(BitConverter.ToInt64(value, 0));
}
//TODO: use code generator
#region GetOrSetAsync
#region string
public static async Task<string> GetOrSetAsync(this IDistributedCache cache, string key, Func<string> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
var value = await cache.GetStringAsync(key, cToken);
if (value is null)
{
// create new and save
value = factory();
Task CacheAsync() => options is null
? cache.SetStringAsync(key, value, cToken)
: cache.SetStringAsync(key, value, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
}
return value;
}
public static async Task<string> GetOrSetAsync(this IDistributedCache cache, string key, Func<Task<string>> factoryAsync, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
var value = await cache.GetStringAsync(key, cToken);
if(value is null)
{
// create new and save
value = await factoryAsync();
Task CacheAsync() => options is null
? cache.SetStringAsync(key: key, value: value, token: cToken)
: cache.SetStringAsync(key: key, value: value, options: options, token: cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
}
return value;
}
#endregion
#region DateTime
public static async Task<DateTime> GetOrSetAsync(this IDistributedCache cache, string key, Func<DateTime> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
if (await cache.GetDateTimeAsync(key, cToken) is DateTime dateTimeValue)
return dateTimeValue;
else
{
// create new and save
var newValue = factory();
Task CacheAsync() => options is null
? cache.SetDateTimeAsync(key, newValue, cToken: cToken)
: cache.SetDateTimeAsync(key, newValue, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
return newValue;
}
}
public static async Task<DateTime> GetOrSetAsync(this IDistributedCache cache, string key, Func<Task<DateTime>> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
if (await cache.GetDateTimeAsync(key, cToken) is DateTime dateTimeValue)
return dateTimeValue;
else
{
// create new and save
var newValue = await factory();
Task CacheAsync() => options is null
? cache.SetDateTimeAsync(key, newValue, cToken: cToken)
: cache.SetDateTimeAsync(key, newValue, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
return newValue;
}
}
#endregion
#endregion
var value = await cache.GetAsync(key, cToken);
return value is null ? null : BitConverter.ToInt64(value, 0);
}
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="options"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static Task SetDateTimeAsync(this IDistributedCache cache, string key, DateTime value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> cache.SetLongAsync(key: key, value: value.Ticks, options: options, cToken: cToken);
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<DateTime?> GetDateTimeAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : new(BitConverter.ToInt64(value, 0));
}
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="options"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static Task SetTimeSpanAsync(this IDistributedCache cache, string key, TimeSpan value, DistributedCacheEntryOptions? options = null, CancellationToken cToken = default)
=> cache.SetLongAsync(key: key, value: value.Ticks, options: options, cToken);
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<TimeSpan?> GetTimeSpanAsync(this IDistributedCache cache, string key, CancellationToken cToken = default)
{
var value = await cache.GetAsync(key, cToken);
return value is null ? null : new(BitConverter.ToInt64(value, 0));
}
//TODO: use code generator
#region GetOrSetAsync
#region string
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <param name="options"></param>
/// <param name="cacheInBackground"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<string> GetOrSetAsync(this IDistributedCache cache, string key, Func<string> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
var value = await cache.GetStringAsync(key, cToken);
if (value is null)
{
// create new and save
value = factory();
Task CacheAsync() => options is null
? cache.SetStringAsync(key, value, cToken)
: cache.SetStringAsync(key, value, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
}
return value;
}
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="factoryAsync"></param>
/// <param name="options"></param>
/// <param name="cacheInBackground"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<string> GetOrSetAsync(this IDistributedCache cache, string key, Func<Task<string>> factoryAsync, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
var value = await cache.GetStringAsync(key, cToken);
if(value is null)
{
// create new and save
value = await factoryAsync();
Task CacheAsync() => options is null
? cache.SetStringAsync(key: key, value: value, token: cToken)
: cache.SetStringAsync(key: key, value: value, options: options, token: cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
}
return value;
}
#endregion
#region DateTime
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <param name="options"></param>
/// <param name="cacheInBackground"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<DateTime> GetOrSetAsync(this IDistributedCache cache, string key, Func<DateTime> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
if (await cache.GetDateTimeAsync(key, cToken) is DateTime dateTimeValue)
return dateTimeValue;
else
{
// create new and save
var newValue = factory();
Task CacheAsync() => options is null
? cache.SetDateTimeAsync(key, newValue, cToken: cToken)
: cache.SetDateTimeAsync(key, newValue, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
return newValue;
}
}
/// <summary>
///
/// </summary>
/// <param name="cache"></param>
/// <param name="key"></param>
/// <param name="factory"></param>
/// <param name="options"></param>
/// <param name="cacheInBackground"></param>
/// <param name="cToken"></param>
/// <returns></returns>
public static async Task<DateTime> GetOrSetAsync(this IDistributedCache cache, string key, Func<Task<DateTime>> factory, DistributedCacheEntryOptions? options = null, bool cacheInBackground = false, CancellationToken cToken = default)
{
if (await cache.GetDateTimeAsync(key, cToken) is DateTime dateTimeValue)
return dateTimeValue;
else
{
// create new and save
var newValue = await factory();
Task CacheAsync() => options is null
? cache.SetDateTimeAsync(key, newValue, cToken: cToken)
: cache.SetDateTimeAsync(key, newValue, options, cToken);
if (cacheInBackground)
_ = Task.Run(async () => await CacheAsync(), cToken);
else
await CacheAsync();
return newValue;
}
}
#endregion
#endregion
}

View File

@@ -1,14 +1,27 @@
using EnvelopeGenerator.Application.DTOs.Messaging;
namespace EnvelopeGenerator.Application.Extensions
{
public static class MappingExtensions
{
public static bool Ok(this GtxMessagingResponse gtxMessagingResponse)
=> gtxMessagingResponse.TryGetValue("message-status", out var status)
&& status?.ToString()?.ToLower() == "ok";
namespace EnvelopeGenerator.Application.Extensions;
public static string ToBase64String(this byte[] bytes)
=> Convert.ToBase64String(bytes);
}
/// <summary>
/// Provides extension methods for common mapping and conversion operations.
/// </summary>
public static class MappingExtensions
{
/// <summary>
/// Determines whether the response indicates a successful "OK" message status.
/// </summary>
/// <param name="gtxMessagingResponse">The response object to evaluate.</param>
/// <returns><see langword="true"/> if the response contains a "message-status" key with a value of "ok" (case-insensitive);
/// otherwise, <see langword="false"/>.</returns>
public static bool Ok(this GtxMessagingResponse gtxMessagingResponse)
=> gtxMessagingResponse.TryGetValue("message-status", out var status)
&& status?.ToString()?.ToLower() == "ok";
/// <summary>
/// Converts the specified byte array to its equivalent string representation encoded in base-64.
/// </summary>
/// <param name="bytes">The byte array to encode.</param>
/// <returns>A base-64 encoded string representation of the input byte array.</returns>
public static string ToBase64String(this byte[] bytes)
=> Convert.ToBase64String(bytes);
}

View File

@@ -10,6 +10,7 @@ namespace EnvelopeGenerator.Application.Histories.Queries.Read;
/// </summary>
public class ReadHistoryQueryHandler : IRequestHandler<ReadHistoryQuery, IEnumerable<ReadHistoryResponse>>
{
[Obsolete("Use IRepository")]
private readonly IEnvelopeHistoryRepository _repository;
private readonly IMapper _mapper;
@@ -19,6 +20,7 @@ public class ReadHistoryQueryHandler : IRequestHandler<ReadHistoryQuery, IEnumer
/// </summary>
/// <param name="repository"></param>
/// <param name="mapper"></param>
[Obsolete("Use IRepository")]
public ReadHistoryQueryHandler(IEnvelopeHistoryRepository repository, IMapper mapper)
{
_repository = repository;
@@ -41,4 +43,4 @@ public class ReadHistoryQueryHandler : IRequestHandler<ReadHistoryQuery, IEnumer
return _mapper.Map<IEnumerable<ReadHistoryResponse>>(hists);
}
}
}

View File

@@ -20,7 +20,7 @@ public class ReadHistoryResponse
/// <summary>
/// Gets or sets the reference identifier of the user who performed the action.
/// </summary>
public string UserReference { get; set; }
public required string UserReference { get; set; }
/// <summary>
/// Gets or sets the status code of the envelope.

View File

@@ -74,4 +74,9 @@ public static class Key
///
/// </summary>
public static readonly string Default = nameof(Default);
/// <summary>
///
/// </summary>
public static readonly string DbMigrationTest = nameof(DbMigrationTest);
}

View File

@@ -1,25 +0,0 @@
using AutoMapper;
using DigitalData.Core.Application;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs;
using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Application.Services;
/// <summary>
///
/// </summary>
[Obsolete("Use MediatR")]
public class UserReceiverService : BasicCRUDService<IUserReceiverRepository, UserReceiverDto, UserReceiver, int>, IUserReceiverService
{
/// <summary>
///
/// </summary>
/// <param name="repository"></param>
/// <param name="mapper"></param>
public UserReceiverService(IUserReceiverRepository repository, IMapper mapper)
: base(repository, mapper)
{
}
}

View File

@@ -143,7 +143,9 @@ Namespace Jobs
Logger.Debug("Documents merged!")
Dim oOutputDirectoryPath = Path.Combine(Config.ExportPath, ParentFolderUID)
Logger.Debug($"oOutputDirectoryPath is {oOutputDirectoryPath}")
If Not Directory.Exists(oOutputDirectoryPath) Then
Logger.Debug($"Directory not existing. Creating ... ")
Directory.CreateDirectory(oOutputDirectoryPath)
End If
Dim oOutputFilePath = Path.Combine(oOutputDirectoryPath, $"{oEnvelope.Uuid}.pdf")
@@ -172,6 +174,7 @@ Namespace Jobs
Throw New ApplicationException("Envelope could not be finalized")
End If
Catch ex As Exception
Logger.Error(ex)
Logger.Warn(ex, $"Unhandled exception while working envelope [{oId}]")
End Try

View File

@@ -27,6 +27,7 @@ Public Class EnvelopeModel
Dim oEnvelope = New Envelope() With {
.Id = pRow.ItemEx("GUID", 0),
.Title = pRow.ItemEx("TITLE", ""),
.Comment = pRow.ItemEx("COMMENT", ""),
.EnvelopeTypeId = pRow.ItemEx("ENVELOPE_TYPE", 0),
.ContractType = pRow.ItemEx("CONTRACT_TYPE", 0),
.Uuid = pRow.ItemEx("ENVELOPE_UUID", ""),

View File

@@ -57,7 +57,9 @@ Public Class ActionService
Public Function ResendReceiver(pEnvelope As Domain.Entities.Envelope, pReceiver As Receiver) As Boolean
Return EmailService.SendDocumentReceivedEmail(pEnvelope, pReceiver)
End Function
Public Function ManuallySendAccessCode(pEnvelope As Domain.Entities.Envelope, pReceiver As Receiver) As Boolean
Return EmailService.SendDocumentAccessCodeReceivedEmail(pEnvelope, pReceiver)
End Function
Public Function DeleteEnvelope(pEnvelope As Domain.Entities.Envelope, pReason As String) As Boolean
Dim oStatus As EnvelopeStatus

View File

@@ -325,7 +325,11 @@ Namespace My.Resources
Return ResourceManager.GetString("Invitation successfully resend", resourceCulture)
End Get
End Property
Public Shared ReadOnly Property AccessCode_successfully_send() As String
Get
Return ResourceManager.GetString("AccessCode manually send", resourceCulture)
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Fehlendes Dokument ähnelt.
'''</summary>

View File

@@ -6,14 +6,12 @@ namespace EnvelopeGenerator.Domain.Entities
[Table("TBSIG_CONFIG", Schema = "dbo")]
public class Config
{
[Column("DOCUMENT_PATH", TypeName = "nvarchar(256)")]
public string DocumentPath { get; set; }
[Column("SENDING_PROFILE", TypeName = "int")]
[Required]
public int SendingProfile { get; set; }
[Column("SIGNATURE_HOST", TypeName = "nvarchar(128)")]
[Required]
public string SignatureHost { get; set; }
[Column("EXTERNAL_PROGRAM_NAME", TypeName = "nvarchar(30)")]

View File

@@ -56,6 +56,9 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("TITLE", TypeName = "nvarchar(128)")]
public string Title { get; set; } = string.Empty;
[Column("COMMENT", TypeName = "nvarchar(128)")]
public string Comment { get; set; } = string.Empty;
[Column("CONTRACT_TYPE")]
public int ContractType { get; set; }
@@ -126,7 +129,7 @@ namespace EnvelopeGenerator.Domain.Entities
public bool IsAlreadySent => Status > (int)Constants.EnvelopeStatus.EnvelopeSaved;
[NotMapped]
public string StatusTranslated => My.Resources.Model.ResourceManager.GetString(Status.ToString());
public string StatusTranslated => My.Resources.Model.ResourceManager.GetString(((Constants.EnvelopeStatus)Status).ToString());
[NotMapped]
public bool TFA_Enabled { get; set; } = false;

View File

@@ -38,10 +38,8 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("COMMENT", TypeName = "nvarchar(max)")]
public string Comment { get; set; }
[ForeignKey("UserReference")]
public virtual User Sender { get; set; }
[ForeignKey("UserReference")]
public virtual Receiver Receiver { get; set; }
[NotMapped]

View File

@@ -23,7 +23,7 @@ namespace EnvelopeGenerator.Domain.Entities
[NotMapped]
public Envelope Envelope { get; set; }
[Column("RECEIVER_MAIL")]
[Column("RECEIVER_MAIL", TypeName = "nvarchar(250)")]
[Required]
[StringLength(250)]
[TemplatePlaceholder("NAME_RECEIVER")]
@@ -33,9 +33,9 @@ namespace EnvelopeGenerator.Domain.Entities
[Required]
public DateTime DateValid { get; set; }
[Column("ADDED_WHO")]
[Column("ADDED_WHO", TypeName = "nvarchar(250)")]
[Required]
[StringLength(100)]
[StringLength(250)]
public string AddedWho { get; set; }
public Receiver Receiver { get; set; }

View File

@@ -17,7 +17,8 @@ namespace EnvelopeGenerator.Domain.Entities
public int Id { get; set; }
[Required, EmailAddress]
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")]
[Column("EMAIL_ADDRESS", TypeName = "nvarchar(250)")]
[StringLength(250)]
public string EmailAddress { get; set; }
[Required]

View File

@@ -1,39 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK
using System;
#endif
namespace EnvelopeGenerator.Domain.Entities
{
[Table("TBSIG_USER_RECEIVER", Schema = "dbo")]
public class UserReceiver
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("GUID")]
public int Id { get; set; }
[Required]
[Column("USER_ID")]
public int UserId { get; set; }
[Required]
[Column("RECEIVER_ID")]
public int ReceiverId { get; set; }
[Required]
[Column("NAME", TypeName = "nvarchar(128)")]
public string Name { get; set; }
[Column("COMPANY_NAME", TypeName = "nvarchar(128)")]
public string CompanyName { get; set; }
[Column("JOB_TITLE", TypeName = "nvarchar(128)")]
public string JobTitle { get; set; }
[Required]
[Column("ADDED_WHEN", TypeName = "datetime")]
public DateTime AddedWhen { get; set; }
}
}

View File

@@ -2,6 +2,8 @@
<PropertyGroup>
<TargetFrameworks>net462;net7.0;net8.0;net9.0</TargetFrameworks>
<AssemblyVersion>1.4.0</AssemblyVersion>
<FileVersion>1.4.0</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net462'">

View File

@@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -13,12 +13,12 @@ namespace My.Resources {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
@@ -33,7 +33,7 @@ namespace My.Resources {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
@@ -47,8 +47,8 @@ namespace My.Resources {
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
@@ -61,7 +61,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Sie haben ein Dokument zur Unterschrift erhalten: {0}.
/// Sucht eine lokalisierte Zeichenfolge, die Sie haben ein Dokument zur Unterschrift erhalten: {0} ähnelt.
/// </summary>
public static string Sie_haben_ein_Dokument_zur_Unterschrift_erhalten___0_ {
get {

View File

@@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -13,12 +13,12 @@ namespace My.Resources {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
@@ -33,7 +33,7 @@ namespace My.Resources {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
@@ -47,8 +47,8 @@ namespace My.Resources {
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
@@ -61,7 +61,16 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Bitte wählen Sie die PDF-Dokumente die Sie verketten möchten:.
/// Sucht eine lokalisierte Zeichenfolge, die Der Zugangs Code wurde erfolgreich an [@Mail] versendet! ähnelt.
/// </summary>
public static string AccessCode_manually_send {
get {
return ResourceManager.GetString("AccessCode manually send", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Bitte wählen Sie die PDF-Dokumente die Sie verketten möchten: ähnelt.
/// </summary>
public static string Dialog_Concat_PDF {
get {
@@ -70,7 +79,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Wollen Sie diesen Umschlag wirklich zurückrufen/löschen?.
/// Sucht eine lokalisierte Zeichenfolge, die Wollen Sie diesen Umschlag wirklich zurückrufen/löschen? ähnelt.
/// </summary>
public static string Do_you_really_want_to_delete_this_envelope {
get {
@@ -79,7 +88,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Wollen Sie dieses Dokument wirklich entfernen?.
/// Sucht eine lokalisierte Zeichenfolge, die Wollen Sie dieses Dokument wirklich entfernen? ähnelt.
/// </summary>
public static string Do_you_really_want_to_remove_this_document {
get {
@@ -88,7 +97,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Wollen Sie den ausgewählten Empfänger löschen?.
/// Sucht eine lokalisierte Zeichenfolge, die Wollen Sie den ausgewählten Empfänger löschen? ähnelt.
/// </summary>
public static string Do_you_want_to_delete_the_selected_recipient {
get {
@@ -97,7 +106,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Wollen Sie die Signatur löschen?.
/// Sucht eine lokalisierte Zeichenfolge, die Wollen Sie die Signatur löschen? ähnelt.
/// </summary>
public static string Do_you_want_to_delete_the_signature {
get {
@@ -106,7 +115,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Wollen Sie den Signaturprozess nun starten?.
/// Sucht eine lokalisierte Zeichenfolge, die Wollen Sie den Signaturprozess nun starten? ähnelt.
/// </summary>
public static string Do_you_want_to_start_the_signature_process_now {
get {
@@ -115,7 +124,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Das Dokument konnte nicht geöffnet werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Das Dokument konnte nicht geöffnet werden! ähnelt.
/// </summary>
public static string Document_could_not_be_opened {
get {
@@ -124,7 +133,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Dokument konnte nicht gespeichert werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Dokument konnte nicht gespeichert werden! ähnelt.
/// </summary>
public static string Document_Could_Not_Be_Saved {
get {
@@ -133,7 +142,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag an Empfänger {0} weitergeleitet..
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag an Empfänger {0} weitergeleitet. ähnelt.
/// </summary>
public static string Document_forwarded {
get {
@@ -142,7 +151,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Aktuell ist per Drag and Drop nur eine PDF-Datei erlaubt..
/// Sucht eine lokalisierte Zeichenfolge, die Aktuell ist per Drag and Drop nur eine PDF-Datei erlaubt. ähnelt.
/// </summary>
public static string Drop_only_one_file {
get {
@@ -151,7 +160,16 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Bearbeite Umschlag.
/// Sucht eine lokalisierte Zeichenfolge, die Aktuell sind per Drag and Drop nur PDF-Dateien erlaubt. ähnelt.
/// </summary>
public static string Drop_only_pdf {
get {
return ResourceManager.GetString("Drop only pdf", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Bearbeite Umschlag ähnelt.
/// </summary>
public static string Edit_Envelope {
get {
@@ -160,7 +178,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signatur-Elemente konnten nicht geladen werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Signatur-Elemente konnten nicht geladen werden! ähnelt.
/// </summary>
public static string Elements_could_not_be_loaded {
get {
@@ -169,7 +187,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signatur-Elemente konnten nicht gespeichert werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Signatur-Elemente konnten nicht gespeichert werden! ähnelt.
/// </summary>
public static string Elements_could_not_be_saved {
get {
@@ -178,7 +196,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Der Umschlag wurde bereits versendet!.
/// Sucht eine lokalisierte Zeichenfolge, die Der Umschlag wurde bereits versendet! ähnelt.
/// </summary>
public static string Envelope_already_sent {
get {
@@ -187,7 +205,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag konnte nicht gesendet werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag konnte nicht gesendet werden! ähnelt.
/// </summary>
public static string Envelope_could_not_be_sent {
get {
@@ -196,7 +214,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag-Editor.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag-Editor ähnelt.
/// </summary>
public static string Envelope_Editor {
get {
@@ -205,7 +223,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Die Einladungen zum Signieren wurden zum Versand eingereiht..
/// Sucht eine lokalisierte Zeichenfolge, die Die Einladungen zum Signieren wurden zum Versand eingereiht. ähnelt.
/// </summary>
public static string Envelope_Invitations_Sent {
get {
@@ -214,7 +232,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Übersicht.
/// Sucht eine lokalisierte Zeichenfolge, die Übersicht ähnelt.
/// </summary>
public static string Envelope_Overview {
get {
@@ -223,7 +241,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Die Einladungen wurden erfolgreich zum Versand bereitgestellt..
/// Sucht eine lokalisierte Zeichenfolge, die Die Einladungen wurden erfolgreich zum Versand bereitgestellt. ähnelt.
/// </summary>
public static string Envelope_successfully_sent {
get {
@@ -232,7 +250,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Die Email-Adresse [ @Mail ] konnte nicht validiert werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Die Email-Adresse [ @Mail ] konnte nicht validiert werden! ähnelt.
/// </summary>
public static string Error_email_Validation {
get {
@@ -241,8 +259,8 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to The mobile phone number [@PhoneNr] could not be validated.
///Pattern: +491234567890.
/// Sucht eine lokalisierte Zeichenfolge, die Die Mobiltelefonnummer [@PhoneNr] konnte nicht validiert werden.
///Muster: +491234567890 ähnelt.
/// </summary>
public static string Error_phone_Validation {
get {
@@ -251,7 +269,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehler beim Senden des Umschlags:.
/// Sucht eine lokalisierte Zeichenfolge, die Fehler beim Senden des Umschlags: ähnelt.
/// </summary>
public static string Error_sending_the_envelope {
get {
@@ -260,7 +278,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehler beim Speichern des Umschlags!.
/// Sucht eine lokalisierte Zeichenfolge, die Fehler beim Speichern des Umschlags! ähnelt.
/// </summary>
public static string Error_when_saving_the_envelope {
get {
@@ -269,7 +287,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehler beim Speichern der Empfänger!.
/// Sucht eine lokalisierte Zeichenfolge, die Fehler beim Speichern der Empfänger! ähnelt.
/// </summary>
public static string Error_when_saving_the_recipients {
get {
@@ -278,7 +296,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehler bei der Validierung des Umschlags:.
/// Sucht eine lokalisierte Zeichenfolge, die Fehler bei der Validierung des Umschlags: ähnelt.
/// </summary>
public static string Error_when_validating_the_envelope {
get {
@@ -287,7 +305,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehler beim Speichern des Umschlags: .
/// Sucht eine lokalisierte Zeichenfolge, die Fehler beim Speichern des Umschlags: ähnelt.
/// </summary>
public static string Errors_when_saving_the_envelope {
get {
@@ -296,7 +314,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Mindestens ein Empfänger hat keine Anrede oder keine Email Adresse..
/// Sucht eine lokalisierte Zeichenfolge, die Mindestens ein Empfänger hat keine Anrede oder keine Email Adresse. ähnelt.
/// </summary>
public static string Incomplete_Receivers {
get {
@@ -305,7 +323,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Empfänger {0} hat keine gültige Email Addresse..
/// Sucht eine lokalisierte Zeichenfolge, die Empfänger {0} hat keine gültige Email Addresse. ähnelt.
/// </summary>
public static string Invalid_Email_Address {
get {
@@ -314,7 +332,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Die Einladung an [@Mail] wurde nochmal versendet!.
/// Sucht eine lokalisierte Zeichenfolge, die Die Einladung an [@Mail] wurde nochmal versendet! ähnelt.
/// </summary>
public static string Invitation_successfully_resend {
get {
@@ -323,7 +341,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehlendes Dokument.
/// Sucht eine lokalisierte Zeichenfolge, die Fehlendes Dokument ähnelt.
/// </summary>
public static string Missing_Documents {
get {
@@ -332,7 +350,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Es muss mindestens ein Signaturfeld gesetzt werden..
/// Sucht eine lokalisierte Zeichenfolge, die Es muss mindestens ein Signaturfeld gesetzt werden. ähnelt.
/// </summary>
public static string Missing_Elements {
get {
@@ -341,7 +359,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Für den Empfänger {0} gibt es noch kein Signaturfeld..
/// Sucht eine lokalisierte Zeichenfolge, die Für den Empfänger {0} gibt es noch kein Signaturfeld. ähnelt.
/// </summary>
public static string Missing_Elements_for_Receiver {
get {
@@ -350,7 +368,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehlende Nachricht.
/// Sucht eine lokalisierte Zeichenfolge, die Fehlende Nachricht ähnelt.
/// </summary>
public static string Missing_Message {
get {
@@ -359,7 +377,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fehlende Empfänger.
/// Sucht eine lokalisierte Zeichenfolge, die Fehlende Empfänger ähnelt.
/// </summary>
public static string Missing_Receivers {
get {
@@ -368,7 +386,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to .
/// Sucht eine lokalisierte Zeichenfolge, die Not translated ähnelt.
/// </summary>
public static string ModificationOriginFile_FormFields {
get {
@@ -377,7 +395,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Neuer Umschlag.
/// Sucht eine lokalisierte Zeichenfolge, die Neuer Umschlag ähnelt.
/// </summary>
public static string New_Envelope {
get {
@@ -386,7 +404,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Es ist nur eine Datei zulässig!.
/// Sucht eine lokalisierte Zeichenfolge, die Es ist nur eine Datei zulässig! ähnelt.
/// </summary>
public static string Only_one_file_is_allowed {
get {
@@ -395,7 +413,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Bitte lesen und unterzeichnen Sie dieses Dokument..
/// Sucht eine lokalisierte Zeichenfolge, die Bitte lesen und unterzeichnen Sie dieses Dokument. ähnelt.
/// </summary>
public static string Please_read_and_sign_this_document {
get {
@@ -404,7 +422,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Bitte wählen Sie einen Empfänger aus dem Reiter Empfänger aus..
/// Sucht eine lokalisierte Zeichenfolge, die Bitte wählen Sie einen Empfänger aus dem Reiter Empfänger aus. ähnelt.
/// </summary>
public static string Please_select_a_recipient_from_the_Recipients_tab {
get {
@@ -413,7 +431,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Empfänger konnte nicht gelöscht werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Empfänger konnte nicht gelöscht werden! ähnelt.
/// </summary>
public static string Recipient_could_not_be_deleted {
get {
@@ -422,7 +440,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Soll der Umschlag gespeichert werden?.
/// Sucht eine lokalisierte Zeichenfolge, die Soll der Umschlag gespeichert werden? ähnelt.
/// </summary>
public static string Should_The_Envelope_Be_Saved {
get {
@@ -431,7 +449,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Platzhalter Signatur.
/// Sucht eine lokalisierte Zeichenfolge, die Platzhalter Signatur ähnelt.
/// </summary>
public static string Signature {
get {
@@ -440,7 +458,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signatur-Editor.
/// Sucht eine lokalisierte Zeichenfolge, die Signatur-Editor ähnelt.
/// </summary>
public static string Signature_Editor {
get {
@@ -449,7 +467,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Der Umschlag konnte nicht gelöscht werden!.
/// Sucht eine lokalisierte Zeichenfolge, die Der Umschlag konnte nicht gelöscht werden! ähnelt.
/// </summary>
public static string The_envelope_could_not_be_deleted {
get {
@@ -458,7 +476,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Der Umschlag enthält keine Dokumente.
/// Sucht eine lokalisierte Zeichenfolge, die Der Umschlag enthält keine Dokumente ähnelt.
/// </summary>
public static string The_envelope_does_not_contain_any_documents {
get {
@@ -467,7 +485,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Es gibt für diesen Empfänger bereits Elemente. Wollen Sie den Empfänger trotzdem löschen?.
/// Sucht eine lokalisierte Zeichenfolge, die Es gibt für diesen Empfänger bereits Elemente. Wollen Sie den Empfänger trotzdem löschen? ähnelt.
/// </summary>
public static string There_are_already_elements_for_this_recipient {
get {
@@ -476,7 +494,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Es sind ungespeicherte Änderungen vorhanden. Wollen Sie diese Speichern?.
/// Sucht eine lokalisierte Zeichenfolge, die Es sind ungespeicherte Änderungen vorhanden. Wollen Sie diese speichern? ähnelt.
/// </summary>
public static string There_are_unsaved_changes {
get {
@@ -485,7 +503,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Sie haben ein Dokument zum signieren erhalten:.
/// Sucht eine lokalisierte Zeichenfolge, die Sie haben ein Dokument zum signieren erhalten: ähnelt.
/// </summary>
public static string You_received_a_document_to_sign {
get {

View File

@@ -147,9 +147,6 @@
<data name="Drop only one file" xml:space="preserve">
<value>Currently, only one PDF file is permitted via drag and drop.</value>
</data>
<data name="Drop only pdf" xml:space="preserve">
<value />
</data>
<data name="Edit Envelope" xml:space="preserve">
<value>Edit Envelope</value>
</data>
@@ -181,7 +178,8 @@
<value>The email [ @Mail ] could not be varified!</value>
</data>
<data name="Error phone Validation" xml:space="preserve">
<value />
<value>The mobile phone number [@PhoneNr] could not be validated.
Pattern: +491234567890</value>
</data>
<data name="Error sending the envelope" xml:space="preserve">
<value>Error sending the envelope:</value>
@@ -222,6 +220,9 @@
<data name="Missing Receivers" xml:space="preserve">
<value>Missing Receivers</value>
</data>
<data name="ModificationOriginFile_FormFields" xml:space="preserve">
<value>Not translated</value>
</data>
<data name="New Envelope" xml:space="preserve">
<value>New Envelope</value>
</data>
@@ -255,10 +256,16 @@
<data name="There are already elements for this recipient" xml:space="preserve">
<value>There are already elements for this recipient. Do you still want to delete the recipient?</value>
</data>
<data name="There are unsaved changes." xml:space="preserve">
<data name="There are unsaved changes" xml:space="preserve">
<value>There are unsaved changes. Do you want to save them?</value>
</data>
<data name="You received a document to sign" xml:space="preserve">
<value>You received a document to sign:</value>
</data>
<data name="Drop only pdf" xml:space="preserve">
<value>Currently, only PDF files are allowed via drag and drop.</value>
</data>
<data name="AccessCode manually send" xml:space="preserve">
<value>The access code was successfully sent to [@Mail]!</value>
</data>
</root>

View File

@@ -178,8 +178,8 @@
<value>Die Email-Adresse [ @Mail ] konnte nicht validiert werden!</value>
</data>
<data name="Error phone Validation" xml:space="preserve">
<value>The mobile phone number [@PhoneNr] could not be validated.
Pattern: +491234567890</value>
<value>Die Mobiltelefonnummer [@PhoneNr] konnte nicht validiert werden.
Muster: +491234567890</value>
</data>
<data name="Error sending the envelope" xml:space="preserve">
<value>Fehler beim Senden des Umschlags:</value>
@@ -221,7 +221,7 @@ Pattern: +491234567890</value>
<value>Fehlende Empfänger</value>
</data>
<data name="ModificationOriginFile_FormFields" xml:space="preserve">
<value />
<value>Not translated</value>
</data>
<data name="New Envelope" xml:space="preserve">
<value>Neuer Umschlag</value>
@@ -257,9 +257,15 @@ Pattern: +491234567890</value>
<value>Es gibt für diesen Empfänger bereits Elemente. Wollen Sie den Empfänger trotzdem löschen?</value>
</data>
<data name="There are unsaved changes" xml:space="preserve">
<value>Es sind ungespeicherte Änderungen vorhanden. Wollen Sie diese Speichern?</value>
<value>Es sind ungespeicherte Änderungen vorhanden. Wollen Sie diese speichern?</value>
</data>
<data name="You received a document to sign" xml:space="preserve">
<value>Sie haben ein Dokument zum signieren erhalten:</value>
</data>
<data name="Drop only pdf" xml:space="preserve">
<value>Aktuell sind per Drag and Drop nur PDF-Dateien erlaubt.</value>
</data>
<data name="AccessCode manually send" xml:space="preserve">
<value>Der Zugangs Code wurde erfolgreich an [@Mail] versendet!</value>
</data>
</root>

View File

@@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -13,12 +13,12 @@ namespace My.Resources {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
@@ -33,7 +33,7 @@ namespace My.Resources {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
@@ -47,8 +47,8 @@ namespace My.Resources {
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
@@ -61,7 +61,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Zugriffscode korrekt eingegeben.
/// Sucht eine lokalisierte Zeichenfolge, die Zugriffscode korrekt eingegeben ähnelt.
/// </summary>
public static string AccessCodeCorrect {
get {
@@ -70,7 +70,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Zugriffscode falsch eingegeben.
/// Sucht eine lokalisierte Zeichenfolge, die Zugriffscode falsch eingegeben ähnelt.
/// </summary>
public static string AccessCodeIncorrect {
get {
@@ -79,7 +79,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Zugriffscode angefordert.
/// Sucht eine lokalisierte Zeichenfolge, die Zugriffscode angefordert ähnelt.
/// </summary>
public static string AccessCodeRequested {
get {
@@ -88,7 +88,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Fortgeschrittene Elektronische Signatur.
/// Sucht eine lokalisierte Zeichenfolge, die Fortgeschrittene Elektronische Signatur ähnelt.
/// </summary>
public static string AdvancedElectronicSignature {
get {
@@ -97,7 +97,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Abgeschlossen.
/// Sucht eine lokalisierte Zeichenfolge, die Abgeschlossen ähnelt.
/// </summary>
public static string Completed {
get {
@@ -106,7 +106,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Vollständig Signiert.
/// Sucht eine lokalisierte Zeichenfolge, die Vollständig Signiert ähnelt.
/// </summary>
public static string CompletelySigned {
get {
@@ -115,7 +115,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Vertrag.
/// Sucht eine lokalisierte Zeichenfolge, die Vertrag ähnelt.
/// </summary>
public static string Contract {
get {
@@ -124,7 +124,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Erstellt.
/// Sucht eine lokalisierte Zeichenfolge, die Erstellt ähnelt.
/// </summary>
public static string Created {
get {
@@ -133,7 +133,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Dokument Rotation geändert.
/// Sucht eine lokalisierte Zeichenfolge, die Dokument Rotation geändert ähnelt.
/// </summary>
public static string DocumentMod_Rotation {
get {
@@ -142,7 +142,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Dokument geöffnet.
/// Sucht eine lokalisierte Zeichenfolge, die Dokument geöffnet ähnelt.
/// </summary>
public static string DocumentOpened {
get {
@@ -151,7 +151,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Unterzeichnung abgelehnt.
/// Sucht eine lokalisierte Zeichenfolge, die Unterzeichnung abgelehnt ähnelt.
/// </summary>
public static string DocumentRejected {
get {
@@ -160,7 +160,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Dokument unterzeichnet.
/// Sucht eine lokalisierte Zeichenfolge, die Dokument unterzeichnet ähnelt.
/// </summary>
public static string DocumentSigned {
get {
@@ -169,7 +169,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Entwurf.
/// Sucht eine lokalisierte Zeichenfolge, die Entwurf ähnelt.
/// </summary>
public static string Draft {
get {
@@ -178,7 +178,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Archiviert.
/// Sucht eine lokalisierte Zeichenfolge, die Archiviert ähnelt.
/// </summary>
public static string EnvelopeArchived {
get {
@@ -187,7 +187,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Vollständig signiert.
/// Sucht eine lokalisierte Zeichenfolge, die Vollständig signiert ähnelt.
/// </summary>
public static string EnvelopeCompletelySigned {
get {
@@ -196,7 +196,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag Erstellt.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag Erstellt ähnelt.
/// </summary>
public static string EnvelopeCreated {
get {
@@ -205,7 +205,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag Gelöscht.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag Gelöscht ähnelt.
/// </summary>
public static string EnvelopeDeleted {
get {
@@ -214,7 +214,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Teil-Signiert.
/// Sucht eine lokalisierte Zeichenfolge, die Teil-Signiert ähnelt.
/// </summary>
public static string EnvelopePartlySigned {
get {
@@ -223,7 +223,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag in Queue.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag in Queue ähnelt.
/// </summary>
public static string EnvelopeQueued {
get {
@@ -232,7 +232,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag abgelehnt.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag abgelehnt ähnelt.
/// </summary>
public static string EnvelopeRejected {
get {
@@ -241,7 +241,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signierungszertifikat erstellt.
/// Sucht eine lokalisierte Zeichenfolge, die Signierungszertifikat erstellt ähnelt.
/// </summary>
public static string EnvelopeReportCreated {
get {
@@ -250,7 +250,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Gespeichert.
/// Sucht eine lokalisierte Zeichenfolge, die Gespeichert ähnelt.
/// </summary>
public static string EnvelopeSaved {
get {
@@ -259,7 +259,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Gesendet.
/// Sucht eine lokalisierte Zeichenfolge, die Gesendet ähnelt.
/// </summary>
public static string EnvelopeSent {
get {
@@ -268,7 +268,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Umschlag zurückgezogen.
/// Sucht eine lokalisierte Zeichenfolge, die Umschlag zurückgezogen ähnelt.
/// </summary>
public static string EnvelopeWithdrawn {
get {
@@ -277,7 +277,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Zugriffscode versendet.
/// Sucht eine lokalisierte Zeichenfolge, die Zugriffscode versendet ähnelt.
/// </summary>
public static string MessageAccessCodeSent {
get {
@@ -286,7 +286,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Abschlussemail versendet.
/// Sucht eine lokalisierte Zeichenfolge, die Abschlussemail versendet ähnelt.
/// </summary>
public static string MessageCompletionSent {
get {
@@ -295,7 +295,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signaturbestätigung versendet.
/// Sucht eine lokalisierte Zeichenfolge, die Signaturbestätigung versendet ähnelt.
/// </summary>
public static string MessageConfirmationSent {
get {
@@ -304,7 +304,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Löschinformation versendet.
/// Sucht eine lokalisierte Zeichenfolge, die Löschinformation versendet ähnelt.
/// </summary>
public static string MessageDeletionSent {
get {
@@ -313,7 +313,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Dokumentenlink versendet.
/// Sucht eine lokalisierte Zeichenfolge, die Dokumentenlink versendet ähnelt.
/// </summary>
public static string MessageInvitationSent {
get {
@@ -322,7 +322,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Nein.
/// Sucht eine lokalisierte Zeichenfolge, die Nein ähnelt.
/// </summary>
public static string No {
get {
@@ -331,7 +331,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Teil-Signiert.
/// Sucht eine lokalisierte Zeichenfolge, die Teil-Signiert ähnelt.
/// </summary>
public static string PartlySigned {
get {
@@ -340,7 +340,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Qualifizierte Signatur.
/// Sucht eine lokalisierte Zeichenfolge, die Qualifizierte Signatur ähnelt.
/// </summary>
public static string QualifiedSignature {
get {
@@ -349,7 +349,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Arbeitsanweisung.
/// Sucht eine lokalisierte Zeichenfolge, die Arbeitsanweisung ähnelt.
/// </summary>
public static string ReadAndSign {
get {
@@ -358,7 +358,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Wollen Sie die 2-Faktor Definition für diesen Empfänger zurücksetzen. Der Empfänger muss sich dann neu identifizieren!.
/// Sucht eine lokalisierte Zeichenfolge, die Wollen Sie die 2-Faktor Definition für diesen Empfänger zurücksetzen. Der Empfänger muss sich dann neu identifizieren! ähnelt.
/// </summary>
public static string ResetTOTPUser {
get {
@@ -367,7 +367,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Gespeichert.
/// Sucht eine lokalisierte Zeichenfolge, die Gespeichert ähnelt.
/// </summary>
public static string Saved {
get {
@@ -376,7 +376,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Gesendet.
/// Sucht eine lokalisierte Zeichenfolge, die Gesendet ähnelt.
/// </summary>
public static string Sent {
get {
@@ -385,7 +385,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signatur.
/// Sucht eine lokalisierte Zeichenfolge, die Signatur ähnelt.
/// </summary>
public static string Signature {
get {
@@ -394,7 +394,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signatur bestätigt.
/// Sucht eine lokalisierte Zeichenfolge, die Signatur bestätigt ähnelt.
/// </summary>
public static string SignatureConfirmed {
get {
@@ -403,7 +403,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Signiert.
/// Sucht eine lokalisierte Zeichenfolge, die Signiert ähnelt.
/// </summary>
public static string Signed {
get {
@@ -412,7 +412,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Erfolgreich! Dialog wird geschlossen..
/// Sucht eine lokalisierte Zeichenfolge, die Erfolgreich! Dialog wird geschlossen. ähnelt.
/// </summary>
public static string Success_FormClose {
get {
@@ -421,7 +421,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Unsigniert.
/// Sucht eine lokalisierte Zeichenfolge, die Unsigniert ähnelt.
/// </summary>
public static string Unsigned {
get {
@@ -430,7 +430,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Ja.
/// Sucht eine lokalisierte Zeichenfolge, die Ja ähnelt.
/// </summary>
public static string Yes {
get {
@@ -439,7 +439,7 @@ namespace My.Resources {
}
/// <summary>
/// Looks up a localized string similar to Ja, mit Anhang.
/// Sucht eine lokalisierte Zeichenfolge, die Ja, mit Anhang ähnelt.
/// </summary>
public static string YesWithAttachment {
get {

View File

@@ -132,6 +132,9 @@
<data name="Completed" xml:space="preserve">
<value>Completed</value>
</data>
<data name="CompletelySigned" xml:space="preserve">
<value>Completely signed</value>
</data>
<data name="Contract" xml:space="preserve">
<value>Contract</value>
</data>

View File

@@ -101,6 +101,9 @@
<Reference Include="DigitalData.Modules.Messaging, Version=1.9.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\DigitalData.Modules.Messaging.1.9.8\lib\net462\DigitalData.Modules.Messaging.dll</HintPath>
</Reference>
<Reference Include="DigitalData.UserManager.Domain, Version=3.2.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UserManager.Domain.3.2.2\lib\net462\DigitalData.UserManager.Domain.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.3.2.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
@@ -238,6 +241,9 @@
<Reference Include="System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.9.0.0\lib\net462\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.ComponentModel.Annotations.4.7.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
@@ -245,6 +251,9 @@
<Reference Include="System.Data.Odbc, Version=6.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.Odbc.6.0.1\lib\net461\System.Data.Odbc.dll</HintPath>
</Reference>
<Reference Include="System.Drawing.Common, Version=4.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Drawing.Common.4.7.3\lib\net461\System.Drawing.Common.dll</HintPath>
</Reference>
<Reference Include="System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Formats.Asn1.9.0.0\lib\net462\System.Formats.Asn1.dll</HintPath>
</Reference>

View File

@@ -243,7 +243,7 @@ Partial Public Class frmFieldEditor
If oElement IsNot Nothing Then
oStickyNote.Tag = GetAnnotationTag(SelectedReceiver.Id, oPage, oElement.Id)
Else
MsgBox("No Element for Update found!")
'MsgBox("No Element for Update found!")
Logger.Error("No Element for Update found!")
End If
End If

View File

@@ -87,6 +87,7 @@ Partial Class frmMain
Me.ColHistoryDateCompleted = New DevExpress.XtraGrid.Columns.GridColumn()
Me.ViewCompleted = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.GridColumn3 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn6 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn4 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn5 = New DevExpress.XtraGrid.Columns.GridColumn()
Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn()
@@ -111,6 +112,8 @@ Partial Class frmMain
Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components)
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components)
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPageGroupReceiver = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerControl1.Panel1.SuspendLayout()
@@ -340,9 +343,9 @@ Partial Class frmMain
Me.RibbonControl.ExpandCollapseItem.Id = 0
Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer)
Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer)
Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.bbtnitm_ResendInvitation, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarStaticItemGhost, Me.bbtnitm2Faktor})
Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.bbtnitm_ResendInvitation, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarStaticItemGhost, Me.bbtnitm2Faktor, Me.BarButtonItem2})
resources.ApplyResources(Me.RibbonControl, "RibbonControl")
Me.RibbonControl.MaxItemId = 21
Me.RibbonControl.MaxItemId = 22
Me.RibbonControl.Name = "RibbonControl"
Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2})
Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
@@ -509,7 +512,7 @@ Partial Class frmMain
'
'RibbonPage1
'
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroupFunctions})
Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroupFunctions, Me.RibbonPageGroupReceiver})
Me.RibbonPage1.Name = "RibbonPage1"
resources.ApplyResources(Me.RibbonPage1, "RibbonPage1")
'
@@ -532,9 +535,6 @@ Partial Class frmMain
'RibbonPageGroupFunctions
'
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnShowDocument)
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitm_ResendInvitation)
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnContactReceiver)
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitm2Faktor)
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmEB)
Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmInfoMail)
Me.RibbonPageGroupFunctions.Name = "RibbonPageGroupFunctions"
@@ -662,7 +662,7 @@ Partial Class frmMain
'
'ViewCompleted
'
Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7, Me.GridColumn1})
Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn6, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7, Me.GridColumn1})
Me.ViewCompleted.GridControl = Me.GridCompleted
Me.ViewCompleted.Name = "ViewCompleted"
Me.ViewCompleted.OptionsBehavior.Editable = False
@@ -676,6 +676,13 @@ Partial Class frmMain
Me.GridColumn3.FieldName = "EnvelopeTypeTitle"
Me.GridColumn3.Name = "GridColumn3"
'
'GridColumn6
'
resources.ApplyResources(Me.GridColumn6, "GridColumn6")
Me.GridColumn6.FieldName = "Comment"
Me.GridColumn6.MinWidth = 80
Me.GridColumn6.Name = "GridColumn6"
'
'GridColumn4
'
resources.ApplyResources(Me.GridColumn4, "GridColumn4")
@@ -841,6 +848,22 @@ Partial Class frmMain
'
Me.XtraSaveFileDialog1.FileName = "XtraSaveFileDialog1"
'
'BarButtonItem2
'
resources.ApplyResources(Me.BarButtonItem2, "BarButtonItem2")
Me.BarButtonItem2.Id = 21
Me.BarButtonItem2.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem2.Name = "BarButtonItem2"
'
'RibbonPageGroupReceiver
'
Me.RibbonPageGroupReceiver.ItemLinks.Add(Me.bbtnitm_ResendInvitation)
Me.RibbonPageGroupReceiver.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroupReceiver.ItemLinks.Add(Me.bbtnitm2Faktor)
Me.RibbonPageGroupReceiver.ItemLinks.Add(Me.btnContactReceiver)
Me.RibbonPageGroupReceiver.Name = "RibbonPageGroupReceiver"
resources.ApplyResources(Me.RibbonPageGroupReceiver, "RibbonPageGroupReceiver")
'
'frmMain
'
resources.ApplyResources(Me, "$this")
@@ -976,4 +999,7 @@ Partial Class frmMain
Friend WithEvents Label1 As Label
Friend WithEvents Button1 As Button
Friend WithEvents txtEnvID As TextBox
Friend WithEvents GridColumn6 As DevExpress.XtraGrid.Columns.GridColumn
Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents RibbonPageGroupReceiver As DevExpress.XtraBars.Ribbon.RibbonPageGroup
End Class

View File

@@ -746,7 +746,7 @@
</value>
</data>
<data name="bbtnitm_ResendInvitation.Caption" xml:space="preserve">
<value>Einladung erneut versenden</value>
<value>Einladung manuell versenden</value>
</data>
<data name="bbtnitm_ResendInvitation.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@@ -903,6 +903,28 @@
LjQsMjEuNiwxNCwxNiwxNCAgIGMtNi41LDAtMTAsNS4yLTEwLDljMCw0LDIuMSw2LjUsMi4yLDYuN0M4
LjQsMjkuOSw4LjcsMzAsOSwzMEM5LjIsMzAsOS41LDI5LjksOS43LDI5Ljh6IiBjbGFzcz0iQmxhY2si
IC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="BarButtonItem2.Caption" xml:space="preserve">
<value>AccessCode manuell versenden</value>
</data>
<data name="BarButtonItem2.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLlJlZHtmaWxsOiNEMTFD
MUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7Zmls
bDojNzI3MjcyO30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuNzU7fQo8L3N0eWxl
Pg0KICA8ZyBpZD0iTWFpbCI+DQogICAgPHBhdGggZD0iTTE2LDE4LjNsMTQtOFYyNWMwLDAuNS0wLjUs
MS0xLDFIM2MtMC41LDAtMS0wLjUtMS0xVjEwLjNMMTYsMTguM3ogTTI5LDZIM0MyLjUsNiwyLDYuNSwy
LDd2MWwxNCw4bDE0LThWNyAgIEMzMCw2LjUsMjkuNSw2LDI5LDZ6IiBjbGFzcz0iQmxhY2siIC8+DQog
IDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="RibbonControl.Location" type="System.Drawing.Point, System.Drawing">
@@ -917,6 +939,9 @@
<data name="RibbonPageGroupFunctions.Text" xml:space="preserve">
<value>Funktionen</value>
</data>
<data name="RibbonPageGroupReceiver.Text" xml:space="preserve">
<value>Empfänger</value>
</data>
<data name="RibbonPage1.Text" xml:space="preserve">
<value>Start</value>
</data>
@@ -1098,11 +1123,23 @@
<value>True</value>
</data>
<data name="GridColumn3.VisibleIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>3</value>
</data>
<data name="GridColumn3.Width" type="System.Int32, mscorlib">
<value>100</value>
</data>
<data name="GridColumn6.Caption" xml:space="preserve">
<value>Kommentar</value>
</data>
<data name="GridColumn6.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="GridColumn6.VisibleIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="GridColumn6.Width" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="GridColumn4.Caption" xml:space="preserve">
<value>Status</value>
</data>
@@ -1110,7 +1147,7 @@
<value>True</value>
</data>
<data name="GridColumn4.VisibleIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>2</value>
</data>
<data name="GridColumn4.Width" type="System.Int32, mscorlib">
<value>163</value>
@@ -1134,7 +1171,7 @@
<value>True</value>
</data>
<data name="GridColumn7.VisibleIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>4</value>
</data>
<data name="GridColumn7.Width" type="System.Int32, mscorlib">
<value>120</value>
@@ -1146,7 +1183,7 @@
<value>True</value>
</data>
<data name="GridColumn1.VisibleIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>5</value>
</data>
<data name="GridColumn1.Width" type="System.Int32, mscorlib">
<value>120</value>
@@ -2084,6 +2121,12 @@
<data name="&gt;&gt;GridColumn3.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;GridColumn6.Name" xml:space="preserve">
<value>GridColumn6</value>
</data>
<data name="&gt;&gt;GridColumn6.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;GridColumn4.Name" xml:space="preserve">
<value>GridColumn4</value>
</data>
@@ -2132,6 +2175,18 @@
<data name="&gt;&gt;XtraSaveFileDialog1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraSaveFileDialog, DevExpress.XtraDialogs.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;BarButtonItem2.Name" xml:space="preserve">
<value>BarButtonItem2</value>
</data>
<data name="&gt;&gt;BarButtonItem2.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RibbonPageGroupReceiver.Name" xml:space="preserve">
<value>RibbonPageGroupReceiver</value>
</data>
<data name="&gt;&gt;RibbonPageGroupReceiver.Type" xml:space="preserve">
<value>DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>frmMain</value>
</data>

View File

@@ -1,17 +1,19 @@
Imports System.IO
Imports System.ComponentModel
Imports System.IdentityModel.Metadata
Imports System.IO
Imports System.Text
Imports DevExpress.LookAndFeel
Imports DevExpress.Utils.Extensions
Imports DevExpress.XtraCharts
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraPrinting
Imports DevExpress.XtraSplashScreen
Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.CommonServices
Imports EnvelopeGenerator.CommonServices.My
Imports System.ComponentModel
Imports DevExpress.XtraPrinting
Imports EnvelopeGenerator.Domain.Entities
Public Class frmMain
@@ -25,6 +27,7 @@ Public Class frmMain
Private Controller As EnvelopeListController
Private myFileData As Byte()
Private myResFileData As Byte()
Private FormLoad As Boolean = True
Public Sub New(pState As State)
' Dieser Aufruf ist für den Designer erforderlich.
@@ -60,6 +63,10 @@ Public Class frmMain
XtraTabControlMain.TabPages(3).PageVisible = False
End If
LoadEnvelopeData()
Dim oXMLPath = Get_DocGrid_Layout_Filename(ViewEnvelopes.Name)
If File.Exists(oXMLPath) Then
ViewEnvelopes.RestoreLayoutFromXml(oXMLPath)
End If
End Sub
Private Sub LoadEnvelopeData()
@@ -216,6 +223,7 @@ Public Class frmMain
RibbonPageEnvelopeActions.Enabled = True
Select Case XtraTabControlMain.SelectedTabPageIndex
Case 1
RibbonPageGroupReceiver.Visible = False
btnEditEnvelope.Enabled = False
btnDeleteEnvelope.Enabled = False
btnContactReceiver.Enabled = False
@@ -225,7 +233,12 @@ Public Class frmMain
bbtnitmEB.Enabled = True
bbtnitm2Faktor.Enabled = False
LoadEnvelopeData()
Dim oXMLPath = Get_DocGrid_Layout_Filename(ViewCompleted.Name)
If File.Exists(oXMLPath) Then
ViewCompleted.RestoreLayoutFromXml(oXMLPath)
End If
Case 0
RibbonPageGroupReceiver.Visible = True
btnEditEnvelope.Enabled = True
btnDeleteEnvelope.Enabled = True
btnContactReceiver.Enabled = True
@@ -557,6 +570,7 @@ Public Class frmMain
MYUSER = oUser
End If
End If
FormLoad = False
End Sub
Private Sub bbtnitmInfoMail_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmInfoMail.ItemClick
@@ -594,31 +608,40 @@ Public Class frmMain
End Sub
Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitm_ResendInvitation.ItemClick
Dim oView As GridView = GridEnvelopes.FocusedView
Dim selReceiver As Receiver
If oView.Name = ViewReceivers.Name Then
selReceiver = oView.GetRow(oView.FocusedRowHandle)
Else
MsgBox(Resources.Envelope.Please_select_a_recipient_from_the_Recipients_tab, MsgBoxStyle.Information, Text)
End If
If ViewEnvelopes.FocusedRowHandle < 0 Or IsNothing(selReceiver) Then
Exit Sub
End If
Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(ViewEnvelopes.FocusedRowHandle)
Dim oController = New EnvelopeEditorController(State, oEnvelope)
Dim Documents As New BindingList(Of EnvelopeDocument)
Dim Receivers As New BindingList(Of Receiver)
Receivers = New BindingList(Of Receiver)(oController.Envelope.Receivers)
For Each oReceiver As Receiver In Receivers
If oReceiver.EmailAddress = selReceiver.EmailAddress Then
If oController.ActionService.ResendReceiver(oEnvelope, oReceiver) = True Then
Dim oMsg = Resources.Envelope.Invitation_successfully_resend.Replace("@Mail", oReceiver.EmailAddress)
MsgBox(oMsg, MsgBoxStyle.Information, Text)
End If
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
Dim oView As GridView = GridEnvelopes.FocusedView
Dim selReceiver As Receiver
If oView.Name = ViewReceivers.Name Then
selReceiver = oView.GetRow(oView.FocusedRowHandle)
Else
MsgBox(Resources.Envelope.Please_select_a_recipient_from_the_Recipients_tab, MsgBoxStyle.Information, Text)
End If
Next
If ViewEnvelopes.FocusedRowHandle < 0 Or IsNothing(selReceiver) Then
Exit Sub
End If
Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(ViewEnvelopes.FocusedRowHandle)
Dim oController = New EnvelopeEditorController(State, oEnvelope)
Dim Documents As New BindingList(Of EnvelopeDocument)
Dim Receivers As New BindingList(Of Receiver)
Receivers = New BindingList(Of Receiver)(oController.Envelope.Receivers)
For Each oReceiver As Receiver In Receivers
If oReceiver.EmailAddress = selReceiver.EmailAddress Then
If oController.ActionService.ResendReceiver(oEnvelope, oReceiver) = True Then
Dim oMsg = Resources.Envelope.Invitation_successfully_resend.Replace("@Mail", oReceiver.EmailAddress)
MsgBox(oMsg, MsgBoxStyle.Information, Text)
End If
End If
Next
Catch ex As Exception
Logger.Error(ex)
Finally
End Try
SplashScreenManager.CloseOverlayForm(oHandle)
End Sub
@@ -786,8 +809,11 @@ Public Class frmMain
If oDT.Rows.Count = 1 Then
Dim oTFA_REG_DL = oDT.Rows(0).Item("TFA_REG_DEADLINE")
Dim oTOTP = oDT.Rows(0).Item("TOTP_SECRET_KEY")
Dim oForm As New frm2Factor_Properties(oReceiver.EmailAddress, oTOTP, oTFA_REG_DL, DB_DD_ECM)
oForm.ShowDialog()
If Not IsDBNull(oTOTP) And Not IsDBNull(oTFA_REG_DL) Then
Dim oForm As New frm2Factor_Properties(oReceiver.EmailAddress, oTOTP.ToString, oTFA_REG_DL, DB_DD_ECM)
oForm.ShowDialog()
End If
End If
End If
@@ -829,4 +855,71 @@ Public Class frmMain
.DbConfig = Nothing
}
End Function
Private Sub BarButtonItem2_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
Dim oView As GridView = GridEnvelopes.FocusedView
Dim selReceiver As Receiver
If oView.Name = ViewReceivers.Name Then
selReceiver = oView.GetRow(oView.FocusedRowHandle)
Else
MsgBox(Resources.Envelope.Please_select_a_recipient_from_the_Recipients_tab, MsgBoxStyle.Information, Text)
End If
If ViewEnvelopes.FocusedRowHandle < 0 Or IsNothing(selReceiver) Then
Exit Sub
End If
Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(ViewEnvelopes.FocusedRowHandle)
If oEnvelope.UseAccessCode = True Then
Dim oController = New EnvelopeEditorController(State, oEnvelope)
Dim Documents As New BindingList(Of EnvelopeDocument)
Dim Receivers As New BindingList(Of Receiver)
Receivers = New BindingList(Of Receiver)(oController.Envelope.Receivers)
For Each oReceiver As Receiver In Receivers
If oReceiver.EmailAddress = selReceiver.EmailAddress Then
If oController.ActionService.ManuallySendAccessCode(oEnvelope, oReceiver) = True Then
Dim oMsg = Resources.Envelope.AccessCode_successfully_send.Replace("@Mail", oReceiver.EmailAddress)
MsgBox(oMsg, MsgBoxStyle.Information, Text)
End If
End If
Next
Else
MsgBox("Envelope is defined without AccessCode so far!", MsgBoxStyle.Information)
End If
Catch ex As Exception
Logger.Error(ex)
Finally
End Try
SplashScreenManager.CloseOverlayForm(oHandle)
End Sub
Private Sub ViewCompleted_Layout(sender As Object, e As EventArgs) Handles ViewCompleted.Layout
If FormLoad = True Then
Exit Sub
End If
Dim oXMLPath = Get_DocGrid_Layout_Filename(ViewCompleted.Name)
ViewCompleted.SaveLayoutToXml(oXMLPath)
bsitmInfo.Caption = "Grid Layout Envelopes Completed Saved"
End Sub
Private Sub ViewEnvelopes_Layout(sender As Object, e As EventArgs) Handles ViewEnvelopes.Layout
If FormLoad = True Then
Exit Sub
End If
Dim oXMLPath = Get_DocGrid_Layout_Filename(ViewEnvelopes.Name)
ViewEnvelopes.SaveLayoutToXml(oXMLPath)
bsitmInfo.Caption = "Grid Layout Envelopes Saved"
End Sub
Private Function Get_DocGrid_Layout_Filename(pGridViewName As String)
Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)")
Dim Filename As String = String.Format("{0}_UserLayout.xml", pGridViewName)
Dim oGridlayoutFullFilename = System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
Return oGridlayoutFullFilename
End Function
End Class

View File

@@ -35,7 +35,9 @@
<package id="System.Buffers" version="4.6.0" targetFramework="net462" />
<package id="System.CodeDom" version="9.0.0" targetFramework="net462" />
<package id="System.Collections.Immutable" version="9.0.0" targetFramework="net462" />
<package id="System.ComponentModel.Annotations" version="4.7.0" targetFramework="net462" />
<package id="System.Data.Odbc" version="6.0.1" targetFramework="net462" />
<package id="System.Drawing.Common" version="4.7.3" targetFramework="net462" />
<package id="System.Formats.Asn1" version="9.0.0" targetFramework="net462" />
<package id="System.IO.Packaging" version="9.0.0" targetFramework="net462" />
<package id="System.IO.Pipelines" version="9.0.0" targetFramework="net462" />
@@ -48,4 +50,5 @@
<package id="System.Text.Json" version="9.0.0" targetFramework="net462" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" />
<package id="UserManager.Domain" version="3.2.2" targetFramework="net462" />
</packages>

View File

@@ -16,6 +16,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers;
public partial class AuthController : ControllerBase
{
private readonly ILogger<AuthController> _logger;
[Obsolete("Use MediatR")]
private readonly IUserService _userService;
private readonly IDirectorySearchService _dirSearchService;
@@ -25,6 +26,7 @@ public partial class AuthController : ControllerBase
/// <param name="logger">The logger instance.</param>
/// <param name="userService">The user service instance.</param>
/// <param name="dirSearchService">The directory search service instance.</param>
[Obsolete("Use MediatR")]
public AuthController(ILogger<AuthController> logger, IUserService userService, IDirectorySearchService dirSearchService)
{
_logger = logger;

View File

@@ -27,6 +27,7 @@ public class EmailTemplateController : ControllerBase
private readonly IMapper _mapper;
[Obsolete("Use IRepository")]
private readonly IEmailTemplateRepository _repository;
private readonly IMediator _mediator;
@@ -38,6 +39,7 @@ public class EmailTemplateController : ControllerBase
/// <param name="repository">
/// Die AutoMapper-Instanz, die zum Zuordnen von Objekten verwendet wird.
/// </param>
[Obsolete("Use IRepository")]
public EmailTemplateController(IMapper mapper, IEmailTemplateRepository repository, ILogger<EmailTemplateController> logger, IMediator mediator)
{
_mapper = mapper;
@@ -115,4 +117,4 @@ public class EmailTemplateController : ControllerBase
return Ok();
}
}
}
}

View File

@@ -1,4 +1,4 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.Envelopes.Commands;
using EnvelopeGenerator.Application.Envelopes.Queries.Read;
@@ -6,8 +6,6 @@ using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
@@ -31,6 +29,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers;
public class EnvelopeController : ControllerBase
{
private readonly ILogger<EnvelopeController> _logger;
[Obsolete("Use MediatR")]
private readonly IEnvelopeService _envelopeService;
private readonly IMediator _mediator;
@@ -40,6 +39,7 @@ public class EnvelopeController : ControllerBase
/// <param name="logger">Der Logger, der für das Protokollieren von Informationen verwendet wird.</param>
/// <param name="envelopeService">Der Dienst, der für die Verarbeitung von Umschlägen zuständig ist.</param>
/// <param name="mediator"></param>
[Obsolete("Use MediatR")]
public EnvelopeController(ILogger<EnvelopeController> logger, IEnvelopeService envelopeService, IMediator mediator)
{
_logger = logger;
@@ -59,6 +59,7 @@ public class EnvelopeController : ControllerBase
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
[Authorize]
[HttpGet]
[Obsolete("Use MediatR")]
public async Task<IActionResult> GetAsync([FromQuery] ReadEnvelopeQuery envelope)
{
if (User.GetId() is int intId)
@@ -98,6 +99,7 @@ public class EnvelopeController : ControllerBase
/// <response code="404">Das Dokument wurde nicht gefunden oder ist nicht verfügbar.</response>
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
[HttpGet("doc-result")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> GetDocResultAsync([FromQuery] int id, [FromQuery] bool view = false)
{
if (User.GetId() is int intId)
@@ -154,4 +156,4 @@ public class EnvelopeController : ControllerBase
else
return Ok(res);
}
}
}

View File

@@ -1,5 +1,5 @@
using AutoMapper;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.Contracts.SQLExecutor;
using EnvelopeGenerator.Application.DTOs.Receiver;
@@ -31,6 +31,7 @@ public class EnvelopeReceiverController : ControllerBase
{
private readonly ILogger<EnvelopeReceiverController> _logger;
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverService _erService;
private readonly IMediator _mediator;
@@ -56,6 +57,7 @@ public class EnvelopeReceiverController : ControllerBase
/// <param name="erExecutor"></param>
/// <param name="documentExecutor"></param>
/// <param name="csOpt"></param>
[Obsolete("Use MediatR")]
public EnvelopeReceiverController(ILogger<EnvelopeReceiverController> logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator, IMapper mapper, IEnvelopeExecutor envelopeExecutor, IEnvelopeReceiverExecutor erExecutor, IDocumentExecutor documentExecutor, IOptions<ConnectionString> csOpt)
{
_logger = logger;
@@ -82,6 +84,7 @@ public class EnvelopeReceiverController : ControllerBase
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
[Authorize]
[HttpGet]
[Obsolete("Use MediatR")]
public async Task<IActionResult> GetEnvelopeReceiver([FromQuery] ReadEnvelopeReceiverQuery envelopeReceiver)
{
var username = User.GetUsernameOrDefault();
@@ -123,6 +126,7 @@ public class EnvelopeReceiverController : ControllerBase
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
[Authorize]
[HttpGet("salute")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> GetReceiverName([FromQuery] ReadReceiverNameQuery receiver)
{
return await _erService.ReadLastUsedReceiverNameByMailAsync(receiver.EmailAddress, receiver.Id, receiver.Signature).ThenAsync(

View File

@@ -1,23 +1,39 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using Microsoft.AspNetCore.Mvc;
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
/// <summary>
///
/// </summary>
[ApiExplorerSettings(IgnoreApi = true)]
[Route("api/[controller]")]
[ApiController]
public class EnvelopeTypeController : ControllerBase
{
private readonly ILogger<EnvelopeTypeController> _logger;
[Obsolete("Use MediatR")]
private readonly IEnvelopeTypeService _service;
/// <summary>
///
/// </summary>
/// <param name="logger"></param>
/// <param name="service"></param>
[Obsolete("Use MediatR")]
public EnvelopeTypeController(ILogger<EnvelopeTypeController> logger, IEnvelopeTypeService service)
{
_logger = logger;
_service = service;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[Obsolete("Use MediatR")]
[HttpGet]
public async Task<IActionResult> GetAllAsync()
{

View File

@@ -1,5 +1,5 @@
using DigitalData.Core.API;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.Core.API;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs.Receiver;
using EnvelopeGenerator.Application.Receivers.Queries.Read;
@@ -19,6 +19,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers;
[Route("api/[controller]")]
[ApiController]
[Authorize]
[Obsolete("Use MediatR")]
public class ReceiverController : CRUDControllerBaseWithErrorHandling<IReceiverService, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
{
/// <summary>
@@ -94,4 +95,4 @@ public class ReceiverController : CRUDControllerBaseWithErrorHandling<IReceiverS
return base.GetById(id);
}
#endregion
}
}

View File

@@ -22,7 +22,7 @@
<PackageReference Include="DigitalData.Auth.Client" Version="1.3.7" />
<PackageReference Include="DigitalData.Core.API" Version="2.2.1" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.6" />
<PackageReference Include="NLog" Version="5.2.5" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.0" />
<PackageReference Include="Scalar.AspNetCore" Version="2.2.1" />

View File

@@ -40,7 +40,7 @@ try
builder.Services.AddControllers();
//CORS Policy
// CORS Policy
var allowedOrigins = config.GetSection("AllowedOrigins").Get<string[]>() ??
throw new InvalidOperationException("AllowedOrigins section is missing in the configuration.");
builder.Services.AddCors(options =>
@@ -93,7 +93,7 @@ try
Id = "Bearer"
}
},
new string[] {}
Array.Empty<string>()
}
});
@@ -104,8 +104,12 @@ try
}
});
builder.Services.AddOpenApi();
// DbContext
var connStr = config.GetConnectionString("Default") ?? throw new InvalidOperationException("There is no default connection string in appsettings.json.");
//AddEF Core dbcontext
var useDbMigration = Environment.GetEnvironmentVariable("MIGRATION_TEST_MODE") == true.ToString() || config.GetValue<bool>("UseDbMigration");
var cnnStrName = useDbMigration ? "DbMigrationTest" : "Default";
var connStr = config.GetConnectionString(cnnStrName)
?? throw new InvalidOperationException($"Connection string '{cnnStrName}' is missing in the application configuration.");
builder.Services.Configure<ConnectionString>(cs => cs.Value = connStr);
@@ -129,7 +133,7 @@ try
{
var clientParams = deferredProvider.GetOptions<ClientParams>();
var publicKey = clientParams!.PublicKeys.Get(authTokenKeys.Issuer, authTokenKeys.Audience);
return new List<SecurityKey>() { publicKey.SecurityKey };
return [publicKey.SecurityKey];
},
ValidateIssuer = true,
ValidIssuer = authTokenKeys.Issuer,
@@ -167,7 +171,9 @@ try
});
// User manager
#pragma warning disable CS0618 // Type or member is obsolete
builder.Services.AddUserManager<EGDbContext>();
#pragma warning restore CS0618 // Type or member is obsolete
// LDAP
builder.ConfigureBySection<DirectorySearchOptions>();
@@ -177,9 +183,11 @@ try
builder.Services.AddCookieBasedLocalizer();
// Envelope generator serives
#pragma warning disable CS0618 // Type or member is obsolete
builder.Services
.AddEnvelopeGeneratorInfrastructureServices(sqlExecutorConfigureOptions: executor => executor.ConnectionString = connStr)
.AddEnvelopeGeneratorServices(config);
#pragma warning restore CS0618 // Type or member is obsolete
var app = builder.Build();
@@ -201,10 +209,10 @@ try
app.UseCors("AllowSpecificOriginsPolicy");
// Localizer
string[] supportedCultureNames = { "de-DE", "en-US" };
IList<CultureInfo> list = supportedCultureNames.Select((string cn) => new CultureInfo(cn)).ToList();
CultureInfo cultureInfo = list.FirstOrDefault() ?? throw new ArgumentNullException("supportedCultureNames", "Supported cultures cannot be empty.");
RequestLocalizationOptions requestLocalizationOptions = new RequestLocalizationOptions
string[] supportedCultureNames = ["de-DE", "en-US"];
IList<CultureInfo> list = [.. supportedCultureNames.Select(cn => new CultureInfo(cn))];
var cultureInfo = list.FirstOrDefault() ?? throw new InvalidOperationException("There is no supported culture.");
var requestLocalizationOptions = new RequestLocalizationOptions
{
SupportedCultures = list,
SupportedUICultures = list

View File

@@ -1,5 +1,6 @@
{
"UseSwagger": true,
"UseDbMigration": true,
"DiPMode": true,
"Logging": {
"LogLevel": {
@@ -10,7 +11,8 @@
"AllowedHosts": "*",
"AllowedOrigins": [ "http://localhost:4200" ],
"ConnectionStrings": {
"Default": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
"Default": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;",
"DbMigrationTest": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM_DATA_MIGR_TEST;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
},
"DirectorySearchOptions": {
"ServerName": "DD-VMP01-DC01",

View File

@@ -32,6 +32,7 @@ public static class DIExtensions
/// This method ensures that the repositories are registered as scoped services, meaning that a new instance of each repository
/// will be created per HTTP request (or per scope) within the dependency injection container.
/// </remarks>
[Obsolete("Use IRepository")]
public static IServiceCollection AddEnvelopeGeneratorInfrastructureServices(this IServiceCollection services,
Action<IServiceProvider, DbContextOptionsBuilder>? dbContextOptions = null,
IConfiguration? sqlExecutorConfiguration = null,
@@ -52,7 +53,6 @@ public static class DIExtensions
services.TryAddScoped<IEnvelopeReceiverRepository, EnvelopeReceiverRepository>();
services.TryAddScoped<IEnvelopeTypeRepository, EnvelopeTypeRepository>();
services.TryAddScoped<IReceiverRepository, ReceiverRepository>();
services.TryAddScoped<IUserReceiverRepository, UserReceiverRepository>();
services.TryAddScoped<IEnvelopeReceiverReadOnlyRepository, EnvelopeReceiverReadOnlyRepository>();
services.AddDbRepository<EGDbContext, Config>(context => context.Configs).UseAutoMapper();
@@ -66,7 +66,6 @@ public static class DIExtensions
services.AddDbRepository<EGDbContext, EnvelopeReceiver>(context => context.EnvelopeReceivers).UseAutoMapper();
services.AddDbRepository<EGDbContext, EnvelopeType>(context => context.EnvelopeTypes).UseAutoMapper();
services.AddDbRepository<EGDbContext, Receiver>(context => context.Receivers).UseAutoMapper();
services.AddDbRepository<EGDbContext, UserReceiver>(context => context.UserReceivers).UseAutoMapper();
services.AddDbRepository<EGDbContext, EnvelopeReceiverReadOnly>(context => context.EnvelopeReceiverReadOnlys).UseAutoMapper();
services.AddSQLExecutor<Envelope>();
@@ -157,4 +156,4 @@ public static class DIExtensions
return services;
}
}
}

View File

@@ -17,8 +17,6 @@ namespace EnvelopeGenerator.Infrastructure;
//TODO: Adding EmailOut instead of EmailOut.Abst is not correct for the arch. Re-design EmailPut consedering this. IMailDbContext shoud move to Abstraction layer (hint: in this case using DBSet in abst. will be problem because entity framework will have to be added.
public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
{
public DbSet<UserReceiver> UserReceivers { get; set; }
public DbSet<Config> Configs { get; set; }
public DbSet<EnvelopeReceiver> EnvelopeReceivers { get; set; }
@@ -61,14 +59,15 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
private readonly DbTriggerParams _triggers;
private readonly ILogger<EGDbContext> _logger;
private readonly ILogger<EGDbContext>? _logger;
public EGDbContext(DbContextOptions<EGDbContext> options, IOptions<DbTriggerParams> triggerParamOptions, ILogger<EGDbContext> logger) : base(options)
public bool IsMigration { get; set; } = false;
public EGDbContext(DbContextOptions<EGDbContext> options, IOptions<DbTriggerParams> triggerParamOptions, ILogger<EGDbContext>? logger = null) : base(options)
{
_triggers = triggerParamOptions.Value;
_logger = logger;
UserReceivers = Set<UserReceiver>();
Configs = Set<Config>();
EnvelopeReceivers = Set<EnvelopeReceiver>();
Envelopes = Set<Envelope>();
@@ -106,7 +105,6 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
modelBuilder.Entity<EnvelopeHistory>();
modelBuilder.Entity<EnvelopeType>();
modelBuilder.Entity<Receiver>();
modelBuilder.Entity<UserReceiver>();
modelBuilder.Entity<EmailOut>();
// Configure the one-to-many relationship of Envelope
@@ -130,17 +128,20 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
.WithMany(ed => ed.Elements)
.HasForeignKey(dre => dre.DocumentId);
modelBuilder.Entity<EnvelopeHistory>()
.HasOne(eh => eh.Receiver)
.WithMany()
.HasForeignKey(eh => eh.UserReference)
.HasPrincipalKey(e => e.EmailAddress);
if (!IsMigration)
{
modelBuilder.Entity<EnvelopeHistory>()
.HasOne(eh => eh.Receiver)
.WithMany()
.HasForeignKey(eh => eh.UserReference)
.HasPrincipalKey(e => e.EmailAddress);
modelBuilder.Entity<EnvelopeHistory>()
.HasOne(eh => eh.Sender)
.WithMany()
.HasForeignKey(eh => eh.UserReference)
.HasPrincipalKey(e => e.Email);
modelBuilder.Entity<EnvelopeHistory>()
.HasOne(eh => eh.Sender)
.WithMany()
.HasForeignKey(eh => eh.UserReference)
.HasPrincipalKey(e => e.Email);
}
modelBuilder.Entity<EnvelopeReceiverReadOnly>()
.HasOne(erro => erro.Receiver)
@@ -155,7 +156,7 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
.ForEach(tName =>
{
modelBuilder.Entity<T>().ToTable(tb => tb.HasTrigger(tName));
_logger.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name);
_logger?.LogInformation("Trigger '{triggerName}' has been added to the '{entityName}' entity.", tName, typeof(T).Name);
});
// TODO: call add trigger methods with attributes and reflection
@@ -171,7 +172,6 @@ public class EGDbContext : DbContext, IUserManagerDbContext, IMailDbContext
AddTrigger<EnvelopeReceiverReadOnly>();
AddTrigger<EnvelopeType>();
AddTrigger<Receiver>();
AddTrigger<UserReceiver>();
AddTrigger<EmailOut>();
//configure model builder for user manager tables

View File

@@ -0,0 +1,46 @@
using EnvelopeGenerator.Application.Configurations;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
namespace EnvelopeGenerator.Infrastructure
{
public class EGDbContextFactory : IDesignTimeDbContextFactory<EGDbContext>
{
public EGDbContext CreateDbContext(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) // Önemli!
.AddJsonFile("appsettings.migration.json")
.Build();
// create DbContextOptions
var optionsBuilder = new DbContextOptionsBuilder<EGDbContext>();
optionsBuilder.UseSqlServer(config.GetConnectionString("Default"));
// create DbTriggerParams
var triggerLists = config.GetSection("DbTriggerParams").Get<Dictionary<string, List<string>>>();
var dbTriggerParams = new DbTriggerParams();
if(triggerLists is not null)
foreach (var triggerList in triggerLists)
{
if(triggerList.Value.Count == 0)
continue; // Skip empty trigger lists
var tableName = triggerList.Key;
dbTriggerParams[tableName] = new List<string>();
foreach (var trigger in triggerList.Value)
{
dbTriggerParams[tableName].Add(trigger);
}
}
var dbContext = new EGDbContext(optionsBuilder.Options, Options.Create(dbTriggerParams));
dbContext.IsMigration = true;
return dbContext;
}
}
}

View File

@@ -23,16 +23,37 @@
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.20" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.20" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.20">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.20" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.15" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.15" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.17" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.17" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.17">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.17" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.6" />
</ItemGroup>
</Project>
<ItemGroup>
<None Update="appsettings.migration.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@@ -12,13 +12,16 @@ namespace EnvelopeGenerator.Infrastructure.Executor;
public class EnvelopeExecutor : SQLExecutor, IEnvelopeExecutor
{
[Obsolete("Use IRepository")]
private readonly IUserRepository _userRepository;
[Obsolete("Use IRepository")]
public EnvelopeExecutor(IServiceProvider provider, IOptions<SQLExecutorParams> sqlExecutorParamsOptions, IUserRepository userRepository) : base(provider, sqlExecutorParamsOptions)
{
_userRepository = userRepository;
}
[Obsolete("Use IRepository")]
public async Task<Envelope> CreateEnvelopeAsync(int userId, string title = "", string message = "", bool tfaEnabled = false, CancellationToken cancellation = default)
{
using var connection = new SqlConnection(Params.ConnectionString);
@@ -28,7 +31,7 @@ public class EnvelopeExecutor : SQLExecutor, IEnvelopeExecutor
var envelopes = await connection.QueryAsync<Envelope>(formattedSql);
var envelope = envelopes.FirstOrDefault()
?? throw new InvalidOperationException($"Envelope creation failed. Parameters:" +
$"userId={userId}, title='{title}', message='{message}', tfaEnabled={tfaEnabled}."); ;
$"userId={userId}, title='{title}', message='{message}', tfaEnabled={tfaEnabled}.");
envelope.User = await _userRepository.ReadByIdAsync(envelope.UserId);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,811 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace EnvelopeGenerator.Infrastructure.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.EnsureSchema(
name: "dbo");
migrationBuilder.CreateTable(
name: "TBDD_CLIENT_USER",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
USER_ID = table.Column<int>(type: "int", nullable: false),
CLIENT_ID = table.Column<int>(type: "int", nullable: false),
COMMENT = table.Column<string>(type: "nvarchar(max)", nullable: true),
ADDED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_CLIENT_USER", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBDD_GROUPS",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
AD_SYNC = table.Column<bool>(type: "bit", nullable: false),
Internal = table.Column<bool>(type: "bit", nullable: false),
Active = table.Column<bool>(type: "bit", nullable: false),
Comment = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
ECM_FK_ID = table.Column<int>(type: "int", nullable: false),
ADDED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
CHANGED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_GROUPS", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBDD_MODULES",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
SHORT_NAME = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_MODULES", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBDD_USER",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PRENAME = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
NAME = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
USERNAME = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
SHORTNAME = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: true),
EMAIL = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
LANGUAGE = table.Column<string>(type: "nvarchar(5)", maxLength: 5, nullable: false),
COMMENT = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
DELETED = table.Column<bool>(type: "bit", nullable: false),
DATE_FORMAT = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: false),
ACTIVE = table.Column<bool>(type: "bit", nullable: false),
GENERAL_VIEWER = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
WAN_ENVIRONMENT = table.Column<bool>(type: "bit", nullable: false),
USERID_FK_INT_ECM = table.Column<int>(type: "int", nullable: false),
DELETED_WHEN = table.Column<DateTime>(type: "datetime2", nullable: false),
DELETED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
ADDED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
CHANGED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_USER", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBEMLP_EMAIL_OUT",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
REMINDER_TYPE_ID = table.Column<int>(type: "int", nullable: false),
SENDING_PROFILE = table.Column<int>(type: "int", nullable: false),
REFERENCE_ID = table.Column<int>(type: "int", nullable: false),
REFERENCE_STRING = table.Column<string>(type: "varchar(200)", maxLength: 200, nullable: true),
ENTITY_ID = table.Column<int>(type: "int", nullable: true),
WF_ID = table.Column<int>(type: "int", nullable: false),
WF_REFERENCE = table.Column<string>(type: "varchar(200)", maxLength: 200, nullable: true),
EMAIL_ADRESS = table.Column<string>(type: "varchar(1000)", maxLength: 1000, nullable: false),
EMAIL_SUBJ = table.Column<string>(type: "varchar(500)", maxLength: 500, nullable: false),
EMAIL_BODY = table.Column<string>(type: "varchar(max)", nullable: false),
EMAIL_ATTMT1 = table.Column<string>(type: "varchar(512)", maxLength: 512, nullable: true),
EMAIL_SENT = table.Column<DateTime>(type: "datetime2", nullable: true),
COMMENT = table.Column<string>(type: "varchar(500)", maxLength: 500, nullable: true),
ADDED_WHO = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: false),
CHANGED_WHO = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: true),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime2", nullable: true),
ERROR_TIMESTAMP = table.Column<DateTime>(type: "datetime2", nullable: true),
ERROR_MSG = table.Column<string>(type: "varchar(900)", maxLength: 900, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBEMLP_EMAIL_OUT", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBSIG_CONFIG",
schema: "dbo",
columns: table => new
{
SENDING_PROFILE = table.Column<int>(type: "int", nullable: false),
SIGNATURE_HOST = table.Column<string>(type: "nvarchar(128)", nullable: false),
EXTERNAL_PROGRAM_NAME = table.Column<string>(type: "nvarchar(30)", nullable: true),
EXPORT_PATH = table.Column<string>(type: "nvarchar(256)", nullable: true)
},
constraints: table =>
{
});
migrationBuilder.CreateTable(
name: "TBSIG_EMAIL_TEMPLATE",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
NAME = table.Column<string>(type: "nvarchar(64)", nullable: true),
BODY = table.Column<string>(type: "nvarchar(max)", nullable: true),
SUBJECT = table.Column<string>(type: "nvarchar(512)", nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_EMAIL_TEMPLATE", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE_CERTIFICATE",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ENVELOPE_ID = table.Column<int>(type: "int", nullable: false),
ENVELOPE_UUID = table.Column<string>(type: "nvarchar(36)", nullable: false),
ENVELOPE_SUBJECT = table.Column<string>(type: "nvarchar(512)", nullable: false),
CREATOR_ID = table.Column<int>(type: "int", nullable: false),
CREATOR_NAME = table.Column<string>(type: "nvarchar(128)", nullable: false),
CREATOR_EMAIL = table.Column<string>(type: "nvarchar(128)", nullable: false),
ENVELOPE_STATUS = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE_CERTIFICATE", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE_TYPE",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TITLE = table.Column<string>(type: "nvarchar(128)", nullable: false),
LANGUAGE = table.Column<string>(type: "nvarchar(5)", nullable: true),
EXPIRES_DAYS = table.Column<int>(type: "int", nullable: false),
CERTIFICATION_TYPE = table.Column<int>(type: "int", nullable: false),
USE_ACCESS_CODE = table.Column<bool>(type: "bit", nullable: false),
FINAL_EMAIL_TO_CREATOR = table.Column<int>(type: "int", nullable: false),
FINAL_EMAIL_TO_RECEIVERS = table.Column<int>(type: "int", nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
EXPIRES_WARNING_DAYS = table.Column<int>(type: "int", nullable: false),
SEND_REMINDER_EMAILS = table.Column<bool>(type: "bit", nullable: false),
FIRST_REMINDER_DAYS = table.Column<int>(type: "int", nullable: false),
REMINDER_INTERVAL_DAYS = table.Column<int>(type: "int", nullable: false),
CONTRACT_TYPE = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE_TYPE", x => x.GUID);
});
migrationBuilder.CreateTable(
name: "TBDD_GROUPS_USER",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
USER_ID = table.Column<int>(type: "int", nullable: false),
GROUP_ID = table.Column<int>(type: "int", nullable: false),
Comment = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
ADDED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
CHANGED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_GROUPS_USER", x => x.GUID);
table.ForeignKey(
name: "FK_TBDD_GROUPS_USER_TBDD_GROUPS_GROUP_ID",
column: x => x.GROUP_ID,
principalSchema: "dbo",
principalTable: "TBDD_GROUPS",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBDD_GROUPS_USER_TBDD_USER_USER_ID",
column: x => x.USER_ID,
principalSchema: "dbo",
principalTable: "TBDD_USER",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBDD_USER_MODULES",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
USER_ID = table.Column<int>(type: "int", nullable: false),
MODULE_ID = table.Column<int>(type: "int", nullable: false),
COMMENT = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
ADDED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
CHANGED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_USER_MODULES", x => x.GUID);
table.ForeignKey(
name: "FK_TBDD_USER_MODULES_TBDD_MODULES_MODULE_ID",
column: x => x.MODULE_ID,
principalSchema: "dbo",
principalTable: "TBDD_MODULES",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBDD_USER_MODULES_TBDD_USER_USER_ID",
column: x => x.USER_ID,
principalSchema: "dbo",
principalTable: "TBDD_USER",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBDD_USER_REPRESENTATION",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
USER_ID = table.Column<int>(type: "int", nullable: true),
REPR_GROUP = table.Column<int>(type: "int", nullable: true),
GROUP_ID = table.Column<int>(type: "int", nullable: true),
REPR_USER = table.Column<int>(type: "int", nullable: true),
VALID_FROM = table.Column<DateTime>(type: "datetime2", nullable: true),
VALID_TO = table.Column<DateTime>(type: "datetime2", nullable: true),
ADDED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
CHANGED_WHO = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBDD_USER_REPRESENTATION", x => x.GUID);
table.ForeignKey(
name: "FK_TBDD_USER_REPRESENTATION_TBDD_GROUPS_GROUP_ID",
column: x => x.GROUP_ID,
principalSchema: "dbo",
principalTable: "TBDD_GROUPS",
principalColumn: "GUID");
table.ForeignKey(
name: "FK_TBDD_USER_REPRESENTATION_TBDD_GROUPS_REPR_GROUP",
column: x => x.REPR_GROUP,
principalSchema: "dbo",
principalTable: "TBDD_GROUPS",
principalColumn: "GUID");
table.ForeignKey(
name: "FK_TBDD_USER_REPRESENTATION_TBDD_USER_REPR_USER",
column: x => x.REPR_USER,
principalSchema: "dbo",
principalTable: "TBDD_USER",
principalColumn: "GUID");
table.ForeignKey(
name: "FK_TBDD_USER_REPRESENTATION_TBDD_USER_USER_ID",
column: x => x.USER_ID,
principalSchema: "dbo",
principalTable: "TBDD_USER",
principalColumn: "GUID");
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
USER_ID = table.Column<int>(type: "int", nullable: false),
STATUS = table.Column<int>(type: "int", nullable: false),
ENVELOPE_UUID = table.Column<string>(type: "nvarchar(36)", nullable: false),
MESSAGE = table.Column<string>(type: "nvarchar(max)", nullable: true),
EXPIRES_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
EXPIRES_WARNING_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
TITLE = table.Column<string>(type: "nvarchar(128)", nullable: true),
CONTRACT_TYPE = table.Column<int>(type: "int", nullable: false),
LANGUAGE = table.Column<string>(type: "nvarchar(5)", nullable: true),
SEND_REMINDER_EMAILS = table.Column<bool>(type: "bit", nullable: false),
FIRST_REMINDER_DAYS = table.Column<int>(type: "int", nullable: false),
REMINDER_INTERVAL_DAYS = table.Column<int>(type: "int", nullable: false),
ENVELOPE_TYPE = table.Column<int>(type: "int", nullable: false),
CERTIFICATION_TYPE = table.Column<int>(type: "int", nullable: false),
USE_ACCESS_CODE = table.Column<bool>(type: "bit", nullable: false),
FINAL_EMAIL_TO_CREATOR = table.Column<int>(type: "int", nullable: false),
FINAL_EMAIL_TO_RECEIVERS = table.Column<int>(type: "int", nullable: false),
EXPIRES_WHEN_DAYS = table.Column<int>(type: "int", nullable: false),
EXPIRES_WARNING_WHEN_DAYS = table.Column<int>(type: "int", nullable: false),
TFA_ENABLED = table.Column<bool>(type: "bit", nullable: false),
DOC_RESULT = table.Column<byte[]>(type: "varbinary(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE", x => x.GUID);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_TBDD_USER_USER_ID",
column: x => x.USER_ID,
principalSchema: "dbo",
principalTable: "TBDD_USER",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_TBSIG_ENVELOPE_TYPE_ENVELOPE_TYPE",
column: x => x.ENVELOPE_TYPE,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE_TYPE",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE_DOCUMENT",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ENVELOPE_ID = table.Column<int>(type: "int", nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
BYTE_DATA = table.Column<byte[]>(type: "varbinary(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE_DOCUMENT", x => x.GUID);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_DOCUMENT_TBSIG_ENVELOPE_ENVELOPE_ID",
column: x => x.ENVELOPE_ID,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBSIG_RECEIVER",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
EMAIL_ADDRESS = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
SIGNATURE = table.Column<string>(type: "nvarchar(64)", nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
TOTP_SECRET_KEY = table.Column<string>(type: "nvarchar(MAX)", nullable: true),
TFA_REG_DEADLINE = table.Column<DateTime>(type: "datetime", nullable: false),
EnvelopeId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_RECEIVER", x => x.GUID);
table.UniqueConstraint("AK_TBSIG_RECEIVER_EMAIL_ADDRESS", x => x.EMAIL_ADDRESS);
table.ForeignKey(
name: "FK_TBSIG_RECEIVER_TBSIG_ENVELOPE_EnvelopeId",
column: x => x.EnvelopeId,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE",
principalColumn: "GUID");
});
migrationBuilder.CreateTable(
name: "TBSIG_DOCUMENT_RECEIVER_ELEMENT",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DOCUMENT_ID = table.Column<int>(type: "int", nullable: false),
RECEIVER_ID = table.Column<int>(type: "int", nullable: false),
ELEMENT_TYPE = table.Column<int>(type: "int", nullable: false),
POSITION_X = table.Column<double>(type: "float", nullable: false),
POSITION_Y = table.Column<double>(type: "float", nullable: false),
WIDTH = table.Column<double>(type: "float", nullable: false),
HEIGHT = table.Column<double>(type: "float", nullable: false),
PAGE = table.Column<int>(type: "int", nullable: false),
REQUIRED = table.Column<bool>(type: "bit", nullable: false),
TOOLTIP = table.Column<string>(type: "nvarchar(max)", nullable: true),
READ_ONLY = table.Column<bool>(type: "bit", nullable: false),
ANNOTATION_INDEX = table.Column<int>(type: "int", nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_DOCUMENT_RECEIVER_ELEMENT", x => x.GUID);
table.ForeignKey(
name: "FK_TBSIG_DOCUMENT_RECEIVER_ELEMENT_TBSIG_ENVELOPE_DOCUMENT_DOCUMENT_ID",
column: x => x.DOCUMENT_ID,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE_DOCUMENT",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBSIG_DOCUMENT_RECEIVER_ELEMENT_TBSIG_RECEIVER_RECEIVER_ID",
column: x => x.RECEIVER_ID,
principalSchema: "dbo",
principalTable: "TBSIG_RECEIVER",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBSIG_DOCUMENT_STATUS",
schema: "dbo",
columns: table => new
{
GUID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ENVELOPE_ID = table.Column<int>(type: "int", nullable: false),
RECEIVER_ID = table.Column<int>(type: "int", nullable: false),
STATUS = table.Column<int>(type: "int", nullable: false),
STATUS_CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
VALUE = table.Column<string>(type: "nvarchar(max)", nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_DOCUMENT_STATUS", x => x.GUID);
table.ForeignKey(
name: "FK_TBSIG_DOCUMENT_STATUS_TBSIG_ENVELOPE_ENVELOPE_ID",
column: x => x.ENVELOPE_ID,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBSIG_DOCUMENT_STATUS_TBSIG_RECEIVER_RECEIVER_ID",
column: x => x.RECEIVER_ID,
principalSchema: "dbo",
principalTable: "TBSIG_RECEIVER",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE_HISTORY",
schema: "dbo",
columns: table => new
{
GUID = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ENVELOPE_ID = table.Column<int>(type: "int", nullable: false),
USER_REFERENCE = table.Column<string>(type: "nvarchar(128)", nullable: false),
STATUS = table.Column<int>(type: "int", nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
ACTION_DATE = table.Column<DateTime>(type: "datetime", nullable: false),
COMMENT = table.Column<string>(type: "nvarchar(max)", nullable: true),
SenderId = table.Column<int>(type: "int", nullable: true),
ReceiverId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE_HISTORY", x => x.GUID);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_HISTORY_TBDD_USER_SenderId",
column: x => x.SenderId,
principalSchema: "dbo",
principalTable: "TBDD_USER",
principalColumn: "GUID");
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_HISTORY_TBSIG_ENVELOPE_ENVELOPE_ID",
column: x => x.ENVELOPE_ID,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_HISTORY_TBSIG_RECEIVER_ReceiverId",
column: x => x.ReceiverId,
principalSchema: "dbo",
principalTable: "TBSIG_RECEIVER",
principalColumn: "GUID");
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE_RECEIVER",
schema: "dbo",
columns: table => new
{
ENVELOPE_ID = table.Column<int>(type: "int", nullable: false),
RECEIVER_ID = table.Column<int>(type: "int", nullable: false),
SEQUENCE = table.Column<int>(type: "int", nullable: false),
NAME = table.Column<string>(type: "nvarchar(128)", nullable: true),
JOB_TITLE = table.Column<string>(type: "nvarchar(128)", nullable: true),
COMPANY_NAME = table.Column<string>(type: "nvarchar(128)", nullable: true),
PRIVATE_MESSAGE = table.Column<string>(type: "nvarchar(max)", nullable: true),
ACCESS_CODE = table.Column<string>(type: "nvarchar(64)", nullable: true),
ADDED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime", nullable: false),
PHONE_NUMBER = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE_RECEIVER", x => new { x.ENVELOPE_ID, x.RECEIVER_ID });
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_RECEIVER_TBSIG_ENVELOPE_ENVELOPE_ID",
column: x => x.ENVELOPE_ID,
principalSchema: "dbo",
principalTable: "TBSIG_ENVELOPE",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_RECEIVER_TBSIG_RECEIVER_RECEIVER_ID",
column: x => x.RECEIVER_ID,
principalSchema: "dbo",
principalTable: "TBSIG_RECEIVER",
principalColumn: "GUID",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "TBSIG_ENVELOPE_RECEIVER_READ_ONLY",
columns: table => new
{
GUID = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ENVELOPE_ID = table.Column<long>(type: "bigint", nullable: false),
RECEIVER_MAIL = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
DATE_VALID = table.Column<DateTime>(type: "datetime2", nullable: false),
ADDED_WHO = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
ADDED_WHEN = table.Column<DateTime>(type: "datetime2", nullable: false),
CHANGED_WHO = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
CHANGED_WHEN = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TBSIG_ENVELOPE_RECEIVER_READ_ONLY", x => x.GUID);
table.ForeignKey(
name: "FK_TBSIG_ENVELOPE_RECEIVER_READ_ONLY_TBSIG_RECEIVER_ADDED_WHO",
column: x => x.ADDED_WHO,
principalSchema: "dbo",
principalTable: "TBSIG_RECEIVER",
principalColumn: "EMAIL_ADDRESS",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_TBDD_GROUPS_USER_GROUP_ID",
schema: "dbo",
table: "TBDD_GROUPS_USER",
column: "GROUP_ID");
migrationBuilder.CreateIndex(
name: "IX_TBDD_GROUPS_USER_USER_ID",
schema: "dbo",
table: "TBDD_GROUPS_USER",
column: "USER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBDD_USER_MODULES_MODULE_ID",
schema: "dbo",
table: "TBDD_USER_MODULES",
column: "MODULE_ID");
migrationBuilder.CreateIndex(
name: "IX_TBDD_USER_MODULES_USER_ID",
schema: "dbo",
table: "TBDD_USER_MODULES",
column: "USER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBDD_USER_REPRESENTATION_GROUP_ID",
schema: "dbo",
table: "TBDD_USER_REPRESENTATION",
column: "GROUP_ID");
migrationBuilder.CreateIndex(
name: "IX_TBDD_USER_REPRESENTATION_REPR_GROUP",
schema: "dbo",
table: "TBDD_USER_REPRESENTATION",
column: "REPR_GROUP");
migrationBuilder.CreateIndex(
name: "IX_TBDD_USER_REPRESENTATION_REPR_USER",
schema: "dbo",
table: "TBDD_USER_REPRESENTATION",
column: "REPR_USER");
migrationBuilder.CreateIndex(
name: "IX_TBDD_USER_REPRESENTATION_USER_ID",
schema: "dbo",
table: "TBDD_USER_REPRESENTATION",
column: "USER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_DOCUMENT_RECEIVER_ELEMENT_DOCUMENT_ID",
schema: "dbo",
table: "TBSIG_DOCUMENT_RECEIVER_ELEMENT",
column: "DOCUMENT_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_DOCUMENT_RECEIVER_ELEMENT_RECEIVER_ID",
schema: "dbo",
table: "TBSIG_DOCUMENT_RECEIVER_ELEMENT",
column: "RECEIVER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_DOCUMENT_STATUS_ENVELOPE_ID",
schema: "dbo",
table: "TBSIG_DOCUMENT_STATUS",
column: "ENVELOPE_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_DOCUMENT_STATUS_RECEIVER_ID",
schema: "dbo",
table: "TBSIG_DOCUMENT_STATUS",
column: "RECEIVER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_ENVELOPE_TYPE",
schema: "dbo",
table: "TBSIG_ENVELOPE",
column: "ENVELOPE_TYPE");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_USER_ID",
schema: "dbo",
table: "TBSIG_ENVELOPE",
column: "USER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_DOCUMENT_ENVELOPE_ID",
schema: "dbo",
table: "TBSIG_ENVELOPE_DOCUMENT",
column: "ENVELOPE_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_HISTORY_ENVELOPE_ID",
schema: "dbo",
table: "TBSIG_ENVELOPE_HISTORY",
column: "ENVELOPE_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_HISTORY_ReceiverId",
schema: "dbo",
table: "TBSIG_ENVELOPE_HISTORY",
column: "ReceiverId");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_HISTORY_SenderId",
schema: "dbo",
table: "TBSIG_ENVELOPE_HISTORY",
column: "SenderId");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_RECEIVER_RECEIVER_ID",
schema: "dbo",
table: "TBSIG_ENVELOPE_RECEIVER",
column: "RECEIVER_ID");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_ENVELOPE_RECEIVER_READ_ONLY_ADDED_WHO",
table: "TBSIG_ENVELOPE_RECEIVER_READ_ONLY",
column: "ADDED_WHO");
migrationBuilder.CreateIndex(
name: "IX_TBSIG_RECEIVER_EnvelopeId",
schema: "dbo",
table: "TBSIG_RECEIVER",
column: "EnvelopeId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "TBDD_CLIENT_USER",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBDD_GROUPS_USER",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBDD_USER_MODULES",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBDD_USER_REPRESENTATION",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBEMLP_EMAIL_OUT");
migrationBuilder.DropTable(
name: "TBSIG_CONFIG",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_DOCUMENT_RECEIVER_ELEMENT",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_DOCUMENT_STATUS",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_EMAIL_TEMPLATE",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE_CERTIFICATE",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE_HISTORY",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE_RECEIVER",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE_RECEIVER_READ_ONLY");
migrationBuilder.DropTable(
name: "TBDD_MODULES",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBDD_GROUPS",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE_DOCUMENT",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_RECEIVER",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBDD_USER",
schema: "dbo");
migrationBuilder.DropTable(
name: "TBSIG_ENVELOPE_TYPE",
schema: "dbo");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class ConfigRepository : CRUDRepository<Config, int, EGDbContext>, IConfigRepository
{
public ConfigRepository(EGDbContext dbContext) : base(dbContext, dbContext.Configs)

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class DocumentReceiverElementRepository : CRUDRepository<DocumentReceiverElement, int, EGDbContext>, IDocumentReceiverElementRepository
{
public DocumentReceiverElementRepository(EGDbContext dbContext) : base(dbContext, dbContext.DocumentReceiverElements)

View File

@@ -1,10 +1,10 @@
using DigitalData.Core.Infrastructure;
using DigitalData.UserManager.Infrastructure.Repositories;
using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class DocumentStatusRepository : CRUDRepository<DocumentStatus, int, EGDbContext>, IDocumentStatusRepository
{
public DocumentStatusRepository(EGDbContext dbContext) : base(dbContext, dbContext.DocumentStatus)

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class EnvelopeCertificateRepository : CRUDRepository<EnvelopeCertificate, int, EGDbContext>, IEnvelopeCertificateRepository
{
public EnvelopeCertificateRepository(EGDbContext dbContext) : base(dbContext, dbContext.EnvelopeCertificates)

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class EnvelopeDocumentRepository : CRUDRepository<EnvelopeDocument, int, EGDbContext>, IEnvelopeDocumentRepository
{
public EnvelopeDocumentRepository(EGDbContext dbContext) : base(dbContext, dbContext.EnvelopeDocument)

View File

@@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class EnvelopeReceiverReadOnlyRepository : CRUDRepository<EnvelopeReceiverReadOnly, long, EGDbContext>, IEnvelopeReceiverReadOnlyRepository
{
private readonly IEnvelopeRepository _envRepo;

View File

@@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class EnvelopeRepository : CRUDRepository<Envelope, int, EGDbContext>, IEnvelopeRepository
{
public EnvelopeRepository(EGDbContext dbContext) : base(dbContext, dbContext.Envelopes)

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class EnvelopeTypeRepository : CRUDRepository<EnvelopeType, int, EGDbContext>, IEnvelopeTypeRepository
{
public EnvelopeTypeRepository(EGDbContext dbContext) : base(dbContext, dbContext.EnvelopeTypes)

View File

@@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore;
namespace EnvelopeGenerator.Infrastructure.Repositories;
[Obsolete("Use IRepository")]
public class ReceiverRepository : CRUDRepository<Receiver, int, EGDbContext>, IReceiverRepository
{
public ReceiverRepository(EGDbContext dbContext) : base(dbContext, dbContext.Receivers)

View File

@@ -1,12 +0,0 @@
using DigitalData.Core.Infrastructure;
using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.Application.Contracts.Repositories;
namespace EnvelopeGenerator.Infrastructure.Repositories;
public class UserReceiverRepository : CRUDRepository<UserReceiver, int, EGDbContext>, IUserReceiverRepository
{
public UserReceiverRepository(EGDbContext dbContext) : base(dbContext, dbContext.UserReceivers)
{
}
}

View File

@@ -0,0 +1,13 @@
{
"ConnectionStrings": {
"Default": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM_DATA_MIGR_TEST;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
},
"DbTriggerParams": {
"Envelope": [ "TBSIG_ENVELOPE_HISTORY_AFT_INS" ],
"EnvelopeHistory": [ "TBSIG_ENVELOPE_HISTORY_AFT_INS" ],
"EmailOut": [ "TBEMLP_EMAIL_OUT_AFT_INS", "TBEMLP_EMAIL_OUT_AFT_UPD" ],
"EnvelopeReceiverReadOnly": [ "TBSIG_ENVELOPE_RECEIVER_READ_ONLY_UPD" ],
"Receiver": [],
"EmailTemplate": [ "TBSIG_EMAIL_TEMPLATE_AFT_UPD" ]
}
}

View File

@@ -67,7 +67,7 @@ Public Class Scheduler_FinishEnvelope
Await Scheduler.Start()
Logger.Info("Scheduler started!")
Logger.Debug("Scheduler started!")
Catch ex As Exception
Logger.Error(ex)
End Try

View File

@@ -34,7 +34,7 @@ Public Class Service
TempFiles.Create()
' === Initialize Databases ===
Logger.Info("Inititalize Database ...")
Logger.Debug("Inititalize Database ...")
If Config.ConnectionString = String.Empty Then
Throw New ApplicationException("Connection String is empty!")

View File

@@ -13,9 +13,11 @@ public class CommandManager
{
WriteIndented = true
};
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverService _envelopeReceiverService;
private readonly IMediator _mediator;
[Obsolete("Use MediatR")]
public CommandManager(IEnvelopeReceiverService envelopeReceiverService, IMediator mediator)
{
_envelopeReceiverService = envelopeReceiverService;
@@ -29,6 +31,7 @@ public class CommandManager
Console.WriteLine($"v{Assembly.GetExecutingAssembly().GetName().Version}");
}
[Obsolete("Use MediatR")]
[Subcommand]
public IEnvelopeReceiverService EnvelopeReceiver => _envelopeReceiverService;
@@ -55,4 +58,4 @@ public class CommandManager
File.WriteAllBytes(path, document?.ByteData ?? Array.Empty<byte>());
}
}
}
}

View File

@@ -14,6 +14,7 @@ namespace EnvelopeGenerator.Terminal;
public static class DependencyInjection
{
[Obsolete("Use MediatR")]
public static IServiceCollection AddCommandManagerRunner(this IServiceCollection services, IConfiguration configuration, Case @case = Case.KebabCase, string connectionStringKeyName = "Default")
{
var connStr = configuration.GetConnectionString(connectionStringKeyName)
@@ -27,7 +28,7 @@ public static class DependencyInjection
});
// Add envelope generator services
services.AddEnvelopeGeneratorInfrastructureServices(options => options.UseSqlServer(connStr));
services.AddEnvelopeGeneratorInfrastructureServices((provider, options) => options.UseSqlServer(connStr));
return services
.AddSingleton<CommandManager>()
@@ -52,4 +53,4 @@ public static class DependencyInjection
}
public static Task<int> RunCommandManagerRunner(this IHost host, string[] args) => host.Services.RunCommandManagerRunner(args);
}
}

View File

@@ -15,7 +15,9 @@ public class Program
var config = builder.Configuration;
#pragma warning disable CS0618 // Type or member is obsolete
builder.Services.AddCommandManagerRunner(config);
#pragma warning restore CS0618 // Type or member is obsolete
var app = builder.Build();

View File

@@ -12,7 +12,8 @@
}
},
"ConnectionStrings": {
"Default": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
"Default": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;",
"Dev": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM_DATA_MIGR_TEST;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
},
"PSPDFKitLicenseKey": "SXCtGGY9XA-31OGUXQK-r7c6AkdLGPm2ljuyDr1qu0kkhLvydg-Do-fxpNUF4Rq3fS_xAnZRNFRHbXpE6sQ2BMcCSVTcXVJO6tPviexjpiT-HnrDEySlUERJnnvh-tmeOWprxS6BySPnSILkmaVQtUfOIUS-cUbvvEYHTvQBKbSF8di4XHQFyfv49ihr51axm3NVV3AXwh2EiKL5C5XdqBZ4sQ4O7vXBjM2zvxdPxlxdcNYmiU83uAzw7B83O_jubPzya4CdUHh_YH7Nlp2gP56MeG1Sw2JhMtfG3Rj14Sg4ctaeL9p6AEWca5dDjJ2li5tFIV2fQSsw6A_cowLu0gtMm5i8IfJXeIcQbMC2-0wGv1oe9hZYJvFMdzhTM_FiejM0agemxt3lJyzuyP8zbBSOgp7Si6A85krLWPZptyZBTG7pp7IHboUHfPMxCXqi-zMsqewOJtQBE2mjntU-lPryKnssOpMPfswwQX7QSkJYV5EMqNmEhQX6mEkp2wcqFzMC7bJQew1aO4pOpvChUaMvb1vgRek0HxLag0nwQYX2YrYGh7F_xXJs-8HNwJe8H0-eW4x4faayCgM5rB5772CCCsD9ThZcvXFrjNHHLGJ8WuBUFm6LArvSfFQdii_7j-_sqHMpeKZt26NFgivj1A==",
"Content-Security-Policy": [ // The first format parameter {0} will be replaced by the nonce value.

View File

@@ -10,6 +10,7 @@ namespace EnvelopeGenerator.Tests.Application;
public class Mock
{
[Obsolete("Use MediatR")]
public static IHost CreateHost(Action<HostApplicationBuilder>? builderOptions = null, string configPath = "appsettings.json", bool useRealDb = false, params string[] args)
{
var builder = Host.CreateApplicationBuilder(args.Any() ? args : null);
@@ -17,7 +18,7 @@ public class Mock
builder.Configuration.AddJsonFile(configPath, optional: true, reloadOnChange: true);
builder.Services
.AddEnvelopeGeneratorInfrastructureServices(opt =>
.AddEnvelopeGeneratorInfrastructureServices((provider, opt) =>
{
if (useRealDb)
{

View File

@@ -26,6 +26,7 @@ public class DocumentController : BaseController
_envDocService = envDocService;
}
[Obsolete("Use MediatR")]
[NonAction]
public async Task<IActionResult> Get([FromRoute] string envelopeKey, [FromQuery] int index)
{
@@ -53,6 +54,7 @@ public class DocumentController : BaseController
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpPost("{envelopeKey}")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> Open(string envelopeKey)
{
try

View File

@@ -1,153 +1,161 @@
using DigitalData.Core.DTO;
using EnvelopeGenerator.CommonServices;
using EnvelopeGenerator.CommonServices;
using EnvelopeGenerator.Web.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
using static EnvelopeGenerator.CommonServices.Constants;
using EnvelopeGenerator.Extensions;
using EnvelopeGenerator.Application.Contracts.Services;
using static EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.Domain;
using DigitalData.Core.Abstraction.Application.DTO;
namespace EnvelopeGenerator.Web.Controllers
namespace EnvelopeGenerator.Web.Controllers;
[Authorize(Roles = ReceiverRole.FullyAuth)]
[ApiController]
[Route("api/[controller]")]
public class EnvelopeController : BaseController
{
[Authorize(Roles = ReceiverRole.FullyAuth)]
[ApiController]
[Route("api/[controller]")]
public class EnvelopeController : BaseController
private readonly EnvelopeOldService envelopeService;
private readonly ActionService? actionService;
private readonly UrlEncoder _urlEncoder;
[Obsolete("Use MediatR")]
private readonly IEnvelopeHistoryService _histService;
[Obsolete("Use MediatR")]
private readonly IReceiverService _receiverService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverService _envRcvService;
[Obsolete("Use MediatR")]
public EnvelopeController(DatabaseService database,
EnvelopeOldService envelope,
ILogger<EnvelopeController> logger, UrlEncoder urlEncoder,
IEnvelopeHistoryService envelopeHistoryService,
IReceiverService receiverService,
IEnvelopeReceiverService envelopeReceiverService) : base(database, logger)
{
private readonly EnvelopeOldService envelopeService;
private readonly ActionService? actionService;
private readonly UrlEncoder _urlEncoder;
private readonly IEnvelopeHistoryService _histService;
private readonly IReceiverService _receiverService;
private readonly IEnvelopeReceiverService _envRcvService;
envelopeService = envelope;
actionService = database?.Services?.actionService;
_urlEncoder = urlEncoder;
_histService = envelopeHistoryService;
_receiverService = receiverService;
_envRcvService = envelopeReceiverService;
}
public EnvelopeController(DatabaseService database,
EnvelopeOldService envelope,
ILogger<EnvelopeController> logger, UrlEncoder urlEncoder,
IEnvelopeHistoryService envelopeHistoryService,
IReceiverService receiverService,
IEnvelopeReceiverService envelopeReceiverService) : base(database, logger)
[NonAction]
[Obsolete("Use MediatR")]
public async Task<IActionResult> Get([FromRoute] string envelopeKey)
{
try
{
envelopeService = envelope;
actionService = database?.Services?.actionService;
_urlEncoder = urlEncoder;
_histService = envelopeHistoryService;
_receiverService = receiverService;
_envRcvService = envelopeReceiverService;
envelopeKey = _urlEncoder.Encode(envelopeKey);
// Validate Envelope Key and load envelope
envelopeService.EnsureValidEnvelopeKey(envelopeKey);
EnvelopeReceiver response = await envelopeService.LoadEnvelope(envelopeKey);
if (envelopeService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id) == true)
{
return Problem(statusCode: 403);
}
_logger.LogInformation("Loaded envelope [{0}] for receiver [{1}]", response.Envelope.Id, response.Envelope.Id);
return Json(response);
}
[NonAction]
public async Task<IActionResult> Get([FromRoute] string envelopeKey)
catch (Exception e)
{
try
{
envelopeKey = _urlEncoder.Encode(envelopeKey);
// Validate Envelope Key and load envelope
envelopeService.EnsureValidEnvelopeKey(envelopeKey);
EnvelopeReceiver response = await envelopeService.LoadEnvelope(envelopeKey);
if (envelopeService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id) == true)
{
return Problem(statusCode: 403);
}
_logger.LogInformation("Loaded envelope [{0}] for receiver [{1}]", response.Envelope.Id, response.Envelope.Id);
return Json(response);
}
catch (Exception e)
{
_logger.LogError(e, "{Message}", e.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
_logger.LogError(e, "{Message}", e.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
}
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpPost("{envelopeKey}")]
public async Task<IActionResult> Update(string envelopeKey, int index)
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpPost("{envelopeKey}")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> Update(string envelopeKey, int index)
{
try
{
try
envelopeKey = _urlEncoder.Encode(envelopeKey);
var authSignature = this.GetAuthReceiverSignature();
if (authSignature != envelopeKey.GetReceiverSignature())
return Unauthorized();
// Validate Envelope Key and load envelope
envelopeService.EnsureValidEnvelopeKey(envelopeKey);
EnvelopeReceiver response = await envelopeService.LoadEnvelope(envelopeKey);
// Again check if receiver has already signed
if (envelopeService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id) == true)
{
envelopeKey = _urlEncoder.Encode(envelopeKey);
return Problem(statusCode: 403);
}
var authSignature = this.GetAuthReceiverSignature();
var document = envelopeService.GetDocument(index, envelopeKey);
if (authSignature != envelopeKey.GetReceiverSignature())
return Unauthorized();
string? annotationData = await envelopeService.EnsureValidAnnotationData(Request);
// Validate Envelope Key and load envelope
envelopeService.EnsureValidEnvelopeKey(envelopeKey);
EnvelopeReceiver response = await envelopeService.LoadEnvelope(envelopeKey);
envelopeService.InsertDocumentStatus(new Domain.Entities.DocumentStatus()
{
EnvelopeId = response.Envelope.Id,
ReceiverId = response.Receiver.Id,
Value = annotationData,
Status = Constants.DocumentStatus.Signed
});
// Again check if receiver has already signed
if (envelopeService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id) == true)
var signResult = actionService?.SignEnvelope(response.Envelope, response.Receiver);
return Ok(new object());
}
catch (Exception e)
{
_logger.LogError(e, "{Message}", e.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
}
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpPost("reject")]
[Obsolete("Use DigitalData.Core.Exceptions and .Middleware")]
public async Task<IActionResult> Reject([FromBody] string? reason = null)
{
try
{
var signature = this.GetAuthReceiverSignature();
var uuid = this.GetAuthEnvelopeUuid();
var mail = this.GetAuthReceiverMail();
if(uuid is null || signature is null || mail is null)
{
_logger.LogEnvelopeError(uuid: uuid, signature: signature,
message: @$"Unauthorized POST request in api\envelope\reject. One of claims, Envelope, signature or mail ({mail}) is null.");
return Unauthorized();
}
var envRcvRes = await _envRcvService.ReadByUuidSignatureAsync(uuid: uuid, signature: signature);
if (envRcvRes.IsFailed)
{
_logger.LogNotice(envRcvRes.Notices);
return Unauthorized("you are not authirized");
}
return await _histService.RecordAsync(envRcvRes.Data.EnvelopeId, userReference: mail, EnvelopeStatus.DocumentRejected, comment: reason).ThenAsync(
Success: id => NoContent(),
Fail: IActionResult (mssg, ntc) =>
{
return Problem(statusCode: 403);
}
var document = envelopeService.GetDocument(index, envelopeKey);
string? annotationData = await envelopeService.EnsureValidAnnotationData(Request);
envelopeService.InsertDocumentStatus(new Common.DocumentStatus()
{
EnvelopeId = response.Envelope.Id,
ReceiverId = response.Receiver.Id,
Value = annotationData,
Status = Common.Constants.DocumentStatus.Signed
_logger.LogEnvelopeError(uuid: uuid, signature: signature, message: "Unexpected error happend in api/envelope/reject");
_logger.LogNotice(ntc);
return this.ViewInnerServiceError();
});
var signResult = actionService?.SignEnvelope(response.Envelope, response.Receiver);
return Ok(new object());
}
catch (Exception e)
{
_logger.LogError(e, "{Message}", e.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
}
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpPost("reject")]
public async Task<IActionResult> Reject([FromBody] string? reason = null)
catch (Exception e)
{
try
{
var signature = this.GetAuthReceiverSignature();
var uuid = this.GetAuthEnvelopeUuid();
var mail = this.GetAuthReceiverMail();
if(uuid is null || signature is null || mail is null)
{
_logger.LogEnvelopeError(uuid: uuid, signature: signature,
message: @$"Unauthorized POST request in api\envelope\reject. One of claims, Envelope, signature or mail ({mail}) is null.");
return Unauthorized();
}
var envRcvRes = await _envRcvService.ReadByUuidSignatureAsync(uuid: uuid, signature: signature);
if (envRcvRes.IsFailed)
{
_logger.LogNotice(envRcvRes.Notices);
return Unauthorized("you are not authirized");
}
return await _histService.RecordAsync(envRcvRes.Data.EnvelopeId, userReference: mail, EnvelopeStatus.DocumentRejected, comment: reason).ThenAsync(
Success: id => NoContent(),
Fail: IActionResult (mssg, ntc) =>
{
_logger.LogEnvelopeError(uuid: uuid, signature: signature, message: "Unexpected error happend in api/envelope/reject");
_logger.LogNotice(ntc);
return this.ViewInnerServiceError();
});
}
catch (Exception e)
{
_logger.LogError(e, "{Message}", e.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
_logger.LogError(e, "{Message}", e.Message);
return StatusCode(StatusCodes.Status500InternalServerError);
}
}
}

View File

@@ -1,5 +1,4 @@
using EnvelopeGenerator.CommonServices;
using EnvelopeGenerator.Web.Services;
using EnvelopeGenerator.Web.Services;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
@@ -8,33 +7,40 @@ using Microsoft.AspNetCore.Authorization;
using DigitalData.Core.API;
using EnvelopeGenerator.Extensions;
using Microsoft.Extensions.Localization;
using DigitalData.Core.DTO;
using Microsoft.AspNetCore.Localization;
using EnvelopeGenerator.Web.Models;
using EnvelopeGenerator.Application.Resources;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using static EnvelopeGenerator.CommonServices.Constants;
using Ganss.Xss;
using Newtonsoft.Json;
using EnvelopeGenerator.Application.DTOs;
using DigitalData.Core.Client;
using OtpNet;
using EnvelopeGenerator.Application.Contracts.Services;
using static EnvelopeGenerator.Domain.Constants;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers;
public class HomeController : ViewControllerBase
{
private readonly EnvelopeOldService envelopeOldService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverService _envRcvService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeHistoryService _historyService;
private readonly IConfiguration _configuration;
[Obsolete("Use MediatR")]
private readonly IEnvelopeMailService _mailService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverReadOnlyService _readOnlyService;
private readonly IAuthenticator _authenticator;
[Obsolete("Use MediatR")]
private readonly IReceiverService _rcvService;
private readonly IEnvelopeSmsHandler _envSmsHandler;
[Obsolete("Use MediatR")]
public HomeController(EnvelopeOldService envelopeOldService, ILogger<HomeController> logger, IEnvelopeReceiverService envelopeReceiverService, IEnvelopeHistoryService historyService, IStringLocalizer<Resource> localizer, IConfiguration configuration, HtmlSanitizer sanitizer, Cultures cultures, IEnvelopeMailService envelopeMailService, IEnvelopeReceiverReadOnlyService readOnlyService, IAuthenticator authenticator, IReceiverService receiverService, IEnvelopeSmsHandler envelopeSmsService) : base(logger, sanitizer, cultures, localizer)
{
this.envelopeOldService = envelopeOldService;
@@ -69,6 +75,7 @@ public class HomeController : ViewControllerBase
}
[HttpGet("EnvelopeKey/{envelopeReceiverId}")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> MainAsync([FromRoute] string envelopeReceiverId, [FromQuery] string? culture = null)
{
try
@@ -131,6 +138,7 @@ public class HomeController : ViewControllerBase
}
[HttpGet("EnvelopeKey/{envelopeReceiverId}/Locked")]
[Obsolete("Use DigitalData.Core.Exceptions and .Middleware")]
public async Task<IActionResult> EnvelopeLocked([FromRoute] string envelopeReceiverId)
{
try
@@ -163,6 +171,7 @@ public class HomeController : ViewControllerBase
}
}
[Obsolete("Use MediatR")]
private async Task<IActionResult> CreateShowEnvelopeView(string envelopeReceiverId, EnvelopeReceiverDto er)
{
try
@@ -251,6 +260,7 @@ public class HomeController : ViewControllerBase
}
}
[Obsolete("Use MediatR")]
[NonAction]
private async Task<IActionResult?> HandleAccessCodeAsync(Auth auth, EnvelopeReceiverSecretDto er_secret, string envelopeReceiverId)
{
@@ -323,6 +333,7 @@ public class HomeController : ViewControllerBase
#endregion
[HttpPost("EnvelopeKey/{envelopeReceiverId}/Locked")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> LogInEnvelope([FromRoute] string envelopeReceiverId, [FromForm] Auth auth)
{
try
@@ -401,6 +412,7 @@ public class HomeController : ViewControllerBase
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpGet("EnvelopeKey/{envelopeReceiverId}/Success")]
[Obsolete("Use DigitalData.Core.Exceptions and .Middleware")]
public async Task<IActionResult> EnvelopeSigned(string envelopeReceiverId)
{
try
@@ -412,7 +424,7 @@ public class HomeController : ViewControllerBase
if(!isExisting)
return this.ViewEnvelopeNotFound();
Common.EnvelopeReceiver response = await envelopeOldService.LoadEnvelope(envelopeReceiverId);
EnvelopeReceiver response = await envelopeOldService.LoadEnvelope(envelopeReceiverId);
if (!envelopeOldService.ReceiverAlreadySigned((Envelope)response.Envelope, (int)response.Receiver.Id))
return base.Redirect($"/EnvelopeKey/{envelopeReceiverId}/Locked");
@@ -436,6 +448,7 @@ public class HomeController : ViewControllerBase
[Authorize(Roles = ReceiverRole.FullyAuth)]
[HttpGet("EnvelopeKey/{envelopeReceiverId}/Rejected")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> EnvelopeRejected(string envelopeReceiverId)
{
try
@@ -467,6 +480,7 @@ public class HomeController : ViewControllerBase
}
[HttpGet("EnvelopeKey/{readOnlyKey}/ReadOnly")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> EnvelopeReceiverReadOnly([FromRoute] string readOnlyKey)
{
try

View File

@@ -1,10 +1,10 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using static EnvelopeGenerator.CommonServices.Constants;
using static EnvelopeGenerator.Domain.Constants;
namespace EnvelopeGenerator.Web.Controllers
{
@@ -14,12 +14,16 @@ namespace EnvelopeGenerator.Web.Controllers
{
private readonly ILogger<ReadOnlyController> _logger;
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverReadOnlyService _erroService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeMailService _mailService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeHistoryService _histService;
[Obsolete("Use MediatR")]
public ReadOnlyController(ILogger<ReadOnlyController> logger, IEnvelopeReceiverReadOnlyService erroService, IEnvelopeMailService mailService, IEnvelopeHistoryService histService)
{
_logger = logger;
@@ -30,6 +34,7 @@ namespace EnvelopeGenerator.Web.Controllers
[HttpPost]
[Authorize(Roles = ReceiverRole.FullyAuth)]
[Obsolete("Use MediatR")]
public async Task<IActionResult> CreateAsync([FromBody] EnvelopeReceiverReadOnlyCreateDto createDto)
{
try
@@ -62,7 +67,7 @@ namespace EnvelopeGenerator.Web.Controllers
}
//read new entity
var read_res = await _erroService.ReadByIdAsync(creation_res.Data);
var read_res = await _erroService.ReadByIdAsync(creation_res.Data.Id);
if (read_res.IsFailed)
{
_logger.LogNotice(creation_res);
@@ -76,7 +81,7 @@ namespace EnvelopeGenerator.Web.Controllers
{
//TODO: implement multi-threading to history process (Task)
//TODO: remove casting after change the id type
var hist_res = await _histService.RecordAsync((int)createDto.EnvelopeId, createDto.AddedWho, Common.Constants.EnvelopeStatus.EnvelopeShared);
var hist_res = await _histService.RecordAsync((int)createDto.EnvelopeId, createDto.AddedWho, EnvelopeStatus.EnvelopeShared);
if (hist_res.IsFailed)
{
_logger.LogError("Although the envelope was sent as read-only, the EnvelopeShared hisotry could not be saved. Create DTO:\n{createDto}", JsonConvert.SerializeObject(createDto));

View File

@@ -4,25 +4,28 @@ using Microsoft.AspNetCore.Mvc;
using EnvelopeGenerator.Extensions;
using Microsoft.Extensions.Localization;
using EnvelopeGenerator.Application.Resources;
using DigitalData.Core.DTO;
using EnvelopeGenerator.Application.Extensions;
using Microsoft.Extensions.Options;
using Microsoft.AspNetCore.Authorization;
using static EnvelopeGenerator.CommonServices.Constants;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
using EnvelopeGenerator.Application.Contracts.Services;
using DigitalData.Core.Abstraction.Application.DTO;
using static EnvelopeGenerator.Domain.Constants;
namespace EnvelopeGenerator.Web.Controllers;
//TODO: Add authorization as well as limiting the link duration (intermediate token with different role) or sign it
public class TFARegController : ViewControllerBase
{
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverService _envRcvService;
private readonly IAuthenticator _authenticator;
[Obsolete("Use MediatR")]
private readonly IReceiverService _rcvService;
private readonly TFARegParams _params;
[Obsolete("Use MediatR")]
public TFARegController(ILogger<TFARegController> logger, HtmlSanitizer sanitizer, Cultures cultures, IStringLocalizer<Resource> localizer, IEnvelopeReceiverService erService, IAuthenticator authenticator, IReceiverService receiverService, IOptions<TFARegParams> tfaRegParamsOptions) : base(logger, sanitizer, cultures, localizer)
{
_envRcvService = erService;
@@ -34,6 +37,7 @@ public class TFARegController : ViewControllerBase
//TODO: move under auth route
[Authorize]
[HttpGet("tfa/{envelopeReceiverId}")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> Reg(string envelopeReceiverId)
{
try

View File

@@ -3,13 +3,13 @@ using EnvelopeGenerator.Domain.Entities;
using DigitalData.Core.API;
using EnvelopeGenerator.Application.Contracts.Services;
namespace EnvelopeGenerator.Web.Controllers.Test
{
public class TestConfigController : ReadControllerBase<IConfigService, ConfigDto, Config, int>
{
public TestConfigController(ILogger<TestConfigController> logger, IConfigService service) : base(logger, service)
{
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestConfigController : ReadControllerBase<IConfigService, ConfigDto, Config, int>
{
public TestConfigController(ILogger<TestConfigController> logger, IConfigService service) : base(logger, service)
{
}
}
}

View File

@@ -1,18 +1,18 @@
using DigitalData.Core.API;
using DigitalData.Core.Abstraction.Application;
using Microsoft.AspNetCore.Mvc;
using DigitalData.Core.Abstractions;
namespace EnvelopeGenerator.Web.Controllers.Test
namespace EnvelopeGenerator.Web.Controllers.Test;
[ApiController]
[Route("api/test/[controller]")]
[Obsolete("Use MediatR")]
public class TestControllerBase<TCRUDService, TDto, TEntity, TId> : BasicCRUDControllerBase<TCRUDService, TDto, TEntity, TId>
where TCRUDService : ICRUDService<TDto, TDto, TEntity, TId>
where TDto : class
where TEntity : class
{
[ApiController]
[Route("api/test/[controller]")]
public class TestControllerBase<TCRUDService, TDto, TEntity, TId> : BasicCRUDControllerBase<TCRUDService, TDto, TEntity, TId>
where TCRUDService : ICRUDService<TDto, TDto, TEntity, TId>
where TDto : class, IUnique<TId> where TEntity : class, IUnique<TId>
public TestControllerBase(ILogger logger, TCRUDService service) : base(logger, service)
{
public TestControllerBase(ILogger logger, TCRUDService service) : base(logger, service)
{
}
}
}

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestDocumentReceiverElementController : TestControllerBase<IDocumentReceiverElementService, DocumentReceiverElementDto, DocumentReceiverElement, int>
{
public TestDocumentReceiverElementController(ILogger<TestDocumentReceiverElementController> logger, IDocumentReceiverElementService service) : base(logger, service)

View File

@@ -2,13 +2,12 @@
using EnvelopeGenerator.Application.DTOs;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers.Test
{
public class TestDocumentStatusController : TestControllerBase<IDocumentStatusService, DocumentStatusDto, DocumentStatus, int>
{
public TestDocumentStatusController(ILogger<TestDocumentStatusController> logger, IDocumentStatusService service) : base(logger, service)
{
namespace EnvelopeGenerator.Web.Controllers.Test;
}
[Obsolete("Use MediatR")]
public class TestDocumentStatusController : TestControllerBase<IDocumentStatusService, DocumentStatusDto, DocumentStatus, int>
{
public TestDocumentStatusController(ILogger<TestDocumentStatusController> logger, IDocumentStatusService service) : base(logger, service)
{
}
}

View File

@@ -1,33 +1,34 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.AspNetCore.Mvc;
using static EnvelopeGenerator.CommonServices.Constants;
using static EnvelopeGenerator.Domain.Constants;
namespace EnvelopeGenerator.Web.Controllers.Test
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEmailTemplateController : TestControllerBase<IEmailTemplateService, EmailTemplateDto, EmailTemplate, int>
{
public class TestEmailTemplateController : TestControllerBase<IEmailTemplateService, EmailTemplateDto, EmailTemplate, int>
public TestEmailTemplateController(ILogger<TestEmailTemplateController> logger, IEmailTemplateService service) : base(logger, service)
{
public TestEmailTemplateController(ILogger<TestEmailTemplateController> logger, IEmailTemplateService service) : base(logger, service)
{
}
[HttpGet]
public virtual async Task<IActionResult> GetAll([FromQuery] string? tempType = null)
{
return tempType is null
? await base.GetAll()
: await _service.ReadByNameAsync((EmailTemplateType)Enum.Parse(typeof(EmailTemplateType), tempType)).ThenAsync(
Success: Ok,
Fail: IActionResult (messages, notices) =>
{
_logger.LogNotice(notices);
return NotFound(messages);
});
}
[NonAction]
public override Task<IActionResult> GetAll() => base.GetAll();
}
[HttpGet]
[Obsolete("Use MediatR")]
public virtual async Task<IActionResult> GetAll([FromQuery] string? tempType = null)
{
return tempType is null
? await base.GetAll()
: await _service.ReadByNameAsync((EmailTemplateType)Enum.Parse(typeof(EmailTemplateType), tempType)).ThenAsync(
Success: Ok,
Fail: IActionResult (messages, notices) =>
{
_logger.LogNotice(notices);
return NotFound(messages);
});
}
[NonAction]
public override Task<IActionResult> GetAll() => base.GetAll();
}

View File

@@ -2,13 +2,13 @@
using EnvelopeGenerator.Application.DTOs;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers.Test
{
public class TestEnvelopeCertificateController : TestControllerBase<IEnvelopeCertificateService, EnvelopeCertificateDto, EnvelopeCertificate, int>
{
public TestEnvelopeCertificateController(ILogger<TestEnvelopeCertificateController> logger, IEnvelopeCertificateService service) : base(logger, service)
{
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeCertificateController : TestControllerBase<IEnvelopeCertificateService, EnvelopeCertificateDto, EnvelopeCertificate, int>
{
public TestEnvelopeCertificateController(ILogger<TestEnvelopeCertificateController> logger, IEnvelopeCertificateService service) : base(logger, service)
{
}
}
}

View File

@@ -4,53 +4,53 @@ using Microsoft.AspNetCore.Mvc;
using EnvelopeGenerator.Extensions;
using EnvelopeGenerator.Application.Contracts.Services;
namespace EnvelopeGenerator.Web.Controllers.Test
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeController : TestControllerBase<IEnvelopeService, EnvelopeDto, Envelope, int>
{
public class TestEnvelopeController : TestControllerBase<IEnvelopeService, EnvelopeDto, Envelope, int>
public TestEnvelopeController(ILogger<TestEnvelopeController> logger, IEnvelopeService service) : base(logger, service)
{
public TestEnvelopeController(ILogger<TestEnvelopeController> logger, IEnvelopeService service) : base(logger, service)
}
[NonAction]
public override Task<IActionResult> GetAll() => base.GetAll();
[HttpGet]
public async Task<IActionResult> GetAll([FromQuery] string? envelopeKey = default, [FromQuery] bool withDocuments = false, [FromQuery] bool withHistory = false, [FromQuery] bool withDocumentReceiverElement = false, [FromQuery] bool withUser = false, [FromQuery] bool withAll = true)
{
if (envelopeKey is not null)
{
(var uuid, var signature) = envelopeKey.DecodeEnvelopeReceiverId();
if (uuid is null)
return BadRequest("UUID is null");
var envlopeServiceResult = await _service.ReadByUuidAsync(
uuid: uuid,
withDocuments: withDocuments, withHistory: withHistory, withDocumentReceiverElement: withDocumentReceiverElement, withUser: withUser, withAll: withAll);
if (envlopeServiceResult.IsSuccess)
{
return Ok(envlopeServiceResult.Data);
}
return NotFound();
}
[NonAction]
public override Task<IActionResult> GetAll() => base.GetAll();
[HttpGet]
public async Task<IActionResult> GetAll([FromQuery] string? envelopeKey = default, [FromQuery] bool withDocuments = false, [FromQuery] bool withHistory = false, [FromQuery] bool withDocumentReceiverElement = false, [FromQuery] bool withUser = false, [FromQuery] bool withAll = true)
var result = await _service.ReadAllWithAsync(documents: withDocuments, history: withHistory);
if (result.IsSuccess)
{
if(envelopeKey is not null)
{
(var uuid, var signature) = envelopeKey.DecodeEnvelopeReceiverId();
if (uuid is null)
return BadRequest("UUID is null");
var envlopeServiceResult = await _service.ReadByUuidAsync(
uuid: uuid,
withDocuments: withDocuments, withHistory: withHistory, withDocumentReceiverElement:withDocumentReceiverElement, withUser:withUser, withAll:withAll);
if (envlopeServiceResult.IsSuccess)
{
return Ok(envlopeServiceResult.Data);
}
return NotFound();
}
var result = await _service.ReadAllWithAsync(documents: withDocuments, history: withHistory);
if (result.IsSuccess)
{
return Ok(result);
}
return NotFound(result);
return Ok(result);
}
return NotFound(result);
}
[HttpGet("decode")]
public IActionResult DecodeEnvelopeReceiverId(string envelopeReceiverId, int type = 0)
[HttpGet("decode")]
public IActionResult DecodeEnvelopeReceiverId(string envelopeReceiverId, int type = 0)
{
return type switch
{
return type switch
{
1 => Ok(envelopeReceiverId.GetEnvelopeUuid()),
2 => Ok(envelopeReceiverId.GetReceiverSignature()),
_ => Ok(envelopeReceiverId.DecodeEnvelopeReceiverId()),
};
}
}
1 => Ok(envelopeReceiverId.GetEnvelopeUuid()),
2 => Ok(envelopeReceiverId.GetReceiverSignature()),
_ => Ok(envelopeReceiverId.DecodeEnvelopeReceiverId()),
};
}
}

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeDocumentController : TestControllerBase<IEnvelopeDocumentService, EnvelopeDocumentDto, EnvelopeDocument, int>
{
public TestEnvelopeDocumentController(ILogger<TestEnvelopeDocumentController> logger, IEnvelopeDocumentService service) : base(logger, service)

View File

@@ -3,9 +3,11 @@ using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.AspNetCore.Mvc;
using static EnvelopeGenerator.Domain.Constants;
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeHistoryController : CRUDControllerBase<IEnvelopeHistoryService, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistoryDto, EnvelopeHistory, long>
{
public TestEnvelopeHistoryController(ILogger<TestEnvelopeHistoryController> logger, IEnvelopeHistoryService service) : base(logger, service)
@@ -13,7 +15,7 @@ public class TestEnvelopeHistoryController : CRUDControllerBase<IEnvelopeHistory
}
[HttpGet("Count")]
public async Task<IActionResult> Count(int? envelopeId = null, string? userReference = null, int? status = null)
public async Task<IActionResult> Count(int? envelopeId = null, string? userReference = null, EnvelopeStatus? status = null)
{
return Ok(await _service.CountAsync(envelopeId, userReference, status));
}
@@ -25,7 +27,7 @@ public class TestEnvelopeHistoryController : CRUDControllerBase<IEnvelopeHistory
}
[HttpGet]
public async Task<IActionResult> GetAsyncWith(int? envelopeId = null, string? userReference = null, int? status = null)
public async Task<IActionResult> GetAsyncWith(int? envelopeId = null, string? userReference = null, EnvelopeStatus? status = null)
{
return Ok(await _service.ReadAsync(envelopeId: envelopeId, userReference: userReference, status: status));
}

View File

@@ -1,48 +1,50 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using Microsoft.AspNetCore.Mvc;
using System.Net;
namespace EnvelopeGenerator.Web.Controllers.Test
namespace EnvelopeGenerator.Web.Controllers.Test;
[ApiController]
[Route("api/test/[controller]")]
public class TestEnvelopeMailController : ControllerBase
{
[ApiController]
[Route("api/test/[controller]")]
public class TestEnvelopeMailController : ControllerBase
private readonly ILogger<TestEnvelopeMailController> _logger;
[Obsolete("Use MediatR")]
private readonly IEnvelopeMailService _mailService;
[Obsolete("Use MediatR")]
private readonly IEnvelopeReceiverService _envRcvService;
[Obsolete("Use MediatR")]
public TestEnvelopeMailController(ILogger<TestEnvelopeMailController> logger, IEnvelopeMailService envelopeMailService, IEnvelopeReceiverService envelopeReceiverService)
{
private readonly ILogger<TestEnvelopeMailController> _logger;
private readonly IEnvelopeMailService _mailService;
private readonly IEnvelopeReceiverService _envRcvService;
_logger = logger;
_mailService = envelopeMailService;
_envRcvService = envelopeReceiverService;
}
public TestEnvelopeMailController(ILogger<TestEnvelopeMailController> logger, IEnvelopeMailService envelopeMailService, IEnvelopeReceiverService envelopeReceiverService)
{
_logger = logger;
_mailService = envelopeMailService;
_envRcvService = envelopeReceiverService;
}
[HttpGet]
[Obsolete("Use MediatR")]
public async Task<IActionResult> SendAccessCode([FromQuery] string envelopeReceiverId = "ZDlmYjZmYjctNTBhNS00NTcyLWI5NTQtYzJjYmY4N2UwZmZhOjowRDI3MkEwNTdGMjRBMkY3MEZDMzM3QkRBQzA1MjYxRjU3NTI2QzgxQ0IyMUE5NzE1RjA1NTJFQzdFNjIwNjY1")
{
return await _envRcvService.ReadByEnvelopeReceiverIdAsync(envelopeReceiverId: envelopeReceiverId).ThenAsync<EnvelopeReceiverDto, IActionResult>(
SuccessAsync: async er =>
{
[HttpGet]
public async Task<IActionResult> SendAccessCode([FromQuery] string envelopeReceiverId = "ZDlmYjZmYjctNTBhNS00NTcyLWI5NTQtYzJjYmY4N2UwZmZhOjowRDI3MkEwNTdGMjRBMkY3MEZDMzM3QkRBQzA1MjYxRjU3NTI2QzgxQ0IyMUE5NzE1RjA1NTJFQzdFNjIwNjY1")
{
return await _envRcvService.ReadByEnvelopeReceiverIdAsync(envelopeReceiverId: envelopeReceiverId).ThenAsync<EnvelopeReceiverDto, IActionResult>(
SuccessAsync: async er =>
var mailRes = await _mailService.SendAccessCodeAsync(envelopeReceiverDto: er);
if (mailRes.IsFailed)
{
_logger.LogNotice(mailRes);
return StatusCode(500, mailRes.Notices);
}
var mailRes = await _mailService.SendAccessCodeAsync(envelopeReceiverDto: er);
if (mailRes.IsFailed)
{
_logger.LogNotice(mailRes);
return StatusCode(500, mailRes.Notices);
}
return Ok();
},
Fail: (messages, notices) =>
{
_logger.LogNotice(notices);
return StatusCode(500, notices);
});
}
return Ok();
},
Fail: (messages, notices) =>
{
_logger.LogNotice(notices);
return StatusCode(500, notices);
});
}
}

View File

@@ -1,66 +1,66 @@
using DigitalData.Core.API;
using DigitalData.Core.DTO;
using EnvelopeGenerator.Extensions;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.AspNetCore.Mvc;
using EnvelopeGenerator.Application.DTOs.EnvelopeReceiver;
using EnvelopeGenerator.Application.Contracts.Services;
using DigitalData.Core.Abstraction.Application.DTO;
namespace EnvelopeGenerator.Web.Controllers.Test
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeReceiverController : ReadControllerBase<IEnvelopeReceiverService, EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>
{
public class TestEnvelopeReceiverController : ReadControllerBase<IEnvelopeReceiverService, EnvelopeReceiverDto, EnvelopeReceiver, (int Envelope, int Receiver)>
public TestEnvelopeReceiverController(ILogger<TestEnvelopeReceiverController> logger, IEnvelopeReceiverService service) : base(logger, service)
{
public TestEnvelopeReceiverController(ILogger<TestEnvelopeReceiverController> logger, IEnvelopeReceiverService service) : base(logger, service)
}
[HttpGet("verify-access-code/{envelope_receiver_id}")]
public async Task<IActionResult> VerifyAccessCode([FromRoute] string envelope_receiver_id, [FromQuery] string access_code)
{
var verification = await _service.VerifyAccessCodeAsync(envelopeReceiverId:envelope_receiver_id, accessCode: access_code);
if (verification.IsSuccess)
return Ok(verification);
else if (verification.HasFlag(Flag.SecurityBreach))
return Forbid();
else if (verification.HasFlag(Flag.SecurityBreachOrDataIntegrity))
return Conflict();
else
return this.InnerServiceError(verification);
}
[HttpGet("e-r-id/{envelope_receiver_id}")]
public async Task<IActionResult> GetByEnvelopeReceiverId([FromRoute] string envelope_receiver_id)
{
var er_result = await _service.ReadByEnvelopeReceiverIdAsync(envelopeReceiverId: envelope_receiver_id);
if (er_result.IsSuccess)
return Ok(er_result);
else
return this.InnerServiceError(er_result);
}
[HttpGet("decode")]
public IActionResult DecodeEnvelopeReceiverId(string envelopeReceiverId, bool isReadOnly = false)
{
if (isReadOnly)
{
var readOnlyId = envelopeReceiverId.DecodeEnvelopeReceiverReadOnlyId();
return Ok(new { readOnlyId });
}
[HttpGet("verify-access-code/{envelope_receiver_id}")]
public async Task<IActionResult> VerifyAccessCode([FromRoute] string envelope_receiver_id, [FromQuery] string access_code)
else
{
var verification = await _service.VerifyAccessCodeAsync(envelopeReceiverId:envelope_receiver_id, accessCode: access_code);
if (verification.IsSuccess)
return Ok(verification);
else if (verification.HasFlag(Flag.SecurityBreach))
return Forbid();
else if (verification.HasFlag(Flag.SecurityBreachOrDataIntegrity))
return Conflict();
else
return this.InnerServiceError(verification);
}
[HttpGet("e-r-id/{envelope_receiver_id}")]
public async Task<IActionResult> GetByEnvelopeReceiverId([FromRoute] string envelope_receiver_id)
{
var er_result = await _service.ReadByEnvelopeReceiverIdAsync(envelopeReceiverId: envelope_receiver_id);
if (er_result.IsSuccess)
return Ok(er_result);
else
return this.InnerServiceError(er_result);
}
[HttpGet("decode")]
public IActionResult DecodeEnvelopeReceiverId(string envelopeReceiverId, bool isReadOnly = false)
{
if (isReadOnly)
{
var readOnlyId = envelopeReceiverId.DecodeEnvelopeReceiverReadOnlyId();
return Ok(new { readOnlyId });
}
else
{
var (EnvelopeUuid, ReceiverSignature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
return Ok(new { uuid = EnvelopeUuid, signature = ReceiverSignature });
}
}
[HttpGet("encode")]
public IActionResult EncodeEnvelopeReceiverId(string? uuid = null, string? signature = null, long? readOnlyId = null)
{
if(readOnlyId is long readOnlyId_long)
return Ok(readOnlyId_long.EncodeEnvelopeReceiverId());
else
return Ok((uuid ?? string.Empty, signature ?? string.Empty).EncodeEnvelopeReceiverId());
var (EnvelopeUuid, ReceiverSignature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
return Ok(new { uuid = EnvelopeUuid, signature = ReceiverSignature });
}
}
[HttpGet("encode")]
public IActionResult EncodeEnvelopeReceiverId(string? uuid = null, string? signature = null, long? readOnlyId = null)
{
if(readOnlyId is long readOnlyId_long)
return Ok(readOnlyId_long.EncodeEnvelopeReceiverId());
else
return Ok((uuid ?? string.Empty, signature ?? string.Empty).EncodeEnvelopeReceiverId());
}
}

View File

@@ -4,6 +4,7 @@ using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestEnvelopeTypeController : TestControllerBase<IEnvelopeTypeService, EnvelopeTypeDto, EnvelopeType, int>
{
public TestEnvelopeTypeController(ILogger<TestEnvelopeTypeController> logger, IEnvelopeTypeService service) : base(logger, service)

View File

@@ -3,13 +3,13 @@ using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.DTOs.Receiver;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Web.Controllers.Test
{
public class TestReceiverController : CRUDControllerBase<IReceiverService, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
{
public TestReceiverController(ILogger<TestReceiverController> logger, IReceiverService service) : base(logger, service)
{
namespace EnvelopeGenerator.Web.Controllers.Test;
[Obsolete("Use MediatR")]
public class TestReceiverController : CRUDControllerBase<IReceiverService, ReceiverCreateDto, ReceiverReadDto, ReceiverUpdateDto, Receiver, int>
{
public TestReceiverController(ILogger<TestReceiverController> logger, IReceiverService service) : base(logger, service)
{
}
}
}

View File

@@ -2,36 +2,34 @@
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace EnvelopeGenerator.Web.Controllers.Test
namespace EnvelopeGenerator.Web.Controllers.Test;
[ApiController]
[Route("api/test/[controller]")]
public class TestSanitizeController : ControllerBase
{
[ApiController]
[Route("api/test/[controller]")]
public class TestSanitizeController : ControllerBase
private readonly HtmlEncoder _htmlEncoder;
private readonly HtmlSanitizer _sanitizer;
public TestSanitizeController(HtmlEncoder htmlEncoder, HtmlSanitizer sanitizer)
{
private readonly HtmlEncoder _htmlEncoder;
private readonly HtmlSanitizer _sanitizer;
public TestSanitizeController(HtmlEncoder htmlEncoder, HtmlSanitizer sanitizer)
{
_htmlEncoder = htmlEncoder;
_sanitizer = sanitizer;
}
[HttpGet("sanitize")]
public IActionResult Sanitize([FromQuery] string? input = null) => Ok(new
{
input,
Sanitized = _sanitizer.Sanitize(input),
SanitizedDocument = _sanitizer.SanitizeDocument(input),
SanitizedDom = _sanitizer.SanitizeDom(input)
});
[HttpGet("encode")]
public IActionResult Encoder([FromQuery] string? input = null) => Ok(new
{
input,
Encoded = _htmlEncoder.Encode(input)
});
_htmlEncoder = htmlEncoder;
_sanitizer = sanitizer;
}
}
[HttpGet("sanitize")]
public IActionResult Sanitize([FromQuery] string input) => Ok(new
{
input,
Sanitized = _sanitizer.Sanitize(input),
SanitizedDocument = _sanitizer.SanitizeDocument(input),
SanitizedDom = _sanitizer.SanitizeDom(input)
});
[HttpGet("encode")]
public IActionResult Encoder([FromQuery] string input) => Ok(new
{
input,
Encoded = _htmlEncoder.Encode(input)
});
}

Some files were not shown because too many files have changed in this diff Show More