Compare commits

...

7 Commits

Author SHA1 Message Date
Elias Schneider
522a041ca1 release: 1.2.0 2024-10-14 18:19:02 +02:00
Elias Schneider
ce6430da9f chore(translations): update translations via Crowdin (#636)
* New translations en-us.ts (French)

* New translations en-us.ts (Danish)

* New translations en-us.ts (Japanese)

* New translations en-us.ts (Vietnamese)

* New translations en-us.ts (Spanish)

* New translations en-us.ts (Bulgarian)

* New translations en-us.ts (Czech)

* New translations en-us.ts (Greek)

* New translations en-us.ts (Finnish)

* New translations en-us.ts (Hungarian)

* New translations en-us.ts (Italian)

* New translations en-us.ts (Korean)

* New translations en-us.ts (Polish)

* New translations en-us.ts (Russian)

* New translations en-us.ts (Slovenian)

* New translations en-us.ts (Serbian (Cyrillic))

* New translations en-us.ts (Swedish)

* New translations en-us.ts (Turkish)

* New translations en-us.ts (Ukrainian)

* New translations en-us.ts (Chinese Simplified)

* New translations en-us.ts (Chinese Traditional)

* New translations en-us.ts (Portuguese, Brazilian)

* New translations en-us.ts (Thai)

* New translations en-us.ts (Dutch, Belgium)

* New translations en-us.ts (Arabic, Egypt)
2024-10-14 18:18:47 +02:00
Marvin A. Ruder
2b3ce3ffd2 feat(oauth): Add option to logout from OpenID Connect provider
* Fixes #598

Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
2024-10-14 18:16:47 +02:00
Elias Schneider
104cc06145 chore(translations): update translations via Crowdin (#622)
* New translations en-us.ts (Portuguese, Brazilian)

* New translations en-us.ts (Italian)

* New translations en-us.ts (Vietnamese)

* New translations en-us.ts (Danish)

* New translations en-us.ts (French)

* New translations en-us.ts (Danish)

* New translations en-us.ts (Japanese)
2024-10-14 17:16:53 +02:00
Elias Schneider
4a50a5aa3b Merge branch 'main' of https://github.com/stonith404/pingvin-share 2024-10-14 17:15:42 +02:00
Elias Schneider
d6b8b56247 fix: use unique port env variable for backend 2024-10-14 17:15:38 +02:00
COMPLEX
5883dff4cf feat(oauth): add ability to limit user IDs for Discord authentication (#621) 2024-09-30 08:53:58 +02:00
50 changed files with 223 additions and 271 deletions

View File

@@ -1,3 +1,16 @@
## [1.2.0](https://github.com/stonith404/pingvin-share/compare/v1.1.3...v1.2.0) (2024-10-14)
### Features
* **oauth:** add ability to limit user IDs for Discord authentication ([#621](https://github.com/stonith404/pingvin-share/issues/621)) ([5883dff](https://github.com/stonith404/pingvin-share/commit/5883dff4cf0abe99b3ac8f0b56fdc9d04e80b51c))
* **oauth:** Add option to logout from OpenID Connect provider ([2b3ce3f](https://github.com/stonith404/pingvin-share/commit/2b3ce3ffd250f7e3052d43c1c1e76947abf91e55)), closes [#598](https://github.com/stonith404/pingvin-share/issues/598)
### Bug Fixes
* use unique port env variable for backend ([d6b8b56](https://github.com/stonith404/pingvin-share/commit/d6b8b56247814087c2b676fe2367300172b5a94b))
## [1.1.3](https://github.com/stonith404/pingvin-share/compare/v1.1.2...v1.1.3) (2024-09-27) ## [1.1.3](https://github.com/stonith404/pingvin-share/compare/v1.1.2...v1.1.3) (2024-09-27)

View File

@@ -1,12 +1,12 @@
{ {
"name": "pingvin-share-backend", "name": "pingvin-share-backend",
"version": "1.1.3", "version": "1.2.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pingvin-share-backend", "name": "pingvin-share-backend",
"version": "1.1.3", "version": "1.2.0",
"dependencies": { "dependencies": {
"@nestjs/cache-manager": "^2.2.2", "@nestjs/cache-manager": "^2.2.2",
"@nestjs/common": "^10.4.3", "@nestjs/common": "^10.4.3",
@@ -20,7 +20,6 @@
"@nestjs/throttler": "^6.2.1", "@nestjs/throttler": "^6.2.1",
"@prisma/client": "^5.19.1", "@prisma/client": "^5.19.1",
"@types/jmespath": "^0.15.2", "@types/jmespath": "^0.15.2",
"@types/ldapjs": "^3.0.6",
"archiver": "^7.0.1", "archiver": "^7.0.1",
"argon2": "^0.41.1", "argon2": "^0.41.1",
"body-parser": "^1.20.3", "body-parser": "^1.20.3",
@@ -31,7 +30,6 @@
"content-disposition": "^0.5.4", "content-disposition": "^0.5.4",
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"jmespath": "^0.16.0", "jmespath": "^0.16.0",
"ldapjs": "^3.0.7",
"ldapts": "^7.2.0", "ldapts": "^7.2.0",
"mime-types": "^2.1.35", "mime-types": "^2.1.35",
"moment": "^2.30.1", "moment": "^2.30.1",
@@ -1028,101 +1026,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@ldapjs/asn1": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@ldapjs/asn1/-/asn1-2.0.0.tgz",
"integrity": "sha512-G9+DkEOirNgdPmD0I8nu57ygQJKOOgFEMKknEuQvIHbGLwP3ny1mY+OTUYLCbCaGJP4sox5eYgBJRuSUpnAddA==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT"
},
"node_modules/@ldapjs/attribute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@ldapjs/attribute/-/attribute-1.0.0.tgz",
"integrity": "sha512-ptMl2d/5xJ0q+RgmnqOi3Zgwk/TMJYG7dYMC0Keko+yZU6n+oFM59MjQOUht5pxJeS4FWrImhu/LebX24vJNRQ==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "2.0.0",
"@ldapjs/protocol": "^1.2.1",
"process-warning": "^2.1.0"
}
},
"node_modules/@ldapjs/change": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@ldapjs/change/-/change-1.0.0.tgz",
"integrity": "sha512-EOQNFH1RIku3M1s0OAJOzGfAohuFYXFY4s73wOhRm4KFGhmQQ7MChOh2YtYu9Kwgvuq1B0xKciXVzHCGkB5V+Q==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "2.0.0",
"@ldapjs/attribute": "1.0.0"
}
},
"node_modules/@ldapjs/controls": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@ldapjs/controls/-/controls-2.1.0.tgz",
"integrity": "sha512-2pFdD1yRC9V9hXfAWvCCO2RRWK9OdIEcJIos/9cCVP9O4k72BY1bLDQQ4KpUoJnl4y/JoD4iFgM+YWT3IfITWw==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "^1.2.0",
"@ldapjs/protocol": "^1.2.1"
}
},
"node_modules/@ldapjs/controls/node_modules/@ldapjs/asn1": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ldapjs/asn1/-/asn1-1.2.0.tgz",
"integrity": "sha512-KX/qQJ2xxzvO2/WOvr1UdQ+8P5dVvuOLk/C9b1bIkXxZss8BaR28njXdPgFCpj5aHaf1t8PmuVnea+N9YG9YMw==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT"
},
"node_modules/@ldapjs/dn": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@ldapjs/dn/-/dn-1.1.0.tgz",
"integrity": "sha512-R72zH5ZeBj/Fujf/yBu78YzpJjJXG46YHFo5E4W1EqfNpo1UsVPqdLrRMXeKIsJT3x9dJVIfR6OpzgINlKpi0A==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "2.0.0",
"process-warning": "^2.1.0"
}
},
"node_modules/@ldapjs/filter": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@ldapjs/filter/-/filter-2.1.1.tgz",
"integrity": "sha512-TwPK5eEgNdUO1ABPBUQabcZ+h9heDORE4V9WNZqCtYLKc06+6+UAJ3IAbr0L0bYTnkkWC/JEQD2F+zAFsuikNw==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "2.0.0",
"@ldapjs/protocol": "^1.2.1",
"process-warning": "^2.1.0"
}
},
"node_modules/@ldapjs/messages": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@ldapjs/messages/-/messages-1.3.0.tgz",
"integrity": "sha512-K7xZpXJ21bj92jS35wtRbdcNrwmxAtPwy4myeh9duy/eR3xQKvikVycbdWVzkYEAVE5Ce520VXNOwCHjomjCZw==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "^2.0.0",
"@ldapjs/attribute": "^1.0.0",
"@ldapjs/change": "^1.0.0",
"@ldapjs/controls": "^2.1.0",
"@ldapjs/dn": "^1.1.0",
"@ldapjs/filter": "^2.1.1",
"@ldapjs/protocol": "^1.2.1",
"process-warning": "^2.2.0"
}
},
"node_modules/@ldapjs/protocol": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@ldapjs/protocol/-/protocol-1.2.1.tgz",
"integrity": "sha512-O89xFDLW2gBoZWNXuXpBSM32/KealKCTb3JGtJdtUQc7RjAk8XzrRgyz02cPAwGKwKPxy0ivuC7UP9bmN87egQ==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT"
},
"node_modules/@ljharb/through": { "node_modules/@ljharb/through": {
"version": "2.3.13", "version": "2.3.13",
"resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz",
@@ -1903,15 +1806,6 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/ldapjs": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-3.0.6.tgz",
"integrity": "sha512-E2Tn1ltJDYBsidOT9QG4engaQeQzRQ9aYNxVmjCkD33F7cIeLPgrRDXAYs0O35mK2YDU20c/+ZkNjeAPRGLM0Q==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/luxon": { "node_modules/@types/luxon": {
"version": "3.4.2", "version": "3.4.2",
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz",
@@ -2438,12 +2332,6 @@
"node": ">=6.5" "node": ">=6.5"
} }
}, },
"node_modules/abstract-logging": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
"integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==",
"license": "MIT"
},
"node_modules/accepts": { "node_modules/accepts": {
"version": "1.3.8", "version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -2775,6 +2663,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"dev": true,
"engines": { "engines": {
"node": ">=0.8" "node": ">=0.8"
} }
@@ -2821,18 +2710,6 @@
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
"integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
}, },
"node_modules/backoff": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
"integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==",
"license": "MIT",
"dependencies": {
"precond": "0.2"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/balanced-match": { "node_modules/balanced-match": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -4362,6 +4239,7 @@
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"dev": true,
"engines": [ "engines": [
"node >=0.6.0" "node >=0.6.0"
] ]
@@ -5519,49 +5397,6 @@
"node": ">= 0.6.3" "node": ">= 0.6.3"
} }
}, },
"node_modules/ldapjs": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-3.0.7.tgz",
"integrity": "sha512-1ky+WrN+4CFMuoekUOv7Y1037XWdjKpu0xAPwSP+9KdvmV9PG+qOKlssDV6a+U32apwxdD3is/BZcWOYzN30cg==",
"deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md",
"license": "MIT",
"dependencies": {
"@ldapjs/asn1": "^2.0.0",
"@ldapjs/attribute": "^1.0.0",
"@ldapjs/change": "^1.0.0",
"@ldapjs/controls": "^2.1.0",
"@ldapjs/dn": "^1.1.0",
"@ldapjs/filter": "^2.1.1",
"@ldapjs/messages": "^1.3.0",
"@ldapjs/protocol": "^1.2.1",
"abstract-logging": "^2.0.1",
"assert-plus": "^1.0.0",
"backoff": "^2.5.0",
"once": "^1.4.0",
"vasync": "^2.2.1",
"verror": "^1.10.1"
}
},
"node_modules/ldapjs/node_modules/core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"license": "MIT"
},
"node_modules/ldapjs/node_modules/verror": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz",
"integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==",
"license": "MIT",
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
},
"engines": {
"node": ">=0.6.0"
}
},
"node_modules/ldapts": { "node_modules/ldapts": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/ldapts/-/ldapts-7.2.0.tgz", "resolved": "https://registry.npmjs.org/ldapts/-/ldapts-7.2.0.tgz",
@@ -6166,14 +6001,6 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/onetime": { "node_modules/onetime": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
@@ -6691,14 +6518,6 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/precond": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",
"integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/prelude-ls": { "node_modules/prelude-ls": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -6782,12 +6601,6 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
}, },
"node_modules/process-warning": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz",
"integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==",
"license": "MIT"
},
"node_modules/promise-coalesce": { "node_modules/promise-coalesce": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/promise-coalesce/-/promise-coalesce-1.1.2.tgz", "resolved": "https://registry.npmjs.org/promise-coalesce/-/promise-coalesce-1.1.2.tgz",
@@ -8165,22 +7978,11 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/vasync": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.1.tgz",
"integrity": "sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==",
"engines": [
"node >=0.6.0"
],
"license": "MIT",
"dependencies": {
"verror": "1.10.0"
}
},
"node_modules/verror": { "node_modules/verror": {
"version": "1.10.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"dev": true,
"engines": [ "engines": [
"node >=0.6.0" "node >=0.6.0"
], ],
@@ -8193,7 +7995,8 @@
"node_modules/verror/node_modules/core-util-is": { "node_modules/verror/node_modules/core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"dev": true
}, },
"node_modules/wait-on": { "node_modules/wait-on": {
"version": "8.0.1", "version": "8.0.1",
@@ -8374,11 +8177,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1" "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
} }
}, },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/xmlbuilder": { "node_modules/xmlbuilder": {
"version": "15.1.1", "version": "15.1.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",

