aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.devcontainer/pgsql/docker-compose.yaml3
-rw-r--r--Jellyfin.Api/Controllers/UserController.cs2
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs3
-rw-r--r--Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs5
-rw-r--r--Jellyfin.Server.Implementations/Users/UserManager.cs10
5 files changed, 12 insertions, 11 deletions
diff --git a/.devcontainer/pgsql/docker-compose.yaml b/.devcontainer/pgsql/docker-compose.yaml
index 1cab70762..7aa56dd0d 100644
--- a/.devcontainer/pgsql/docker-compose.yaml
+++ b/.devcontainer/pgsql/docker-compose.yaml
@@ -25,7 +25,7 @@ services:
image: postgres:17.2
restart: unless-stopped
volumes:
- - postgres-data:/var/lib/postgresql/data
+ - ./pgdata/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: jellyfin
POSTGRES_USER: jellyfin
@@ -47,5 +47,4 @@ services:
# (Adding the "ports" property to this file will not forward from a Codespace.)
volumes:
- postgres-data:
pgadmin-data:
diff --git a/Jellyfin.Api/Controllers/UserController.cs b/Jellyfin.Api/Controllers/UserController.cs
index 838578fab..88e5d46ad 100644
--- a/Jellyfin.Api/Controllers/UserController.cs
+++ b/Jellyfin.Api/Controllers/UserController.cs
@@ -390,7 +390,7 @@ public class UserController : BaseJellyfinApiController
return StatusCode(StatusCodes.Status403Forbidden, "User update not allowed.");
}
- if (!string.Equals(user.Username, updateUser.Name, StringComparison.Ordinal))
+ if (!string.Equals(user.Username, updateUser.Name, StringComparison.OrdinalIgnoreCase))
{
await _userManager.RenameUser(user, updateUser.Name).ConfigureAwait(false);
}
diff --git a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs
index a369cf656..bcaa3634e 100644
--- a/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs
+++ b/Jellyfin.Database/Jellyfin.Database.Implementations/ModelConfiguration/UserConfiguration.cs
@@ -13,8 +13,7 @@ namespace Jellyfin.Server.Implementations.ModelConfiguration
public void Configure(EntityTypeBuilder<User> builder)
{
builder
- .Property(user => user.Username)
- .UseCollation("NOCASE");
+ .Property(user => user.Username);
builder
.HasOne(u => u.ProfileImage)
diff --git a/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs
index 01ddd5ec9..ac9ce3be5 100644
--- a/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs
+++ b/Jellyfin.Database/Jellyfin.Database.Providers.PgSql/Migrations/20250127174201_InitMigration.cs
@@ -12,9 +12,6 @@ namespace Jellyfin.Database.Providers.PgSql.Migrations
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
- // shim NOCASE collation with an undefined locale and case-insensitive matching rules.
- migrationBuilder.Sql("CREATE COLLATION NOCASE (provider = icu, locale = 'und-x-icu.utf8', deterministic = false)");
-
migrationBuilder.CreateTable(
name: "ActivityLogs",
columns: table => new
@@ -230,7 +227,7 @@ namespace Jellyfin.Database.Providers.PgSql.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
- Username = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false, collation: "NOCASE"),
+ Username = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
Password = table.Column<string>(type: "character varying(65535)", maxLength: 65535, nullable: true),
MustUpdatePassword = table.Column<bool>(type: "boolean", nullable: false),
AudioLanguagePreference = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
diff --git a/Jellyfin.Server.Implementations/Users/UserManager.cs b/Jellyfin.Server.Implementations/Users/UserManager.cs
index 44de11b66..1939122eb 100644
--- a/Jellyfin.Server.Implementations/Users/UserManager.cs
+++ b/Jellyfin.Server.Implementations/Users/UserManager.cs
@@ -147,7 +147,7 @@ namespace Jellyfin.Server.Implementations.Users
ThrowIfInvalidUsername(newName);
- if (user.Username.Equals(newName, StringComparison.Ordinal))
+ if (user.Username.Equals(newName, StringComparison.OrdinalIgnoreCase))
{
throw new ArgumentException("The new and old names must be different.");
}
@@ -155,8 +155,11 @@ namespace Jellyfin.Server.Implementations.Users
var dbContext = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false);
await using (dbContext.ConfigureAwait(false))
{
+#pragma warning disable CA1862 // Use the 'StringComparison' method overloads to perform case-insensitive string comparisons
+#pragma warning disable CA1311 // Specify a culture or use an invariant version to avoid implicit dependency on current culture
+#pragma warning disable CA1304 // The behavior of 'string.ToUpper()' could vary based on the current user's locale settings
if (await dbContext.Users
- .AnyAsync(u => u.Username == newName && !u.Id.Equals(user.Id))
+ .AnyAsync(u => u.Username.ToUpper() == newName.ToUpper() && !u.Id.Equals(user.Id))
.ConfigureAwait(false))
{
throw new ArgumentException(string.Format(
@@ -164,6 +167,9 @@ namespace Jellyfin.Server.Implementations.Users
"A user with the name '{0}' already exists.",
newName));
}
+#pragma warning restore CA1304 // The behavior of 'string.ToUpper()' could vary based on the current user's locale settings
+#pragma warning restore CA1311 // Specify a culture or use an invariant version to avoid implicit dependency on current culture
+#pragma warning restore CA1862 // Use the 'StringComparison' method overloads to perform case-insensitive string comparisons
user.Username = newName;
await UpdateUserInternalAsync(dbContext, user).ConfigureAwait(false);