From c079aee0ca1363ef49428d1c3adbcd9527b8bd44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Mon, 29 Jun 2026 14:10:27 +0300 Subject: [PATCH] SQL Server password change --- .../appsettings.Dev.json | 4 +- .../appsettings.Production.json | 4 +- .../appsettings.json | 4 +- .../PlatformHttpApiHostModule.cs | 15 ++ .../appsettings.Dev.json | 4 +- .../appsettings.Production.json | 4 +- .../appsettings.json | 6 +- .../DynamicDataRepository_Tests.cs | 4 +- configs/deployment/docker-compose-data.yml | 4 +- configs/deployment/docker-compose-devops.yml | 2 +- configs/docker/docker-compose-data.yml | 4 +- configs/docker/docker-compose-n8n.yml | 2 +- ui/src/views/setup/DatabaseSetup.tsx | 159 ++++++++++++++---- 13 files changed, 163 insertions(+), 53 deletions(-) diff --git a/api/src/Sozsoft.Platform.DbMigrator/appsettings.Dev.json b/api/src/Sozsoft.Platform.DbMigrator/appsettings.Dev.json index bffadc0..0dac35a 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/appsettings.Dev.json +++ b/api/src/Sozsoft.Platform.DbMigrator/appsettings.Dev.json @@ -3,8 +3,8 @@ "CdnUrl": "https://cdn-api.sozsoft.com" }, "ConnectionStrings": { - "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", - "PostgreSql": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Sozsoft;" + "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", + "PostgreSql": "User ID=sa;Password=K1r1Ut7Z2o@@;Host=postgres;Port=5432;Database=Sozsoft;" }, "Redis": { "IsEnabled": "true", diff --git a/api/src/Sozsoft.Platform.DbMigrator/appsettings.Production.json b/api/src/Sozsoft.Platform.DbMigrator/appsettings.Production.json index 5c644e5..b4f70a1 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/appsettings.Production.json +++ b/api/src/Sozsoft.Platform.DbMigrator/appsettings.Production.json @@ -3,8 +3,8 @@ "CdnUrl": "https://cdn.sozsoft.com" }, "ConnectionStrings": { - "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", - "PostgreSql": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Sozsoft;" + "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", + "PostgreSql": "User ID=sa;Password=K1r1Ut7Z2o@@;Host=postgres;Port=5432;Database=Sozsoft;" }, "Redis": { "IsEnabled": "true", diff --git a/api/src/Sozsoft.Platform.DbMigrator/appsettings.json b/api/src/Sozsoft.Platform.DbMigrator/appsettings.json index f3a6d73..0443fdf 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/appsettings.json +++ b/api/src/Sozsoft.Platform.DbMigrator/appsettings.json @@ -4,8 +4,8 @@ "CdnUrl": "http://localhost:4005" }, "ConnectionStrings": { - "SqlServer": "Server=localhost;Database=Sozsoft;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", - "PostgreSql": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Sozsoft;" + "SqlServer": "Server=localhost;Database=Sozsoft;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", + "PostgreSql": "User ID=sa;Password=K1r1Ut7Z2o@@;Host=localhost;Port=5432;Database=Sozsoft;" }, "Redis": { "IsEnabled": "true", diff --git a/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs b/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs index 5743ddc..378a162 100644 --- a/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs +++ b/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs @@ -19,6 +19,7 @@ using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.Extensions.Configuration; @@ -491,6 +492,20 @@ public class PlatformHttpApiHostModule : AbpModule app.MapAbpStaticAssets(); app.UseRouting(); app.UseCors(); + app.Use(async (httpContext, next) => + { + if (httpContext.Request.Path.StartsWithSegments("/api/setup/application-status")) + { + var configuration = httpContext.RequestServices.GetRequiredService(); + var dbExists = SetupAppRunner.DatabaseIsReady(configuration); + + httpContext.Response.ContentType = "application/json; charset=utf-8"; + await httpContext.Response.WriteAsJsonAsync(new { dbExists }); + return; + } + + await next(); + }); app.Use(async (context, next) => { if (context.Request.Path.StartsWithSegments("/messengerhub") && diff --git a/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Dev.json b/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Dev.json index 4bb7f0b..3db9106 100644 --- a/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Dev.json +++ b/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Dev.json @@ -11,8 +11,8 @@ "BackupPath": "/var/opt/mssql/backup" }, "ConnectionStrings": { - "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", - "PostgreSql": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Sozsoft;" + "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", + "PostgreSql": "User ID=sa;Password=K1r1Ut7Z2o@@;Host=postgres;Port=5432;Database=Sozsoft;" }, "Redis": { "IsEnabled": "true", diff --git a/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Production.json b/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Production.json index 87ebdc4..30d7543 100644 --- a/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Production.json +++ b/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.Production.json @@ -11,8 +11,8 @@ "BackupPath": "/var/opt/mssql/backup" }, "ConnectionStrings": { - "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", - "PostgreSql": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Sozsoft;" + "SqlServer": "Server=sql;Database=Sozsoft;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", + "PostgreSql": "User ID=sa;Password=K1r1Ut7Z2o@@;Host=postgres;Port=5432;Database=Sozsoft;" }, "Redis": { "IsEnabled": "true", diff --git a/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.json b/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.json index 46de1be..8923b9d 100644 --- a/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.json +++ b/api/src/Sozsoft.Platform.HttpApi.Host/appsettings.json @@ -11,8 +11,8 @@ "BackupPath": "/var/opt/mssql/backup" }, "ConnectionStrings": { - "SqlServer": "Server=localhost;Database=Sozsoft;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", - "PostgreSql": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Sozsoft;" + "SqlServer": "Server=localhost;Database=Sozsoft;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;Encrypt=False;TrustServerCertificate=True;Connection Timeout=60;", + "PostgreSql": "User ID=sa;Password=K1r1Ut7Z2o@@;Host=localhost;Port=5432;Database=Sozsoft;" }, "Redis": { "IsEnabled": "true", @@ -30,7 +30,7 @@ } }, "Setup": { - "MigrationPassword": "sozsoft" + "MigrationPassword": "K1r1Ut7Z2o@@" }, "StringEncryption": { "DefaultPassPhrase": "UQpiYfT79zRZ3yYH" diff --git a/api/test/Sozsoft.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs b/api/test/Sozsoft.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs index cde1aa0..41702a8 100644 --- a/api/test/Sozsoft.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs +++ b/api/test/Sozsoft.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs @@ -16,8 +16,8 @@ public class DynamicDataRepository_Tests : PlatformEntityFrameworkCoreTestBase { private readonly DbContext _context; private readonly DbContext _context2; - private readonly string ConnectionString = "Server=localhost;Database=DemoTests;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;"; - private readonly string ConnectionString2 = "Server=localhost;Database=DemoTests2;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;"; + private readonly string ConnectionString = "Server=localhost;Database=DemoTests;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;TrustServerCertificate=True;"; + private readonly string ConnectionString2 = "Server=localhost;Database=DemoTests2;User Id=sa;password=K1r1Ut7Z2o@@;Trusted_Connection=False;TrustServerCertificate=True;"; public DynamicDataRepository_Tests() { diff --git a/configs/deployment/docker-compose-data.yml b/configs/deployment/docker-compose-data.yml index dda3064..89616ba 100644 --- a/configs/deployment/docker-compose-data.yml +++ b/configs/deployment/docker-compose-data.yml @@ -30,7 +30,7 @@ services: volumes: - pg:/var/lib/postgresql/data environment: - - POSTGRES_PASSWORD=NvQp8s@l + - POSTGRES_PASSWORD=K1r1Ut7Z2o@@ - POSTGRES_USER=sa - POSTGRES_DB=postgres networks: @@ -40,7 +40,7 @@ services: profiles: ["sql"] user: root environment: - - SA_PASSWORD=NvQp8s@l + - SA_PASSWORD=K1r1Ut7Z2o@@ - ACCEPT_EULA=Y - MSSQL_PID=Web ports: diff --git a/configs/deployment/docker-compose-devops.yml b/configs/deployment/docker-compose-devops.yml index 6dd7a78..3613ded 100644 --- a/configs/deployment/docker-compose-devops.yml +++ b/configs/deployment/docker-compose-devops.yml @@ -90,7 +90,7 @@ services: environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - - N8N_BASIC_AUTH_PASSWORD=NvQp8s@l + - N8N_BASIC_AUTH_PASSWORD=K1r1Ut7Z2o@@ - N8N_HOST=ai.sozsoft.com - N8N_PORT=5678 - NODE_ENV=production diff --git a/configs/docker/docker-compose-data.yml b/configs/docker/docker-compose-data.yml index 3a63f0a..9ac0eae 100644 --- a/configs/docker/docker-compose-data.yml +++ b/configs/docker/docker-compose-data.yml @@ -29,7 +29,7 @@ services: volumes: - pg:/var/lib/postgresql/data environment: - - POSTGRES_PASSWORD=NvQp8s@l + - POSTGRES_PASSWORD=K1r1Ut7Z2o@@ - POSTGRES_USER=sa - POSTGRES_DB=postgres - TZ=UTC @@ -39,7 +39,7 @@ services: profiles: ["sql"] user: root environment: - - SA_PASSWORD=NvQp8s@l + - SA_PASSWORD=K1r1Ut7Z2o@@ - ACCEPT_EULA=Y - MSSQL_PID=Web ports: diff --git a/configs/docker/docker-compose-n8n.yml b/configs/docker/docker-compose-n8n.yml index 5cb2979..e895920 100644 --- a/configs/docker/docker-compose-n8n.yml +++ b/configs/docker/docker-compose-n8n.yml @@ -10,7 +10,7 @@ services: environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - - N8N_BASIC_AUTH_PASSWORD=NvQp8s@l + - N8N_BASIC_AUTH_PASSWORD=K1r1Ut7Z2o@@ - N8N_HOST=api.sozsoft.com - N8N_PORT=5678 - NODE_ENV=production diff --git a/ui/src/views/setup/DatabaseSetup.tsx b/ui/src/views/setup/DatabaseSetup.tsx index 2723c45..a39748e 100644 --- a/ui/src/views/setup/DatabaseSetup.tsx +++ b/ui/src/views/setup/DatabaseSetup.tsx @@ -1,8 +1,11 @@ import { useEffect, useRef, useState } from 'react' +import classNames from 'classnames' import { APP_NAME } from '@/constants/app.constant' import { getMigrateUrl, getSetupStatus } from '@/services/setup.service' import { applicationConfigurationUrl } from '@/services/abpConfig.service' import { Button, Dialog } from '@/components/ui' +import PasswordInput from '@/components/shared/PasswordInput' +import { useStoreState } from '@/store' interface LogLine { level: 'info' | 'warn' | 'error' | 'success' | 'restart' | 'done' @@ -11,7 +14,7 @@ interface LogLine { type MigrationStatus = 'idle' | 'running' | 'success' | 'error' | 'restarting' -const levelClass: Record = { +const darkLevelClass: Record = { info: 'text-gray-300', warn: 'text-yellow-400', error: 'text-red-400', @@ -20,6 +23,15 @@ const levelClass: Record = { done: 'text-blue-400', } +const lightLevelClass: Record = { + info: 'text-gray-700', + warn: 'text-amber-600', + error: 'text-red-600', + success: 'text-emerald-600', + restart: 'text-blue-600', + done: 'text-blue-600', +} + /** * Sunucu yeniden başlayana kadar ABP config endpoint'ini poll eder. * Arka arkaya 2 başarılı yanıt alındığında onReady çağrılır. @@ -75,6 +87,8 @@ const pollUntilServerReady = (onReady: () => void, onAttempt?: (attempt: number) } const DatabaseSetup = () => { + const mode = useStoreState((state) => state.theme.mode) + const isDark = mode === 'dark' const [logs, setLogs] = useState([]) const [status, setStatus] = useState('idle') const [pollCountdown, setPollCountdown] = useState(0) @@ -82,7 +96,7 @@ const DatabaseSetup = () => { const [setupPassword, setSetupPassword] = useState('') const [isPasswordDialogOpen, setIsPasswordDialogOpen] = useState(false) const logEndRef = useRef(null) - const pollTimerRef = useRef | null>(null) + const pollCancelRef = useRef<(() => void) | null>(null) // Auto-scroll to bottom when new logs arrive useEffect(() => { @@ -99,9 +113,8 @@ const DatabaseSetup = () => { // Cleanup on component unmount useEffect(() => { return () => { - const ref = pollTimerRef.current as any - if (ref?.unref) ref.unref() - else if (pollTimerRef.current) clearTimeout(pollTimerRef.current as any) + pollCancelRef.current?.() + pollCancelRef.current = null } }, []) @@ -109,14 +122,18 @@ const DatabaseSetup = () => { setLogs((prev) => [...prev, { level, message }]) } + const levelClass = isDark ? darkLevelClass : lightLevelClass + // ── Poll ABP config endpoint until server is ready ────────────── const pollUntilReady = () => { + if (pollCancelRef.current) return + setStatus('restarting') const cancel = pollUntilServerReady( () => { window.location.href = '/' }, (attempt) => setPollCountdown(attempt), ) - pollTimerRef.current = { unref: cancel } as any + pollCancelRef.current = cancel } const startMigration = async () => { @@ -211,15 +228,25 @@ const DatabaseSetup = () => { } return ( -
+
{/* Header */}
-
+
{`${APP_NAME} @@ -227,11 +254,25 @@ const DatabaseSetup = () => {
-

+

{APP_NAME}

-
- +
+ Database creation and migration workspace
@@ -239,9 +280,19 @@ const DatabaseSetup = () => {
{/* Status Card */} -
+
{/* Card Header */} -
+
@@ -252,17 +303,31 @@ const DatabaseSetup = () => { {status === 'error' && 'Migration Failed ✗'}
- {logs.length} log lines + + {logs.length} log lines +
{/* Log Terminal */} -
+
{logs.length === 0 ? ( -

Logs will appear here when migration starts...

+

+ Logs will appear here when migration starts... +

) : ( logs.map((line, i) => ( -
- {String(i + 1).padStart(4, '0')} +
+ + {String(i + 1).padStart(4, '0')} + {line.message}
)) @@ -271,8 +336,13 @@ const DatabaseSetup = () => {
{/* Action Area */} -
-
+
+
{status === 'idle' && dbExists === true && 'Database already exists. Migration is not required.'} {status === 'idle' && dbExists === false && 'Database not found. Press the button to start migration.'} {status === 'idle' && dbExists === null && 'Checking database status...'} @@ -288,7 +358,7 @@ const DatabaseSetup = () => { {(status === 'idle' || status === 'error') && !dbExists && (