@@ -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)
4956const registryUrlSchema = z
@@ -57,7 +64,7 @@ const registryUrlSchema = z
5764
5865const 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
8491export 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" ] ) ,
0 commit comments