Compare commits

...
Author SHA1 Message Date
Manuel f36f436f70 feat: add header class to logo 2026-03-23 11:37:23 +00:00
homarr-renovate[bot] 94dfddf8bd fix(deps): update dependency isomorphic-dompurify to ^3.5.1 (#5300)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 23:35:49 +00:00
homarr-renovate[bot] b6b11c39d2 fix(deps): update dependency isomorphic-dompurify to ^3.5.0 (#5299)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 20:37:26 +00:00
homarr-renovate[bot] 369b4d4863 fix(deps): update tiptap monorepo to v3.20.4 (#5287)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 17:36:05 +00:00
homarr-renovate[bot] 6f8e62963a fix(deps): update mantine monorepo to ^8.3.18 (#5298)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 16:44:42 +00:00
homarr-renovate[bot] 991044ebd7 fix(deps): update dependency fast-xml-parser to ^5.5.6 (#5297)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 16:42:40 +00:00
homarr-renovate[bot] b3f012226b chore(deps): update dependency fast-xml-parser to v5.5.7 [security] (#5295)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 16:34:54 +00:00
homarr-renovate[bot] 63c55cec57 fix(deps): update dependency swagger-ui-react to ^5.32.1 (#5296)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 14:35:44 +00:00
homarr-renovate[bot] c009dd7de6 fix(deps): update testcontainers-node monorepo to ^11.13.0 (#5293)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 10:40:06 +00:00
homarr-renovate[bot] 62764499e7 fix(deps): update dependency isomorphic-dompurify to ^3.4.0 (#5292)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 09:42:54 +00:00
homarr-renovate[bot] 09227a3884 fix(deps): update dependency drizzle-kit to ^0.31.10 (#5291)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 09:41:50 +00:00
homarr-renovate[bot] 37bafaa71a chore(deps): update dependency @types/adm-zip to v0.5.8 (#5288)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 05:00:54 +00:00
homarr-renovate[bot] 237d11d2c0 fix(deps): update dependency @next/eslint-plugin-next to v16.1.7 (#5289)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-22 02:34:01 +00:00
homarr-renovate[bot] 4efe7496a5 chore(deps): update babel monorepo to >=7.29.2 (#5290)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-21 23:37:03 +00:00
homarr-renovate[bot] c3fa4e866c chore(deps): update dependency nanoid@&gt;&#x3d;4.0.0 &lt;5.0.9 to >=5.1.7 (#5282)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-21 15:34:29 +00:00
Meier Lukas 1938798ba1 Merge commit from fork 2026-03-21 16:07:05 +01:00
homarr-renovate[bot] 4fb48c23a2 fix(deps): update dependency mysql2 to v3.20.0 (#5283)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-20 22:37:51 +00:00
homarr-releases[bot] e13afb721e chore: update bug report template (#5281)
Co-authored-by: Releases Homarr <175486441+homarr-releases[bot]@users.noreply.github.com>
2026-03-20 21:51:13 +01:00
20 changed files with 933 additions and 682 deletions

No files matched your search

+1
View File
@@ -33,6 +33,7 @@ body:
options:
# The below comment is used to insert a new version with on-release.yml
#NEXT_VERSION#
- 1.56.1
- 1.56.0
- 1.55.0
- 1.54.0
+8 -8
View File
@@ -48,12 +48,12 @@
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
"@mantine/colors-generator": "^8.3.17",
"@mantine/core": "^8.3.17",
"@mantine/dropzone": "^8.3.17",
"@mantine/hooks": "^8.3.17",
"@mantine/modals": "^8.3.17",
"@mantine/tiptap": "^8.3.17",
"@mantine/colors-generator": "^8.3.18",
"@mantine/core": "^8.3.18",
"@mantine/dropzone": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"@mantine/modals": "^8.3.18",
"@mantine/tiptap": "^8.3.18",
"@million/lint": "1.0.14",
"@tabler/icons-react": "^3.40.0",
"@tanstack/react-query": "^5.90.21",
@@ -73,7 +73,7 @@
"dotenv": "^17.3.1",
"flag-icons": "^7.5.0",
"glob": "^13.0.6",
"isomorphic-dompurify": "^3.3.0",
"isomorphic-dompurify": "^3.5.1",
"jotai": "^2.18.1",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.1.7",
@@ -85,7 +85,7 @@
"react-simple-code-editor": "^0.14.1",
"sass": "^1.98.0",
"superjson": "2.2.6",
"swagger-ui-react": "^5.32.0",
"swagger-ui-react": "^5.32.1",
"use-deep-compare-effect": "^1.8.1",
"zod": "^4.2.1"
},
@@ -11,11 +11,11 @@ interface LogoProps {
export const Logo = ({ size = 60, shouldUseNextImage = false, src, alt }: LogoProps) =>
shouldUseNextImage ? (
<Image className="logo" src={src} alt={alt} width={size} height={size} />
<Image className="logo header-logo" src={src} alt={alt} width={size} height={size} />
) : (
// we only want to use next/image for logos that we are sure will be preloaded and are allowed
// eslint-disable-next-line @next/next/no-img-element
<img className="logo" src={src} alt={alt} width={size} height={size} />
<img className="logo header-logo" src={src} alt={alt} width={size} height={size} />
);
const logoWithTitleSizes = {
+5 -5
View File
@@ -42,7 +42,7 @@
"@semantic-release/github": "^12.0.6",
"@semantic-release/npm": "^13.1.5",
"@semantic-release/release-notes-generator": "^14.1.0",
"@testcontainers/redis": "^11.12.0",
"@testcontainers/redis": "^11.13.0",
"@turbo/gen": "^2.8.17",
"@vitejs/plugin-react": "^5.2.0",
"@vitest/coverage-v8": "^4.1.0",
@@ -53,7 +53,7 @@
"json5": "^2.2.3",
"prettier": "^3.8.1",
"semantic-release": "^25.0.3",
"testcontainers": "^11.12.0",
"testcontainers": "^11.13.0",
"turbo": "^2.8.17",
"typescript": "^5.9.3",
"vite-tsconfig-paths": "^6.1.1",
@@ -77,8 +77,8 @@
"tree-sitter-json"
],
"overrides": {
"@babel/helpers@<7.26.10": ">=7.28.6",
"@babel/runtime@<7.26.10": ">=7.28.6",
"@babel/helpers@<7.26.10": ">=7.29.2",
"@babel/runtime@<7.26.10": ">=7.29.2",
"axios@>=1.0.0 <1.8.2": ">=1.13.6",
"brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.4",
"brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.4",
@@ -86,7 +86,7 @@
"form-data@>=4.0.0 <4.0.4": ">=4.0.5",
"hono@<4.6.5": ">=4.12.8",
"linkifyjs@<4.3.2": ">=4.3.2",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.6",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.7",
"prismjs@<1.30.0": ">=1.30.0",
"proxmox-api>undici": "7.19.2",
"react-is": "^19.2.4",
+51 -4
View File
@@ -1,11 +1,13 @@
import { TRPCError } from "@trpc/server";
import type { MySqlRawQueryResult } from "drizzle-orm/mysql2";
import type { QueryResult } from "pg";
import { z } from "zod/v4";
import { createSaltAsync, hashPasswordAsync } from "@homarr/auth";
import { createId } from "@homarr/common";
import { createLogger } from "@homarr/core/infrastructure/logs";
import type { Database } from "@homarr/db";
import { and, eq, like } from "@homarr/db";
import { and, eq, handleTransactionsAsync, like } from "@homarr/db";
import { getMaxGroupPositionAsync } from "@homarr/db/queries";
import { boards, groupMembers, groupPermissions, groups, invites, users } from "@homarr/db/schema";
import { selectUserSchema } from "@homarr/db/validationSchemas";
@@ -90,10 +92,55 @@ export const userRouter = createTRPCRouter({
await checkUsernameAlreadyTakenAndThrowAsync(ctx.db, "credentials", input.username);
await createUserAsync(ctx.db, input);
const salt = await createSaltAsync();
const hashedPassword = await hashPasswordAsync(input.password, salt);
// Delete invite as it's used
await ctx.db.delete(invites).where(inviteWhere);
const userId = createId();
const user = {
id: userId,
name: input.username,
password: hashedPassword,
salt,
};
await handleTransactionsAsync(ctx.db, {
async handleAsync(db, schema) {
await db.transaction(async (trx) => {
await trx.insert(schema.users).values(user);
// Delete invite as it's used
const queryResult = (await trx.delete(schema.invites).where(inviteWhere)) as
| QueryResult
| MySqlRawQueryResult;
let count = 0;
if (Array.isArray(queryResult)) {
count = queryResult[0].affectedRows;
} else {
count = queryResult.rowCount ?? 0;
}
if (count === 0) {
throw new TRPCError({
code: "FORBIDDEN",
message: "Invalid invite",
});
}
});
},
handleSync(db) {
db.transaction((trx) => {
trx.insert(users).values(user).run();
// Delete invite as it's used
const result = trx.delete(invites).where(inviteWhere).run();
if (result.changes === 0) {
throw new TRPCError({
code: "FORBIDDEN",
message: "Invalid invite",
});
}
});
},
});
}),
create: permissionRequiredProcedure
.requiresPermission("admin")
+1 -1
View File
@@ -42,7 +42,7 @@
"dns-caching": "^0.2.9",
"drizzle-orm": "^0.45.1",
"ioredis": "5.10.0",
"mysql2": "3.19.1",
"mysql2": "3.20.0",
"pg": "^8.20.0",
"superjson": "2.2.6",
"winston": "3.19.0",
+5 -5
View File
@@ -47,16 +47,16 @@
"@homarr/core": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/core": "^8.3.18",
"@paralleldrive/cuid2": "^3.3.0",
"@testcontainers/mysql": "^11.12.0",
"@testcontainers/postgresql": "^11.12.0",
"@testcontainers/mysql": "^11.13.0",
"@testcontainers/postgresql": "^11.13.0",
"better-sqlite3": "^12.6.2",
"dotenv": "^17.3.1",
"drizzle-kit": "^0.31.9",
"drizzle-kit": "^0.31.10",
"drizzle-orm": "^0.45.1",
"drizzle-zod": "^0.8.3",
"mysql2": "3.19.1",
"mysql2": "3.20.0",
"pg": "^8.20.0",
"superjson": "2.2.6"
},
+1 -1
View File
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/common": "workspace:^0.1.0",
"fast-xml-parser": "^5.5.5",
"fast-xml-parser": "^5.5.6",
"zod": "^4.2.1"
},
"devDependencies": {
+1 -1
View File
@@ -26,7 +26,7 @@
"@homarr/common": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/form": "^8.3.17",
"@mantine/form": "^8.3.18",
"mantine-form-zod-resolver": "^1.3.0",
"zod": "^4.2.1"
},
+1 -1
View File
@@ -30,7 +30,7 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/core": "^8.3.18",
"react": "19.2.4",
"zod": "^4.2.1"
},
+1 -1
View File
@@ -33,7 +33,7 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/core": "^8.3.18",
"@tabler/icons-react": "^3.40.0",
"dayjs": "^1.11.20",
"next": "16.1.7",
+2 -2
View File
@@ -24,8 +24,8 @@
"dependencies": {
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/hooks": "^8.3.17",
"@mantine/core": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"react": "19.2.4"
},
"devDependencies": {
+1 -1
View File
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/ui": "workspace:^0.1.0",
"@mantine/notifications": "^8.3.17",
"@mantine/notifications": "^8.3.18",
"@tabler/icons-react": "^3.40.0"
},
"devDependencies": {
+3 -3
View File
@@ -37,8 +37,8 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/hooks": "^8.3.17",
"@mantine/core": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"adm-zip": "0.5.16",
"next": "16.1.7",
"react": "19.2.4",
@@ -51,7 +51,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/adm-zip": "0.5.7",
"@types/adm-zip": "0.5.8",
"eslint": "^9.39.4",
"typescript": "^5.9.3"
}
+1 -1
View File
@@ -25,7 +25,7 @@
"dependencies": {
"@homarr/db": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@mantine/dates": "^8.3.17",
"@mantine/dates": "^8.3.18",
"next": "16.1.7",
"react": "19.2.4",
"react-dom": "19.2.4"
+3 -3
View File
@@ -33,9 +33,9 @@
"@homarr/settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/hooks": "^8.3.17",
"@mantine/spotlight": "^8.3.17",
"@mantine/core": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"@mantine/spotlight": "^8.3.18",
"@tabler/icons-react": "^3.40.0",
"jotai": "^2.18.1",
"next": "16.1.7",
+3 -3
View File
@@ -30,9 +30,9 @@
"@homarr/settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.17",
"@mantine/dates": "^8.3.17",
"@mantine/hooks": "^8.3.17",
"@mantine/core": "^8.3.18",
"@mantine/dates": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"@tabler/icons-react": "^3.40.0",
"crypto-js": "^4.2.0",
"mantine-react-table": "2.0.0-beta.9",
+19 -19
View File
@@ -48,26 +48,26 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/charts": "^8.3.17",
"@mantine/core": "^8.3.17",
"@mantine/hooks": "^8.3.17",
"@mantine/charts": "^8.3.18",
"@mantine/core": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"@tabler/icons-react": "^3.40.0",
"@tiptap/extension-color": "3.20.2",
"@tiptap/extension-highlight": "3.20.2",
"@tiptap/extension-image": "3.20.2",
"@tiptap/extension-link": "^3.20.2",
"@tiptap/extension-placeholder": "^3.20.2",
"@tiptap/extension-table": "3.20.2",
"@tiptap/extension-table-cell": "3.20.2",
"@tiptap/extension-table-header": "3.20.2",
"@tiptap/extension-table-row": "3.20.2",
"@tiptap/extension-task-item": "3.20.2",
"@tiptap/extension-task-list": "3.20.2",
"@tiptap/extension-text-align": "3.20.2",
"@tiptap/extension-text-style": "3.20.2",
"@tiptap/extension-underline": "3.20.2",
"@tiptap/react": "^3.20.2",
"@tiptap/starter-kit": "^3.20.2",
"@tiptap/extension-color": "3.20.4",
"@tiptap/extension-highlight": "3.20.4",
"@tiptap/extension-image": "3.20.4",
"@tiptap/extension-link": "^3.20.4",
"@tiptap/extension-placeholder": "^3.20.4",
"@tiptap/extension-table": "3.20.4",
"@tiptap/extension-table-cell": "3.20.4",
"@tiptap/extension-table-header": "3.20.4",
"@tiptap/extension-table-row": "3.20.4",
"@tiptap/extension-task-item": "3.20.4",
"@tiptap/extension-task-list": "3.20.4",
"@tiptap/extension-text-align": "3.20.4",
"@tiptap/extension-text-style": "3.20.4",
"@tiptap/extension-underline": "3.20.4",
"@tiptap/react": "^3.20.4",
"@tiptap/starter-kit": "^3.20.4",
"clsx": "^2.1.1",
"dayjs": "^1.11.20",
"mantine-form-zod-resolver": "^1.3.0",
+823 -620
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -17,7 +17,7 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
"@next/eslint-plugin-next": "16.1.6",
"@next/eslint-plugin-next": "16.1.7",
"eslint-config-prettier": "^10.1.8",
"eslint-config-turbo": "^2.8.17",
"eslint-plugin-import": "^2.32.0",