Tapis.Core.Infrastructure
1.0.18
dotnet add package Tapis.Core.Infrastructure --version 1.0.18
NuGet\Install-Package Tapis.Core.Infrastructure -Version 1.0.18
<PackageReference Include="Tapis.Core.Infrastructure" Version="1.0.18" />
<PackageVersion Include="Tapis.Core.Infrastructure" Version="1.0.18" />
<PackageReference Include="Tapis.Core.Infrastructure" />
paket add Tapis.Core.Infrastructure --version 1.0.18
#r "nuget: Tapis.Core.Infrastructure, 1.0.18"
#:package Tapis.Core.Infrastructure@1.0.18
#addin nuget:?package=Tapis.Core.Infrastructure&version=1.0.18
#tool nuget:?package=Tapis.Core.Infrastructure&version=1.0.18
Tapis.Core.Infrastructure
ASP.NET Core middleware, EF Core audit/concurrency interceptorları, Refit ürün API client'ları, permission attribute'ları, TapisExceptionHandler, IServiceExceptionHandler uygulaması ve isteğe bağlı Elasticsearch ILogger sağlayıcısı (AddTapisElasticsearch).
Tapis.Core.Shared üzerine ProjectReference.
1.0.4'ten itibaren Guid damga üreten VersiyonSaveChangesInterceptor ve
modelBuilder.ConfigureVersiyonluEntities() uzantısı kaldırıldı: damga
PostgreSQL'in xmin sistem sütunu (PERSISTENCE-STANDARDS §8).
Yerine modelBuilder.ConfigureXminConcurrency() geldi. Ürün DbContext'i bunu
OnModelCreating sonunda, kendi yapılandırmalarından sonra çağırır:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// ... ürünün kendi yapılandırmaları
modelBuilder.ConfigureXminConcurrency();
}
Uzantı tabloya eşlenmiş her entity'ye xmin gölge özelliğini concurrency
token olarak bağlar; owned, anahtarsız ve türetilmiş TPH tiplerini atlar.
Satıra yeni bir sütun eklenmez — xmin PostgreSQL'in zaten tuttuğu sistem
sütunudur.
1.0.5: eşleme EF'in standart mekanizmasıyla kurulur — gölge uint xmin özelliği
IsRowVersion() olur, Npgsql 7+ convention'ı onu xmin/xid'e eşler (sütun adı ve tipi elle
verilmez). Özellik gölge kalır: CLR özelliği olsaydı nesne eşleyiciler istemci damgasını
CurrentValue'ya yazar ve kontrol sessizce kapanırdı. Uzantı yalnız Npgsql üzerinde çağrılır
(if (Database.IsNpgsql())); yalnız PostgreSQL desteklenir. Paket
Npgsql'e bağımlı değildir.
1.0.6: modelBuilder.ConfigureTurkishCaseInsensitive() — Türkçe, büyük/küçük harfe duyarsız ICU
collation'ı (tr_ci = tr-TR-u-ks-level2, deterministic: false) modele ekler ve tabloya eşlenmiş her
metin özelliğine atar; eski SQL Server TURKISH_CI_AS davranışının PostgreSQL karşılığıdır. PostgreSQL 18+ gerekir
(nondeterministic collation ile LIKE/strpos). Harf farkının anlam taşıdığı teknik değerler
yapılandırmada .HarfDuyarli() ile işaretlenir. Bu kolonlarda ILIKE ve regex desteklenmez; düz
Contains/StartsWith yeterlidir.
if (Database.IsNpgsql())
{
modelBuilder.ConfigureXminConcurrency();
modelBuilder.ConfigureTurkishCaseInsensitive();
}
Bu sürümden itibaren paket Npgsql.EntityFrameworkCore.PostgreSQL (10.0.0) paketine bağımlıdır
(HasCollation).
Audit interceptor (AuditSaveChangesInterceptor) ve
IServiceExceptionHandler değişmedi.
1.0.8: ISistemTanimDbContext ve SistemTanimStore kaldırıldı — Core ürün DbContext'ine bağlı
sözleşme taşımaz. Ürün ISistemTanimStore'u (Shared) kendi DbContext'i üzerinden gerçekleştirir; SistemTanim
entity'si Shared'da kalır ve ürün DbContext'ine eklenir.
1.0.12: Hata olayı yayıncısı (opt-in). services.AddTanilamaOlayYayini(configuration) çağrılmazsa bağlantı ve hosted
service açılmaz. ITanilamaOlayKuyrugu.TryWrite(olay) kullanıcı yolunda senkron çalışır, bekletmez, fırlatmaz; olay sınırlı
bellek kanalına girer, arka plan yayıncısı maskeler ve RabbitMQ'ya publisher-confirm ile bırakır (user_id = bağlantı
kullanıcısı). Kanal doluysa, olay MaksOlayBayt'ı aşarsa, deneme hakkı bitmişse veya Tanilama:Broker:* (Host, Username,
Password, Exchange) eksikse olay düşürülür ve sayılır (Tapis.Core.Tanilama meter'ı); başka kimliğe ya da HTTP'ye yedek yoktur.
Uygulama istemcisi topoloji declare etmez. Tüketici Core'da değildir (Master'ın Monitoring klasöründe).
1.0.13: Destek eki köprüsü (opt-in, F2.3). services.AddMasterDestekEkKoprusu(configuration) (Tenancy:MasterUrl/ClientId/ ClientSecret) IMasterDestekEkKoprusuApi'yi kendi named HttpClient'ı ve kendi keyed token sağlayıcısıyla
(MasterDestekEkKoprusuServiceCollectionExtensions.TokenProviderKey) kaydeder; token yalnız support.ticket.attachment.read
ister. AddMasterDestekKoprusu'nun [write, read] token'ı değişmez: Master bu scope'u client'a vermemişse yalnız ek indirme
düşer. EkIndirAsync(MasterDestekTalebiEkIndirDTO) HttpResponseMessage döner (başlıklar önce, gövde tamponlanmaz, 4xx/5xx
fırlatmaz). Ürün adapter'ı durumu okur (404 → 404, 429 → 429, token reddi/401/403/taşıma → 503) ve başarılı yanıtı
SayanEkAkisi.AcAsync(yanit) ile sarar: akış baytları sayar, DestekEkSinirlari.IndirmeEnFazlaBayt (9.000.000) aşılınca
EkBoyutSiniriAsildiException fırlatır, bildirilen Content-Length sınırın üstündeyse hiç okumaz; dispose edilince yanıtı da
bırakır (yanıtın ömrü akışa bağlı). HttpResponseMessage ürünün Application port'unu geçmez.
1.0.17: Destek talebi görünürlüğü (eklemeli). IMasterDestekYonetimKoprusuApi.GorunurlukDegistirAsync(MasterDestekTalebiGorunurlukDTO)
(UrundenGorunurlukDegistir, support.ticket.manage) güncel detayı döner. Tapis.Core.Shared 2.0.19 gerekir. Ürün: kimlik alanlarını
token'dan doldurur, Gorunurluk'u kullanıcıdan aynen iletir; yetki, sahiplik ve "İşletme yalnız açıkken" kuralı Master'dadır.
Target Framework
- .NET 10
Installation
dotnet add package Tapis.Core.Infrastructure
Gizli bilgi sertleştirme (1.0.18)
Data Protection kalıcılığı. services.AddTapisDataProtection(configuration, applicationName) anahtarları
DataProtection:KeysPath dizinine (yoksa /app/keys) yazar; dizin yoksa oluşturulur. Her ortamda aynı kod yolu
çalışır: geliştirme ve testler DataProtection:KeysPath değerini yerel/geçici bir klasöre verir (ör.
appsettings.Development.json ya da testte AddInMemoryCollection). applicationName ürün başına farklıdır
(Master, HostelManagement, ServiceManagement); anahtarlar ürünler arasında paylaşılmaz. Docker'da ürün
başına adlandırılmış volume /app/keys'e bağlanır; yoksa her yeniden başlatmada anahtarlar yenilenir ve önceden
üretilmiş şifre sıfırlama/ilk giriş token'ları geçersiz olur.
Kabul edilen risk: Linux konteynerde DPAPI yoktur ve bu turda sertifikayla anahtar şifreleme kurulmadı; anahtarlar diskte şifresiz XML'dir. Koruma volume'a ve dosya sahipliğine dayanır.
Cryptography v2. EncryptString artık v2: + Base64(nonce(12) | etiket(16) | şifreli metin) yazar
(AES-256-GCM; anahtar = HKDF-SHA256(passphrase, sabit uygulama tuzu, info tapis-aes-gcm-v2)). DecryptString
v2: önekini GCM ile çözer (etiket tutmazsa CryptographicException); önek yoksa eski AES-CBC biçimini okur
(yalnız okuma, eski biçim bir daha yazılmaz). Kayıtlar güncellendikçe kendiliğinden v2'ye geçer.
ProductionSecretGuard. RequireMinimumKeyLength(configKey, value) JWT/simetrik/portal anahtarının UTF-8 bayt
uzunluğu 32'nin altındaysa her ortamda InvalidOperationException fırlatır. RequireInitialAdminPassword(value, isProduction) IlkYonetici:Sifre için: boş her ortamda, yer tutucu ve 12 karakter altı üretimde reddedilir.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Elastic.Extensions.Logging (>= 9.0.0)
- Microsoft.EntityFrameworkCore (>= 10.0.10)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.10)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.0)
- RabbitMQ.Client (>= 7.2.2)
- Refit (>= 8.0.0)
- Tapis.Core.Shared (>= 2.0.22)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.18 | 67 | 10/23/2026 |
| 1.0.17 | 220 | 10/17/2026 |
| 1.0.16 | 179 | 10/14/2026 |
| 1.0.15 | 182 | 10/12/2026 |
| 1.0.14 | 79 | 10/12/2026 |
| 1.0.13 | 284 | 10/3/2026 |
| 1.0.12 | 136 | 10/2/2026 |
| 1.0.11 | 111 | 10/1/2026 |
| 1.0.10 | 163 | 10/1/2026 |
| 1.0.9 | 157 | 9/30/2026 |
| 1.0.8 | 172 | 9/26/2026 |
| 1.0.7 | 116 | 9/26/2026 |
| 1.0.6 | 167 | 9/25/2026 |
| 1.0.5 | 168 | 9/21/2026 |
| 1.0.4 | 103 | 9/20/2026 |
| 1.0.3 | 158 | 9/5/2026 |
| 1.0.2 | 108 | 9/1/2026 |
| 1.0.0 | 139 | 8/28/2026 |
Gizli bilgi sertlestirme (KIRICI: Cryptography artik yalniz v2 yazar): AES-256-GCM + HKDF-SHA256, cikti v2: + Base64(nonce(12) + etiket(16) + sifreli metin); eski AES-CBC degerler yalniz okunur, uzunluk denetimi eklendi. AddTapisDataProtection(configuration, applicationName) (DataProtection:KeysPath, varsayilan /app/keys; anahtarlar diskte sifresiz, kabul edilen risk). ProductionSecretGuard.RequireMinimumKeyLength (UTF-8 >= 32 bayt) ve RequireInitialAdminPassword. Shared 2.0.22 gerekir. Destek talebi gorunurlugu (eklemeli): IMasterDestekYonetimKoprusuApi.GorunurlukDegistirAsync (POST api/DestekTalebi/UrundenGorunurlukDegistir, support.ticket.manage, MasterDestekTalebiGorunurlukDTO, guncel detay doner); Tapis.Core.Shared 2.0.19 sozlesmesi gerekir. Kalici destek bildirimleri (eklemeli): IMasterDestekKoprusuApi.BildirimListeAsync/BildirimOkunmamisSayisiAsync (read), IMasterDestekYonetimKoprusuApi.BildirimOkunduAsync/BildirimTumunuOkunduAsync/BildirimTalepOkunduAsync (manage; manage scope kalkarsa okundu isaretleme de kapanir). Shared 2.0.18 gerektirir. Destek sahip islemleri AYRI kopruye tasindi (KIRICI: IMasterDestekKoprusuApi'den dort uc kaldirildi; 1.0.14'u tuketen kod yoktu). Yeni IMasterDestekYonetimKoprusuApi (IptalAsync, GuncelleAsync, SahipYanitiAsync, multipart EkEkleAsync) + AddMasterDestekYonetimKoprusu(IConfiguration): ayri named HttpClient ve ayri keyed IMasterClientTokenProvider, token YALNIZ support.ticket.manage ister. Sebebi: AddMasterDestekKoprusu'nun token'i [write, read] tasir, manage tasimaz; sahip uclari o arayuzde kalsa Master 403 donerdi. Scope'u yapilandirmadan almak yalniz sahip islemlerini kapatir, talep olusturma ve okuma calismaya devam eder. Shared 2.0.17 gerektirir.