View File

@@ -1,6 +1,6 @@
{ {
"name": "pingvin-share-backend", "name": "pingvin-share-backend",
"version": "1.1.3", "version": "1.2.0",
"scripts": { "scripts": {
"build": "nest build", "build": "nest build",
"dev": "cross-env NODE_ENV=development nest start --watch", "dev": "cross-env NODE_ENV=development nest start --watch",

View File

@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "RefreshToken" ADD COLUMN "oauthIDToken" TEXT;

View File

@@ -40,6 +40,8 @@ model RefreshToken {
userId String userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade)
oauthIDToken String? // prefixed with the ID of the issuing OAuth provider, separated by a colon
} }
model LoginToken { model LoginToken {

View File

@@ -254,6 +254,10 @@ const configVariables: ConfigVariables = {
type: "string", type: "string",
defaultValue: "", defaultValue: "",
}, },
"discord-limitedUsers": {
type: "string",
defaultValue: "",
},
"discord-clientId": { "discord-clientId": {
type: "string", type: "string",
defaultValue: "", defaultValue: "",
@@ -271,6 +275,10 @@ const configVariables: ConfigVariables = {
type: "string", type: "string",
defaultValue: "", defaultValue: "",
}, },
"oidc-signOut": {
type: "boolean",
defaultValue: "false",
},
"oidc-usernameClaim": { "oidc-usernameClaim": {
type: "string", type: "string",
defaultValue: "", defaultValue: "",

View File

@@ -172,10 +172,10 @@ export class AuthController {
@Req() request: Request, @Req() request: Request,
@Res({ passthrough: true }) response: Response, @Res({ passthrough: true }) response: Response,
) { ) {
await this.authService.signOut(request.cookies.access_token); const redirectURI = await this.authService.signOut(request.cookies.access_token);
const isSecure = this.config.get("general.appUrl").startsWith("https"); const isSecure = this.config.get("general.appUrl").startsWith("https");
response.cookie("access_token", "accessToken", { response.cookie("access_token", "", {
maxAge: -1, maxAge: -1,
secure: isSecure, secure: isSecure,
}); });
@@ -185,6 +185,10 @@ export class AuthController {
maxAge: -1, maxAge: -1,
secure: isSecure, secure: isSecure,
}); });
if (typeof redirectURI === "string") {
return { redirectURI: redirectURI.toString() };
}
} }
@Post("totp/enable") @Post("totp/enable")

View File

@@ -1,4 +1,4 @@
import { Module } from "@nestjs/common"; import { forwardRef, Module } from "@nestjs/common";
import { JwtModule } from "@nestjs/jwt"; import { JwtModule } from "@nestjs/jwt";
import { EmailModule } from "src/email/email.module"; import { EmailModule } from "src/email/email.module";
import { AuthController } from "./auth.controller"; import { AuthController } from "./auth.controller";
@@ -7,6 +7,7 @@ import { AuthTotpService } from "./authTotp.service";
import { JwtStrategy } from "./strategy/jwt.strategy"; import { JwtStrategy } from "./strategy/jwt.strategy";
import { LdapService } from "./ldap.service"; import { LdapService } from "./ldap.service";
import { UserModule } from "../user/user.module"; import { UserModule } from "../user/user.module";
import { OAuthModule } from "../oauth/oauth.module";
@Module({ @Module({
imports: [ imports: [
@@ -14,6 +15,7 @@ import { UserModule } from "../user/user.module";
global: true, global: true,
}), }),
EmailModule, EmailModule,
forwardRef(() => OAuthModule),
UserModule, UserModule,
], ],
controllers: [AuthController], controllers: [AuthController],

View File

@@ -1,6 +1,8 @@
import { import {
BadRequestException, BadRequestException,
ForbiddenException, ForbiddenException,
forwardRef,
Inject,
Injectable, Injectable,
Logger, Logger,
UnauthorizedException, UnauthorizedException,
@@ -17,7 +19,8 @@ import { PrismaService } from "src/prisma/prisma.service";
import { AuthRegisterDTO } from "./dto/authRegister.dto"; import { AuthRegisterDTO } from "./dto/authRegister.dto";
import { AuthSignInDTO } from "./dto/authSignIn.dto"; import { AuthSignInDTO } from "./dto/authSignIn.dto";
import { LdapService } from "./ldap.service"; import { LdapService } from "./ldap.service";
import { inspect } from "util"; import { GenericOidcProvider } from "../oauth/provider/genericOidc.provider";
import { OAuthService } from "../oauth/oauth.service";
import { UserSevice } from "../user/user.service"; import { UserSevice } from "../user/user.service";
@Injectable() @Injectable()
@@ -29,6 +32,7 @@ export class AuthService {
private emailService: EmailService, private emailService: EmailService,
private ldapService: LdapService, private ldapService: LdapService,
private userService: UserSevice, private userService: UserSevice,
@Inject(forwardRef(() => OAuthService)) private oAuthService: OAuthService,
) {} ) {}
private readonly logger = new Logger(AuthService.name); private readonly logger = new Logger(AuthService.name);
@@ -113,12 +117,12 @@ export class AuthService {
throw new UnauthorizedException("Wrong email or password"); throw new UnauthorizedException("Wrong email or password");
} }
async generateToken(user: User, isOAuth = false) { async generateToken(user: User, oauth?: { idToken?: string }) {
// TODO: Make all old loginTokens invalid when a new one is created // TODO: Make all old loginTokens invalid when a new one is created
// Check if the user has TOTP enabled // Check if the user has TOTP enabled
if ( if (
user.totpVerified && user.totpVerified &&
!(isOAuth && this.config.get("oauth.ignoreTotp")) !(oauth && this.config.get("oauth.ignoreTotp"))
) { ) {
const loginToken = await this.createLoginToken(user.id); const loginToken = await this.createLoginToken(user.id);
@@ -127,6 +131,7 @@ export class AuthService {
const { refreshToken, refreshTokenId } = await this.createRefreshToken( const { refreshToken, refreshTokenId } = await this.createRefreshToken(
user.id, user.id,
oauth?.idToken,
); );
const accessToken = await this.createAccessToken(user, refreshTokenId); const accessToken = await this.createAccessToken(user, refreshTokenId);
@@ -225,12 +230,39 @@ export class AuthService {
}) || {}; }) || {};
if (refreshTokenId) { if (refreshTokenId) {
const oauthIDToken = await this.prisma.refreshToken
.findFirst({ select: { oauthIDToken: true }, where: { id: refreshTokenId } })
.then((refreshToken) => refreshToken?.oauthIDToken)
.catch((e) => {
// Ignore error if refresh token doesn't exist
if (e.code != "P2025") throw e;
});
await this.prisma.refreshToken await this.prisma.refreshToken
.delete({ where: { id: refreshTokenId } }) .delete({ where: { id: refreshTokenId } })
.catch((e) => { .catch((e) => {
// Ignore error if refresh token doesn't exist // Ignore error if refresh token doesn't exist
if (e.code != "P2025") throw e; if (e.code != "P2025") throw e;
}); });
if (typeof oauthIDToken === "string") {
const [providerName, idTokenHint] = oauthIDToken.split(":");
const provider = this.oAuthService.availableProviders()[providerName];
let signOutFromProviderSupportedAndActivated = false;
try {
signOutFromProviderSupportedAndActivated = this.config.get(`oauth.${providerName}-signOut`);
} catch (_) {
// Ignore error if the provider is not supported or if the provider sign out is not activated
}
if (provider instanceof GenericOidcProvider && signOutFromProviderSupportedAndActivated) {
const configuration = await provider.getConfiguration();
if (configuration.frontchannel_logout_supported && URL.canParse(configuration.end_session_endpoint)) {
const redirectURI = new URL(configuration.end_session_endpoint);
redirectURI.searchParams.append("id_token_hint", idTokenHint);
redirectURI.searchParams.append("client_id", this.config.get(`oauth.${providerName}-clientId`));
return redirectURI.toString();
}
}
}
} }
} }
@@ -249,13 +281,14 @@ export class AuthService {
); );
} }
async createRefreshToken(userId: string) { async createRefreshToken(userId: string, idToken?: string) {
const { id, token } = await this.prisma.refreshToken.create({ const { id, token } = await this.prisma.refreshToken.create({
data: { data: {
userId, userId,
expiresAt: moment() expiresAt: moment()
.add(this.config.get("general.sessionDuration"), "hours") .add(this.config.get("general.sessionDuration"), "hours")
.toDate(), .toDate(),
oauthIDToken: idToken,
}, },
}); });

View File

@@ -74,7 +74,9 @@ async function bootstrap() {
SwaggerModule.setup("api/swagger", app, document); SwaggerModule.setup("api/swagger", app, document);
} }
await app.listen(parseInt(process.env.PORT) || 8080); await app.listen(
parseInt(process.env.BACKEND_PORT || process.env.PORT || "8080"),
);
const logger = new Logger("UnhandledAsyncError"); const logger = new Logger("UnhandledAsyncError");
process.on("unhandledRejection", (e) => logger.error(e)); process.on("unhandledRejection", (e) => logger.error(e));

View File

@@ -4,4 +4,5 @@ export interface OAuthSignInDto {
providerUsername: string; providerUsername: string;
email: string; email: string;
isAdmin?: boolean; isAdmin?: boolean;
idToken?: string;
} }

