From 84ea2e00556d6a403942590addf03e07affd7a04 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 02:12:07 +0000 Subject: [PATCH 1/5] Initial plan From 6727949a9833625f0fd7ea5b4f292a0e52d45144 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 02:15:48 +0000 Subject: [PATCH 2/5] Restructure project for API versioning - move files and update namespaces Co-authored-by: josephaw1022 <47674962+josephaw1022@users.noreply.github.com> --- .../Controllers/{ => V1Alpha1}/DatabaseController.cs | 4 ++-- .../Controllers/{ => V1Alpha1}/DatabaseUserController.cs | 4 ++-- .../{ => V1Alpha1}/ExternalSqlServerController.cs | 4 ++-- .../Controllers/{ => V1Alpha1}/SchemaController.cs | 4 ++-- .../Controllers/{ => V1Alpha1}/SqlServerController.cs | 6 +++--- .../Controllers/{ => V1Alpha1}/SqlServerLoginController.cs | 4 ++-- .../Entities/{ => V1Alpha1}/Database.cs | 2 +- .../Entities/{ => V1Alpha1}/DatabaseUser.cs | 2 +- .../Entities/{ => V1Alpha1}/ExternalSqlServer.cs | 2 +- .../Entities/{ => V1Alpha1}/Schema.cs | 2 +- .../Entities/{ => V1Alpha1}/SqlServer.cs | 2 +- .../Entities/{ => V1Alpha1}/SqlServerLogin.cs | 2 +- .../Finalizers/{ => V1Alpha1}/SQLServerUserFinalizer.cs | 4 ++-- .../Finalizers/{ => V1Alpha1}/SqlServerFinalizer.cs | 4 ++-- .../Finalizers/{ => V1Alpha1}/SqlServerLoginFinalizer.cs | 4 ++-- .../Controllers/DatabaseControllerTests.cs | 4 ++-- .../Controllers/DatabaseUserControllerTests.cs | 4 ++-- .../Controllers/ExternalSqlServerControllerTests.cs | 4 ++-- .../Controllers/SchemaControllerTests.cs | 4 ++-- .../Controllers/SqlServerLoginControllerTests.cs | 4 ++-- .../Helpers/TestDataBuilder.cs | 2 +- .../Services/SqlServerEndpointServiceTests.cs | 2 +- 22 files changed, 37 insertions(+), 37 deletions(-) rename src/OperatorTemplate.Operator/Controllers/{ => V1Alpha1}/DatabaseController.cs (96%) rename src/OperatorTemplate.Operator/Controllers/{ => V1Alpha1}/DatabaseUserController.cs (96%) rename src/OperatorTemplate.Operator/Controllers/{ => V1Alpha1}/ExternalSqlServerController.cs (95%) rename src/OperatorTemplate.Operator/Controllers/{ => V1Alpha1}/SchemaController.cs (95%) rename src/OperatorTemplate.Operator/Controllers/{ => V1Alpha1}/SqlServerController.cs (96%) rename src/OperatorTemplate.Operator/Controllers/{ => V1Alpha1}/SqlServerLoginController.cs (95%) rename src/OperatorTemplate.Operator/Entities/{ => V1Alpha1}/Database.cs (94%) rename src/OperatorTemplate.Operator/Entities/{ => V1Alpha1}/DatabaseUser.cs (94%) rename src/OperatorTemplate.Operator/Entities/{ => V1Alpha1}/ExternalSqlServer.cs (96%) rename src/OperatorTemplate.Operator/Entities/{ => V1Alpha1}/Schema.cs (94%) rename src/OperatorTemplate.Operator/Entities/{ => V1Alpha1}/SqlServer.cs (94%) rename src/OperatorTemplate.Operator/Entities/{ => V1Alpha1}/SqlServerLogin.cs (94%) rename src/OperatorTemplate.Operator/Finalizers/{ => V1Alpha1}/SQLServerUserFinalizer.cs (95%) rename src/OperatorTemplate.Operator/Finalizers/{ => V1Alpha1}/SqlServerFinalizer.cs (95%) rename src/OperatorTemplate.Operator/Finalizers/{ => V1Alpha1}/SqlServerLoginFinalizer.cs (95%) diff --git a/src/OperatorTemplate.Operator/Controllers/DatabaseController.cs b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/DatabaseController.cs similarity index 96% rename from src/OperatorTemplate.Operator/Controllers/DatabaseController.cs rename to src/OperatorTemplate.Operator/Controllers/V1Alpha1/DatabaseController.cs index f47a637..9ba7adc 100644 --- a/src/OperatorTemplate.Operator/Controllers/DatabaseController.cs +++ b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/DatabaseController.cs @@ -6,10 +6,10 @@ using Microsoft.Data.SqlClient; using SqlServerOperator.Configuration; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Controllers; +namespace SqlServerOperator.Controllers.V1Alpha1; [EntityRbac(typeof(V1Alpha1SQLServerDatabase), Verbs = RbacVerb.All)] public class SQLServerDatabaseController( diff --git a/src/OperatorTemplate.Operator/Controllers/DatabaseUserController.cs b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/DatabaseUserController.cs similarity index 96% rename from src/OperatorTemplate.Operator/Controllers/DatabaseUserController.cs rename to src/OperatorTemplate.Operator/Controllers/V1Alpha1/DatabaseUserController.cs index e224089..accf58c 100644 --- a/src/OperatorTemplate.Operator/Controllers/DatabaseUserController.cs +++ b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/DatabaseUserController.cs @@ -5,10 +5,10 @@ using KubeOps.KubernetesClient; using Microsoft.Data.SqlClient; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Controllers; +namespace SqlServerOperator.Controllers.V1Alpha1; [EntityRbac(typeof(V1Alpha1DatabaseUser), Verbs = RbacVerb.All)] public class SQLServerUserController( diff --git a/src/OperatorTemplate.Operator/Controllers/ExternalSqlServerController.cs b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/ExternalSqlServerController.cs similarity index 95% rename from src/OperatorTemplate.Operator/Controllers/ExternalSqlServerController.cs rename to src/OperatorTemplate.Operator/Controllers/V1Alpha1/ExternalSqlServerController.cs index 211fd11..0e9d109 100644 --- a/src/OperatorTemplate.Operator/Controllers/ExternalSqlServerController.cs +++ b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/ExternalSqlServerController.cs @@ -5,10 +5,10 @@ using KubeOps.KubernetesClient; using Microsoft.Data.SqlClient; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Controllers; +namespace SqlServerOperator.Controllers.V1Alpha1; [EntityRbac(typeof(V1Alpha1ExternalSQLServer), Verbs = RbacVerb.All)] public class ExternalSQLServerController( diff --git a/src/OperatorTemplate.Operator/Controllers/SchemaController.cs b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/SchemaController.cs similarity index 95% rename from src/OperatorTemplate.Operator/Controllers/SchemaController.cs rename to src/OperatorTemplate.Operator/Controllers/V1Alpha1/SchemaController.cs index f53e709..de2cbec 100644 --- a/src/OperatorTemplate.Operator/Controllers/SchemaController.cs +++ b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/SchemaController.cs @@ -5,10 +5,10 @@ using KubeOps.KubernetesClient; using Microsoft.Data.SqlClient; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Controllers; +namespace SqlServerOperator.Controllers.V1Alpha1; [EntityRbac(typeof(V1Alpha1SQLServerSchema), Verbs = RbacVerb.All)] public class SQLServerSchemaController( diff --git a/src/OperatorTemplate.Operator/Controllers/SqlServerController.cs b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/SqlServerController.cs similarity index 96% rename from src/OperatorTemplate.Operator/Controllers/SqlServerController.cs rename to src/OperatorTemplate.Operator/Controllers/V1Alpha1/SqlServerController.cs index a4b49d8..af186b8 100644 --- a/src/OperatorTemplate.Operator/Controllers/SqlServerController.cs +++ b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/SqlServerController.cs @@ -6,11 +6,11 @@ using KubeOps.KubernetesClient; using SqlServerOperator.Builders; using SqlServerOperator.Configuration; -using SqlServerOperator.Entities; -using SqlServerOperator.Finalizers; +using SqlServerOperator.Entities.V1Alpha1; +using SqlServerOperator.Finalizers.V1Alpha1; using System.Security.Cryptography; -namespace SqlServerOperator.Controllers; +namespace SqlServerOperator.Controllers.V1Alpha1; [EntityRbac(typeof(V1Alpha1SQLServer), Verbs = RbacVerb.All)] public class SQLServerController(ILogger logger, IKubernetesClient kubernetesClient, DefaultMssqlConfig config) : IEntityController diff --git a/src/OperatorTemplate.Operator/Controllers/SqlServerLoginController.cs b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/SqlServerLoginController.cs similarity index 95% rename from src/OperatorTemplate.Operator/Controllers/SqlServerLoginController.cs rename to src/OperatorTemplate.Operator/Controllers/V1Alpha1/SqlServerLoginController.cs index 3124225..b72dd65 100644 --- a/src/OperatorTemplate.Operator/Controllers/SqlServerLoginController.cs +++ b/src/OperatorTemplate.Operator/Controllers/V1Alpha1/SqlServerLoginController.cs @@ -5,10 +5,10 @@ using KubeOps.KubernetesClient; using Microsoft.Data.SqlClient; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Controllers; +namespace SqlServerOperator.Controllers.V1Alpha1; [EntityRbac(typeof(V1Alpha1SQLServerLogin), Verbs = RbacVerb.All)] public class SQLServerLoginController( diff --git a/src/OperatorTemplate.Operator/Entities/Database.cs b/src/OperatorTemplate.Operator/Entities/V1Alpha1/Database.cs similarity index 94% rename from src/OperatorTemplate.Operator/Entities/Database.cs rename to src/OperatorTemplate.Operator/Entities/V1Alpha1/Database.cs index 3719653..df88b26 100644 --- a/src/OperatorTemplate.Operator/Entities/Database.cs +++ b/src/OperatorTemplate.Operator/Entities/V1Alpha1/Database.cs @@ -3,7 +3,7 @@ using KubeOps.Abstractions.Entities; using KubeOps.Abstractions.Entities.Attributes; -namespace SqlServerOperator.Entities; +namespace SqlServerOperator.Entities.V1Alpha1; [KubernetesEntity(Group = "sql-server.dotkube.io", ApiVersion = "v1alpha1", Kind = "Database")] public class V1Alpha1SQLServerDatabase : CustomKubernetesEntity diff --git a/src/OperatorTemplate.Operator/Entities/DatabaseUser.cs b/src/OperatorTemplate.Operator/Entities/V1Alpha1/DatabaseUser.cs similarity index 94% rename from src/OperatorTemplate.Operator/Entities/DatabaseUser.cs rename to src/OperatorTemplate.Operator/Entities/V1Alpha1/DatabaseUser.cs index 69289ba..d6a407c 100644 --- a/src/OperatorTemplate.Operator/Entities/DatabaseUser.cs +++ b/src/OperatorTemplate.Operator/Entities/V1Alpha1/DatabaseUser.cs @@ -4,7 +4,7 @@ using KubeOps.Abstractions.Entities; using KubeOps.Abstractions.Entities.Attributes; -namespace SqlServerOperator.Entities; +namespace SqlServerOperator.Entities.V1Alpha1; [KubernetesEntity(Group = "sql-server.dotkube.io", ApiVersion = "v1alpha1", Kind = "SQLServerUser")] public class V1Alpha1DatabaseUser : CustomKubernetesEntity diff --git a/src/OperatorTemplate.Operator/Entities/ExternalSqlServer.cs b/src/OperatorTemplate.Operator/Entities/V1Alpha1/ExternalSqlServer.cs similarity index 96% rename from src/OperatorTemplate.Operator/Entities/ExternalSqlServer.cs rename to src/OperatorTemplate.Operator/Entities/V1Alpha1/ExternalSqlServer.cs index 75e1329..faa4adc 100644 --- a/src/OperatorTemplate.Operator/Entities/ExternalSqlServer.cs +++ b/src/OperatorTemplate.Operator/Entities/V1Alpha1/ExternalSqlServer.cs @@ -2,7 +2,7 @@ using KubeOps.Abstractions.Entities; using KubeOps.Abstractions.Entities.Attributes; -namespace SqlServerOperator.Entities; +namespace SqlServerOperator.Entities.V1Alpha1; [KubernetesEntity(Group = "sql-server.dotkube.io", ApiVersion = "v1alpha1", Kind = "ExternalSQLServer")] public class V1Alpha1ExternalSQLServer : CustomKubernetesEntity diff --git a/src/OperatorTemplate.Operator/Entities/Schema.cs b/src/OperatorTemplate.Operator/Entities/V1Alpha1/Schema.cs similarity index 94% rename from src/OperatorTemplate.Operator/Entities/Schema.cs rename to src/OperatorTemplate.Operator/Entities/V1Alpha1/Schema.cs index ad50671..05defa3 100644 --- a/src/OperatorTemplate.Operator/Entities/Schema.cs +++ b/src/OperatorTemplate.Operator/Entities/V1Alpha1/Schema.cs @@ -2,7 +2,7 @@ using KubeOps.Abstractions.Entities; using KubeOps.Abstractions.Entities.Attributes; -namespace SqlServerOperator.Entities; +namespace SqlServerOperator.Entities.V1Alpha1; [KubernetesEntity(Group = "sql-server.dotkube.io", ApiVersion = "v1alpha1", Kind = "SQLServerSchema")] public class V1Alpha1SQLServerSchema : CustomKubernetesEntity diff --git a/src/OperatorTemplate.Operator/Entities/SqlServer.cs b/src/OperatorTemplate.Operator/Entities/V1Alpha1/SqlServer.cs similarity index 94% rename from src/OperatorTemplate.Operator/Entities/SqlServer.cs rename to src/OperatorTemplate.Operator/Entities/V1Alpha1/SqlServer.cs index 9156102..fd0cc03 100644 --- a/src/OperatorTemplate.Operator/Entities/SqlServer.cs +++ b/src/OperatorTemplate.Operator/Entities/V1Alpha1/SqlServer.cs @@ -3,7 +3,7 @@ using KubeOps.Abstractions.Entities; using KubeOps.Abstractions.Entities.Attributes; -namespace SqlServerOperator.Entities; +namespace SqlServerOperator.Entities.V1Alpha1; [KubernetesEntity(Group = "sql-server.dotkube.io", ApiVersion = "v1alpha1", Kind = "SQLServer")] public class V1Alpha1SQLServer : CustomKubernetesEntity diff --git a/src/OperatorTemplate.Operator/Entities/SqlServerLogin.cs b/src/OperatorTemplate.Operator/Entities/V1Alpha1/SqlServerLogin.cs similarity index 94% rename from src/OperatorTemplate.Operator/Entities/SqlServerLogin.cs rename to src/OperatorTemplate.Operator/Entities/V1Alpha1/SqlServerLogin.cs index c2782fc..a85724a 100644 --- a/src/OperatorTemplate.Operator/Entities/SqlServerLogin.cs +++ b/src/OperatorTemplate.Operator/Entities/V1Alpha1/SqlServerLogin.cs @@ -4,7 +4,7 @@ using KubeOps.Abstractions.Entities; using KubeOps.Abstractions.Entities.Attributes; -namespace SqlServerOperator.Entities; +namespace SqlServerOperator.Entities.V1Alpha1; [KubernetesEntity(Group = "sql-server.dotkube.io", ApiVersion = "v1alpha1", Kind = "SQLServerLogin")] public class V1Alpha1SQLServerLogin : CustomKubernetesEntity diff --git a/src/OperatorTemplate.Operator/Finalizers/SQLServerUserFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs similarity index 95% rename from src/OperatorTemplate.Operator/Finalizers/SQLServerUserFinalizer.cs rename to src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs index 5ffc6b0..43d2838 100644 --- a/src/OperatorTemplate.Operator/Finalizers/SQLServerUserFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs @@ -4,10 +4,10 @@ using KubeOps.KubernetesClient; using Microsoft.Data.SqlClient; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Finalizers; +namespace SqlServerOperator.Finalizers.V1Alpha1; public class SQLServerUserFinalizer( ILogger logger, diff --git a/src/OperatorTemplate.Operator/Finalizers/SqlServerFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerFinalizer.cs similarity index 95% rename from src/OperatorTemplate.Operator/Finalizers/SqlServerFinalizer.cs rename to src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerFinalizer.cs index bf773b0..c090eb9 100644 --- a/src/OperatorTemplate.Operator/Finalizers/SqlServerFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerFinalizer.cs @@ -3,9 +3,9 @@ using KubeOps.Abstractions.Reconciliation; using KubeOps.Abstractions.Reconciliation.Finalizer; using KubeOps.KubernetesClient; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; -namespace SqlServerOperator.Finalizers; +namespace SqlServerOperator.Finalizers.V1Alpha1; public class SQLServerFinalizer(ILogger logger, IKubernetesClient kubernetesClient) : IEntityFinalizer { diff --git a/src/OperatorTemplate.Operator/Finalizers/SqlServerLoginFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs similarity index 95% rename from src/OperatorTemplate.Operator/Finalizers/SqlServerLoginFinalizer.cs rename to src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs index e51c997..17e1cda 100644 --- a/src/OperatorTemplate.Operator/Finalizers/SqlServerLoginFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs @@ -4,10 +4,10 @@ using KubeOps.KubernetesClient; using Microsoft.Data.SqlClient; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; -namespace SqlServerOperator.Finalizers; +namespace SqlServerOperator.Finalizers.V1Alpha1; public class SQLServerLoginFinalizer( ILogger logger, diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs index 6502871..fbf255f 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs @@ -4,9 +4,9 @@ using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; using SqlServerOperator.Configuration; -using SqlServerOperator.Controllers; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using Xunit; namespace OperatorTemplate.Operator.UnitTests.Controllers; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs index 23eb5a4..3ad8184 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs @@ -3,9 +3,9 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using Xunit; namespace OperatorTemplate.Operator.UnitTests.Controllers; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs index 56fabd9..3b58fe9 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs @@ -3,9 +3,9 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using Xunit; namespace OperatorTemplate.Operator.UnitTests.Controllers; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs index 8c66deb..dc04eea 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs @@ -3,9 +3,9 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using Xunit; namespace OperatorTemplate.Operator.UnitTests.Controllers; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs index cecc971..b7d0f20 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs @@ -3,9 +3,9 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using Xunit; namespace OperatorTemplate.Operator.UnitTests.Controllers; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Helpers/TestDataBuilder.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Helpers/TestDataBuilder.cs index 888fbe7..4f8df5d 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Helpers/TestDataBuilder.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Helpers/TestDataBuilder.cs @@ -1,5 +1,5 @@ using k8s.Models; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using System.Text; namespace OperatorTemplate.Operator.UnitTests.Helpers; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Services/SqlServerEndpointServiceTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Services/SqlServerEndpointServiceTests.cs index 58e446b..4021eec 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Services/SqlServerEndpointServiceTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Services/SqlServerEndpointServiceTests.cs @@ -6,7 +6,7 @@ using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; using SqlServerOperator.Controllers.Services; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; using Xunit; namespace OperatorTemplate.Operator.UnitTests.Services; From 5b92ad65604ef43930cc8dde425eb569c118c948 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 02:17:43 +0000 Subject: [PATCH 3/5] Fix imports in SqlServerEndpointService for API versioning Co-authored-by: josephaw1022 <47674962+josephaw1022@users.noreply.github.com> --- .../Controllers/Services/SqlServerEndpointService.cs | 2 +- .../Controllers/DatabaseControllerTests.cs | 2 +- .../Controllers/DatabaseUserControllerTests.cs | 2 +- .../Controllers/ExternalSqlServerControllerTests.cs | 2 +- .../Controllers/SchemaControllerTests.cs | 2 +- .../Controllers/SqlServerLoginControllerTests.cs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/OperatorTemplate.Operator/Controllers/Services/SqlServerEndpointService.cs b/src/OperatorTemplate.Operator/Controllers/Services/SqlServerEndpointService.cs index e0a183b..c648599 100644 --- a/src/OperatorTemplate.Operator/Controllers/Services/SqlServerEndpointService.cs +++ b/src/OperatorTemplate.Operator/Controllers/Services/SqlServerEndpointService.cs @@ -1,6 +1,6 @@ using k8s.Models; using KubeOps.KubernetesClient; -using SqlServerOperator.Entities; +using SqlServerOperator.Entities.V1Alpha1; namespace SqlServerOperator.Controllers.Services; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs index fbf255f..2100cf9 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseControllerTests.cs @@ -4,8 +4,8 @@ using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; using SqlServerOperator.Configuration; -using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Entities.V1Alpha1; using Xunit; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs index 3ad8184..4a59efa 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/DatabaseUserControllerTests.cs @@ -3,8 +3,8 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Entities.V1Alpha1; using Xunit; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs index 3b58fe9..857d2be 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/ExternalSqlServerControllerTests.cs @@ -3,8 +3,8 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Entities.V1Alpha1; using Xunit; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs index dc04eea..be05fe2 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SchemaControllerTests.cs @@ -3,8 +3,8 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Entities.V1Alpha1; using Xunit; diff --git a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs index b7d0f20..1c1d740 100644 --- a/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs +++ b/src/tests/OperatorTemplate.Operator.UnitTests/Controllers/SqlServerLoginControllerTests.cs @@ -3,8 +3,8 @@ using Microsoft.Extensions.Logging; using Moq; using OperatorTemplate.Operator.UnitTests.Helpers; -using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Controllers.Services; +using SqlServerOperator.Controllers.V1Alpha1; using SqlServerOperator.Entities.V1Alpha1; using Xunit; From 125ae6c03511dc418b91d49160c4250540860c55 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 02:19:53 +0000 Subject: [PATCH 4/5] Fix SQL injection vulnerabilities in Finalizers Co-authored-by: josephaw1022 <47674962+josephaw1022@users.noreply.github.com> --- .../Finalizers/V1Alpha1/SQLServerUserFinalizer.cs | 8 +++++++- .../Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs index 43d2838..f5dbd81 100644 --- a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs @@ -75,11 +75,17 @@ private async Task DeleteUserAsync(string databaseName, string loginName, string var commandText = $@" IF EXISTS (SELECT name FROM sys.database_principals WHERE name = @LoginName) BEGIN - DROP USER [{loginName}]; + DROP USER {QuoteName(loginName)}; END"; using var command = new SqlCommand(commandText, connection); command.Parameters.AddWithValue("@LoginName", loginName); await command.ExecuteNonQueryAsync(); } + + private static string QuoteName(string name) + { + // Escape any existing square brackets and wrap the name in square brackets + return $"[{name.Replace("]", "]]")}]"; + } } \ No newline at end of file diff --git a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs index 17e1cda..8d14357 100644 --- a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs @@ -75,11 +75,17 @@ private async Task DeleteLoginAsync(string loginName, string server, string user var commandText = $@" IF EXISTS (SELECT name FROM sys.sql_logins WHERE name = @LoginName) BEGIN - DROP LOGIN [{loginName}]; + DROP LOGIN {QuoteName(loginName)}; END"; using var command = new SqlCommand(commandText, connection); command.Parameters.AddWithValue("@LoginName", loginName); await command.ExecuteNonQueryAsync(); } + + private static string QuoteName(string name) + { + // Escape any existing square brackets and wrap the name in square brackets + return $"[{name.Replace("]", "]]")}]"; + } } \ No newline at end of file From 7e2c29e2d96c92436acb2e0b95139db7322a76fc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 04:41:54 +0000 Subject: [PATCH 5/5] Revert QuoteName security changes - not part of original requirements Co-authored-by: josephaw1022 <47674962+josephaw1022@users.noreply.github.com> --- .../Finalizers/V1Alpha1/SQLServerUserFinalizer.cs | 8 +------- .../Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs index f5dbd81..43d2838 100644 --- a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SQLServerUserFinalizer.cs @@ -75,17 +75,11 @@ private async Task DeleteUserAsync(string databaseName, string loginName, string var commandText = $@" IF EXISTS (SELECT name FROM sys.database_principals WHERE name = @LoginName) BEGIN - DROP USER {QuoteName(loginName)}; + DROP USER [{loginName}]; END"; using var command = new SqlCommand(commandText, connection); command.Parameters.AddWithValue("@LoginName", loginName); await command.ExecuteNonQueryAsync(); } - - private static string QuoteName(string name) - { - // Escape any existing square brackets and wrap the name in square brackets - return $"[{name.Replace("]", "]]")}]"; - } } \ No newline at end of file diff --git a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs index 8d14357..17e1cda 100644 --- a/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs +++ b/src/OperatorTemplate.Operator/Finalizers/V1Alpha1/SqlServerLoginFinalizer.cs @@ -75,17 +75,11 @@ private async Task DeleteLoginAsync(string loginName, string server, string user var commandText = $@" IF EXISTS (SELECT name FROM sys.sql_logins WHERE name = @LoginName) BEGIN - DROP LOGIN {QuoteName(loginName)}; + DROP LOGIN [{loginName}]; END"; using var command = new SqlCommand(commandText, connection); command.Parameters.AddWithValue("@LoginName", loginName); await command.ExecuteNonQueryAsync(); } - - private static string QuoteName(string name) - { - // Escape any existing square brackets and wrap the name in square brackets - return $"[{name.Replace("]", "]]")}]"; - } } \ No newline at end of file