chore: bump version to 2.5.7 and update dependencies in package.json and package-lock.json; add generic OAuth2 support in authentication settings

This commit is contained in:
kastov 2026-01-21 06:15:26 +03:00
parent dd4f8de599
commit c0803acaa2
No known key found for this signature in database
GPG key ID: 1B27BE29057F4C90
4 changed files with 172 additions and 110 deletions

182
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "@remnawave/frontend",
"version": "2.5.6",
"version": "2.5.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@remnawave/frontend",
"version": "2.5.6",
"version": "2.5.7",
"license": "AGPL-3.0-only",
"dependencies": {
"@dnd-kit/core": "^6.3.1",
@ -15,27 +15,27 @@
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@formkit/auto-animate": "^0.9.0",
"@gfazioli/mantine-list-view-table": "1.2.0",
"@gfazioli/mantine-split-pane": "^2.5.7",
"@gfazioli/mantine-text-animate": "^2.3.10",
"@gfazioli/mantine-list-view-table": "1.2.1",
"@gfazioli/mantine-split-pane": "^2.5.8",
"@gfazioli/mantine-text-animate": "^2.3.11",
"@highcharts/react": "4.1.0",
"@lukemorales/query-key-factory": "^1.3.4",
"@mantine/carousel": "^8.3.12",
"@mantine/charts": "^8.3.12",
"@mantine/code-highlight": "^8.3.12",
"@mantine/core": "^8.3.12",
"@mantine/dates": "^8.3.12",
"@mantine/dropzone": "^8.3.12",
"@mantine/form": "^8.3.12",
"@mantine/hooks": "^8.3.12",
"@mantine/modals": "^8.3.12",
"@mantine/notifications": "^8.3.12",
"@mantine/nprogress": "^8.3.12",
"@mantine/spotlight": "^8.3.12",
"@mantine/carousel": "^8.3.13",
"@mantine/charts": "^8.3.13",
"@mantine/code-highlight": "^8.3.13",
"@mantine/core": "^8.3.13",
"@mantine/dates": "^8.3.13",
"@mantine/dropzone": "^8.3.13",
"@mantine/form": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/modals": "^8.3.13",
"@mantine/notifications": "^8.3.13",
"@mantine/nprogress": "^8.3.13",
"@mantine/spotlight": "^8.3.13",
"@monaco-editor/react": "^4.7.0",
"@noble/post-quantum": "^0.5.4",
"@paralleldrive/cuid2": "3.0.6",
"@remnawave/backend-contract": "2.5.13",
"@remnawave/backend-contract": "2.5.20",
"@remnawave/subscription-page-types": "0.4.0",
"@simplewebauthn/browser": "^13.2.2",
"@stablelib/base64": "^2.0.1",
@ -1734,9 +1734,9 @@
"license": "MIT"
},
"node_modules/@gfazioli/mantine-list-view-table": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@gfazioli/mantine-list-view-table/-/mantine-list-view-table-1.2.0.tgz",
"integrity": "sha512-WSD5MlZmfuElHLJfJTmghXPUd3tZrKRYfJsT3thtzvN5QYd4QCAw5vgJQZ88WBrq8aHIF1N9TvRXDx3elMPjEw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@gfazioli/mantine-list-view-table/-/mantine-list-view-table-1.2.1.tgz",
"integrity": "sha512-wrnaKeHmYCpUf1OZeObAiwzGyffR51IIsYqDOcKCl9G3jx/gQpDG4DigwPblLHjovC1ccZWFfOl+mKXwvoqZyw==",
"license": "MIT",
"peerDependencies": {
"@mantine/core": ">=7.0.0",
@ -1747,9 +1747,9 @@
}
},
"node_modules/@gfazioli/mantine-split-pane": {
"version": "2.5.7",
"resolved": "https://registry.npmjs.org/@gfazioli/mantine-split-pane/-/mantine-split-pane-2.5.7.tgz",
"integrity": "sha512-2wZMwMGiEpNS9e2TcKpWMRob+tR1MSbaKC3vWkLknnMPJXwP7n3oZMM6hos7tsAVLXnIqMoyDE3OBomOyqrUGA==",
"version": "2.5.8",
"resolved": "https://registry.npmjs.org/@gfazioli/mantine-split-pane/-/mantine-split-pane-2.5.8.tgz",
"integrity": "sha512-t84HrbH7FGiFbG50fOQGo0T705OSWPVpp0HWfi8+YYKBYcgn6zcSMiWYEdo08h72By2B2x1RMyQPZI4xX9Nhbg==",
"license": "MIT",
"peerDependencies": {
"@mantine/core": ">=7.0.0",
@ -1759,9 +1759,9 @@
}
},
"node_modules/@gfazioli/mantine-text-animate": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@gfazioli/mantine-text-animate/-/mantine-text-animate-2.3.10.tgz",
"integrity": "sha512-2mN/0dN6NteRNdMEC7wKkycJPwTfSO0MoNBzf00tDUk8sBeMQkV+f4bRLw0F7Z0MnbjSafh1bolzdS0uwKvYRw==",
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/@gfazioli/mantine-text-animate/-/mantine-text-animate-2.3.11.tgz",
"integrity": "sha512-ff8iD/xnyW+sLQz90e0fNRIBzZCnL7C/81j/6997ElQFJTvRA+VMMq7aAntqZoeHmmJ+ZvHyDA7MTS7Lofc4zw==",
"license": "MIT",
"peerDependencies": {
"@mantine/core": ">=7.0.0",
@ -2488,13 +2488,13 @@
}
},
"node_modules/@mantine/carousel": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/carousel/-/carousel-8.3.12.tgz",
"integrity": "sha512-c5vw3H1QBxCMBuiv473LdWFa5MdcaZa2DOMcXrPeIGxSFnkaZGag9sDL/oHN1OiOVNlNfaD+WQZGeAcixjwong==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/carousel/-/carousel-8.3.13.tgz",
"integrity": "sha512-EQQi3yO1MUZzlM3Zvm3/5x7RFwNVmpn1cKTGoknuWXhnadZmuuuknjM4eH/STF1/5AZgteoQuIwIPMQ6B6ndNg==",
"license": "MIT",
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"embla-carousel": ">=8.0.0",
"embla-carousel-react": ">=8.0.0",
"react": "^18.x || ^19.x",
@ -2502,37 +2502,37 @@
}
},
"node_modules/@mantine/charts": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/charts/-/charts-8.3.12.tgz",
"integrity": "sha512-IOPlbw6MTR0xFhqYtcky4hYoN77q4O2fxepcR5UgVW2kE0Ucae+Ln+TgOcpwFYZgvretSbyYDIBhmZoJ8z0ceQ==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/charts/-/charts-8.3.13.tgz",
"integrity": "sha512-f96IgQQlUril/U6ZbWeebmU90GJglrZJzrVHWyxTpr9kYY72BU6mkqpvzB+/vLrNz+m6SBbV/OO9WIgZNfKA9Q==",
"license": "MIT",
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x",
"recharts": ">=2.13.3"
}
},
"node_modules/@mantine/code-highlight": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-8.3.12.tgz",
"integrity": "sha512-JVR1uAlmni/q7IhjVwZmOjsjHabVuEqQ+l1/bNGsNTOjzlq/Z2Bzats6eYn5M3Y51PrHHcTOaf9piVWL4M83XQ==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-8.3.13.tgz",
"integrity": "sha512-AEFZ8TVu9A2yjllDz+Yodz5r6o5KX1p1B+9xDa97UXbYGxojJQI0V5Obh8Hyi8o1MAAZ/z1YaE7XznpYwQJjQg==",
"license": "MIT",
"dependencies": {
"clsx": "^2.1.1"
},
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/core": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/core/-/core-8.3.12.tgz",
"integrity": "sha512-bDEoUl4SneltfI1GeEaBk6BVDbLuB/w15YwseAmUvc8ldAbNcsVhxKxY/BdhwqUo6O3L2vhdlb3WwxR1y8741g==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/core/-/core-8.3.13.tgz",
"integrity": "sha512-ZgW4vqN4meaPyIMxzAufBvsgmJRfYZdTpsrAOcS8pWy7m9e8i685E7XsAxnwJCOIHudpvpvt+7Bx7VaIjEsYEw==",
"license": "MIT",
"dependencies": {
"@floating-ui/react": "^0.27.16",
@ -2543,46 +2543,46 @@
"type-fest": "^4.41.0"
},
"peerDependencies": {
"@mantine/hooks": "8.3.12",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/dates": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-8.3.12.tgz",
"integrity": "sha512-rL2kYJRTrU29l1KjQt5bdUweiZuJs3DjiIcc6VGHUuj7OwfYZbEpWzMbcu8fSrya/+kZAe8JM0irX22CjmsDGw==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-8.3.13.tgz",
"integrity": "sha512-Fk3k9oUENQQwU2cb1Ir2Q3J17emkYvW8xWaAF3nZC0PEF4KddY/p8bhF4NCxhsRjkvtEJiaAWlEq+6LF6hNxDA==",
"license": "MIT",
"dependencies": {
"clsx": "^2.1.1"
},
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"dayjs": ">=1.0.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/dropzone": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-8.3.12.tgz",
"integrity": "sha512-XlxCEztP3xTa45jMkMN7H7FyDa5uJq9009HRBpa+OT+JEqnGV8sbdlH1XjTrm8zYudKjS6A7hGVYa2MEcKUJ1w==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-8.3.13.tgz",
"integrity": "sha512-C385tppF6zdaheYrXsClHXm+5PcLcjcAPbny6KiZPZySpm5B2IylrD8f1Ew9ivLk+M/2WZ05MTil+hGdoN485A==",
"license": "MIT",
"dependencies": {
"react-dropzone": "14.3.8"
},
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/form": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/form/-/form-8.3.12.tgz",
"integrity": "sha512-bjXL1Ah3lAZYHrjrF37FeHV8DFGeXV+apn0PRQw2MTLpdUSqKsiYIDDgugzRfNXWX1cn1ELtxtDXsMfdj/LI7Q==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/form/-/form-8.3.13.tgz",
"integrity": "sha512-P7Avh24QiL8V517Jxj8JuUbCuSOA1BjwTB8/htH92cRmLoJtWn4ycZYE7ks8v3Hrg8fpd0Xd2O5o9R4+bXwD/A==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
@ -2593,76 +2593,76 @@
}
},
"node_modules/@mantine/hooks": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-8.3.12.tgz",
"integrity": "sha512-lMMDzDewd3lUNtJCAHDj3g8On9X5aBl4q6EBwgOixKQSby9RG9ASEpK8oYHundHTm9tzo3MDeXWV/z32oSQWuw==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-8.3.13.tgz",
"integrity": "sha512-7YMbMW/tR9E8m/9DbBW01+3RNApm2mE/JbRKXf9s9+KxgbjQvq0FYGWV8Y4+Sjz48AO4vtWk2qBriUTgBMKAyg==",
"license": "MIT",
"peerDependencies": {
"react": "^18.x || ^19.x"
}
},
"node_modules/@mantine/modals": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-8.3.12.tgz",
"integrity": "sha512-+uRyGe2lLy601qlMk+8aR9d/Aibu+dZi6Jcmvm5z8Gw4ocviyMMlnd8BLSQ/Jvib2OX8fWj+yUQN7FMQ4Rbwjw==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-8.3.13.tgz",
"integrity": "sha512-5jIRJKEupQerHfPGcPHgQk+J6dGBO7spC66VgEZqCNRpbWhowCxBNGEW5LN1hZE9sLYBJg+z2MazPws4A1GohQ==",
"license": "MIT",
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/notifications": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-8.3.12.tgz",
"integrity": "sha512-lqPPa11XdcndG8ywMao8yVkMA4jg/pBNbS85bR7OwHQa1yUftmfVlqJl9PZZCiWLX2AgKY3+xM5dHo4LidL+DA==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-8.3.13.tgz",
"integrity": "sha512-VgQwA3C4NbjguobobFnqqQyKBWXOfzM8BES1LIX9EyzMwsvGAlShJHrF9/yLS0Jqf5DiZi4L8hxL3wcmmbnljA==",
"license": "MIT",
"dependencies": {
"@mantine/store": "8.3.12",
"@mantine/store": "8.3.13",
"react-transition-group": "4.4.5"
},
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/nprogress": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-8.3.12.tgz",
"integrity": "sha512-uj7Xuy7zJ85zka+BWaztBK3y7FrwjwrthVfDn8tUhX3jqwG++G+OHhwJx65BDnYt6bbi2n7XDhFi6PDdIJg47Q==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-8.3.13.tgz",
"integrity": "sha512-itDLHIAbjPWjKrRgoCyf39vXoxEwgHb6gzDjKV0LSaVsHkWT1Mdvm9VB7qlNnRnvf/mxKSMe2mtLaSiHNnCC7A==",
"license": "MIT",
"dependencies": {
"@mantine/store": "8.3.12"
"@mantine/store": "8.3.13"
},
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/spotlight": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/spotlight/-/spotlight-8.3.12.tgz",
"integrity": "sha512-ujj3C/Mzdt20dVDBfUt0sJ+Re/DsLWN9mgef00TchbRtSbPfGJEZDkOeytsKEeUk3BDP3gC6nFilehf+Vkzevg==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/spotlight/-/spotlight-8.3.13.tgz",
"integrity": "sha512-EaWzjA/HlNEu7YisLVTTztFmNtfDJ1Q3/ziZxfpv476vxxjwjLMnjvcRA9E6duACxTUNZZaMDDJNAtVRa48Qiw==",
"license": "MIT",
"dependencies": {
"@mantine/store": "8.3.12"
"@mantine/store": "8.3.13"
},
"peerDependencies": {
"@mantine/core": "8.3.12",
"@mantine/hooks": "8.3.12",
"@mantine/core": "8.3.13",
"@mantine/hooks": "8.3.13",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
}
},
"node_modules/@mantine/store": {
"version": "8.3.12",
"resolved": "https://registry.npmjs.org/@mantine/store/-/store-8.3.12.tgz",
"integrity": "sha512-EC4eIKpm5s7neMbBrWsP6jGKLqrzHf63Ao3penYr7fn25dFXdbXZYw+IG8GYzxOC4yG61b2zTS+bpy5+vwzXpw==",
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@mantine/store/-/store-8.3.13.tgz",
"integrity": "sha512-pnHHwiffGfaqLFxuyJIuU1P6+3zOd7bfBRVFFzIEDyUbPJs7dmVUFt31bry5FokrBfCjNWyg2XfyAQqIwd2LLA==",
"license": "MIT",
"peerDependencies": {
"react": "^18.x || ^19.x"
@ -2832,9 +2832,9 @@
}
},
"node_modules/@remnawave/backend-contract": {
"version": "2.5.13",
"resolved": "https://registry.npmjs.org/@remnawave/backend-contract/-/backend-contract-2.5.13.tgz",
"integrity": "sha512-yMq6yyeXIvFhRYYZecGuZkqSjO5g+QWHcVVR0nJcbct2BUJvty74SozGwO64PHlWXRqPqkqEcJpOsss3tfNLjg==",
"version": "2.5.20",
"resolved": "https://registry.npmjs.org/@remnawave/backend-contract/-/backend-contract-2.5.20.tgz",
"integrity": "sha512-BffNHR5SIiR34ixxmtiS37JcNmmF6KGeGjw2Zq2M0Hz/sCaQz8l8JTNqClYr4Dr9Qp1MEhRHFh6rsUxbWiEFgA==",
"license": "AGPL-3.0-only",
"dependencies": {
"zod": "3.25.76"

View file

@ -2,7 +2,7 @@
"name": "@remnawave/frontend",
"private": false,
"type": "module",
"version": "2.5.6",
"version": "2.5.7",
"license": "AGPL-3.0-only",
"author": "REMNAWAVE <github.com/remnawave>",
"homepage": "https://github.com/remnawave",
@ -39,27 +39,27 @@
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@formkit/auto-animate": "^0.9.0",
"@gfazioli/mantine-list-view-table": "1.2.0",
"@gfazioli/mantine-split-pane": "^2.5.7",
"@gfazioli/mantine-text-animate": "^2.3.10",
"@gfazioli/mantine-list-view-table": "1.2.1",
"@gfazioli/mantine-split-pane": "^2.5.8",
"@gfazioli/mantine-text-animate": "^2.3.11",
"@highcharts/react": "4.1.0",
"@lukemorales/query-key-factory": "^1.3.4",
"@mantine/carousel": "^8.3.12",
"@mantine/charts": "^8.3.12",
"@mantine/code-highlight": "^8.3.12",
"@mantine/core": "^8.3.12",
"@mantine/dates": "^8.3.12",
"@mantine/dropzone": "^8.3.12",
"@mantine/form": "^8.3.12",
"@mantine/hooks": "^8.3.12",
"@mantine/modals": "^8.3.12",
"@mantine/notifications": "^8.3.12",
"@mantine/nprogress": "^8.3.12",
"@mantine/spotlight": "^8.3.12",
"@mantine/carousel": "^8.3.13",
"@mantine/charts": "^8.3.13",
"@mantine/code-highlight": "^8.3.13",
"@mantine/core": "^8.3.13",
"@mantine/dates": "^8.3.13",
"@mantine/dropzone": "^8.3.13",
"@mantine/form": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/modals": "^8.3.13",
"@mantine/notifications": "^8.3.13",
"@mantine/nprogress": "^8.3.13",
"@mantine/spotlight": "^8.3.13",
"@monaco-editor/react": "^4.7.0",
"@noble/post-quantum": "^0.5.4",
"@paralleldrive/cuid2": "3.0.6",
"@remnawave/backend-contract": "2.5.13",
"@remnawave/backend-contract": "2.5.20",
"@remnawave/subscription-page-types": "0.4.0",
"@simplewebauthn/browser": "^13.2.2",
"@stablelib/base64": "^2.0.1",

View file

@ -2,6 +2,7 @@ import { TOAuth2ProvidersKeys } from '@remnawave/backend-contract'
import { BiLogoGithub } from 'react-icons/bi'
import { Button, Stack } from '@mantine/core'
import { SiKeycloak } from 'react-icons/si'
import { TbKey } from 'react-icons/tb'
import { useState } from 'react'
import { useOAuth2Authorize } from '@shared/api/hooks'
@ -117,6 +118,19 @@ export const OAuth2LoginButtonsFeature = (props: IProps) => {
Keycloak
</Button>
)}
{authentication.oauth2.providers.generic && (
<Button
color="#000000"
leftSection={<TbKey size={20} />}
loaderProps={{ type: 'dots' }}
loading={loadingProvider === 'generic'}
onClick={() => handleOAuth2Login('generic')}
variant="filled"
>
OAuth2
</Button>
)}
</Stack>
)
}