View File

@@ -1,4 +1,4 @@
import { Module } from "@nestjs/common"; import { forwardRef, Module } from "@nestjs/common";
import { OAuthController } from "./oauth.controller"; import { OAuthController } from "./oauth.controller";
import { OAuthService } from "./oauth.service"; import { OAuthService } from "./oauth.service";
import { AuthModule } from "../auth/auth.module"; import { AuthModule } from "../auth/auth.module";
@@ -51,6 +51,7 @@ import { MicrosoftProvider } from "./provider/microsoft.provider";
inject: ["OAUTH_PROVIDERS"], inject: ["OAUTH_PROVIDERS"],
}, },
], ],
imports: [AuthModule], imports: [forwardRef(() => AuthModule)],
exports: [OAuthService],
}) })
export class OAuthModule {} export class OAuthModule {}

View File

@@ -1,4 +1,4 @@
import { Inject, Injectable, Logger } from "@nestjs/common"; import { forwardRef, Inject, Injectable, Logger } from "@nestjs/common";
import { User } from "@prisma/client"; import { User } from "@prisma/client";
import { nanoid } from "nanoid"; import { nanoid } from "nanoid";
import { AuthService } from "../auth/auth.service"; import { AuthService } from "../auth/auth.service";
@@ -6,14 +6,16 @@ import { ConfigService } from "../config/config.service";
import { PrismaService } from "../prisma/prisma.service"; import { PrismaService } from "../prisma/prisma.service";
import { OAuthSignInDto } from "./dto/oauthSignIn.dto"; import { OAuthSignInDto } from "./dto/oauthSignIn.dto";
import { ErrorPageException } from "./exceptions/errorPage.exception"; import { ErrorPageException } from "./exceptions/errorPage.exception";
import { OAuthProvider } from "./provider/oauthProvider.interface";
@Injectable() @Injectable()
export class OAuthService { export class OAuthService {
constructor( constructor(
private prisma: PrismaService, private prisma: PrismaService,
private config: ConfigService, private config: ConfigService,
private auth: AuthService, @Inject(forwardRef(() => AuthService)) private auth: AuthService,
@Inject("OAUTH_PLATFORMS") private platforms: string[], @Inject("OAUTH_PLATFORMS") private platforms: string[],
@Inject("OAUTH_PROVIDERS") private oAuthProviders: Record<string, OAuthProvider<unknown>>,
) {} ) {}
private readonly logger = new Logger(OAuthService.name); private readonly logger = new Logger(OAuthService.name);
@@ -27,6 +29,16 @@ export class OAuthService {
.map(([platform, _]) => platform); .map(([platform, _]) => platform);
} }
availableProviders(): Record<string, OAuthProvider<unknown>> {
return Object.fromEntries(Object.entries(this.oAuthProviders)
.map(([providerName, provider]) => [
[providerName, provider],
this.config.get(`oauth.${providerName}-enabled`),
])
.filter(([_, enabled]) => enabled)
.map(([provider, _]) => provider));
}
async status(user: User) { async status(user: User) {
const oauthUsers = await this.prisma.oAuthUser.findMany({ const oauthUsers = await this.prisma.oAuthUser.findMany({
select: { select: {
@@ -55,7 +67,7 @@ export class OAuthService {
}, },
}); });
this.logger.log(`Successful login for user ${user.email} from IP ${ip}`); this.logger.log(`Successful login for user ${user.email} from IP ${ip}`);
return this.auth.generateToken(updatedUser, true); return this.auth.generateToken(updatedUser, { idToken: user.idToken });
} }
return this.signUp(user, ip); return this.signUp(user, ip);
@@ -156,7 +168,7 @@ export class OAuthService {
}, },
}); });
await this.updateIsAdmin(user); await this.updateIsAdmin(user);
return this.auth.generateToken(existingUser, true); return this.auth.generateToken(existingUser, { idToken: user.idToken });
} }
const result = await this.auth.signUp( const result = await this.auth.signUp(

View File

@@ -81,12 +81,17 @@ export class DiscordProvider implements OAuthProvider<DiscordToken> {
if (guild) { if (guild) {
await this.checkLimitedGuild(token, guild); await this.checkLimitedGuild(token, guild);
} }
const limitedUsers = this.config.get("oauth.discord-limitedUsers");
if (limitedUsers) {
await this.checkLimitedUsers(user, limitedUsers);
}
return { return {
provider: "discord", provider: "discord",
providerId: user.id, providerId: user.id,
providerUsername: user.global_name ?? user.username, providerUsername: user.global_name ?? user.username,
email: user.email, email: user.email,
idToken: `discord:${token.idToken}`,
}; };
} }
@@ -107,6 +112,12 @@ export class DiscordProvider implements OAuthProvider<DiscordToken> {
throw new ErrorPageException("user_not_allowed"); throw new ErrorPageException("user_not_allowed");
} }
} }
async checkLimitedUsers(user: DiscordUser, userIds: string) {
if (!userIds.split(",").includes(user.id)) {
throw new ErrorPageException("user_not_allowed");
}
}
} }
export interface DiscordToken { export interface DiscordToken {

View File

@@ -197,6 +197,7 @@ export abstract class GenericOidcProvider implements OAuthProvider<OidcToken> {
providerId: idTokenData.sub, providerId: idTokenData.sub,
providerUsername: username, providerUsername: username,
...(isAdmin !== undefined && { isAdmin }), ...(isAdmin !== undefined && { isAdmin }),
idToken: `${this.name}:${token.idToken}`,
}; };
} }
@@ -251,6 +252,8 @@ export interface OidcConfiguration {
id_token_signing_alg_values_supported: string[]; id_token_signing_alg_values_supported: string[];
scopes_supported?: string[]; scopes_supported?: string[];
claims_supported?: string[]; claims_supported?: string[];
frontchannel_logout_supported?: boolean;
end_session_endpoint?: string;
} }
export interface OidcJwk { export interface OidcJwk {

View File

@@ -61,6 +61,7 @@ export class GitHubProvider implements OAuthProvider<GitHubToken> {
providerId: user.id.toString(), providerId: user.id.toString(),
providerUsername: user.name ?? user.login, providerUsername: user.name ?? user.login,
email, email,
idToken: `github:${token.idToken}`,
}; };
} }

