API jest aplikacją ASP.NET Core, która wykorzystuje różne usługi do budowy systemu opartego na mikroserwisach. Oto szczegółowy opis:
- Inicjalizacja i Konfiguracja:
WebApplication.CreateBuilder(args)
: Tworzy builder aplikacji webowej.- Ustawia ścieżki do plików konfiguracyjnych:
encryptedFilePath
(zaszyfrowany) ioriginalFilePath
(oryginalny).
- Szyfrowanie i Deszyfrowanie Plików Konfiguracyjnych:
- Pobiera hasło do deszyfrowania z zmiennej środowiskowej
APPSETTINGS_MAIN
. - Sprawdza, czy plik
appsettings.encrypted.json
istnieje. Jeśli tak, deszyfruje go do strumienia pamięci. Jeśli nie, szyfrujeappsettings.json
, a następnie deszyfruje nowo utworzony zaszyfrowany plik. - Wczytuje odszyfrowaną konfigurację do aplikacji.
- Pobiera hasło do deszyfrowania z zmiennej środowiskowej
- Konfiguracja Bazy Danych:
- Odczytuje connection stringi do MSSQL i MySQL z odszyfrowanej konfiguracji.
- Rejestruje konteksty baz danych w kontenerze usług:
ApplicationDbContext
iMsConnection
dla MSSQL.MysqlDbContext
iMysqlDbContextConfig
dla MySQL.
- Rejestracja Usług:
- Dodaje różne usługi do kontenera DI:
- Singletony:
NotificationService
,DDoSProtectionService
,AppSettingsService
. - Scoped:
CustomerService
,WareHauseService
,UserService
,InvoiceService
,InvoicePositionService
,WorkerService
,KPService
,AuthService
,VATService
,RabbitMQConnection
. - Transient: różne walidatory dla modeli danych (
CustomerValidation
,UsersValidation
,InvoiceValidator
, itp.). HttpClient
.
- Singletony:
- Dodaje różne usługi do kontenera DI:
- Konfiguracja Swaggera:
- Dodaje Swagger do generowania dokumentacji API, w tym konfigurację dla JWT.
- Konfiguracja JWT:
- Odczytuje klucz, wydawcę i odbiorcę JWT z konfiguracji.
- Dodaje i konfiguruje uwierzytelnianie JWT.
- Konfiguracja CORS:
- Dodaje politykę CORS, która pozwala na wszystkie nagłówki i metody HTTP.
- Środowisko i Middleware:
- Włącza Swagger i SwaggerUI w trybie deweloperskim.
- Konfiguruje routowanie, middleware dla ochrony przed DDos, HTTPS redirection, CORS, uwierzytelnianie i autoryzację.
- Mapowanie Kontrolerów:
- Mapuje kontrolery do ścieżek URL.
- Szyfrowanie Pliku Konfiguracyjnego przy Zatrzymaniu Aplikacji:
- Przy zatrzymaniu aplikacji, ponownie szyfruje
appsettings.json
i zapisuje go jakoappsettings.encrypted.json
.
- Przy zatrzymaniu aplikacji, ponownie szyfruje
- Uruchomienie Aplikacji:
- Uruchamia aplikację.
Całe API jest skonfigurowany do pracy z bazami danych, obsługi uwierzytelniania JWT, ochrony przed atakami DDos oraz zapewnienia elastyczności dzięki korzystaniu z usług DI. Dodatkowo używa mechanizmów szyfrowania dla zabezpieczenia konfiguracji.