View file

@ -15,7 +15,7 @@ import {
GetRemnawaveSettingsCommand,
UpdateRemnawaveSettingsCommand
} from '@remnawave/backend-contract'
import { TbAlertCircle, TbFingerprint, TbPassword, TbServer } from 'react-icons/tb'
import { TbAlertCircle, TbFingerprint, TbKey, TbPassword, TbServer } from 'react-icons/tb'
import { BiLogoGithub, BiLogoTelegram } from 'react-icons/bi'
import { zodResolver } from 'mantine-form-zod-resolver'
import { PiGlobe, PiKey } from 'react-icons/pi'
@ -29,6 +29,7 @@ import { TFunction } from 'i18next'
import { PasskeysDrawerComponent } from '@widgets/remnawave-settings/passkeys-settings-drawer/passkeys-drawer.component'
import { useUpdateRemnawaveSettings } from '@shared/api/hooks/remnawave-settings/remnawave-settings.mutation.hooks'
import { HelpActionIconShared, THelpDrawerAvailableScreen } from '@shared/ui/help-drawer'
import { CheckboxCardShared } from '@shared/ui/checkbox-card/checkbox-card.shared'
import { BaseOverlayHeader } from '@shared/ui/overlays/base-overlay-header'
import { SettingsCardShared } from '@shared/ui/settings-card'
import { PocketidLogo, YandexLogo } from '@shared/ui/logos'
@ -83,6 +84,21 @@ const getOAuth2ProvidersConfig = () =>
'keycloakDomain',
'allowedEmails'
] as const
},
{
key: 'generic' as const,
title: 'Generic OAuth2',
icon: <TbKey size={24} />,
iconColor: '#000000',
fields: [
'clientId',
'clientSecret',
'frontendDomain',
'authorizationUrl',
'tokenUrl',
'allowedEmails',
'withPkce'
] as const
}
] as const
@ -129,6 +145,24 @@ const getFieldConfig = (t: TFunction) =>
description: t('auth-settings.fields.keycloakDomain.description'),
placeholder: 'keycloak.docs.rw',
type: 'text' as const
},
authorizationUrl: {
label: 'Authorization URL',
description: 'Authorization URL for the OAuth2 provider',
placeholder: 'https://example.com/oauth2/authorize',
type: 'text' as const
},
tokenUrl: {
label: 'Token URL',
description: 'Token URL for the OAuth2 provider',
placeholder: 'https://example.com/oauth2/token',
type: 'text' as const
},
withPkce: {
label: 'With PKCE',
description: '',
placeholder: 'false',
type: 'checkbox' as const
}
}) as const
@ -161,7 +195,8 @@ export const AuthentificationSettingsCardWidget = (props: IProps) => {
github: oauth2Settings.github,
pocketid: oauth2Settings.pocketid,
yandex: oauth2Settings.yandex,
keycloak: oauth2Settings.keycloak
keycloak: oauth2Settings.keycloak,
generic: oauth2Settings.generic
},
tgAuthSettings: {
enabled: tgAuthSettings.enabled,
@ -300,6 +335,19 @@ export const AuthentificationSettingsCardWidget = (props: IProps) => {
)
}
if (fieldConfig.type === 'checkbox') {
return (
<CheckboxCardShared
description={fieldConfig.description}
key={form.key(formPath)}
label={fieldConfig.label}
{...form.getInputProps(formPath, {
type: 'checkbox'
})}
/>
)
}
return (
<TextInput
description={fieldConfig.description}