View File

@@ -36,7 +36,7 @@ For installation specific configuration, you can use environment variables. The
| Variable | Default Value | Description | | Variable | Default Value | Description |
| ---------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | | ---------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `PORT` | `8080` | The port on which the backend listens. | | `BACKEND_PORT` | `8080` | The port on which the backend listens. |
| `DATABASE_URL` | `file:../data/pingvin-share.db?connection_limit=1` | The URL of the SQLite database. | | `DATABASE_URL` | `file:../data/pingvin-share.db?connection_limit=1` | The URL of the SQLite database. |
| `DATA_DIRECTORY` | `./data` | The directory where data is stored. | | `DATA_DIRECTORY` | `./data` | The directory where data is stored. |
| `CLAMAV_HOST` | `127.0.0.1` or `clamav` when running with Docker | The IP address of the ClamAV server. See the [ClamAV docs](integrations.md#clamav) for more information. | | `CLAMAV_HOST` | `127.0.0.1` or `clamav` when running with Docker | The IP address of the ClamAV server. See the [ClamAV docs](integrations.md#clamav) for more information. |

View File

@@ -1,12 +1,12 @@
{ {
"name": "pingvin-share-frontend", "name": "pingvin-share-frontend",
"version": "1.1.3", "version": "1.2.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pingvin-share-frontend", "name": "pingvin-share-frontend",
"version": "1.1.3", "version": "1.2.0",
"dependencies": { "dependencies": {
"@emotion/react": "^11.13.3", "@emotion/react": "^11.13.3",
"@emotion/server": "^11.11.0", "@emotion/server": "^11.11.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "pingvin-share-frontend", "name": "pingvin-share-frontend",
"version": "1.1.3", "version": "1.2.0",
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "تفعيل الدخول باستخدام OpenID Connect", "admin.config.oauth.oidc-enabled.description": "تفعيل الدخول باستخدام OpenID Connect",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "رابط الاستكشاف لتطبيق OpenID Connect OAuth", "admin.config.oauth.oidc-discovery-uri.description": "رابط الاستكشاف لتطبيق OpenID Connect OAuth",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "طلب اسم المستخدم في رمز معرف OpenID Connect. إذا كنت لا تعرف معنى هذا الإعداد، اتركه فارغًا.", "admin.config.oauth.oidc-username-claim.description": "طلب اسم المستخدم في رمز معرف OpenID Connect. إذا كنت لا تعرف معنى هذا الإعداد، اتركه فارغًا.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Zda je povoleno přihlášení přes OpenID Connect", "admin.config.oauth.oidc-enabled.description": "Zda je povoleno přihlášení přes OpenID Connect",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -34,7 +34,7 @@ export default {
"signIn.notify.totp-required.title": "2-faktor login påkrævet", "signIn.notify.totp-required.title": "2-faktor login påkrævet",
"signIn.notify.totp-required.description": "Indtast den aktuelle engangskode fra din 2-faktor Authenticator", "signIn.notify.totp-required.description": "Indtast den aktuelle engangskode fra din 2-faktor Authenticator",
"signIn.oauth.or": "OR", "signIn.oauth.or": "OR",
"signIn.oauth.signInWith": "Sign in with", "signIn.oauth.signInWith": "Log ind med",
"signIn.oauth.github": "GitHub", "signIn.oauth.github": "GitHub",
"signIn.oauth.google": "Google", "signIn.oauth.google": "Google",
"signIn.oauth.microsoft": "Microsoft", "signIn.oauth.microsoft": "Microsoft",
@@ -58,7 +58,7 @@ export default {
// /auth/reset-password // /auth/reset-password
"resetPassword.title": "Glemt din adgangskode?", "resetPassword.title": "Glemt din adgangskode?",
"resetPassword.description": "Indtast din e-mail for at nulstille din adgangskode.", "resetPassword.description": "Indtast din e-mail for at nulstille din adgangskode.",
"resetPassword.notify.success": "A message with a link to reset your password has been sent if the email exists.", "resetPassword.notify.success": "En besked med et link til at nulstille din adgangskode er blevet sendt, hvis e-mailen eksisterer.",
"resetPassword.button.back": "Tilbage til login", "resetPassword.button.back": "Tilbage til login",
"resetPassword.text.resetPassword": "Nulstil adgangskode", "resetPassword.text.resetPassword": "Nulstil adgangskode",
"resetPassword.text.enterNewPassword": "Indtast din nye adgangskode", "resetPassword.text.enterNewPassword": "Indtast din nye adgangskode",
@@ -135,7 +135,7 @@ export default {
"account.reverseShares.title.empty": "Der er tomt her 👀", "account.reverseShares.title.empty": "Der er tomt her 👀",
"account.reverseShares.description.empty": "You don't have any reverse shares.", "account.reverseShares.description.empty": "You don't have any reverse shares.",
// showCreateReverseShareModal.tsx // showCreateReverseShareModal.tsx
"account.reverseShares.modal.title": "Create reverse share", "account.reverseShares.modal.title": "Opret omvendt deling",
"account.reverseShares.modal.expiration.label": "Udløb", "account.reverseShares.modal.expiration.label": "Udløb",
"account.reverseShares.modal.expiration.minute-singular": "Minut", "account.reverseShares.modal.expiration.minute-singular": "Minut",
"account.reverseShares.modal.expiration.minute-plural": "Minutter", "account.reverseShares.modal.expiration.minute-plural": "Minutter",
@@ -154,7 +154,7 @@ export default {
"account.reverseShares.modal.send-email.description": "Send en e-mail notifikation, når der oprettes en deling med dette omvendte delingslink.", "account.reverseShares.modal.send-email.description": "Send en e-mail notifikation, når der oprettes en deling med dette omvendte delingslink.",
"account.reverseShares.modal.simplified": "Simple mode", "account.reverseShares.modal.simplified": "Simple mode",
"account.reverseShares.modal.simplified.description": "Make it easy for the person uploading the file to share it with you. They will be able to customize only the name and description of the share.", "account.reverseShares.modal.simplified.description": "Make it easy for the person uploading the file to share it with you. They will be able to customize only the name and description of the share.",
"account.reverseShares.modal.public-access": "Public access", "account.reverseShares.modal.public-access": "Offentlig adgang",
"account.reverseShares.modal.public-access.description": "Make the created shares with this reverse share public. If disabled, only you and the creator of the share can view it.", "account.reverseShares.modal.public-access.description": "Make the created shares with this reverse share public. If disabled, only you and the creator of the share can view it.",
"account.reverseShares.modal.max-use.label": "Maksimal anvendelser", "account.reverseShares.modal.max-use.label": "Maksimal anvendelser",
"account.reverseShares.modal.max-use.description": "Det maksimale antal gange, denne URL kan bruges til at oprette en deling.", "account.reverseShares.modal.max-use.description": "Det maksimale antal gange, denne URL kan bruges til at oprette en deling.",
@@ -168,7 +168,7 @@ export default {
"account.reverseShares.table.max-size": "Maksimal størrelse for deling", "account.reverseShares.table.max-size": "Maksimal størrelse for deling",
"account.reverseShares.table.expires": "Udløber d", "account.reverseShares.table.expires": "Udløber d",
"account.reverseShares.modal.reverse-share-link": "Reverse share link", "account.reverseShares.modal.reverse-share-link": "Reverse share link",
"account.reverseShares.modal.delete.title": "Delete reverse share", "account.reverseShares.modal.delete.title": "Slet omvendt deling",
"account.reverseShares.modal.delete.description": "Ønsker du virkelig at slette denne omvendte deling? Hvis du gør det, vil de tilknyttede delinger også blive slettet.", "account.reverseShares.modal.delete.description": "Ønsker du virkelig at slette denne omvendte deling? Hvis du gør det, vil de tilknyttede delinger også blive slettet.",
// END /account/reverseShares // END /account/reverseShares
// /admin // /admin
@@ -244,7 +244,7 @@ export default {
"upload.modal.expires.month-plural": "Måneder", "upload.modal.expires.month-plural": "Måneder",
"upload.modal.expires.year-singular": "År", "upload.modal.expires.year-singular": "År",
"upload.modal.expires.year-plural": "År", "upload.modal.expires.year-plural": "År",
"upload.modal.accordion.name-and-description.title": "Name and description", "upload.modal.accordion.name-and-description.title": "Navn og beskrivelse",
"upload.modal.accordion.name-and-description.name.placeholder": "Navn", "upload.modal.accordion.name-and-description.name.placeholder": "Navn",
"upload.modal.accordion.name-and-description.description.placeholder": "Note for the recipients of this share", "upload.modal.accordion.name-and-description.description.placeholder": "Note for the recipients of this share",
"upload.modal.accordion.email.title": "E-mail modtagere", "upload.modal.accordion.email.title": "E-mail modtagere",
@@ -269,7 +269,7 @@ export default {
"share.error.removed.title": "Deling fjernet", "share.error.removed.title": "Deling fjernet",
"share.error.not-found.title": "Delingen blev ikke fundet", "share.error.not-found.title": "Delingen blev ikke fundet",
"share.error.not-found.description": "Den deling, du leder efter, eksisterer ikke.", "share.error.not-found.description": "Den deling, du leder efter, eksisterer ikke.",
"share.error.access-denied.title": "Private share", "share.error.access-denied.title": "Privat deling",
"share.error.access-denied.description": "The current account does not have permission to access this share", "share.error.access-denied.description": "The current account does not have permission to access this share",
"share.modal.password.title": "Adgangskode påkrævet", "share.modal.password.title": "Adgangskode påkrævet",
"share.modal.password.description": "For at få adgang til denne deling, indtast venligst adgangskoden til delingen.", "share.modal.password.description": "For at få adgang til denne deling, indtast venligst adgangskoden til delingen.",
@@ -287,7 +287,7 @@ export default {
"share.edit.title": "Rediger {shareId}", "share.edit.title": "Rediger {shareId}",
"share.edit.append-upload": "Append file", "share.edit.append-upload": "Append file",
"share.edit.notify.generic-error": "An error occurred while finishing your share.", "share.edit.notify.generic-error": "An error occurred while finishing your share.",
"share.edit.notify.save-success": "Share updated successfully", "share.edit.notify.save-success": "Deling opdateret",
// END /share/[id]/edit // END /share/[id]/edit
// /admin/config // /admin/config
"admin.config.title": "Konfiguration", "admin.config.title": "Konfiguration",
@@ -355,13 +355,13 @@ export default {
"admin.config.smtp.allow-unauthorized-certificates": "Trust unauthorized SMTP server certificates", "admin.config.smtp.allow-unauthorized-certificates": "Trust unauthorized SMTP server certificates",
"admin.config.smtp.allow-unauthorized-certificates.description": "Only set this to true if you need to trust self signed certificates.", "admin.config.smtp.allow-unauthorized-certificates.description": "Only set this to true if you need to trust self signed certificates.",
"admin.config.oauth.allow-registration": "Tillad registrering", "admin.config.oauth.allow-registration": "Tillad registrering",
"admin.config.oauth.allow-registration.description": "Allow users to register via social login", "admin.config.oauth.allow-registration.description": "Tillad brugere at registrere sig via socialt login",
"admin.config.oauth.ignore-totp": "Ignore TOTP", "admin.config.oauth.ignore-totp": "Ignore TOTP",
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login", "admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
"admin.config.oauth.disable-password": "Disable password login", "admin.config.oauth.disable-password": "Deaktiver login med password",
"admin.config.oauth.disable-password.description": "Whether to disable password login\nMake sure that an OAuth provider is properly configured before activating this configuration to avoid being locked out.", "admin.config.oauth.disable-password.description": "Whether to disable password login\nMake sure that an OAuth provider is properly configured before activating this configuration to avoid being locked out.",
"admin.config.oauth.github-enabled": "GitHub", "admin.config.oauth.github-enabled": "GitHub",
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled", "admin.config.oauth.github-enabled.description": "Om GitHub login er aktiveret",
"admin.config.oauth.github-client-id": "GitHub Client ID", "admin.config.oauth.github-client-id": "GitHub Client ID",
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app", "admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
"admin.config.oauth.github-client-secret": "GitHub Client secret", "admin.config.oauth.github-client-secret": "GitHub Client secret",
@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",
@@ -405,7 +407,7 @@ export default {
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret", "admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID Connect OAuth app", "admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID Connect OAuth app",
"admin.config.category.ldap": "LDAP", "admin.config.category.ldap": "LDAP",
"admin.config.ldap.enabled": "Enabled LDAP", "admin.config.ldap.enabled": "Aktiveret LDAP",
"admin.config.ldap.enabled.description": "Use LDAP authentication for user login", "admin.config.ldap.enabled.description": "Use LDAP authentication for user login",
"admin.config.ldap.url": "Server URL", "admin.config.ldap.url": "Server URL",
"admin.config.ldap.url.description": "URL of the LDAP server", "admin.config.ldap.url.description": "URL of the LDAP server",
@@ -417,8 +419,8 @@ export default {
"admin.config.ldap.search-base.description": "Base location, where the user search will be performed", "admin.config.ldap.search-base.description": "Base location, where the user search will be performed",
"admin.config.ldap.search-query": "User query", "admin.config.ldap.search-query": "User query",
"admin.config.ldap.search-query.description": "The user query will be used to search the 'User base' for the LDAP user. %username% can be used as the placeholder for the user given input.", "admin.config.ldap.search-query.description": "The user query will be used to search the 'User base' for the LDAP user. %username% can be used as the placeholder for the user given input.",
"admin.config.ldap.admin-groups": "Admin group", "admin.config.ldap.admin-groups": "Admin gruppe",
"admin.config.ldap.admin-groups.description": "Group required for administrative access.", "admin.config.ldap.admin-groups.description": "Gruppe påkrævet for administrativ adgang.",
"admin.config.ldap.field-name-member-of": "User groups attribute name", "admin.config.ldap.field-name-member-of": "User groups attribute name",
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.", "admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.",
"admin.config.ldap.field-name-email": "User email attribute name", "admin.config.ldap.field-name-email": "User email attribute name",
@@ -430,7 +432,7 @@ export default {
"error.title": "Fejl", "error.title": "Fejl",
"error.description": "Hovsa!", "error.description": "Hovsa!",
"error.button.back": "Gå tilbage", "error.button.back": "Gå tilbage",
"error.msg.default": "Something went wrong.", "error.msg.default": "Noget gik galt.",
"error.msg.access_denied": "You canceled the authentication process, please try again.", "error.msg.access_denied": "You canceled the authentication process, please try again.",
"error.msg.expired_token": "The authentication process took too long, please try again.", "error.msg.expired_token": "The authentication process took too long, please try again.",
"error.msg.invalid_token": "Intern Fejl", "error.msg.invalid_token": "Intern Fejl",
@@ -458,9 +460,9 @@ export default {
"common.button.generate": "Generer", "common.button.generate": "Generer",
"common.button.done": "Færdig", "common.button.done": "Færdig",
"common.text.link": "Link", "common.text.link": "Link",
"common.text.navigate-to-link": "Go to the link", "common.text.navigate-to-link": "Gå til linket",
"common.text.or": "eller", "common.text.or": "eller",
"common.text.redirecting": "Redirecting...", "common.text.redirecting": "Omdirigerer...",
"common.button.go-back": "Gå tilbage", "common.button.go-back": "Gå tilbage",
"common.button.go-home": "Go home", "common.button.go-home": "Go home",
"common.notify.copied": "Linket blev kopieret til udklipsholderen", "common.notify.copied": "Linket blev kopieret til udklipsholderen",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "OpenID Connect Anmeldung erlaubt", "admin.config.oauth.oidc-enabled.description": "OpenID Connect Anmeldung erlaubt",
"admin.config.oauth.oidc-discovery-uri": "OpenID Verbindung Discovery URL", "admin.config.oauth.oidc-discovery-uri": "OpenID Verbindung Discovery URL",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery-URL der OpenID OAuth App", "admin.config.oauth.oidc-discovery-uri.description": "Discovery-URL der OpenID OAuth App",
"admin.config.oauth.oidc-sign-out": "Abmelden von OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Wenn aktiviert, wird der Benutzer mit der „Abmelden“-Schaltfläche vom OpenID-Connect-Provider abgemeldet.",
"admin.config.oauth.oidc-username-claim": "OpenID Connect Benutzername anfordern", "admin.config.oauth.oidc-username-claim": "OpenID Connect Benutzername anfordern",
"admin.config.oauth.oidc-username-claim.description": "Benutzername im OpenID Token. Leer lassen, wenn du nicht weißt, was diese Konfiguration bedeutet.", "admin.config.oauth.oidc-username-claim.description": "Benutzername im OpenID Token. Leer lassen, wenn du nicht weißt, was diese Konfiguration bedeutet.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Αν είναι ενεργοποιημένη η σύνδεση OpenID", "admin.config.oauth.oidc-enabled.description": "Αν είναι ενεργοποιημένη η σύνδεση OpenID",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Αφήστε κενό αν δε γνωρίζετε για αυτή τη ρύθμιση", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Αφήστε κενό αν δε γνωρίζετε για αυτή τη ρύθμιση",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -547,6 +547,9 @@ export default {
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "admin.config.oauth.oidc-discovery-uri.description":
"Discovery URI of the OpenID Connect OAuth app", "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description":
"Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "admin.config.oauth.oidc-username-claim.description":
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Permettre la connexion via OpenID", "admin.config.oauth.oidc-enabled.description": "Permettre la connexion via OpenID",
"admin.config.oauth.oidc-discovery-uri": "URI de découverte OpenID", "admin.config.oauth.oidc-discovery-uri": "URI de découverte OpenID",
"admin.config.oauth.oidc-discovery-uri.description": "LURI de découverte de la connexion à l'application OpenID OAuth", "admin.config.oauth.oidc-discovery-uri.description": "LURI de découverte de la connexion à l'application OpenID OAuth",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "Revendication du nom dutilisateur OpenID", "admin.config.oauth.oidc-username-claim": "Revendication du nom dutilisateur OpenID",
"admin.config.oauth.oidc-username-claim.description": "Le champ contenant la revendication du nom dutilisateur dans le jeton OpenID Connect. Laissez vide si vous ne savez pas quoi indiquer.", "admin.config.oauth.oidc-username-claim.description": "Le champ contenant la revendication du nom dutilisateur dans le jeton OpenID Connect. Laissez vide si vous ne savez pas quoi indiquer.",
"admin.config.oauth.oidc-role-path": "Chemin vers les rôles dans le jeton OpenID Connect", "admin.config.oauth.oidc-role-path": "Chemin vers les rôles dans le jeton OpenID Connect",
@@ -419,10 +421,10 @@ export default {
"admin.config.ldap.search-query.description": "La requête utilisateur sera utilisée pour rechercher dans la base d'utilisateurs de l'utilisateur LDAP. %username% peut être utilisé comme espace réservé pour les entrées données par l'utilisateur.", "admin.config.ldap.search-query.description": "La requête utilisateur sera utilisée pour rechercher dans la base d'utilisateurs de l'utilisateur LDAP. %username% peut être utilisé comme espace réservé pour les entrées données par l'utilisateur.",
"admin.config.ldap.admin-groups": "Groupe administrateur", "admin.config.ldap.admin-groups": "Groupe administrateur",
"admin.config.ldap.admin-groups.description": "Un groupe est nécessaire pour un accès administratif.", "admin.config.ldap.admin-groups.description": "Un groupe est nécessaire pour un accès administratif.",
"admin.config.ldap.field-name-member-of": "User groups attribute name", "admin.config.ldap.field-name-member-of": "Nom de l'attribut des groupes d'utilisateurs",
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.", "admin.config.ldap.field-name-member-of.description": "Nom d'attribut LDAP pour les groupes dont un utilisateur est membre. Il est utilisé lors de la vérification du groupe d'administrateurs.",
"admin.config.ldap.field-name-email": "User email attribute name", "admin.config.ldap.field-name-email": "Nom d'attribut de l'e-mail de l'utilisateur",
"admin.config.ldap.field-name-email.description": "LDAP attribute name for the email of an user.", "admin.config.ldap.field-name-email.description": "Nom d'attribut LDAP pour l'e-mail d'un utilisateur.",
// 404 // 404
"404.description": "Désolé, mais cette page nexiste pas.", "404.description": "Désolé, mais cette page nexiste pas.",
"404.button.home": "Retour à laccueil", "404.button.home": "Retour à laccueil",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "OpenID Connect bejelentkezés engedélyezése", "admin.config.oauth.oidc-enabled.description": "OpenID Connect bejelentkezés engedélyezése",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Az OpenID Connect OAuth applikáció Discovery URI azonosítója", "admin.config.oauth.oidc-discovery-uri.description": "Az OpenID Connect OAuth applikáció Discovery URI azonosítója",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect felhasználónév igény", "admin.config.oauth.oidc-username-claim": "OpenID Connect felhasználónév igény",
"admin.config.oauth.oidc-username-claim.description": "Az OpenID Connect ID token felhasználónév igénye. Hagyja üresen ha nincs információja a beállításról.", "admin.config.oauth.oidc-username-claim.description": "Az OpenID Connect ID token felhasználónév igénye. Hagyja üresen ha nincs információja a beállításról.",
"admin.config.oauth.oidc-role-path": "Az OpenID Connect token szerepeinek elérési útvonala", "admin.config.oauth.oidc-role-path": "Az OpenID Connect token szerepeinek elérési útvonala",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Se il login tramite OpenID Connect è abilitato", "admin.config.oauth.oidc-enabled.description": "Se il login tramite OpenID Connect è abilitato",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "URI di scoperta dell'app OAuth di OpenID Connect", "admin.config.oauth.oidc-discovery-uri.description": "URI di scoperta dell'app OAuth di OpenID Connect",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "Richiesta nome utente OpenID Connect", "admin.config.oauth.oidc-username-claim": "Richiesta nome utente OpenID Connect",
"admin.config.oauth.oidc-username-claim.description": "Nome utente nel token OpenID Connect. Lascialo vuoto se non sai cos'è questa configurazione.", "admin.config.oauth.oidc-username-claim.description": "Nome utente nel token OpenID Connect. Lascialo vuoto se non sai cos'è questa configurazione.",
"admin.config.oauth.oidc-role-path": "Percorso verso i ruoli in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Percorso verso i ruoli in OpenID Connect token",
@@ -419,10 +421,10 @@ export default {
"admin.config.ldap.search-query.description": "La query utente verrà utilizzata per cercare la 'base utente' per l'utente LDAP. %username% può essere usato come segnaposto per l'input dato dall'utente.", "admin.config.ldap.search-query.description": "La query utente verrà utilizzata per cercare la 'base utente' per l'utente LDAP. %username% può essere usato come segnaposto per l'input dato dall'utente.",
"admin.config.ldap.admin-groups": "Gruppo di amministrazione", "admin.config.ldap.admin-groups": "Gruppo di amministrazione",
"admin.config.ldap.admin-groups.description": "Gruppo richiesto per laccesso amministrativo.", "admin.config.ldap.admin-groups.description": "Gruppo richiesto per laccesso amministrativo.",
"admin.config.ldap.field-name-member-of": "User groups attribute name", "admin.config.ldap.field-name-member-of": "Nome dell'attributo per il gruppo utenti",
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.", "admin.config.ldap.field-name-member-of.description": "Nome attributo LDAP per i gruppi, di cui un utente è membro. Questo viene utilizzato per controllare il gruppo amministratore.",
"admin.config.ldap.field-name-email": "User email attribute name", "admin.config.ldap.field-name-email": "Nome dell'attributo email dell'utente",
"admin.config.ldap.field-name-email.description": "LDAP attribute name for the email of an user.", "admin.config.ldap.field-name-email.description": "Nome attributo LDAP per l'email di un utente.",
// 404 // 404
"404.description": "Ops, questa pagina non esiste.", "404.description": "Ops, questa pagina non esiste.",
"404.button.home": "Riportami a casa", "404.button.home": "Riportami a casa",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "OpenID Connect のログインが有効かを設定します", "admin.config.oauth.oidc-enabled.description": "OpenID Connect のログインが有効かを設定します",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "OpenID OAuthアプリのDiscovery URI", "admin.config.oauth.oidc-discovery-uri.description": "OpenID OAuthアプリのDiscovery URI",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect ユーザー名の要求", "admin.config.oauth.oidc-username-claim": "OpenID Connect ユーザー名の要求",
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID トークンのユーザー名要求。この設定が何かわからない場合は空白のままにしてください。", "admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID トークンのユーザー名要求。この設定が何かわからない場合は空白のままにしてください。",
"admin.config.oauth.oidc-role-path": "OpenID Connectトークンのロールへのパス", "admin.config.oauth.oidc-role-path": "OpenID Connectトークンのロールへのパス",
@@ -419,10 +421,10 @@ export default {
"admin.config.ldap.search-query.description": "ユーザークエリはLDAPユーザーの「ユーザーベース」を検索するために使用されます。 %username% は、入力されたユーザーのプレースホルダとして使用できます。", "admin.config.ldap.search-query.description": "ユーザークエリはLDAPユーザーの「ユーザーベース」を検索するために使用されます。 %username% は、入力されたユーザーのプレースホルダとして使用できます。",
"admin.config.ldap.admin-groups": "管理者グループ", "admin.config.ldap.admin-groups": "管理者グループ",
"admin.config.ldap.admin-groups.description": "管理者アクセスに必要なグループです。", "admin.config.ldap.admin-groups.description": "管理者アクセスに必要なグループです。",
"admin.config.ldap.field-name-member-of": "User groups attribute name", "admin.config.ldap.field-name-member-of": "ユーザーグループ属性名",
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.", "admin.config.ldap.field-name-member-of.description": "ユーザーがメンバーであるグループのLDAP属性名。これは、管理者グループを確認するときに使用されます。",
"admin.config.ldap.field-name-email": "User email attribute name", "admin.config.ldap.field-name-email": "ユーザーのメール属性名",
"admin.config.ldap.field-name-email.description": "LDAP attribute name for the email of an user.", "admin.config.ldap.field-name-email.description": "ユーザーのメールのLDAP属性名。",
// 404 // 404
"404.description": "ページが見つかりません。", "404.description": "ページが見つかりません。",
"404.button.home": "ホームに戻る", "404.button.home": "ホームに戻る",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "OpenID Connect 로그인 사용 여부", "admin.config.oauth.oidc-enabled.description": "OpenID Connect 로그인 사용 여부",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID 토큰의 Username claim 입니다. 이 구성이 무엇인지 모르면 비워 둡니다.", "admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID 토큰의 Username claim 입니다. 이 구성이 무엇인지 모르면 비워 둡니다.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Ofdat OpenID Connect login is ingeschakeld", "admin.config.oauth.oidc-enabled.description": "Ofdat OpenID Connect login is ingeschakeld",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI van de OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI van de OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Gebruikersnaam claim in OpenID Connect-ID-token. Laat het leeg als u niet weet wat deze configuratie is.", "admin.config.oauth.oidc-username-claim.description": "Gebruikersnaam claim in OpenID Connect-ID-token. Laat het leeg als u niet weet wat deze configuratie is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Czy jest włączony login OpenID Connect", "admin.config.oauth.oidc-enabled.description": "Czy jest włączony login OpenID Connect",
"admin.config.oauth.oidc-discovery-uri": "Wykrywanie URI OpenID Connect", "admin.config.oauth.oidc-discovery-uri": "Wykrywanie URI OpenID Connect",
"admin.config.oauth.oidc-discovery-uri.description": "Wykrywanie URI OAuth aplikacji OpenID Connect", "admin.config.oauth.oidc-discovery-uri.description": "Wykrywanie URI OAuth aplikacji OpenID Connect",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "Żądanie nazwy użytkownika OpenID Connect", "admin.config.oauth.oidc-username-claim": "Żądanie nazwy użytkownika OpenID Connect",
"admin.config.oauth.oidc-username-claim.description": "Żądanie nazwy użytkownika w tokenie identyfikatora OpenID Connect. Jeśli nie wiesz, czym jest ta konfiguracja, pozostaw pustą.", "admin.config.oauth.oidc-username-claim.description": "Żądanie nazwy użytkownika w tokenie identyfikatora OpenID Connect. Jeśli nie wiesz, czym jest ta konfiguracja, pozostaw pustą.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Se o login do OpenID Connect está ativado", "admin.config.oauth.oidc-enabled.description": "Se o login do OpenID Connect está ativado",
"admin.config.oauth.oidc-discovery-uri": "URI de descoberta do OpenID Connect", "admin.config.oauth.oidc-discovery-uri": "URI de descoberta do OpenID Connect",
"admin.config.oauth.oidc-discovery-uri.description": "URI da descoberta do aplicativo OpenID Connect OAuth", "admin.config.oauth.oidc-discovery-uri.description": "URI da descoberta do aplicativo OpenID Connect OAuth",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "Reivindicação de nome de usuário OpenID Connect", "admin.config.oauth.oidc-username-claim": "Reivindicação de nome de usuário OpenID Connect",
"admin.config.oauth.oidc-username-claim.description": "Nome de usuário no token de ID OpenID Connect. Deixe em branco se você não sabe o que é esta configuração.", "admin.config.oauth.oidc-username-claim.description": "Nome de usuário no token de ID OpenID Connect. Deixe em branco se você não sabe o que é esta configuração.",
"admin.config.oauth.oidc-role-path": "Caminho para as funções no token OpenID Connect", "admin.config.oauth.oidc-role-path": "Caminho para as funções no token OpenID Connect",
@@ -419,10 +421,10 @@ export default {
"admin.config.ldap.search-query.description": "A consulta do usuário será usada para pesquisar a 'base de usuários' para o usuário LDAP. %username% pode ser usado como espaço reservado para o usuário fornecido na entrada.", "admin.config.ldap.search-query.description": "A consulta do usuário será usada para pesquisar a 'base de usuários' para o usuário LDAP. %username% pode ser usado como espaço reservado para o usuário fornecido na entrada.",
"admin.config.ldap.admin-groups": "Grupo de administração", "admin.config.ldap.admin-groups": "Grupo de administração",
"admin.config.ldap.admin-groups.description": "Grupo necessário para acesso administrativo.", "admin.config.ldap.admin-groups.description": "Grupo necessário para acesso administrativo.",
"admin.config.ldap.field-name-member-of": "User groups attribute name", "admin.config.ldap.field-name-member-of": "Nome do atributo do grupo de usuários",
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.", "admin.config.ldap.field-name-member-of.description": "Nome do atributo LDAP para os grupos, de um usuário é membro. Isto é usado ao verificar para o grupo de administração.",
"admin.config.ldap.field-name-email": "User email attribute name", "admin.config.ldap.field-name-email": "Nome do atributo do grupo de usuários",
"admin.config.ldap.field-name-email.description": "LDAP attribute name for the email of an user.", "admin.config.ldap.field-name-email.description": "Nome do atributo LDAP para o email de um usuário.",
// 404 // 404
"404.description": "Ops, esta página não existe.", "404.description": "Ops, esta página não existe.",
"404.button.home": "Me traga de volta para casa", "404.button.home": "Me traga de volta para casa",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Če je dovoljena prijava z OpenID Connect", "admin.config.oauth.oidc-enabled.description": "Če je dovoljena prijava z OpenID Connect",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect URI za odkrivanje", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect URI za odkrivanje",
"admin.config.oauth.oidc-discovery-uri.description": "URI za odkrivanje OpenID Connect OAuth aplikacije", "admin.config.oauth.oidc-discovery-uri.description": "URI za odkrivanje OpenID Connect OAuth aplikacije",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect zahteva za uporabniško ime", "admin.config.oauth.oidc-username-claim": "OpenID Connect zahteva za uporabniško ime",
"admin.config.oauth.oidc-username-claim.description": "Zahteva za uporabniško ime za OpenID Connect ID žetona. Pustite prazno, če ne poznate te nastavitve.", "admin.config.oauth.oidc-username-claim.description": "Zahteva za uporabniško ime za OpenID Connect ID žetona. Pustite prazno, če ne poznate te nastavitve.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Om OpenID-inloggning är aktiverat", "admin.config.oauth.oidc-enabled.description": "Om OpenID-inloggning är aktiverat",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI för OpenID Connect OAuth appen", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI för OpenID Connect OAuth appen",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect användarnamnsanspråk", "admin.config.oauth.oidc-username-claim": "OpenID Connect användarnamnsanspråk",
"admin.config.oauth.oidc-username-claim.description": "Användarnamnsanspråk i OpenID Connect ID token. Lämna tomt om du inte vet vad denna konfiguration är.", "admin.config.oauth.oidc-username-claim.description": "Användarnamnsanspråk i OpenID Connect ID token. Lämna tomt om du inte vet vad denna konfiguration är.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "OpenID girişine izin verilip verilmeyeceği", "admin.config.oauth.oidc-enabled.description": "OpenID girişine izin verilip verilmeyeceği",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Keşfetme URI'si", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Keşfetme URI'si",
"admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth uygulamasının Keşfetme URI'si", "admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth uygulamasının Keşfetme URI'si",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect kullanıcı adı sahiplenme", "admin.config.oauth.oidc-username-claim": "OpenID Connect kullanıcı adı sahiplenme",
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID belirtecinde kullanıcı adı sahiplenme. Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.", "admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID belirtecinde kullanıcı adı sahiplenme. Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Чи ввімкнено логін OpenID Connect", "admin.config.oauth.oidc-enabled.description": "Чи ввімкнено логін OpenID Connect",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "URI Discovery URI додатка OpenID Connect OAuth", "admin.config.oauth.oidc-discovery-uri.description": "URI Discovery URI додатка OpenID Connect OAuth",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "Заява на ім'я користувача OpenID Connect", "admin.config.oauth.oidc-username-claim": "Заява на ім'я користувача OpenID Connect",
"admin.config.oauth.oidc-username-claim.description": "Заява про ім'я користувача в токені OpenID Connect ID. Залиште порожнім, якщо не знаєте, що це за конфіг.", "admin.config.oauth.oidc-username-claim.description": "Заява про ім'я користувача в токені OpenID Connect ID. Залиште порожнім, якщо не знаєте, що це за конфіг.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -3,15 +3,15 @@ export default {
"navbar.upload": "Tải lên", "navbar.upload": "Tải lên",
"navbar.signin": "Đăng nhập", "navbar.signin": "Đăng nhập",
"navbar.home": "Trang chủ", "navbar.home": "Trang chủ",
"navbar.signup": "Đăng kí", "navbar.signup": "Đăng ký",
"navbar.links.shares": "My shares", "navbar.links.shares": "Chia sẻ của tôi",
"navbar.links.reverse": "Reverse shares", "navbar.links.reverse": "Reverse shares",
"navbar.avatar.account": "Tài khoản", "navbar.avatar.account": "Tài khoản",
"navbar.avatar.admin": "Administration", "navbar.avatar.admin": "Quản trị viên",
"navbar.avatar.signout": "Đăng xuất", "navbar.avatar.signout": "Đăng xuất",
// END navbar // END navbar
// / // /
"home.title": "A <h>self-hosted</h> file sharing platform.", "home.title": "Một nền tảng <h>seft-hosted</h> chi sẻ tệp tin.",
"home.description": "Do you really want to give your personal files in the hand of third parties like WeTransfer?", "home.description": "Do you really want to give your personal files in the hand of third parties like WeTransfer?",
"home.bullet.a.name": "Self-Hosted", "home.bullet.a.name": "Self-Hosted",
"home.bullet.a.description": "Host Pingvin Share on your own machine.", "home.bullet.a.description": "Host Pingvin Share on your own machine.",
@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "是否启用 OpenID Connect 登录", "admin.config.oauth.oidc-enabled.description": "是否启用 OpenID Connect 登录",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect 的 Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect 的 Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth App 的 Discovery URI", "admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth App 的 Discovery URI",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect 用户名请求", "admin.config.oauth.oidc-username-claim": "OpenID Connect 用户名请求",
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID token 中的用户名请求。如果您不知道这项配置是什么,请留空。", "admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID token 中的用户名请求。如果您不知道这项配置是什么,请留空。",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -392,6 +392,8 @@ export default {
"admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled",
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app",
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
"admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token", "admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",

View File

@@ -68,6 +68,8 @@ export default function AppShellDemo() {
}) })
.catch(toast.axiosError); .catch(toast.axiosError);
void config.refresh(); void config.refresh();
} else {
toast.success("No changes to save");
} }
}; };

View File

@@ -29,8 +29,10 @@ const signUp = async (email: string, username: string, password: string) => {
}; };
const signOut = async () => { const signOut = async () => {
await api.post("/auth/signOut"); const response = await api.post("/auth/signOut");
window.location.reload();
if (URL.canParse(response.data?.redirectURI)) window.location.href = response.data.redirectURI;
else window.location.reload();
}; };
const refreshAccessToken = async () => { const refreshAccessToken = async () => {

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "pingvin-share", "name": "pingvin-share",
"version": "1.1.3", "version": "1.2.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pingvin-share", "name": "pingvin-share",
"version": "1.1.3", "version": "1.2.0",
"devDependencies": { "devDependencies": {
"conventional-changelog-cli": "^3.0.0" "conventional-changelog-cli": "^3.0.0"
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "pingvin-share", "name": "pingvin-share",
"version": "1.1.3", "version": "1.2.0",
"scripts": { "scripts": {
"format": "cd frontend && npm run format && cd ../backend && npm run format", "format": "cd frontend && npm run format && cd ../backend && npm run format",
"lint": "cd frontend && npm run lint && cd ../backend && npm run lint", "lint": "cd frontend && npm run lint && cd ../backend && npm run lint",