Skip to content

Commit 6e342ee

Browse files
authored
fix: automatically converting username to lowercase both in creation of register, and build for extra. (#4382)
1 parent ef0cf9b commit 6e342ee

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

packages/server/src/db/schema/registry.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ export const registryRelations = relations(registry, ({ many }) => ({
4444
}),
4545
}));
4646

47+
// Image references require a lowercase namespace (e.g. Docker Hub username).
48+
const registryUsernameSchema = z
49+
.string()
50+
.trim()
51+
.min(1)
52+
.transform((s) => s.toLowerCase());
53+
4754
// Registry URLs must be hostname[:port] only — no shell metacharacters
4855
// Empty string is allowed (means default/Docker Hub registry)
4956
const registryUrlSchema = z
@@ -57,7 +64,7 @@ const registryUrlSchema = z
5764

5865
const createSchema = createInsertSchema(registry, {
5966
registryName: z.string().min(1),
60-
username: z.string().min(1),
67+
username: registryUsernameSchema,
6168
password: z.string().min(1),
6269
registryUrl: registryUrlSchema,
6370
organizationId: z.string().min(1),
@@ -70,7 +77,7 @@ export const apiCreateRegistry = createSchema
7077
.pick({})
7178
.extend({
7279
registryName: z.string().min(1),
73-
username: z.string().min(1),
80+
username: registryUsernameSchema,
7481
password: z.string().min(1),
7582
registryUrl: registryUrlSchema,
7683
registryType: z.enum(["cloud"]),
@@ -83,7 +90,7 @@ export const apiCreateRegistry = createSchema
8390

8491
export const apiTestRegistry = createSchema.pick({}).extend({
8592
registryName: z.string().optional(),
86-
username: z.string().min(1),
93+
username: registryUsernameSchema,
8794
password: z.string().min(1),
8895
registryUrl: registryUrlSchema,
8996
registryType: z.enum(["cloud"]),

packages/server/src/utils/cluster/upload.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ export const getRegistryTag = (registry: Registry, imageName: string) => {
101101
// Extract the repository name (last part after '/')
102102
const repositoryName = extractRepositoryName(imageName);
103103

104-
// Build the final tag using registry's username/prefix
105-
const targetPrefix = imagePrefix || username;
104+
// Build the final tag using registry's username/prefix (must be lowercase for valid image refs)
105+
const targetPrefix = (imagePrefix || username).toLowerCase();
106106
const finalRegistry = registryUrl || "";
107107

108108
return finalRegistry

0 commit comments

Comments
 (0)