mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2026-02-27 21:05:21 +00:00
Compare commits
155 Commits
277606647d
...
v2.14.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84fb2729af | ||
|
|
c7437ddf8f | ||
|
|
627f43c729 | ||
|
|
fc4c5aac86 | ||
|
|
aff390f35d | ||
|
|
5f5a3870e4 | ||
|
|
40f363bd4f | ||
|
|
678fdd22c6 | ||
|
|
6c3cc83d66 | ||
|
|
5916fd5bee | ||
|
|
f105673904 | ||
|
|
a37d0b88d6 | ||
|
|
43bc2a743e | ||
|
|
269545256a | ||
|
|
e5df45e9ef | ||
|
|
5601dd14fc | ||
|
|
3e5655cfcd | ||
|
|
a90af83270 | ||
|
|
619a8e5acc | ||
|
|
6dcdefb57e | ||
|
|
787616010b | ||
|
|
5891c291d2 | ||
|
|
41a2a41e67 | ||
|
|
379099d7ed | ||
|
|
dbeab93c02 | ||
|
|
010cb562a0 | ||
|
|
7ff2fc1900 | ||
|
|
1c189a1888 | ||
|
|
f3c46487f6 | ||
|
|
fcca481d1b | ||
|
|
c59c237000 | ||
|
|
a62b6de9f2 | ||
|
|
d92cc953e1 | ||
|
|
1b6412688b | ||
|
|
1d14f72ba5 | ||
|
|
099243aff7 | ||
|
|
5fe12f69ba | ||
|
|
011191f645 | ||
|
|
eeab425ea4 | ||
|
|
13fbc53591 | ||
|
|
3f2aec7b86 | ||
|
|
09a3d65aa1 | ||
|
|
c910cf9512 | ||
|
|
304c51aae8 | ||
|
|
b552eb90ed | ||
|
|
b78ef9bcd3 | ||
|
|
7c67fafedf | ||
|
|
47b367d61e | ||
|
|
d19f5c1960 | ||
|
|
77662b4e7f | ||
|
|
c88de65d3a | ||
|
|
ac4efd2333 | ||
|
|
eab38d8934 | ||
|
|
4833dcbf3a | ||
|
|
c6fba1cbfe | ||
|
|
cdde543e8a | ||
|
|
0d62c26164 | ||
|
|
c3173d83b8 | ||
|
|
6ba40216cd | ||
|
|
3c54413752 | ||
|
|
65cf8ce583 | ||
|
|
a4bc8d5d21 | ||
|
|
2bcf5e91ce | ||
|
|
3e3d08b68f | ||
|
|
f90066822f | ||
|
|
bb4b5fb3aa | ||
|
|
8014f34195 | ||
|
|
4f8037ded2 | ||
|
|
e7a1f84e45 | ||
|
|
6f0931bed5 | ||
|
|
7f0c5d4364 | ||
|
|
60404b6f7e | ||
|
|
c2fddee2c7 | ||
|
|
b7402d47a0 | ||
|
|
f09876d31b | ||
|
|
8708a3bab8 | ||
|
|
218fadd168 | ||
|
|
9cf1d000c8 | ||
|
|
714bebbbc7 | ||
|
|
127008c9b5 | ||
|
|
7cc2bfbf6a | ||
|
|
de3b543d08 | ||
|
|
21f63e3db3 | ||
|
|
232b5b759a | ||
|
|
054742539f | ||
|
|
2b6a617599 | ||
|
|
187d21a0d5 | ||
|
|
c515815b0e | ||
|
|
3db02370fd | ||
|
|
4ad1af5576 | ||
|
|
a73d54fedc | ||
|
|
8c8005f817 | ||
|
|
83d993578b | ||
|
|
8532e7520f | ||
|
|
58d47cd69a | ||
|
|
bad3eac515 | ||
|
|
00b58f73f8 | ||
|
|
47981f0d56 | ||
|
|
38257859e2 | ||
|
|
a169e1131c | ||
|
|
a99cde9cd8 | ||
|
|
c69bd187af | ||
|
|
98fe622967 | ||
|
|
eddca3597d | ||
|
|
ed0b2306a2 | ||
|
|
17f6050de2 | ||
|
|
469d72a2f9 | ||
|
|
3ed3ec0001 | ||
|
|
24ff3c7b11 | ||
|
|
58dda941b8 | ||
|
|
f9f743499f | ||
|
|
534afe6067 | ||
|
|
9580903f5d | ||
|
|
df81c8425f | ||
|
|
b6f421c5fc | ||
|
|
c1ef3a3795 | ||
|
|
0aad939ccc | ||
|
|
7e092e265c | ||
|
|
cd01a2ee6b | ||
|
|
9e6720561a | ||
|
|
c50f0a144e | ||
|
|
2a9c1df3cb | ||
|
|
ef6391f22e | ||
|
|
0f46337710 | ||
|
|
1b84b8ace2 | ||
|
|
8ea8286cec | ||
|
|
7ca48f876b | ||
|
|
7c3c59c79f | ||
|
|
ef7f444404 | ||
|
|
f509e0bdba | ||
|
|
9b7af474bb | ||
|
|
28982b8bc2 | ||
|
|
19e654b998 | ||
|
|
eaf9f5ab1e | ||
|
|
4af0a968f0 | ||
|
|
df06eb6c2f | ||
|
|
74360cc9b3 | ||
|
|
16a301fc64 | ||
|
|
2d774124dc | ||
|
|
124737bbc6 | ||
|
|
d5d222ef2d | ||
|
|
b96e932c64 | ||
|
|
d09cb2884c | ||
|
|
71deabcc67 | ||
|
|
a78039b65f | ||
|
|
48acbd33ab | ||
|
|
32cabc0f83 | ||
|
|
03a82cd861 | ||
|
|
5f19f7125e | ||
|
|
8d35644190 | ||
|
|
ad2e4c8afe | ||
|
|
69f9031447 | ||
|
|
727bc944ea | ||
|
|
a0ef0d9048 | ||
|
|
f3efaae320 |
10
.github/dependabot.yml
vendored
10
.github/dependabot.yml
vendored
@@ -3,7 +3,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/backend"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -25,7 +25,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/frontend"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -47,7 +47,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/docs"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -69,7 +69,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/test"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -91,7 +91,7 @@ updates:
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/docker"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
updates:
|
||||
update-types:
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -8,7 +8,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
- uses: actions/stale@v10
|
||||
with:
|
||||
stale-issue-label: 'stale'
|
||||
stale-pr-label: 'stale'
|
||||
|
||||
17
README.md
17
README.md
@@ -1,7 +1,7 @@
|
||||
<p align="center">
|
||||
<img src="https://nginxproxymanager.com/github.png">
|
||||
<br><br>
|
||||
<img src="https://img.shields.io/badge/version-2.13.6-green.svg?style=for-the-badge">
|
||||
<img src="https://img.shields.io/badge/version-2.14.0-green.svg?style=for-the-badge">
|
||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||
</a>
|
||||
@@ -36,6 +36,10 @@ so that the barrier for entry here is low.
|
||||
- Advanced Nginx configuration available for super users
|
||||
- User management, permissions and audit log
|
||||
|
||||
::: warning
|
||||
`armv7` is no longer supported in version 2.14+. This is due to Nodejs dropping support for armhf. Please
|
||||
use the `2.13.7` image tag if this applies to you.
|
||||
:::
|
||||
|
||||
## Hosting your home network
|
||||
|
||||
@@ -43,16 +47,15 @@ I won't go in to too much detail here but here are the basics for someone new to
|
||||
|
||||
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
|
||||
2. Add port forwarding for port 80 and 443 to the server hosting this project
|
||||
3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns)
|
||||
3. Configure your domain name details to point to your home, either with a static ip or a service like
|
||||
- DuckDNS
|
||||
- [Amazon Route53](https://github.com/jc21/route53-ddns)
|
||||
- [Cloudflare](https://github.com/jc21/cloudflare-ddns)
|
||||
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
|
||||
|
||||
## Quick Setup
|
||||
|
||||
1. Install Docker and Docker-Compose
|
||||
|
||||
- [Docker Install documentation](https://docs.docker.com/install/)
|
||||
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
|
||||
|
||||
1. [Install Docker](https://docs.docker.com/install/)
|
||||
2. Create a docker-compose.yml file similar to this:
|
||||
|
||||
```yml
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.14/schema.json",
|
||||
"vcs": {
|
||||
"enabled": true,
|
||||
"clientKind": "git",
|
||||
|
||||
@@ -22,6 +22,14 @@
|
||||
"dependencies": "",
|
||||
"credentials": "dns_aliyun_access_key = 12345678\ndns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef",
|
||||
"full_plugin_name": "dns-aliyun"
|
||||
},
|
||||
"arvan": {
|
||||
"name": "ArvanCloud",
|
||||
"package_name": "certbot-dns-arvan",
|
||||
"version": ">=0.1.0",
|
||||
"dependencies": "",
|
||||
"credentials": "dns_arvan_key = Apikey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
|
||||
"full_plugin_name": "dns-arvan"
|
||||
},
|
||||
"azure": {
|
||||
"name": "Azure",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"database": {
|
||||
"engine": "knex-native",
|
||||
"knex": {
|
||||
"client": "sqlite3",
|
||||
"client": "better-sqlite3",
|
||||
"connection": {
|
||||
"filename": "/app/config/mydb.sqlite"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import crypto from "node:crypto";
|
||||
import bcrypt from "bcrypt";
|
||||
import { authenticator } from "otplib";
|
||||
import { createGuardrails, generateSecret, generateURI, verify } from "otplib";
|
||||
import errs from "../lib/error.js";
|
||||
import authModel from "../models/auth.js";
|
||||
import internalUser from "./user.js";
|
||||
@@ -27,7 +27,6 @@ const generateBackupCodes = async () => {
|
||||
};
|
||||
|
||||
const internal2fa = {
|
||||
|
||||
/**
|
||||
* Check if user has 2FA enabled
|
||||
* @param {number} userId
|
||||
@@ -72,8 +71,12 @@ const internal2fa = {
|
||||
startSetup: async (access, userId) => {
|
||||
await access.can("users:password", userId);
|
||||
const user = await internalUser.get(access, { id: userId });
|
||||
const secret = authenticator.generateSecret();
|
||||
const otpauth_url = authenticator.keyuri(user.email, APP_NAME, secret);
|
||||
const secret = generateSecret();
|
||||
const otpauth_url = generateURI({
|
||||
issuer: APP_NAME,
|
||||
label: user.email,
|
||||
secret: secret,
|
||||
});
|
||||
const auth = await internal2fa.getUserPasswordAuth(userId);
|
||||
|
||||
// ensure user isn't already setup for 2fa
|
||||
@@ -85,7 +88,8 @@ const internal2fa = {
|
||||
const meta = auth.meta || {};
|
||||
meta.totp_pending_secret = secret;
|
||||
|
||||
await authModel.query()
|
||||
await authModel
|
||||
.query()
|
||||
.where("id", auth.id)
|
||||
.andWhere("user_id", userId)
|
||||
.andWhere("type", "password")
|
||||
@@ -112,8 +116,8 @@ const internal2fa = {
|
||||
throw new errs.ValidationError("No pending 2FA setup found");
|
||||
}
|
||||
|
||||
const valid = authenticator.verify({ token: code, secret });
|
||||
if (!valid) {
|
||||
const result = await verify({ token: code, secret });
|
||||
if (!result.valid) {
|
||||
throw new errs.ValidationError("Invalid verification code");
|
||||
}
|
||||
|
||||
@@ -156,12 +160,15 @@ const internal2fa = {
|
||||
throw new errs.ValidationError("2FA is not enabled");
|
||||
}
|
||||
|
||||
const valid = authenticator.verify({
|
||||
const result = await verify({
|
||||
token: code,
|
||||
secret: auth.meta.totp_secret,
|
||||
guardrails: createGuardrails({
|
||||
MIN_SECRET_BYTES: 10,
|
||||
}),
|
||||
});
|
||||
|
||||
if (!valid) {
|
||||
if (!result.valid) {
|
||||
throw new errs.AuthError("Invalid verification code");
|
||||
}
|
||||
|
||||
@@ -194,20 +201,30 @@ const internal2fa = {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Try TOTP code first
|
||||
const valid = authenticator.verify({
|
||||
// Try TOTP code first, if it's 6 chars. it will throw errors if it's not 6 chars
|
||||
// and the backup codes are 8 chars.
|
||||
if (token.length === 6) {
|
||||
const result = await verify({
|
||||
token,
|
||||
secret,
|
||||
// These guardrails lower the minimum length requirement for secrets.
|
||||
// In v12 of otplib the default minimum length is 10 and in v13 it is 16.
|
||||
// Since there are 2fa secrets in the wild generated with v12 we need to allow shorter secrets
|
||||
// so people won't be locked out when upgrading.
|
||||
guardrails: createGuardrails({
|
||||
MIN_SECRET_BYTES: 10,
|
||||
}),
|
||||
});
|
||||
|
||||
if (valid) {
|
||||
if (result.valid) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Try backup codes
|
||||
const backupCodes = auth?.meta?.backup_codes || [];
|
||||
for (let i = 0; i < backupCodes.length; i++) {
|
||||
const match = await bcrypt.compare(code.toUpperCase(), backupCodes[i]);
|
||||
const match = await bcrypt.compare(token.toUpperCase(), backupCodes[i]);
|
||||
if (match) {
|
||||
// Remove used backup code
|
||||
const updatedCodes = [...backupCodes];
|
||||
@@ -248,12 +265,12 @@ const internal2fa = {
|
||||
throw new errs.ValidationError("No 2FA secret found");
|
||||
}
|
||||
|
||||
const valid = authenticator.verify({
|
||||
const result = await verify({
|
||||
token,
|
||||
secret,
|
||||
});
|
||||
|
||||
if (!valid) {
|
||||
if (!result.valid) {
|
||||
throw new errs.ValidationError("Invalid verification code");
|
||||
}
|
||||
|
||||
|
||||
@@ -630,7 +630,7 @@ const internalCertificate = {
|
||||
* @param {String} privateKey This is the entire key contents as a string
|
||||
*/
|
||||
checkPrivateKey: async (privateKey) => {
|
||||
const filepath = await tempWrite(privateKey, "/tmp");
|
||||
const filepath = await tempWrite(privateKey);
|
||||
const failTimeout = setTimeout(() => {
|
||||
throw new error.ValidationError(
|
||||
"Result Validation Error: Validation timed out. This could be due to the key being passphrase-protected.",
|
||||
@@ -660,8 +660,8 @@ const internalCertificate = {
|
||||
* @param {Boolean} [throwExpired] Throw when the certificate is out of date
|
||||
*/
|
||||
getCertificateInfo: async (certificate, throwExpired) => {
|
||||
const filepath = await tempWrite(certificate);
|
||||
try {
|
||||
const filepath = await tempWrite(certificate, "/tmp");
|
||||
const certData = await internalCertificate.getCertificateInfoFromFile(filepath, throwExpired);
|
||||
fs.unlinkSync(filepath);
|
||||
return certData;
|
||||
|
||||
@@ -5,7 +5,7 @@ import { global as logger } from "../logger.js";
|
||||
const keysFile = '/data/keys.json';
|
||||
const mysqlEngine = 'mysql2';
|
||||
const postgresEngine = 'pg';
|
||||
const sqliteClientName = 'sqlite3';
|
||||
const sqliteClientName = 'better-sqlite3';
|
||||
|
||||
let instance = null;
|
||||
|
||||
@@ -84,6 +84,7 @@ const configure = () => {
|
||||
}
|
||||
|
||||
const envSqliteFile = process.env.DB_SQLITE_FILE || "/data/database.sqlite";
|
||||
|
||||
logger.info(`Using Sqlite: ${envSqliteFile}`);
|
||||
instance = {
|
||||
database: {
|
||||
|
||||
43
backend/migrations/20260131163528_trust_forwarded_proto.js
Normal file
43
backend/migrations/20260131163528_trust_forwarded_proto.js
Normal file
@@ -0,0 +1,43 @@
|
||||
import { migrate as logger } from "../logger.js";
|
||||
|
||||
const migrateName = "trust_forwarded_proto";
|
||||
|
||||
/**
|
||||
* Migrate
|
||||
*
|
||||
* @see http://knexjs.org/#Schema
|
||||
*
|
||||
* @param {Object} knex
|
||||
* @returns {Promise}
|
||||
*/
|
||||
const up = function (knex) {
|
||||
logger.info(`[${migrateName}] Migrating Up...`);
|
||||
|
||||
return knex.schema
|
||||
.alterTable('proxy_host', (table) => {
|
||||
table.tinyint('trust_forwarded_proto').notNullable().defaultTo(0);
|
||||
})
|
||||
.then(() => {
|
||||
logger.info(`[${migrateName}] proxy_host Table altered`);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Undo Migrate
|
||||
*
|
||||
* @param {Object} knex
|
||||
* @returns {Promise}
|
||||
*/
|
||||
const down = function (knex) {
|
||||
logger.info(`[${migrateName}] Migrating Down...`);
|
||||
|
||||
return knex.schema
|
||||
.alterTable('proxy_host', (table) => {
|
||||
table.dropColumn('trust_forwarded_proto');
|
||||
})
|
||||
.then(() => {
|
||||
logger.info(`[${migrateName}] proxy_host Table altered`);
|
||||
});
|
||||
};
|
||||
|
||||
export { up, down };
|
||||
@@ -21,6 +21,7 @@ const boolFields = [
|
||||
"enabled",
|
||||
"hsts_enabled",
|
||||
"hsts_subdomains",
|
||||
"trust_forwarded_proto",
|
||||
];
|
||||
|
||||
class ProxyHost extends Model {
|
||||
|
||||
@@ -12,37 +12,38 @@
|
||||
"validate-schema": "node validate-schema.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@apidevtools/json-schema-ref-parser": "^11.7.0",
|
||||
"ajv": "^8.17.1",
|
||||
"archiver": "^5.3.0",
|
||||
"@apidevtools/json-schema-ref-parser": "^14.1.1",
|
||||
"ajv": "^8.18.0",
|
||||
"archiver": "^7.0.1",
|
||||
"batchflow": "^0.4.0",
|
||||
"bcrypt": "^5.0.0",
|
||||
"body-parser": "^1.20.3",
|
||||
"bcrypt": "^6.0.0",
|
||||
"better-sqlite3": "^12.6.2",
|
||||
"body-parser": "^2.2.2",
|
||||
"compression": "^1.7.4",
|
||||
"express": "^4.22.0",
|
||||
"express": "^5.2.1",
|
||||
"express-fileupload": "^1.5.2",
|
||||
"gravatar": "^1.8.2",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"knex": "2.4.2",
|
||||
"liquidjs": "10.6.1",
|
||||
"jsonwebtoken": "^9.0.3",
|
||||
"knex": "3.1.0",
|
||||
"liquidjs": "10.24.0",
|
||||
"lodash": "^4.17.23",
|
||||
"moment": "^2.30.1",
|
||||
"mysql2": "^3.15.3",
|
||||
"mysql2": "^3.17.1",
|
||||
"node-rsa": "^1.1.1",
|
||||
"objection": "3.0.1",
|
||||
"otplib": "^12.0.1",
|
||||
"objection": "3.1.5",
|
||||
"otplib": "^13.3.0",
|
||||
"path": "^0.12.7",
|
||||
"pg": "^8.16.3",
|
||||
"pg": "^8.18.0",
|
||||
"proxy-agent": "^6.5.0",
|
||||
"signale": "1.4.0",
|
||||
"sqlite3": "^5.1.7",
|
||||
"temp-write": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/swagger-parser": "^10.1.0",
|
||||
"@biomejs/biome": "^2.3.2",
|
||||
"chalk": "4.1.2",
|
||||
"nodemon": "^2.0.2"
|
||||
"@apidevtools/swagger-parser": "^12.1.0",
|
||||
"@biomejs/biome": "^2.3.14",
|
||||
"chalk": "5.6.2",
|
||||
"nodemon": "^3.1.11"
|
||||
},
|
||||
"signale": {
|
||||
"displayDate": true,
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
"enabled",
|
||||
"locations",
|
||||
"hsts_enabled",
|
||||
"hsts_subdomains"
|
||||
"hsts_subdomains",
|
||||
"trust_forwarded_proto"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
@@ -141,6 +142,11 @@
|
||||
"hsts_subdomains": {
|
||||
"$ref": "../common.json#/properties/hsts_subdomains"
|
||||
},
|
||||
"trust_forwarded_proto":{
|
||||
"type": "boolean",
|
||||
"description": "Trust the forwarded headers",
|
||||
"example": false
|
||||
},
|
||||
"certificate": {
|
||||
"oneOf": [
|
||||
{
|
||||
|
||||
@@ -58,7 +58,8 @@
|
||||
"enabled": true,
|
||||
"locations": [],
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false
|
||||
"hsts_subdomains": false,
|
||||
"trust_forwarded_proto": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
"locations": [],
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"trust_forwarded_proto": false,
|
||||
"owner": {
|
||||
"id": 1,
|
||||
"created_on": "2025-10-28T00:50:24.000Z",
|
||||
|
||||
@@ -56,6 +56,9 @@
|
||||
"hsts_subdomains": {
|
||||
"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_subdomains"
|
||||
},
|
||||
"trust_forwarded_proto": {
|
||||
"$ref": "../../../../components/proxy-host-object.json#/properties/trust_forwarded_proto"
|
||||
},
|
||||
"http2_support": {
|
||||
"$ref": "../../../../components/proxy-host-object.json#/properties/http2_support"
|
||||
},
|
||||
@@ -122,6 +125,7 @@
|
||||
"locations": [],
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"trust_forwarded_proto": false,
|
||||
"owner": {
|
||||
"id": 1,
|
||||
"created_on": "2025-10-28T00:50:24.000Z",
|
||||
|
||||
@@ -48,6 +48,9 @@
|
||||
"hsts_subdomains": {
|
||||
"$ref": "../../../components/proxy-host-object.json#/properties/hsts_subdomains"
|
||||
},
|
||||
"trust_forwarded_proto": {
|
||||
"$ref": "../../../components/proxy-host-object.json#/properties/trust_forwarded_proto"
|
||||
},
|
||||
"http2_support": {
|
||||
"$ref": "../../../components/proxy-host-object.json#/properties/http2_support"
|
||||
},
|
||||
@@ -119,6 +122,7 @@
|
||||
"locations": [],
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"trust_forwarded_proto": false,
|
||||
"certificate": null,
|
||||
"owner": {
|
||||
"id": 1,
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
},
|
||||
"code": {
|
||||
"minLength": 6,
|
||||
"maxLength": 6,
|
||||
"maxLength": 8,
|
||||
"type": "string",
|
||||
"example": "012345"
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Verififcation Payload",
|
||||
"description": "Verification Payload",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
@@ -25,7 +25,7 @@
|
||||
"properties": {
|
||||
"code": {
|
||||
"minLength": 6,
|
||||
"maxLength": 6,
|
||||
"maxLength": 8,
|
||||
"type": "string",
|
||||
"example": "123456"
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Verififcation Payload",
|
||||
"description": "Verification Payload",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
@@ -25,7 +25,7 @@
|
||||
"properties": {
|
||||
"code": {
|
||||
"minLength": 6,
|
||||
"maxLength": 6,
|
||||
"maxLength": 8,
|
||||
"type": "string",
|
||||
"example": "123456"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
{% if certificate and certificate_id > 0 -%}
|
||||
{% if ssl_forced == 1 or ssl_forced == true %}
|
||||
# Force SSL
|
||||
{% if trust_forwarded_proto == true %}
|
||||
set $trust_forwarded_proto "T";
|
||||
{% else %}
|
||||
set $trust_forwarded_proto "F";
|
||||
{% endif %}
|
||||
include conf.d/include/force-ssl.conf;
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
1370
backend/yarn.lock
1370
backend/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -109,7 +109,7 @@ services:
|
||||
- "cypress_logs:/test/results"
|
||||
- "./dev/resolv.conf:/etc/resolv.conf:ro"
|
||||
- "/etc/localtime:/etc/localtime:ro"
|
||||
command: cypress run --browser chrome --config-file=cypress/config/ci.js
|
||||
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
|
||||
networks:
|
||||
- fulltest
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ services:
|
||||
- "../test/results:/results"
|
||||
- "./dev/resolv.conf:/etc/resolv.conf:ro"
|
||||
- "/etc/localtime:/etc/localtime:ro"
|
||||
command: cypress run --browser chrome --config-file=cypress/config/ci.js
|
||||
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
|
||||
networks:
|
||||
- nginx_proxy_manager
|
||||
|
||||
|
||||
@@ -5,6 +5,28 @@ if ($scheme = "http") {
|
||||
if ($request_uri = /.well-known/acme-challenge/test-challenge) {
|
||||
set $test "${test}T";
|
||||
}
|
||||
|
||||
# Check if the ssl staff has been handled
|
||||
set $test_ssl_handled "";
|
||||
if ($trust_forwarded_proto = "") {
|
||||
set $trust_forwarded_proto "F";
|
||||
}
|
||||
if ($trust_forwarded_proto = "T") {
|
||||
set $test_ssl_handled "${test_ssl_handled}T";
|
||||
}
|
||||
if ($http_x_forwarded_proto = "https") {
|
||||
set $test_ssl_handled "${test_ssl_handled}S";
|
||||
}
|
||||
if ($http_x_forwarded_scheme = "https") {
|
||||
set $test_ssl_handled "${test_ssl_handled}S";
|
||||
}
|
||||
if ($test_ssl_handled = "TSS") {
|
||||
set $test_ssl_handled "TS";
|
||||
}
|
||||
if ($test_ssl_handled = "TS") {
|
||||
set $test "${test}S";
|
||||
}
|
||||
|
||||
if ($test = H) {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
add_header X-Served-By $host;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Scheme $x_forwarded_scheme;
|
||||
proxy_set_header X-Forwarded-Proto $x_forwarded_proto;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_pass $forward_scheme://$server:$port$request_uri;
|
||||
|
||||
@@ -57,6 +57,18 @@ http {
|
||||
default http;
|
||||
}
|
||||
|
||||
# Handle upstream X-Forwarded-Proto and X-Forwarded-Scheme header
|
||||
map $http_x_forwarded_proto $x_forwarded_proto {
|
||||
"http" "http";
|
||||
"https" "https";
|
||||
default $scheme;
|
||||
}
|
||||
map $http_x_forwarded_scheme $x_forwarded_scheme {
|
||||
"http" "http";
|
||||
"https" "https";
|
||||
default $scheme;
|
||||
}
|
||||
|
||||
# Real IP Determination
|
||||
|
||||
# Local subnets:
|
||||
|
||||
@@ -17,10 +17,6 @@ case $TARGETPLATFORM in
|
||||
S6_ARCH=aarch64
|
||||
;;
|
||||
|
||||
linux/arm/v7)
|
||||
S6_ARCH=armhf
|
||||
;;
|
||||
|
||||
*)
|
||||
S6_ARCH=x86_64
|
||||
;;
|
||||
|
||||
@@ -169,7 +169,11 @@ Custom Postgres schema is not supported, as such `public` will be used.
|
||||
The docker images support the following architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
- armv7
|
||||
|
||||
::: warning
|
||||
`armv7` is no longer supported in version 2.14+. This is due to Nodejs dropping support for armhf. Please
|
||||
use the `2.13.7` image tag if this applies to you.
|
||||
:::
|
||||
|
||||
The docker images are a manifest of all the architecture docker builds supported, so this means
|
||||
you don't have to worry about doing anything special and you can follow the common instructions above.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.14/schema.json",
|
||||
"vcs": {
|
||||
"enabled": true,
|
||||
"clientKind": "git",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
const allLocales = [
|
||||
["en", "en-US"],
|
||||
["de", "de-DE"],
|
||||
["pt", "pt-PT"],
|
||||
["es", "es-ES"],
|
||||
["fr", "fr-FR"],
|
||||
["it", "it-IT"],
|
||||
@@ -17,6 +18,7 @@ const allLocales = [
|
||||
["pl", "pl-PL"],
|
||||
["ru", "ru-RU"],
|
||||
["sk", "sk-SK"],
|
||||
["cs", "cs-CZ"],
|
||||
["vi", "vi-VN"],
|
||||
["zh", "zh-CN"],
|
||||
["ko", "ko-KR"],
|
||||
|
||||
@@ -17,42 +17,42 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@tabler/core": "^1.4.0",
|
||||
"@tabler/icons-react": "^3.35.0",
|
||||
"@tanstack/react-query": "^5.90.6",
|
||||
"@tabler/icons-react": "^3.36.1",
|
||||
"@tanstack/react-query": "^5.90.21",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"@uiw/react-textarea-code-editor": "^3.1.1",
|
||||
"classnames": "^2.5.1",
|
||||
"country-flag-icons": "^1.5.21",
|
||||
"country-flag-icons": "^1.6.13",
|
||||
"date-fns": "^4.1.0",
|
||||
"ez-modal-react": "^1.0.5",
|
||||
"formik": "^2.4.6",
|
||||
"formik": "^2.4.9",
|
||||
"generate-password-browser": "^1.1.0",
|
||||
"humps": "^2.0.1",
|
||||
"query-string": "^9.3.1",
|
||||
"react": "^19.2.3",
|
||||
"react": "^19.2.4",
|
||||
"react-bootstrap": "^2.10.10",
|
||||
"react-dom": "^19.2.3",
|
||||
"react-intl": "^7.1.14",
|
||||
"react-dom": "^19.2.4",
|
||||
"react-intl": "^8.1.3",
|
||||
"react-markdown": "^10.1.0",
|
||||
"react-router-dom": "^7.9.5",
|
||||
"react-router-dom": "^7.13.0",
|
||||
"react-select": "^5.10.2",
|
||||
"react-toastify": "^11.0.5",
|
||||
"rooks": "^9.3.0"
|
||||
"rooks": "^9.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.3.2",
|
||||
"@formatjs/cli": "^6.12.0",
|
||||
"@tanstack/react-query-devtools": "^5.91.2",
|
||||
"@biomejs/biome": "^2.4.2",
|
||||
"@formatjs/cli": "^6.12.2",
|
||||
"@tanstack/react-query-devtools": "^5.91.3",
|
||||
"@testing-library/dom": "^10.4.1",
|
||||
"@testing-library/jest-dom": "^6.9.1",
|
||||
"@testing-library/react": "^16.3.0",
|
||||
"@testing-library/react": "^16.3.2",
|
||||
"@types/country-flag-icons": "^1.2.2",
|
||||
"@types/humps": "^2.0.6",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/react-table": "^7.7.20",
|
||||
"@vitejs/plugin-react": "^5.1.2",
|
||||
"happy-dom": "^20.3.7",
|
||||
"@vitejs/plugin-react": "^5.1.4",
|
||||
"happy-dom": "^20.6.1",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"sass": "^1.97.3",
|
||||
@@ -60,7 +60,7 @@
|
||||
"typescript": "5.9.3",
|
||||
"vite": "^7.3.1",
|
||||
"vite-plugin-checker": "^0.12.0",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
"vitest": "^4.0.6"
|
||||
"vite-tsconfig-paths": "^6.1.1",
|
||||
"vitest": "^4.0.18"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ export interface ProxyHost {
|
||||
locations?: ProxyLocation[];
|
||||
hstsEnabled: boolean;
|
||||
hstsSubdomains: boolean;
|
||||
trustForwardedProto: boolean;
|
||||
// Expansions:
|
||||
owner?: User;
|
||||
accessList?: AccessList;
|
||||
|
||||
@@ -5,17 +5,18 @@ import { T } from "src/locale";
|
||||
|
||||
interface Props {
|
||||
forHttp?: boolean; // the sslForced, http2Support, hstsEnabled, hstsSubdomains fields
|
||||
forProxyHost?: boolean; // the advanced fields
|
||||
forceDNSForNew?: boolean;
|
||||
requireDomainNames?: boolean; // used for streams
|
||||
color?: string;
|
||||
}
|
||||
export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomainNames, color = "bg-cyan" }: Props) {
|
||||
export function SSLOptionsFields({ forHttp = true, forProxyHost = false, forceDNSForNew, requireDomainNames, color = "bg-cyan" }: Props) {
|
||||
const { values, setFieldValue } = useFormikContext();
|
||||
const v: any = values || {};
|
||||
|
||||
const newCertificate = v?.certificateId === "new";
|
||||
const hasCertificate = newCertificate || (v?.certificateId && v?.certificateId > 0);
|
||||
const { sslForced, http2Support, hstsEnabled, hstsSubdomains, meta } = v;
|
||||
const { sslForced, http2Support, hstsEnabled, hstsSubdomains, trustForwardedProto, meta } = v;
|
||||
const { dnsChallenge } = meta || {};
|
||||
|
||||
if (forceDNSForNew && newCertificate && !dnsChallenge) {
|
||||
@@ -115,6 +116,34 @@ export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomain
|
||||
</div>
|
||||
);
|
||||
|
||||
const getHttpAdvancedOptions = () =>(
|
||||
<div>
|
||||
<details>
|
||||
<summary className="mb-1"><T id="domains.advanced" /></summary>
|
||||
<div className="row">
|
||||
<div className="col-12">
|
||||
<Field name="trustForwardedProto">
|
||||
{({ field }: any) => (
|
||||
<label className="form-check form-switch mt-1">
|
||||
<input
|
||||
className={trustForwardedProto ? toggleEnabled : toggleClasses}
|
||||
type="checkbox"
|
||||
checked={!!trustForwardedProto}
|
||||
onChange={(e) => handleToggleChange(e, field.name)}
|
||||
disabled={!hasCertificate || !sslForced}
|
||||
/>
|
||||
<span className="form-check-label">
|
||||
<T id="domains.trust-forwarded-proto" />
|
||||
</span>
|
||||
</label>
|
||||
)}
|
||||
</Field>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
);
|
||||
|
||||
return (
|
||||
<div>
|
||||
{forHttp ? getHttpOptions() : null}
|
||||
@@ -140,6 +169,7 @@ export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomain
|
||||
{dnsChallenge ? <DNSProviderFields showBoundaryBox /> : null}
|
||||
</>
|
||||
) : null}
|
||||
{forProxyHost && forHttp ? getHttpAdvancedOptions() : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ const fetchProxyHost = (id: number | "new") => {
|
||||
enabled: true,
|
||||
hstsEnabled: false,
|
||||
hstsSubdomains: false,
|
||||
trustForwardedProto: false,
|
||||
} as ProxyHost);
|
||||
}
|
||||
return getProxyHost(id, ["owner"]);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { createIntl, createIntlCache } from "react-intl";
|
||||
import langBg from "./lang/bg.json";
|
||||
import langDe from "./lang/de.json";
|
||||
import langPt from "./lang/pt.json";
|
||||
import langEn from "./lang/en.json";
|
||||
import langEs from "./lang/es.json";
|
||||
import langFr from "./lang/fr.json";
|
||||
@@ -13,6 +14,7 @@ import langNl from "./lang/nl.json";
|
||||
import langPl from "./lang/pl.json";
|
||||
import langRu from "./lang/ru.json";
|
||||
import langSk from "./lang/sk.json";
|
||||
import langCs from "./lang/cs.json";
|
||||
import langVi from "./lang/vi.json";
|
||||
import langZh from "./lang/zh.json";
|
||||
import langTr from "./lang/tr.json";
|
||||
@@ -26,6 +28,7 @@ const localeOptions = [
|
||||
["en", "en-US", langEn],
|
||||
["de", "de-DE", langDe],
|
||||
["es", "es-ES", langEs],
|
||||
["pt", "pt-PT", langPt],
|
||||
["fr", "fr-FR", langFr],
|
||||
["ga", "ga-IE", langGa],
|
||||
["ja", "ja-JP", langJa],
|
||||
@@ -34,6 +37,7 @@ const localeOptions = [
|
||||
["pl", "pl-PL", langPl],
|
||||
["ru", "ru-RU", langRu],
|
||||
["sk", "sk-SK", langSk],
|
||||
["cs", "cs-CZ", langCs],
|
||||
["vi", "vi-VN", langVi],
|
||||
["zh", "zh-CN", langZh],
|
||||
["ko", "ko-KR", langKo],
|
||||
@@ -63,6 +67,7 @@ const getFlagCodeForLocale = (locale?: string) => {
|
||||
zh: "cn", // China
|
||||
vi: "vn", // Vietnam
|
||||
ko: "kr", // Korea
|
||||
cs: "cz", // Czechia
|
||||
};
|
||||
|
||||
if (specialCases[thisLocale]) {
|
||||
|
||||
7
frontend/src/locale/src/HelpDoc/cs/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/cs/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Co je seznam přístupů?
|
||||
|
||||
Seznamy přístupů poskytují blacklist nebo whitelist konkrétních IP adres klientů spolu s ověřením pro proxy hostitele prostřednictvím základního ověřování HTTP.
|
||||
|
||||
Můžete nakonfigurovat více pravidel pro klienty, uživatelská jména a hesla pro jeden seznam přístupu a poté ho použít na jednoho nebo více proxy hostitelů.
|
||||
|
||||
Toto je nejužitečnější pro přesměrované webové služby, které nemají vestavěné ověřovací mechanismy, nebo pokud se chcete chránit před neznámými klienty.
|
||||
32
frontend/src/locale/src/HelpDoc/cs/Certificates.md
Normal file
32
frontend/src/locale/src/HelpDoc/cs/Certificates.md
Normal file
@@ -0,0 +1,32 @@
|
||||
## Pomoc s certifikáty
|
||||
|
||||
### Certifikát HTTP
|
||||
|
||||
Certifikát ověřený prostřednictvím protokolu HTTP znamená, že servery Let's Encrypt se
|
||||
pokusí připojit k vašim doménám přes protokol HTTP (nikoli HTTPS!) a v případě úspěchu
|
||||
vydají váš certifikát.
|
||||
|
||||
Pro tuto metodu budete muset mít pro své domény vytvořeného _Proxy Host_, který
|
||||
je přístupný přes HTTP a směruje na tuto instalaci Nginx. Po vydání certifikátu
|
||||
můžete změnit _Proxy Host_ tak, aby tento certifikát používal i pro HTTPS
|
||||
připojení. _Proxy Host_ však bude stále potřeba nakonfigurovat pro přístup přes HTTP,
|
||||
aby se certifikát mohl obnovit.
|
||||
|
||||
Tento proces _nepodporuje_ domény se zástupnými znaky.
|
||||
|
||||
### Certifikát DNS
|
||||
|
||||
Certifikát ověřený DNS vyžaduje použití pluginu DNS Provider. Tento DNS
|
||||
Provider se použije na vytvoření dočasných záznamů ve vaší doméně a poté Let's
|
||||
Encrypt ověří tyto záznamy, aby se ujistil, že jste vlastníkem, a pokud bude úspěšný,
|
||||
vydá váš certifikát.
|
||||
|
||||
Před požádáním o tento typ certifikátu není potřeba vytvořit _Proxy Host_.
|
||||
Není také potřeba mít _Proxy Host_ nakonfigurovaný pro přístup HTTP.
|
||||
|
||||
Tento proces _podporuje_ domény se zástupnými znaky.
|
||||
|
||||
### Vlastní certifikát
|
||||
|
||||
Tuto možnost použijte na nahrání vlastního SSL certifikátu, který vám poskytla vaše
|
||||
certifikační autorita.
|
||||
10
frontend/src/locale/src/HelpDoc/cs/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/cs/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## Co je to 404 Host?
|
||||
|
||||
404 Host je jednoduše nastavení hostitele, které zobrazuje stránku 404.
|
||||
|
||||
To může být užitečné, pokud je vaše doména uvedena ve vyhledávačích a chcete
|
||||
poskytnout hezčí chybovou stránku nebo konkrétně oznámit vyhledávačům, že
|
||||
stránky domény již neexistují.
|
||||
|
||||
Další výhodou tohoto hostitele je sledování protokolů o návštěvách a
|
||||
zobrazení odkazů.
|
||||
7
frontend/src/locale/src/HelpDoc/cs/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/cs/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Co je proxy hostitel?
|
||||
|
||||
Proxy hostitel je příchozí koncový bod pro webovou službu, kterou chcete přesměrovat.
|
||||
|
||||
Poskytuje volitelné ukončení SSL pro vaši službu, která nemusí mít zabudovanou podporu SSL.
|
||||
|
||||
Proxy hostitelé jsou nejběžnějším použitím pro Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/cs/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/cs/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Co je přesměrovací hostitel?
|
||||
|
||||
Přesměrovací hostitel přesměruje požadavky z příchozí domény a přesměruje
|
||||
návštěvníka na jinou doménu.
|
||||
|
||||
Nejčastějším důvodem pro použití tohoto typu hostitele je situace, kdy vaše webová stránka změní
|
||||
doménu, ale stále máte odkazy ve vyhledávačích nebo referenční odkazy směřující na starou doménu.
|
||||
6
frontend/src/locale/src/HelpDoc/cs/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/cs/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Co je stream?
|
||||
|
||||
Stream je relativně nová funkce pro Nginx, která slouží na přesměrování TCP/UDP
|
||||
datového toku přímo do jiného počítače v síti.
|
||||
|
||||
Pokud provozujete herní servery, FTP nebo SSH servery, tato funkce se vám může hodit.
|
||||
6
frontend/src/locale/src/HelpDoc/cs/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/cs/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
@@ -1,5 +1,6 @@
|
||||
import * as bg from "./bg/index";
|
||||
import * as de from "./de/index";
|
||||
import * as pt from "./pt/index";
|
||||
import * as en from "./en/index";
|
||||
import * as es from "./es/index";
|
||||
import * as fr from "./fr/index";
|
||||
@@ -12,12 +13,14 @@ import * as nl from "./nl/index";
|
||||
import * as pl from "./pl/index";
|
||||
import * as ru from "./ru/index";
|
||||
import * as sk from "./sk/index";
|
||||
import * as cs from "./cs/index";
|
||||
import * as vi from "./vi/index";
|
||||
import * as zh from "./zh/index";
|
||||
import * as tr from "./tr/index";
|
||||
import * as hu from "./hu/index";
|
||||
|
||||
const items: any = { en, de, es, ja, sk, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
|
||||
const items: any = { en, de, pt, es, ja, sk, cs, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
|
||||
|
||||
|
||||
const fallbackLang = "en";
|
||||
|
||||
|
||||
11
frontend/src/locale/src/HelpDoc/pt/AccessLists.md
Normal file
11
frontend/src/locale/src/HelpDoc/pt/AccessLists.md
Normal file
@@ -0,0 +1,11 @@
|
||||
## O que é uma Access List?
|
||||
|
||||
As *Access Lists* fornecem uma lista de permissões (whitelist) ou bloqueios (blacklist)
|
||||
de endereços IP específicos de clientes, juntamente com autenticação para os *Proxy Hosts*
|
||||
via Autenticação HTTP Básica (*Basic Auth*).
|
||||
|
||||
Podes configurar múltiplas regras de cliente, nomes de utilizador e palavras-passe
|
||||
para uma única *Access List*, e depois aplicá-la a um ou mais *Proxy Hosts*.
|
||||
|
||||
Isto é especialmente útil para serviços web encaminhados que não têm mecanismos
|
||||
de autenticação integrados ou quando pretendes proteger o acesso contra clientes desconhecidos.
|
||||
31
frontend/src/locale/src/HelpDoc/pt/Certificates.md
Normal file
31
frontend/src/locale/src/HelpDoc/pt/Certificates.md
Normal file
@@ -0,0 +1,31 @@
|
||||
## Ajuda de Certificados
|
||||
|
||||
### Certificado HTTP
|
||||
|
||||
Um certificado validado por HTTP significa que os servidores do Let's Encrypt irão
|
||||
tentar aceder aos teus domínios via HTTP (não HTTPS!) e, se a ligação for bem-sucedida,
|
||||
emitirão o certificado.
|
||||
|
||||
Para este método, é necessário ter um *Proxy Host* criado para o(s) teu(s) domínio(s),
|
||||
acessível via HTTP e a apontar para esta instalação do Nginx. Depois de o certificado ser
|
||||
emitido, podes modificar o *Proxy Host* para também utilizar esse certificado em ligações HTTPS.
|
||||
No entanto, o *Proxy Host* deve continuar configurado para acesso HTTP para que a renovação
|
||||
funcione corretamente.
|
||||
|
||||
Este processo **não** suporta domínios wildcard.
|
||||
|
||||
### Certificado DNS
|
||||
|
||||
Um certificado validado por DNS requer que uses um plugin de fornecedor DNS (*DNS Provider*).
|
||||
Este fornecedor será usado para criar registos temporários no teu domínio, que serão consultados
|
||||
pelo Let's Encrypt para confirmar que és o proprietário. Se tudo correr bem, o certificado será emitido.
|
||||
|
||||
Não é necessário ter um *Proxy Host* criado antes de pedir este tipo de certificado.
|
||||
Também não é necessário que o *Proxy Host* tenha acesso HTTP configurado.
|
||||
|
||||
Este processo **suporta** domínios wildcard.
|
||||
|
||||
### Certificado Personalizado
|
||||
|
||||
Usa esta opção para carregar o teu próprio Certificado SSL, fornecido pela
|
||||
tua Autoridade Certificadora.
|
||||
9
frontend/src/locale/src/HelpDoc/pt/DeadHosts.md
Normal file
9
frontend/src/locale/src/HelpDoc/pt/DeadHosts.md
Normal file
@@ -0,0 +1,9 @@
|
||||
## O que é um 404 Host?
|
||||
|
||||
Um *404 Host* é simplesmente um host configurado para apresentar uma página 404.
|
||||
|
||||
Isto pode ser útil quando o teu domínio aparece em motores de busca e queres fornecer
|
||||
uma página de erro mais agradável ou indicar especificamente aos indexadores de pesquisa
|
||||
que as páginas desse domínio já não existem.
|
||||
|
||||
Outra vantagem é permitir consultar os registos de acessos a este host e ver os referenciadores.
|
||||
7
frontend/src/locale/src/HelpDoc/pt/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/pt/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## O que é um Proxy Host?
|
||||
|
||||
Um *Proxy Host* é o ponto de entrada para um serviço web que pretendes encaminhar.
|
||||
|
||||
Permite, opcionalmente, fazer terminação SSL para um serviço que possa não ter suporte SSL nativo.
|
||||
|
||||
Os *Proxy Hosts* são a utilização mais comum do Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/pt/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/pt/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## O que é um Redirection Host?
|
||||
|
||||
Um *Redirection Host* redireciona pedidos recebidos no domínio de entrada e envia
|
||||
o utilizador para outro domínio.
|
||||
|
||||
A razão mais comum para usar este tipo de host é quando o teu site muda de domínio
|
||||
mas ainda tens motores de busca ou links de referência a apontar para o domínio antigo.
|
||||
6
frontend/src/locale/src/HelpDoc/pt/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/pt/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## O que é um Stream?
|
||||
|
||||
Uma funcionalidade relativamente recente no Nginx, um *Stream* serve para encaminhar
|
||||
tráfego TCP/UDP diretamente para outro computador na rede.
|
||||
|
||||
Se estiveres a executar servidores de jogos, FTP ou SSH, isto pode ser bastante útil.
|
||||
6
frontend/src/locale/src/HelpDoc/pt/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/pt/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
770
frontend/src/locale/src/cs.json
Normal file
770
frontend/src/locale/src/cs.json
Normal file
@@ -0,0 +1,770 @@
|
||||
{
|
||||
"2fa.backup-codes-remaining": {
|
||||
"defaultMessage": "Počet zbývajících záložních kódů: {count}"
|
||||
},
|
||||
"2fa.backup-warning": {
|
||||
"defaultMessage": "Tyto záložní kódy si uložte na bezpečném místě. Každý kód lze použít pouze jednou."
|
||||
},
|
||||
"2fa.disable": {
|
||||
"defaultMessage": "Vypnout dvoufaktorové ověřování"
|
||||
},
|
||||
"2fa.disable-confirm": {
|
||||
"defaultMessage": "Vypnout 2FA"
|
||||
},
|
||||
"2fa.disable-warning": {
|
||||
"defaultMessage": "Vypnutím dvoufaktorového ověřování snížíte bezpečnost svého účtu."
|
||||
},
|
||||
"2fa.disabled": {
|
||||
"defaultMessage": "Vypnuto"
|
||||
},
|
||||
"2fa.done": {
|
||||
"defaultMessage": "Uložil jsem si své záložní kódy."
|
||||
},
|
||||
"2fa.enable": {
|
||||
"defaultMessage": "Zapnout dvoufaktorové ověřování"
|
||||
},
|
||||
"2fa.enabled": {
|
||||
"defaultMessage": "Zapnuto"
|
||||
},
|
||||
"2fa.enter-code": {
|
||||
"defaultMessage": "Zadejte ověřovací kód"
|
||||
},
|
||||
"2fa.enter-code-disable": {
|
||||
"defaultMessage": "Zadejte ověřovací kód pro vypnutí"
|
||||
},
|
||||
"2fa.regenerate": {
|
||||
"defaultMessage": "Znovu vytvořit"
|
||||
},
|
||||
"2fa.regenerate-backup": {
|
||||
"defaultMessage": "Znovu vytvořit záložní kódy"
|
||||
},
|
||||
"2fa.regenerate-instructions": {
|
||||
"defaultMessage": "Zadejte ověřovací kód pro vytvoření nových záložních kódů. Vaše staré kódy budou neplatné."
|
||||
},
|
||||
"2fa.secret-key": {
|
||||
"defaultMessage": "Tajný klíč"
|
||||
},
|
||||
"2fa.setup-instructions": {
|
||||
"defaultMessage": "Naskenujte tento QR kód pomocí své ověřovací aplikace nebo zadejte tajný klíč ručně."
|
||||
},
|
||||
"2fa.status": {
|
||||
"defaultMessage": "Stav"
|
||||
},
|
||||
"2fa.title": {
|
||||
"defaultMessage": "Dvoufaktorové ověření"
|
||||
},
|
||||
"2fa.verify-enable": {
|
||||
"defaultMessage": "Ověřit a zapnout"
|
||||
},
|
||||
"access-list": {
|
||||
"defaultMessage": "seznam přístupů"
|
||||
},
|
||||
"access-list.access-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {pravidlo} few {pravidla} other {pravidel}}"
|
||||
},
|
||||
"access-list.auth-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {uživatel} few {uživatelé} other {uživatelů}}"
|
||||
},
|
||||
"access-list.help-rules-last": {
|
||||
"defaultMessage": "Když existuje alespoň jedno pravidlo, toto pravidlo „zamítnout vše“ bude přidáno jako poslední"
|
||||
},
|
||||
"access-list.help.rules-order": {
|
||||
"defaultMessage": "Upozornění: pravidla povolit a zamítnout budou uplatňována v pořadí, v jakém jsou definována."
|
||||
},
|
||||
"access-list.pass-auth": {
|
||||
"defaultMessage": "Odeslat ověření na Upstream"
|
||||
},
|
||||
"access-list.public": {
|
||||
"defaultMessage": "Veřejně přístupné"
|
||||
},
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Není potřeba základní ověření"
|
||||
},
|
||||
"access-list.rule-source.placeholder": {
|
||||
"defaultMessage": "192.168.1.100 nebo 192.168.1.0/24 nebo 2001:0db8::/32"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Splnit kterékoliv"
|
||||
},
|
||||
"access-list.subtitle": {
|
||||
"defaultMessage": "{users} {users, plural, one {uživatel} few {uživatelé} other {uživatelů}}, {rules} {rules, plural, one {pravidlo} few {pravidla} other {pravidel}} - Vytvořeno: {date}"
|
||||
},
|
||||
"access-lists": {
|
||||
"defaultMessage": "Seznamy přístupů"
|
||||
},
|
||||
"action.add": {
|
||||
"defaultMessage": "Přidat"
|
||||
},
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Přidat umístění"
|
||||
},
|
||||
"action.allow": {
|
||||
"defaultMessage": "Povolit"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Zavřít"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Smazat"
|
||||
},
|
||||
"action.deny": {
|
||||
"defaultMessage": "Zamítnout"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Deaktivovat"
|
||||
},
|
||||
"action.download": {
|
||||
"defaultMessage": "Stáhnout"
|
||||
},
|
||||
"action.edit": {
|
||||
"defaultMessage": "Upravit"
|
||||
},
|
||||
"action.enable": {
|
||||
"defaultMessage": "Aktivovat"
|
||||
},
|
||||
"action.permissions": {
|
||||
"defaultMessage": "Oprávnění"
|
||||
},
|
||||
"action.renew": {
|
||||
"defaultMessage": "Obnovit"
|
||||
},
|
||||
"action.view-details": {
|
||||
"defaultMessage": "Zobrazit podrobnosti"
|
||||
},
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Záznamy auditu"
|
||||
},
|
||||
"auto": {
|
||||
"defaultMessage": "Automaticky"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Zrušit"
|
||||
},
|
||||
"certificate": {
|
||||
"defaultMessage": "certifikát"
|
||||
},
|
||||
"certificate.custom-certificate": {
|
||||
"defaultMessage": "Certifikát"
|
||||
},
|
||||
"certificate.custom-certificate-key": {
|
||||
"defaultMessage": "Klíč certifikátu"
|
||||
},
|
||||
"certificate.custom-intermediate": {
|
||||
"defaultMessage": "Zprostředkovatelský certifikát"
|
||||
},
|
||||
"certificate.in-use": {
|
||||
"defaultMessage": "Používá se"
|
||||
},
|
||||
"certificate.none.subtitle": {
|
||||
"defaultMessage": "Není přiřazen žádný certifikát"
|
||||
},
|
||||
"certificate.none.subtitle.for-http": {
|
||||
"defaultMessage": "Tento hostitel nebude používat HTTPS"
|
||||
},
|
||||
"certificate.none.title": {
|
||||
"defaultMessage": "Žádný"
|
||||
},
|
||||
"certificate.not-in-use": {
|
||||
"defaultMessage": "Nepoužívá se"
|
||||
},
|
||||
"certificate.renew": {
|
||||
"defaultMessage": "Obnovit certifikát"
|
||||
},
|
||||
"certificates": {
|
||||
"defaultMessage": "Certifikáty"
|
||||
},
|
||||
"certificates.custom": {
|
||||
"defaultMessage": "Vlastní certifikát"
|
||||
},
|
||||
"certificates.custom.warning": {
|
||||
"defaultMessage": "Soubory klíčů chráněné heslem nejsou podporovány."
|
||||
},
|
||||
"certificates.dns.credentials": {
|
||||
"defaultMessage": "Obsah souboru s přihlašovacími údaji"
|
||||
},
|
||||
"certificates.dns.credentials-note": {
|
||||
"defaultMessage": "Tento doplněk vyžaduje konfigurační soubor obsahující API token nebo jiné přihlašovací údaje vašeho poskytovatele"
|
||||
},
|
||||
"certificates.dns.credentials-warning": {
|
||||
"defaultMessage": "Tyto údaje budou uloženy v databázi a v souboru jako obyčejný text!"
|
||||
},
|
||||
"certificates.dns.propagation-seconds": {
|
||||
"defaultMessage": "Propagace v sekundách"
|
||||
},
|
||||
"certificates.dns.propagation-seconds-note": {
|
||||
"defaultMessage": "Nechte prázdné pro výchozí hodnotu doplňku. Počet sekund, po které se čeká na propagaci DNS."
|
||||
},
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "DNS poskytovatel"
|
||||
},
|
||||
"certificates.dns.provider.placeholder": {
|
||||
"defaultMessage": "Vyberte poskytovatele..."
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Tato sekce vyžaduje znalost Certbotu a jeho DNS doplňků. Prosím, podívejte se do dokumentace příslušného doplňku."
|
||||
},
|
||||
"certificates.http.reachability-404": {
|
||||
"defaultMessage": "Na této doméně byl nalezen server, ale nezdá se, že jde o Nginx Proxy Manager. Ujistěte se, že vaše doména směřuje na IP, kde běží vaše instance NPM."
|
||||
},
|
||||
"certificates.http.reachability-failed-to-check": {
|
||||
"defaultMessage": "Nepodařilo se ověřit dostupnost kvůli chybě komunikace se službou site24x7.com."
|
||||
},
|
||||
"certificates.http.reachability-not-resolved": {
|
||||
"defaultMessage": "Na této doméně není dostupný žádný server. Ujistěte se, že doména existuje a směřuje na IP adresu s NPM a pokud je to potřeba, port 80 je přesměrován ve vašem routeru."
|
||||
},
|
||||
"certificates.http.reachability-ok": {
|
||||
"defaultMessage": "Váš server je dostupný a vytvoření certifikátu by mělo být možné."
|
||||
},
|
||||
"certificates.http.reachability-other": {
|
||||
"defaultMessage": "Na této doméně byl nalezen server, ale vrátil neočekávaný stavový kód {code}. Je to NPM server? Ujistěte se prosím, že doména směřuje na IP, kde běží vaše instance NPM."
|
||||
},
|
||||
"certificates.http.reachability-wrong-data": {
|
||||
"defaultMessage": "Na této doméně byl nalezen server, ale vrátil neočekávaná data. Je to NPM server? Ujistěte se, že doména směřuje na IP, kde běží vaše instance NPM."
|
||||
},
|
||||
"certificates.http.test-results": {
|
||||
"defaultMessage": "Výsledky testu"
|
||||
},
|
||||
"certificates.http.warning": {
|
||||
"defaultMessage": "Tyto domény musí být již nakonfigurovány tak, aby směřovaly na tuto instalaci."
|
||||
},
|
||||
"certificates.key-type": {
|
||||
"defaultMessage": "Typ klíče"
|
||||
},
|
||||
"certificates.key-type-description": {
|
||||
"defaultMessage": "RSA je široce kompatibilní, ECDSA je rychlejší a bezpečnější, ale nemusí být podporován staršími systémy"
|
||||
},
|
||||
"certificates.key-type-ecdsa": {
|
||||
"defaultMessage": "ECDSA 256"
|
||||
},
|
||||
"certificates.key-type-rsa": {
|
||||
"defaultMessage": "RSA 2048"
|
||||
},
|
||||
"certificates.request.subtitle": {
|
||||
"defaultMessage": "pomocí Let's Encrypt"
|
||||
},
|
||||
"certificates.request.title": {
|
||||
"defaultMessage": "Vyžádat nový certifikát"
|
||||
},
|
||||
"column.access": {
|
||||
"defaultMessage": "Přístup"
|
||||
},
|
||||
"column.authorization": {
|
||||
"defaultMessage": "Autorizace"
|
||||
},
|
||||
"column.authorizations": {
|
||||
"defaultMessage": "Autorizace"
|
||||
},
|
||||
"column.custom-locations": {
|
||||
"defaultMessage": "Vlastní umístění"
|
||||
},
|
||||
"column.destination": {
|
||||
"defaultMessage": "Cíl"
|
||||
},
|
||||
"column.details": {
|
||||
"defaultMessage": "Podrobnosti"
|
||||
},
|
||||
"column.email": {
|
||||
"defaultMessage": "Email"
|
||||
},
|
||||
"column.event": {
|
||||
"defaultMessage": "Událost"
|
||||
},
|
||||
"column.expires": {
|
||||
"defaultMessage": "Platnost do"
|
||||
},
|
||||
"column.http-code": {
|
||||
"defaultMessage": "Přístup"
|
||||
},
|
||||
"column.incoming-port": {
|
||||
"defaultMessage": "Vstupní port"
|
||||
},
|
||||
"column.name": {
|
||||
"defaultMessage": "Název"
|
||||
},
|
||||
"column.protocol": {
|
||||
"defaultMessage": "Protokol"
|
||||
},
|
||||
"column.provider": {
|
||||
"defaultMessage": "Poskytovatel"
|
||||
},
|
||||
"column.roles": {
|
||||
"defaultMessage": "Role"
|
||||
},
|
||||
"column.rules": {
|
||||
"defaultMessage": "Pravidla"
|
||||
},
|
||||
"column.satisfy": {
|
||||
"defaultMessage": "Splnit"
|
||||
},
|
||||
"column.satisfy-all": {
|
||||
"defaultMessage": "Všechny"
|
||||
},
|
||||
"column.satisfy-any": {
|
||||
"defaultMessage": "Kterékoliv"
|
||||
},
|
||||
"column.scheme": {
|
||||
"defaultMessage": "Schéma"
|
||||
},
|
||||
"column.source": {
|
||||
"defaultMessage": "Zdroj"
|
||||
},
|
||||
"column.ssl": {
|
||||
"defaultMessage": "SSL"
|
||||
},
|
||||
"column.status": {
|
||||
"defaultMessage": "Stav"
|
||||
},
|
||||
"created-on": {
|
||||
"defaultMessage": "Vytvořeno: {date}"
|
||||
},
|
||||
"dashboard": {
|
||||
"defaultMessage": "Panel"
|
||||
},
|
||||
"dead-host": {
|
||||
"defaultMessage": "404 hostitel"
|
||||
},
|
||||
"dead-hosts": {
|
||||
"defaultMessage": "404 Hostitelé"
|
||||
},
|
||||
"dead-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {404 hostitel} few {404 hostitelé} other {404 hostitelů}}"
|
||||
},
|
||||
"disabled": {
|
||||
"defaultMessage": "Deaktivováno"
|
||||
},
|
||||
"domain-names": {
|
||||
"defaultMessage": "Doménová jména"
|
||||
},
|
||||
"domain-names.max": {
|
||||
"defaultMessage": "Maximálně {count} doménových jmen"
|
||||
},
|
||||
"domain-names.placeholder": {
|
||||
"defaultMessage": "Začněte psát pro přidání domény..."
|
||||
},
|
||||
"domain-names.wildcards-not-permitted": {
|
||||
"defaultMessage": "Wildcards nejsou pro tento typ povoleny"
|
||||
},
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Wildcards nejsou podporovány pro tuto certifikační autoritu"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Vynutit SSL"
|
||||
},
|
||||
"domains.hsts-enabled": {
|
||||
"defaultMessage": "HSTS povoleno"
|
||||
},
|
||||
"domains.hsts-subdomains": {
|
||||
"defaultMessage": "HSTS pro subdomény"
|
||||
},
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "Podpora HTTP/2"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Použít DNS výzvu"
|
||||
},
|
||||
"email-address": {
|
||||
"defaultMessage": "Emailová adresa"
|
||||
},
|
||||
"empty-search": {
|
||||
"defaultMessage": "Nebyly nalezeny žádné výsledky"
|
||||
},
|
||||
"empty-subtitle": {
|
||||
"defaultMessage": "Proč nevytvoříte nějaký?"
|
||||
},
|
||||
"enabled": {
|
||||
"defaultMessage": "Aktivováno"
|
||||
},
|
||||
"error.access.at-least-one": {
|
||||
"defaultMessage": "Je vyžadována alespoň jedna autorizace nebo jedno přístupové pravidlo"
|
||||
},
|
||||
"error.access.duplicate-usernames": {
|
||||
"defaultMessage": "Uživatelská jména pro autorizaci musí být jedinečná"
|
||||
},
|
||||
"error.invalid-auth": {
|
||||
"defaultMessage": "Neplatný email nebo heslo"
|
||||
},
|
||||
"error.invalid-domain": {
|
||||
"defaultMessage": "Neplatná doména: {domain}"
|
||||
},
|
||||
"error.invalid-email": {
|
||||
"defaultMessage": "Neplatná emailová adresa"
|
||||
},
|
||||
"error.max-character-length": {
|
||||
"defaultMessage": "Maximální délka je {max} znak{max, plural, one {} few {y} other {ů}}"
|
||||
},
|
||||
"error.max-domains": {
|
||||
"defaultMessage": "Příliš mnoho domén, maximum je {max}"
|
||||
},
|
||||
"error.maximum": {
|
||||
"defaultMessage": "Maximum je {max}"
|
||||
},
|
||||
"error.min-character-length": {
|
||||
"defaultMessage": "Minimální délka je {min} znak{min, plural, one {} few {y} other {ů}}"
|
||||
},
|
||||
"error.minimum": {
|
||||
"defaultMessage": "Minimum je {min}"
|
||||
},
|
||||
"error.passwords-must-match": {
|
||||
"defaultMessage": "Hesla se musí shodovat"
|
||||
},
|
||||
"error.required": {
|
||||
"defaultMessage": "Toto pole je povinné"
|
||||
},
|
||||
"expires.on": {
|
||||
"defaultMessage": "Platnost do: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "Forkněte mě na GitHubu"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "Blokovat běžné exploity"
|
||||
},
|
||||
"host.flags.cache-assets": {
|
||||
"defaultMessage": "Uložit zdroje do mezipaměti"
|
||||
},
|
||||
"host.flags.preserve-path": {
|
||||
"defaultMessage": "Zachovat cestu"
|
||||
},
|
||||
"host.flags.protocols": {
|
||||
"defaultMessage": "Protokoly"
|
||||
},
|
||||
"host.flags.websockets-upgrade": {
|
||||
"defaultMessage": "Podpora WebSockets"
|
||||
},
|
||||
"host.forward-port": {
|
||||
"defaultMessage": "Port přesměrování"
|
||||
},
|
||||
"host.forward-scheme": {
|
||||
"defaultMessage": "Schéma"
|
||||
},
|
||||
"hosts": {
|
||||
"defaultMessage": "Hostitelé"
|
||||
},
|
||||
"http-only": {
|
||||
"defaultMessage": "Pouze HTTP"
|
||||
},
|
||||
"lets-encrypt": {
|
||||
"defaultMessage": "Let's Encrypt"
|
||||
},
|
||||
"lets-encrypt-via-dns": {
|
||||
"defaultMessage": "Let's Encrypt přes DNS"
|
||||
},
|
||||
"lets-encrypt-via-http": {
|
||||
"defaultMessage": "Let's Encrypt přes HTTP"
|
||||
},
|
||||
"loading": {
|
||||
"defaultMessage": "Načítá se…"
|
||||
},
|
||||
"login.2fa-code": {
|
||||
"defaultMessage": "Ověřovací kód"
|
||||
},
|
||||
"login.2fa-code-placeholder": {
|
||||
"defaultMessage": "Vložit kód"
|
||||
},
|
||||
"login.2fa-description": {
|
||||
"defaultMessage": "Vložte kód z vaší ověřovací aplikace"
|
||||
},
|
||||
"login.2fa-title": {
|
||||
"defaultMessage": "Dvoufaktorové ověření"
|
||||
},
|
||||
"login.2fa-verify": {
|
||||
"defaultMessage": "Ověřit"
|
||||
},
|
||||
"login.title": {
|
||||
"defaultMessage": "Přihlaste se ke svému účtu"
|
||||
},
|
||||
"nginx-config.label": {
|
||||
"defaultMessage": "Vlastní Nginx konfigurace"
|
||||
},
|
||||
"nginx-config.placeholder": {
|
||||
"defaultMessage": "# Zadejte vlastní Nginx konfiguraci na vlastní riziko!"
|
||||
},
|
||||
"no-permission-error": {
|
||||
"defaultMessage": "Nemáte oprávnění k zobrazení tohoto obsahu."
|
||||
},
|
||||
"notfound.action": {
|
||||
"defaultMessage": "Zpět na hlavní stránku"
|
||||
},
|
||||
"notfound.content": {
|
||||
"defaultMessage": "Omlouváme se, stránka, kterou hledáte, nebyla nalezena"
|
||||
},
|
||||
"notfound.title": {
|
||||
"defaultMessage": "Ups… Našli jste chybovou stránku"
|
||||
},
|
||||
"notification.error": {
|
||||
"defaultMessage": "Chyba"
|
||||
},
|
||||
"notification.object-deleted": {
|
||||
"defaultMessage": "{object} byl odstraněn"
|
||||
},
|
||||
"notification.object-disabled": {
|
||||
"defaultMessage": "{object} byl deaktivován"
|
||||
},
|
||||
"notification.object-enabled": {
|
||||
"defaultMessage": "{object} byl aktivován"
|
||||
},
|
||||
"notification.object-renewed": {
|
||||
"defaultMessage": "{object} byl obnoven"
|
||||
},
|
||||
"notification.object-saved": {
|
||||
"defaultMessage": "{object} byl uložen"
|
||||
},
|
||||
"notification.success": {
|
||||
"defaultMessage": "Úspěch"
|
||||
},
|
||||
"object.actions-title": {
|
||||
"defaultMessage": "{object} #{id}"
|
||||
},
|
||||
"object.add": {
|
||||
"defaultMessage": "Přidat {object}"
|
||||
},
|
||||
"object.delete": {
|
||||
"defaultMessage": "Smazat {object}"
|
||||
},
|
||||
"object.delete.content": {
|
||||
"defaultMessage": "Opravdu chcete smazat tento {object}?"
|
||||
},
|
||||
"object.edit": {
|
||||
"defaultMessage": "Upravit {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "Nejsou {objects}"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "Vytvořen {object}"
|
||||
},
|
||||
"object.event.deleted": {
|
||||
"defaultMessage": "Smazán {object}"
|
||||
},
|
||||
"object.event.disabled": {
|
||||
"defaultMessage": "Deaktivován {object}"
|
||||
},
|
||||
"object.event.enabled": {
|
||||
"defaultMessage": "Aktivován {object}"
|
||||
},
|
||||
"object.event.renewed": {
|
||||
"defaultMessage": "Obnoven {object}"
|
||||
},
|
||||
"object.event.updated": {
|
||||
"defaultMessage": "Aktualizován {object}"
|
||||
},
|
||||
"offline": {
|
||||
"defaultMessage": "Offline"
|
||||
},
|
||||
"online": {
|
||||
"defaultMessage": "Online"
|
||||
},
|
||||
"options": {
|
||||
"defaultMessage": "Možnosti"
|
||||
},
|
||||
"password": {
|
||||
"defaultMessage": "Heslo"
|
||||
},
|
||||
"password.generate": {
|
||||
"defaultMessage": "Vygenerovat náhodné heslo"
|
||||
},
|
||||
"password.hide": {
|
||||
"defaultMessage": "Skrýt heslo"
|
||||
},
|
||||
"password.show": {
|
||||
"defaultMessage": "Zobrazit heslo"
|
||||
},
|
||||
"permissions.hidden": {
|
||||
"defaultMessage": "Skryté"
|
||||
},
|
||||
"permissions.manage": {
|
||||
"defaultMessage": "Spravovat"
|
||||
},
|
||||
"permissions.view": {
|
||||
"defaultMessage": "Pouze pro zobrazení"
|
||||
},
|
||||
"permissions.visibility.all": {
|
||||
"defaultMessage": "Všechny položky"
|
||||
},
|
||||
"permissions.visibility.title": {
|
||||
"defaultMessage": "Viditelnost položky"
|
||||
},
|
||||
"permissions.visibility.user": {
|
||||
"defaultMessage": "Pouze vytvořené položky"
|
||||
},
|
||||
"proxy-host": {
|
||||
"defaultMessage": "proxy hostitele"
|
||||
},
|
||||
"proxy-host.forward-host": {
|
||||
"defaultMessage": "Cílový název hostitele / IP"
|
||||
},
|
||||
"proxy-hosts": {
|
||||
"defaultMessage": "Proxy hostitelé"
|
||||
},
|
||||
"proxy-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {proxy hostitel} few {proxy hostitelé} other {proxy hostitelů}}"
|
||||
},
|
||||
"public": {
|
||||
"defaultMessage": "Veřejné"
|
||||
},
|
||||
"redirection-host": {
|
||||
"defaultMessage": "přesměrovacího hostitele"
|
||||
},
|
||||
"redirection-host.forward-domain": {
|
||||
"defaultMessage": "Cílová doména"
|
||||
},
|
||||
"redirection-host.forward-http-code": {
|
||||
"defaultMessage": "HTTP kód"
|
||||
},
|
||||
"redirection-hosts": {
|
||||
"defaultMessage": "Přesměrovací hostitelé"
|
||||
},
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {přesměrovací hostitel} few {přesměrovací hostitelé} other {přesměrovacích hostitelů}}"
|
||||
},
|
||||
"redirection-hosts.http-code.300": {
|
||||
"defaultMessage": "300 Více možností"
|
||||
},
|
||||
"redirection-hosts.http-code.301": {
|
||||
"defaultMessage": "301 Trvale přesunuto"
|
||||
},
|
||||
"redirection-hosts.http-code.302": {
|
||||
"defaultMessage": "302 Dočasně přesunuto"
|
||||
},
|
||||
"redirection-hosts.http-code.303": {
|
||||
"defaultMessage": "303 Podívat se na jiné"
|
||||
},
|
||||
"redirection-hosts.http-code.307": {
|
||||
"defaultMessage": "307 Dočasné přesměrování"
|
||||
},
|
||||
"redirection-hosts.http-code.308": {
|
||||
"defaultMessage": "308 Trvalé přesměrování"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Administrátor"
|
||||
},
|
||||
"role.standard-user": {
|
||||
"defaultMessage": "Běžný uživatel"
|
||||
},
|
||||
"save": {
|
||||
"defaultMessage": "Uložit"
|
||||
},
|
||||
"setting": {
|
||||
"defaultMessage": "Nastavení"
|
||||
},
|
||||
"settings": {
|
||||
"defaultMessage": "Nastavení"
|
||||
},
|
||||
"settings.default-site": {
|
||||
"defaultMessage": "Výchozí stránka"
|
||||
},
|
||||
"settings.default-site.404": {
|
||||
"defaultMessage": "Stránka 404"
|
||||
},
|
||||
"settings.default-site.444": {
|
||||
"defaultMessage": "Bez odpovědi (444)"
|
||||
},
|
||||
"settings.default-site.congratulations": {
|
||||
"defaultMessage": "Gratulační stránka"
|
||||
},
|
||||
"settings.default-site.description": {
|
||||
"defaultMessage": "Co zobrazit, když Nginx zachytí neznámého hostitele"
|
||||
},
|
||||
"settings.default-site.html": {
|
||||
"defaultMessage": "Vlastní HTML"
|
||||
},
|
||||
"settings.default-site.html.placeholder": {
|
||||
"defaultMessage": "<!-- Sem zadejte vlastní HTML obsah -->"
|
||||
},
|
||||
"settings.default-site.redirect": {
|
||||
"defaultMessage": "Přesměrovat"
|
||||
},
|
||||
"setup.preamble": {
|
||||
"defaultMessage": "Začněte vytvořením administrátorského účtu."
|
||||
},
|
||||
"setup.title": {
|
||||
"defaultMessage": "Vítejte!"
|
||||
},
|
||||
"sign-in": {
|
||||
"defaultMessage": "Přihlásit se"
|
||||
},
|
||||
"ssl-certificate": {
|
||||
"defaultMessage": "SSL certifikát"
|
||||
},
|
||||
"stream": {
|
||||
"defaultMessage": "stream"
|
||||
},
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Cílový hostitel"
|
||||
},
|
||||
"stream.forward-host.placeholder": {
|
||||
"defaultMessage": "napriklad.cz nebo 10.0.0.1 nebo 2001:db8:3333:4444:5555:6666:7777:8888"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Vstupní port"
|
||||
},
|
||||
"streams": {
|
||||
"defaultMessage": "Streamy"
|
||||
},
|
||||
"streams.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {stream} few {streamy} other {streamů}}"
|
||||
},
|
||||
"streams.tcp": {
|
||||
"defaultMessage": "TCP"
|
||||
},
|
||||
"streams.udp": {
|
||||
"defaultMessage": "UDP"
|
||||
},
|
||||
"test": {
|
||||
"defaultMessage": "Test"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Dostupná aktualizace: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "uživatele"
|
||||
},
|
||||
"user.change-password": {
|
||||
"defaultMessage": "Změnit heslo"
|
||||
},
|
||||
"user.confirm-password": {
|
||||
"defaultMessage": "Potvrdit heslo"
|
||||
},
|
||||
"user.current-password": {
|
||||
"defaultMessage": "Aktuální heslo"
|
||||
},
|
||||
"user.edit-profile": {
|
||||
"defaultMessage": "Upravit profil"
|
||||
},
|
||||
"user.full-name": {
|
||||
"defaultMessage": "Celé jméno"
|
||||
},
|
||||
"user.login-as": {
|
||||
"defaultMessage": "Přihlásit se jako {name}"
|
||||
},
|
||||
"user.logout": {
|
||||
"defaultMessage": "Odhlásit se"
|
||||
},
|
||||
"user.new-password": {
|
||||
"defaultMessage": "Nové heslo"
|
||||
},
|
||||
"user.nickname": {
|
||||
"defaultMessage": "Přezdívka"
|
||||
},
|
||||
"user.set-password": {
|
||||
"defaultMessage": "Nastavit heslo"
|
||||
},
|
||||
"user.set-permissions": {
|
||||
"defaultMessage": "Nastavit oprávnění pro {name}"
|
||||
},
|
||||
"user.switch-dark": {
|
||||
"defaultMessage": "Přepnout na tmavý režim"
|
||||
},
|
||||
"user.switch-light": {
|
||||
"defaultMessage": "Přepnout na světlý režim"
|
||||
},
|
||||
"user.two-factor": {
|
||||
"defaultMessage": "Dvoufaktorové ověření"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Uživatelské jméno"
|
||||
},
|
||||
"users": {
|
||||
"defaultMessage": "Uživatelé"
|
||||
}
|
||||
}
|
||||
@@ -347,6 +347,9 @@
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Wildcards not supported for this CA"
|
||||
},
|
||||
"domains.advanced": {
|
||||
"defaultMessage": "Advanced"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Force SSL"
|
||||
},
|
||||
@@ -359,6 +362,9 @@
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "HTTP/2 Support"
|
||||
},
|
||||
"domains.trust-forwarded-proto": {
|
||||
"defaultMessage": "Trust Upstream Forwarded Proto Headers"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Use DNS Challenge"
|
||||
},
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
"locale-de-DE": {
|
||||
"defaultMessage": "German"
|
||||
},
|
||||
"locale-pt-PT": {
|
||||
"defaultMessage": "Português (Europeu)"
|
||||
},
|
||||
"locale-fr-FR": {
|
||||
"defaultMessage": "Français"
|
||||
},
|
||||
@@ -26,6 +29,9 @@
|
||||
"locale-sk-SK": {
|
||||
"defaultMessage": "Slovenčina"
|
||||
},
|
||||
"locale-cs-CZ": {
|
||||
"defaultMessage": "Čeština"
|
||||
},
|
||||
"locale-zh-CN": {
|
||||
"defaultMessage": "中文"
|
||||
},
|
||||
|
||||
683
frontend/src/locale/src/pt.json
Normal file
683
frontend/src/locale/src/pt.json
Normal file
@@ -0,0 +1,683 @@
|
||||
{
|
||||
"access-list": {
|
||||
"defaultMessage": "Lista de Controlo de Acesso (ACL)"
|
||||
},
|
||||
"access-list.access-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Regra} other {Regras}}"
|
||||
},
|
||||
"access-list.auth-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Utilizador} other {Utilizadores}}"
|
||||
},
|
||||
"access-list.help-rules-last": {
|
||||
"defaultMessage": "Quando existir pelo menos 1 regra, esta regra de negação geral será aplicada em último lugar"
|
||||
},
|
||||
"access-list.help.rules-order": {
|
||||
"defaultMessage": "Nota: as diretivas allow e deny são aplicadas pela ordem em que forem definidas."
|
||||
},
|
||||
"access-list.pass-auth": {
|
||||
"defaultMessage": "Passar Autenticação para o Upstream"
|
||||
},
|
||||
"access-list.public": {
|
||||
"defaultMessage": "Acesso Público"
|
||||
},
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Sem autenticação básica"
|
||||
},
|
||||
"access-list.rule-source.placeholder": {
|
||||
"defaultMessage": "192.168.1.100 ou 192.168.1.0/24 ou 2001:0db8::/32"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Satisfazer Qualquer"
|
||||
},
|
||||
"access-list.subtitle": {
|
||||
"defaultMessage": "{users} {users, plural, one {Utilizador} other {Utilizadores}}, {rules} {rules, plural, one {Regra} other {Regras}} – Criado em: {date}"
|
||||
},
|
||||
"access-lists": {
|
||||
"defaultMessage": "Listas de Controlo de Acesso (ACL)"
|
||||
},
|
||||
"action.add": {
|
||||
"defaultMessage": "Adicionar"
|
||||
},
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Adicionar Location"
|
||||
},
|
||||
"action.allow": {
|
||||
"defaultMessage": "Permitir"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Fechar"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Eliminar"
|
||||
},
|
||||
"action.deny": {
|
||||
"defaultMessage": "Negar"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Desativar"
|
||||
},
|
||||
"action.download": {
|
||||
"defaultMessage": "Descarregar"
|
||||
},
|
||||
"action.edit": {
|
||||
"defaultMessage": "Editar"
|
||||
},
|
||||
"action.enable": {
|
||||
"defaultMessage": "Ativar"
|
||||
},
|
||||
"action.permissions": {
|
||||
"defaultMessage": "Permissões"
|
||||
},
|
||||
"action.renew": {
|
||||
"defaultMessage": "Renovar"
|
||||
},
|
||||
"action.view-details": {
|
||||
"defaultMessage": "Ver Detalhes"
|
||||
},
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Registos de Auditoria"
|
||||
},
|
||||
"auto": {
|
||||
"defaultMessage": "Automático"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Cancelar"
|
||||
},
|
||||
"certificate": {
|
||||
"defaultMessage": "Certificado"
|
||||
},
|
||||
"certificate.custom-certificate": {
|
||||
"defaultMessage": "Certificado Personalizado"
|
||||
},
|
||||
"certificate.custom-certificate-key": {
|
||||
"defaultMessage": "Chave do Certificado"
|
||||
},
|
||||
"certificate.custom-intermediate": {
|
||||
"defaultMessage": "Certificado Intermédio"
|
||||
},
|
||||
"certificate.in-use": {
|
||||
"defaultMessage": "Em Utilização"
|
||||
},
|
||||
"certificate.none.subtitle": {
|
||||
"defaultMessage": "Nenhum certificado atribuído"
|
||||
},
|
||||
"certificate.none.subtitle.for-http": {
|
||||
"defaultMessage": "Este host não irá utilizar HTTPS"
|
||||
},
|
||||
"certificate.none.title": {
|
||||
"defaultMessage": "Nenhum"
|
||||
},
|
||||
"certificate.not-in-use": {
|
||||
"defaultMessage": "Não Utilizado"
|
||||
},
|
||||
"certificate.renew": {
|
||||
"defaultMessage": "Renovar Certificado"
|
||||
},
|
||||
"certificates": {
|
||||
"defaultMessage": "Certificados"
|
||||
},
|
||||
"certificates.custom": {
|
||||
"defaultMessage": "Certificado Personalizado"
|
||||
},
|
||||
"certificates.custom.warning": {
|
||||
"defaultMessage": "Ficheiros de chave protegidos por palavra-passe não são suportados."
|
||||
},
|
||||
"certificates.dns.credentials": {
|
||||
"defaultMessage": "Conteúdo do Ficheiro de Credenciais"
|
||||
},
|
||||
"certificates.dns.credentials-note": {
|
||||
"defaultMessage": "Este plugin requer um ficheiro de configuração contendo um token API ou outras credenciais do fornecedor DNS."
|
||||
},
|
||||
"certificates.dns.credentials-warning": {
|
||||
"defaultMessage": "Estes dados serão guardados em texto simples na base de dados e num ficheiro!"
|
||||
},
|
||||
"certificates.dns.propagation-seconds": {
|
||||
"defaultMessage": "Segundos de Propagação"
|
||||
},
|
||||
"certificates.dns.propagation-seconds-note": {
|
||||
"defaultMessage": "Deixe em branco para usar o valor predefinido do plugin. Número de segundos a aguardar pela propagação DNS."
|
||||
},
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "Fornecedor DNS"
|
||||
},
|
||||
"certificates.dns.provider.placeholder": {
|
||||
"defaultMessage": "Selecionar fornecedor..."
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Esta secção requer conhecimentos sobre o Certbot e os seus plugins DNS. Consulte a documentação dos plugins."
|
||||
},
|
||||
"certificates.http.reachability-404": {
|
||||
"defaultMessage": "Foi encontrado um servidor neste domínio, mas não parece ser o Nginx Proxy Manager. Certifique-se de que o domínio aponta para o IP onde a sua instância está a correr."
|
||||
},
|
||||
"certificates.http.reachability-failed-to-check": {
|
||||
"defaultMessage": "Falha ao verificar acessibilidade devido a um erro de comunicação com site24x7.com."
|
||||
},
|
||||
"certificates.http.reachability-not-resolved": {
|
||||
"defaultMessage": "Não existe nenhum servidor acessível neste domínio. Certifique-se de que o domínio existe, aponta para o IP correto e que a porta 80 está encaminhada no seu router."
|
||||
},
|
||||
"certificates.http.reachability-ok": {
|
||||
"defaultMessage": "O servidor está acessível e a criação de certificados deverá ser possível."
|
||||
},
|
||||
"certificates.http.reachability-other": {
|
||||
"defaultMessage": "Foi encontrado um servidor neste domínio, mas devolveu um código inesperado ({code}). Será o servidor NPM? Confirme que o domínio aponta para o IP correto."
|
||||
},
|
||||
"certificates.http.reachability-wrong-data": {
|
||||
"defaultMessage": "Foi encontrado um servidor neste domínio, mas devolveu dados inesperados. Será o servidor NPM? Confirme que o domínio aponta para o IP correto."
|
||||
},
|
||||
"certificates.http.test-results": {
|
||||
"defaultMessage": "Resultados do Teste"
|
||||
},
|
||||
"certificates.http.warning": {
|
||||
"defaultMessage": "Estes domínios devem já estar configurados para apontar para esta instalação."
|
||||
},
|
||||
"certificates.request.subtitle": {
|
||||
"defaultMessage": "com o Let's Encrypt"
|
||||
},
|
||||
"certificates.request.title": {
|
||||
"defaultMessage": "Pedir Novo Certificado"
|
||||
},
|
||||
"column.access": {
|
||||
"defaultMessage": "Acesso"
|
||||
},
|
||||
"column.authorization": {
|
||||
"defaultMessage": "Autorização"
|
||||
},
|
||||
"column.authorizations": {
|
||||
"defaultMessage": "Autorizações"
|
||||
},
|
||||
"column.custom-locations": {
|
||||
"defaultMessage": "Locations Personalizados"
|
||||
},
|
||||
"column.destination": {
|
||||
"defaultMessage": "Destino"
|
||||
},
|
||||
"column.details": {
|
||||
"defaultMessage": "Detalhes"
|
||||
},
|
||||
"column.email": {
|
||||
"defaultMessage": "Email"
|
||||
},
|
||||
"column.event": {
|
||||
"defaultMessage": "Evento"
|
||||
},
|
||||
"column.expires": {
|
||||
"defaultMessage": "Expira"
|
||||
},
|
||||
"column.http-code": {
|
||||
"defaultMessage": "Código HTTP"
|
||||
},
|
||||
"column.incoming-port": {
|
||||
"defaultMessage": "Porta de Entrada"
|
||||
},
|
||||
"column.name": {
|
||||
"defaultMessage": "Nome"
|
||||
},
|
||||
"column.protocol": {
|
||||
"defaultMessage": "Protocolo"
|
||||
},
|
||||
"column.provider": {
|
||||
"defaultMessage": "Fornecedor"
|
||||
},
|
||||
"column.roles": {
|
||||
"defaultMessage": "Funções"
|
||||
},
|
||||
"column.rules": {
|
||||
"defaultMessage": "Regras"
|
||||
},
|
||||
"column.satisfy": {
|
||||
"defaultMessage": "Satisfazer"
|
||||
},
|
||||
"column.satisfy-all": {
|
||||
"defaultMessage": "Todos"
|
||||
},
|
||||
"column.satisfy-any": {
|
||||
"defaultMessage": "Qualquer"
|
||||
},
|
||||
"column.scheme": {
|
||||
"defaultMessage": "Esquema"
|
||||
},
|
||||
"column.source": {
|
||||
"defaultMessage": "Origem"
|
||||
},
|
||||
"column.ssl": {
|
||||
"defaultMessage": "SSL"
|
||||
},
|
||||
"column.status": {
|
||||
"defaultMessage": "Estado"
|
||||
},
|
||||
"created-on": {
|
||||
"defaultMessage": "Criado em: {date}"
|
||||
},
|
||||
"dashboard": {
|
||||
"defaultMessage": "Painel"
|
||||
},
|
||||
"dead-host": {
|
||||
"defaultMessage": "Host 404"
|
||||
},
|
||||
"dead-hosts": {
|
||||
"defaultMessage": "Hosts 404"
|
||||
},
|
||||
"dead-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Host 404} other {Hosts 404}}"
|
||||
},
|
||||
"disabled": {
|
||||
"defaultMessage": "Desativado"
|
||||
},
|
||||
"domain-names": {
|
||||
"defaultMessage": "Nomes de Domínio"
|
||||
},
|
||||
"domain-names.max": {
|
||||
"defaultMessage": "Máximo de {count} domínios"
|
||||
},
|
||||
"domain-names.placeholder": {
|
||||
"defaultMessage": "Comece a escrever para adicionar um domínio..."
|
||||
},
|
||||
"domain-names.wildcards-not-permitted": {
|
||||
"defaultMessage": "Wildcards não permitidos para este tipo"
|
||||
},
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Wildcards não suportados por esta AC"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Forçar SSL"
|
||||
},
|
||||
"domains.hsts-enabled": {
|
||||
"defaultMessage": "HSTS Ativado"
|
||||
},
|
||||
"domains.hsts-subdomains": {
|
||||
"defaultMessage": "HSTS para Subdomínios"
|
||||
},
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "Suporte HTTP/2"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Utilizar DNS Challenge"
|
||||
},
|
||||
"email-address": {
|
||||
"defaultMessage": "Endereço de Email"
|
||||
},
|
||||
"empty-search": {
|
||||
"defaultMessage": "Nenhum resultado encontrado"
|
||||
},
|
||||
"empty-subtitle": {
|
||||
"defaultMessage": "Porque não cria um?"
|
||||
},
|
||||
"enabled": {
|
||||
"defaultMessage": "Ativado"
|
||||
},
|
||||
"error.access.at-least-one": {
|
||||
"defaultMessage": "É necessária pelo menos uma Autorização ou uma Regra de Acesso"
|
||||
},
|
||||
"error.access.duplicate-usernames": {
|
||||
"defaultMessage": "Os nomes de utilizador de autorização devem ser únicos"
|
||||
},
|
||||
"error.invalid-auth": {
|
||||
"defaultMessage": "Email ou palavra-passe inválidos"
|
||||
},
|
||||
"error.invalid-domain": {
|
||||
"defaultMessage": "Domínio inválido: {domain}"
|
||||
},
|
||||
"error.invalid-email": {
|
||||
"defaultMessage": "Endereço de email inválido"
|
||||
},
|
||||
"error.max-character-length": {
|
||||
"defaultMessage": "Tamanho máximo: {max} caractere{max, plural, one {} other {s}}"
|
||||
},
|
||||
"error.max-domains": {
|
||||
"defaultMessage": "Demasiados domínios; o máximo é {max}"
|
||||
},
|
||||
"error.maximum": {
|
||||
"defaultMessage": "Máximo permitido: {max}"
|
||||
},
|
||||
"error.min-character-length": {
|
||||
"defaultMessage": "Tamanho mínimo: {min} caractere{min, plural, one {} other {s}}"
|
||||
},
|
||||
"error.minimum": {
|
||||
"defaultMessage": "Mínimo permitido: {min}"
|
||||
},
|
||||
"error.passwords-must-match": {
|
||||
"defaultMessage": "As palavras-passe têm de coincidir"
|
||||
},
|
||||
"error.required": {
|
||||
"defaultMessage": "Campo obrigatório"
|
||||
},
|
||||
"expires.on": {
|
||||
"defaultMessage": "Expira em: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "Faz fork no GitHub"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "Bloquear Exploits Comuns"
|
||||
},
|
||||
"host.flags.cache-assets": {
|
||||
"defaultMessage": "Cache de Conteúdos Estáticos"
|
||||
},
|
||||
"host.flags.preserve-path": {
|
||||
"defaultMessage": "Preservar Caminho"
|
||||
},
|
||||
"host.flags.protocols": {
|
||||
"defaultMessage": "Protocolos"
|
||||
},
|
||||
"host.flags.websockets-upgrade": {
|
||||
"defaultMessage": "Suporte para WebSockets"
|
||||
},
|
||||
"host.forward-port": {
|
||||
"defaultMessage": "Porta de Encaminhamento"
|
||||
},
|
||||
"host.forward-scheme": {
|
||||
"defaultMessage": "Esquema"
|
||||
},
|
||||
"hosts": {
|
||||
"defaultMessage": "Hosts"
|
||||
},
|
||||
"http-only": {
|
||||
"defaultMessage": "Apenas HTTP"
|
||||
},
|
||||
"lets-encrypt": {
|
||||
"defaultMessage": "Let's Encrypt"
|
||||
},
|
||||
"lets-encrypt-via-dns": {
|
||||
"defaultMessage": "Let's Encrypt via DNS"
|
||||
},
|
||||
"lets-encrypt-via-http": {
|
||||
"defaultMessage": "Let's Encrypt via HTTP"
|
||||
},
|
||||
"loading": {
|
||||
"defaultMessage": "A carregar…"
|
||||
},
|
||||
"login.title": {
|
||||
"defaultMessage": "Iniciar sessão na sua conta"
|
||||
},
|
||||
"nginx-config.label": {
|
||||
"defaultMessage": "Configuração Nginx Personalizada"
|
||||
},
|
||||
"nginx-config.placeholder": {
|
||||
"defaultMessage": "# Insira aqui a sua configuração Nginx personalizada (utilize por sua conta e risco!)"
|
||||
},
|
||||
"no-permission-error": {
|
||||
"defaultMessage": "Não tem permissões para ver esta página."
|
||||
},
|
||||
"notfound.action": {
|
||||
"defaultMessage": "Voltar à página inicial"
|
||||
},
|
||||
"notfound.content": {
|
||||
"defaultMessage": "A página que procura não foi encontrada."
|
||||
},
|
||||
"notfound.title": {
|
||||
"defaultMessage": "Oops… Encontrou uma página de erro"
|
||||
},
|
||||
"notification.error": {
|
||||
"defaultMessage": "Erro"
|
||||
},
|
||||
"notification.object-deleted": {
|
||||
"defaultMessage": "{object} foi eliminado"
|
||||
},
|
||||
"notification.object-disabled": {
|
||||
"defaultMessage": "{object} foi desativado"
|
||||
},
|
||||
"notification.object-enabled": {
|
||||
"defaultMessage": "{object} foi ativado"
|
||||
},
|
||||
"notification.object-renewed": {
|
||||
"defaultMessage": "{object} foi renovado"
|
||||
},
|
||||
"notification.object-saved": {
|
||||
"defaultMessage": "{object} foi guardado"
|
||||
},
|
||||
"notification.success": {
|
||||
"defaultMessage": "Sucesso"
|
||||
},
|
||||
"object.actions-title": {
|
||||
"defaultMessage": "{object} #{id}"
|
||||
},
|
||||
"object.add": {
|
||||
"defaultMessage": "Adicionar {object}"
|
||||
},
|
||||
"object.delete": {
|
||||
"defaultMessage": "Eliminar {object}"
|
||||
},
|
||||
"object.delete.content": {
|
||||
"defaultMessage": "Tem a certeza de que deseja eliminar este {object}?"
|
||||
},
|
||||
"object.edit": {
|
||||
"defaultMessage": "Editar {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "Não existem {objects}"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "{object} criado"
|
||||
},
|
||||
"object.event.deleted": {
|
||||
"defaultMessage": "{object} eliminado"
|
||||
},
|
||||
"object.event.disabled": {
|
||||
"defaultMessage": "{object} desativado"
|
||||
},
|
||||
"object.event.enabled": {
|
||||
"defaultMessage": "{object} ativado"
|
||||
},
|
||||
"object.event.renewed": {
|
||||
"defaultMessage": "{object} renovado"
|
||||
},
|
||||
"object.event.updated": {
|
||||
"defaultMessage": "{object} atualizado"
|
||||
},
|
||||
"offline": {
|
||||
"defaultMessage": "Offline"
|
||||
},
|
||||
"online": {
|
||||
"defaultMessage": "Online"
|
||||
},
|
||||
"options": {
|
||||
"defaultMessage": "Opções"
|
||||
},
|
||||
"password": {
|
||||
"defaultMessage": "Palavra-passe"
|
||||
},
|
||||
"password.generate": {
|
||||
"defaultMessage": "Gerar palavra-passe aleatória"
|
||||
},
|
||||
"password.hide": {
|
||||
"defaultMessage": "Esconder Palavra-passe"
|
||||
},
|
||||
"password.show": {
|
||||
"defaultMessage": "Mostrar Palavra-passe"
|
||||
},
|
||||
"permissions.hidden": {
|
||||
"defaultMessage": "Oculto"
|
||||
},
|
||||
"permissions.manage": {
|
||||
"defaultMessage": "Gerir"
|
||||
},
|
||||
"permissions.view": {
|
||||
"defaultMessage": "Apenas Visualização"
|
||||
},
|
||||
"permissions.visibility.all": {
|
||||
"defaultMessage": "Todos os Itens"
|
||||
},
|
||||
"permissions.visibility.title": {
|
||||
"defaultMessage": "Visibilidade do Item"
|
||||
},
|
||||
"permissions.visibility.user": {
|
||||
"defaultMessage": "Apenas Itens Criados"
|
||||
},
|
||||
"proxy-host": {
|
||||
"defaultMessage": "Proxy Host"
|
||||
},
|
||||
"proxy-host.forward-host": {
|
||||
"defaultMessage": "Hostname/IP de Encaminhamento"
|
||||
},
|
||||
"proxy-hosts": {
|
||||
"defaultMessage": "Proxy Hosts"
|
||||
},
|
||||
"proxy-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}"
|
||||
},
|
||||
"public": {
|
||||
"defaultMessage": "Público"
|
||||
},
|
||||
"redirection-host": {
|
||||
"defaultMessage": "Host de Redirecionamento"
|
||||
},
|
||||
"redirection-host.forward-domain": {
|
||||
"defaultMessage": "Domínio de Destino"
|
||||
},
|
||||
"redirection-host.forward-http-code": {
|
||||
"defaultMessage": "Código HTTP"
|
||||
},
|
||||
"redirection-hosts": {
|
||||
"defaultMessage": "Hosts de Redirecionamento"
|
||||
},
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Host de Redirecionamento} other {Hosts de Redirecionamento}}"
|
||||
},
|
||||
"redirection-hosts.http-code.300": {
|
||||
"defaultMessage": "300 Múltiplas Escolhas"
|
||||
},
|
||||
"redirection-hosts.http-code.301": {
|
||||
"defaultMessage": "301 Movido Permanentemente"
|
||||
},
|
||||
"redirection-hosts.http-code.302": {
|
||||
"defaultMessage": "302 Movido Temporariamente"
|
||||
},
|
||||
"redirection-hosts.http-code.303": {
|
||||
"defaultMessage": "303 Ver Outro"
|
||||
},
|
||||
"redirection-hosts.http-code.307": {
|
||||
"defaultMessage": "307 Redirecionamento Temporário"
|
||||
},
|
||||
"redirection-hosts.http-code.308": {
|
||||
"defaultMessage": "308 Redirecionamento Permanente"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Administrador"
|
||||
},
|
||||
"role.standard-user": {
|
||||
"defaultMessage": "Utilizador Comum"
|
||||
},
|
||||
"save": {
|
||||
"defaultMessage": "Guardar"
|
||||
},
|
||||
"setting": {
|
||||
"defaultMessage": "Definição"
|
||||
},
|
||||
"settings": {
|
||||
"defaultMessage": "Definições"
|
||||
},
|
||||
"settings.default-site": {
|
||||
"defaultMessage": "Site Predefinido"
|
||||
},
|
||||
"settings.default-site.404": {
|
||||
"defaultMessage": "Página 404"
|
||||
},
|
||||
"settings.default-site.444": {
|
||||
"defaultMessage": "Sem Resposta (444)"
|
||||
},
|
||||
"settings.default-site.congratulations": {
|
||||
"defaultMessage": "Página de Boas-vindas"
|
||||
},
|
||||
"settings.default-site.description": {
|
||||
"defaultMessage": "O que apresentar quando o Nginx recebe um Host desconhecido"
|
||||
},
|
||||
"settings.default-site.html": {
|
||||
"defaultMessage": "HTML Personalizado"
|
||||
},
|
||||
"settings.default-site.html.placeholder": {
|
||||
"defaultMessage": "<!-- Insira aqui o seu conteúdo HTML personalizado -->"
|
||||
},
|
||||
"settings.default-site.redirect": {
|
||||
"defaultMessage": "Redirecionar"
|
||||
},
|
||||
"setup.preamble": {
|
||||
"defaultMessage": "Comece por criar a sua conta de administrador."
|
||||
},
|
||||
"setup.title": {
|
||||
"defaultMessage": "Bem-vindo!"
|
||||
},
|
||||
"sign-in": {
|
||||
"defaultMessage": "Iniciar Sessão"
|
||||
},
|
||||
"ssl-certificate": {
|
||||
"defaultMessage": "Certificado SSL"
|
||||
},
|
||||
"stream": {
|
||||
"defaultMessage": "Stream"
|
||||
},
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Host de Destino"
|
||||
},
|
||||
"stream.forward-host.placeholder": {
|
||||
"defaultMessage": "example.com ou 10.0.0.1 ou 2001:db8:3333:4444:5555:6666:7777:8888"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Porta de Entrada"
|
||||
},
|
||||
"streams": {
|
||||
"defaultMessage": "Streams"
|
||||
},
|
||||
"streams.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}"
|
||||
},
|
||||
"streams.tcp": {
|
||||
"defaultMessage": "TCP"
|
||||
},
|
||||
"streams.udp": {
|
||||
"defaultMessage": "UDP"
|
||||
},
|
||||
"test": {
|
||||
"defaultMessage": "Testar"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Atualização Disponível: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "Utilizador"
|
||||
},
|
||||
"user.change-password": {
|
||||
"defaultMessage": "Alterar Palavra-passe"
|
||||
},
|
||||
"user.confirm-password": {
|
||||
"defaultMessage": "Confirmar Palavra-passe"
|
||||
},
|
||||
"user.current-password": {
|
||||
"defaultMessage": "Palavra-passe Atual"
|
||||
},
|
||||
"user.edit-profile": {
|
||||
"defaultMessage": "Editar Perfil"
|
||||
},
|
||||
"user.full-name": {
|
||||
"defaultMessage": "Nome Completo"
|
||||
},
|
||||
"user.login-as": {
|
||||
"defaultMessage": "Iniciar sessão como {name}"
|
||||
},
|
||||
"user.logout": {
|
||||
"defaultMessage": "Terminar Sessão"
|
||||
},
|
||||
"user.new-password": {
|
||||
"defaultMessage": "Nova Palavra-passe"
|
||||
},
|
||||
"user.nickname": {
|
||||
"defaultMessage": "Alcunha"
|
||||
},
|
||||
"user.set-password": {
|
||||
"defaultMessage": "Definir Palavra-passe"
|
||||
},
|
||||
"user.set-permissions": {
|
||||
"defaultMessage": "Definir Permissões para {name}"
|
||||
},
|
||||
"user.switch-dark": {
|
||||
"defaultMessage": "Ativar Modo Escuro"
|
||||
},
|
||||
"user.switch-light": {
|
||||
"defaultMessage": "Ativar Modo Claro"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Nome de Utilizador"
|
||||
},
|
||||
"users": {
|
||||
"defaultMessage": "Utilizadores"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,61 @@
|
||||
{
|
||||
"2fa.backup-codes-remaining": {
|
||||
"defaultMessage": "Počet zostávajúcich záložných kódov: {count}"
|
||||
},
|
||||
"2fa.backup-warning": {
|
||||
"defaultMessage": "Tieto záložné kódy si uložte na bezpečnom mieste. Každý kód je možné použiť len raz."
|
||||
},
|
||||
"2fa.disable": {
|
||||
"defaultMessage": "Vypnúť dvojfaktorové overovanie"
|
||||
},
|
||||
"2fa.disable-confirm": {
|
||||
"defaultMessage": "Vypnúť 2FA"
|
||||
},
|
||||
"2fa.disable-warning": {
|
||||
"defaultMessage": "Vypnutím dvojfaktorového overovania sa zníži bezpečnosť vášho účtu."
|
||||
},
|
||||
"2fa.disabled": {
|
||||
"defaultMessage": "Vypnuté"
|
||||
},
|
||||
"2fa.done": {
|
||||
"defaultMessage": "Uložil som si svoje záložné kódy."
|
||||
},
|
||||
"2fa.enable": {
|
||||
"defaultMessage": "Zapnúť dvojfaktorové overovanie"
|
||||
},
|
||||
"2fa.enabled": {
|
||||
"defaultMessage": "Zapnuté"
|
||||
},
|
||||
"2fa.enter-code": {
|
||||
"defaultMessage": "Zadajte overovací kód"
|
||||
},
|
||||
"2fa.enter-code-disable": {
|
||||
"defaultMessage": "Zadajte overovací kód na vypnutie"
|
||||
},
|
||||
"2fa.regenerate": {
|
||||
"defaultMessage": "Znova vytvoriť"
|
||||
},
|
||||
"2fa.regenerate-backup": {
|
||||
"defaultMessage": "Znova vytvoriť záložné kódy"
|
||||
},
|
||||
"2fa.regenerate-instructions": {
|
||||
"defaultMessage": "Zadajte overovací kód, aby sa vytvorili nové záložné kódy. Vaše staré kódy budú neplatné."
|
||||
},
|
||||
"2fa.secret-key": {
|
||||
"defaultMessage": "Tajný kľúč"
|
||||
},
|
||||
"2fa.setup-instructions": {
|
||||
"defaultMessage": "Naskenujte tento QR kód pomocou svojej overovacej aplikácie alebo zadajte tajný kľúč ručne."
|
||||
},
|
||||
"2fa.status": {
|
||||
"defaultMessage": "Stav"
|
||||
},
|
||||
"2fa.title": {
|
||||
"defaultMessage": "Dvojfaktorové overenie"
|
||||
},
|
||||
"2fa.verify-enable": {
|
||||
"defaultMessage": "Overiť a zapnúť"
|
||||
},
|
||||
"access-list": {
|
||||
"defaultMessage": "zoznam prístupov"
|
||||
},
|
||||
@@ -23,6 +80,9 @@
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Nie je potrebné základné overenie"
|
||||
},
|
||||
"access-list.rule-source.placeholder": {
|
||||
"defaultMessage": "192.168.1.100 alebo 192.168.1.0/24 alebo 2001:0db8::/32"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Splniť ktorékoľvek"
|
||||
},
|
||||
@@ -38,12 +98,18 @@
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Pridať umiestnenie"
|
||||
},
|
||||
"action.allow": {
|
||||
"defaultMessage": "Povoliť"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Zavrieť"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Vymazať"
|
||||
},
|
||||
"action.deny": {
|
||||
"defaultMessage": "Zamietnuť"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Deaktivovať"
|
||||
},
|
||||
@@ -68,11 +134,14 @@
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Záznamy auditu"
|
||||
},
|
||||
"auto": {
|
||||
"defaultMessage": "Automaticky"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Zrušiť"
|
||||
},
|
||||
"certificate": {
|
||||
"defaultMessage": "Certifikát"
|
||||
"defaultMessage": "certifikát"
|
||||
},
|
||||
"certificate.custom-certificate": {
|
||||
"defaultMessage": "Certifikát"
|
||||
@@ -128,6 +197,9 @@
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "DNS poskytovateľ"
|
||||
},
|
||||
"certificates.dns.provider.placeholder": {
|
||||
"defaultMessage": "Vyberte poskytovateľa..."
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Táto sekcia vyžaduje znalosť Certbotu a jeho DNS doplnkov. Prosím, pozrite si dokumentáciu príslušného doplnku."
|
||||
},
|
||||
@@ -249,7 +321,7 @@
|
||||
"defaultMessage": "Panel"
|
||||
},
|
||||
"dead-host": {
|
||||
"defaultMessage": "404 Hostiteľ"
|
||||
"defaultMessage": "404 hostiteľa"
|
||||
},
|
||||
"dead-hosts": {
|
||||
"defaultMessage": "404 Hostitelia"
|
||||
@@ -383,6 +455,21 @@
|
||||
"loading": {
|
||||
"defaultMessage": "Načítava sa…"
|
||||
},
|
||||
"login.2fa-code": {
|
||||
"defaultMessage": "Overovací kód"
|
||||
},
|
||||
"login.2fa-code-placeholder": {
|
||||
"defaultMessage": "Vložiť kód"
|
||||
},
|
||||
"login.2fa-description": {
|
||||
"defaultMessage": "Vložte kód z vašej overovacej aplikácie"
|
||||
},
|
||||
"login.2fa-title": {
|
||||
"defaultMessage": "Dvoj-faktorové overenie"
|
||||
},
|
||||
"login.2fa-verify": {
|
||||
"defaultMessage": "Overiť"
|
||||
},
|
||||
"login.title": {
|
||||
"defaultMessage": "Prihláste sa do svojho účtu"
|
||||
},
|
||||
@@ -420,7 +507,7 @@
|
||||
"defaultMessage": "{object} bol obnovený"
|
||||
},
|
||||
"notification.object-saved": {
|
||||
"defaultMessage": "{object} bol uložené"
|
||||
"defaultMessage": "{object} bol uložený"
|
||||
},
|
||||
"notification.success": {
|
||||
"defaultMessage": "Úspech"
|
||||
@@ -441,7 +528,7 @@
|
||||
"defaultMessage": "Upraviť {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "Nie sú žiadne/y {objects}"
|
||||
"defaultMessage": "Nie sú {objects}"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "Vytvorený {object}"
|
||||
@@ -501,7 +588,7 @@
|
||||
"defaultMessage": "Len vytvorené položky"
|
||||
},
|
||||
"proxy-host": {
|
||||
"defaultMessage": "Proxy hostiteľa"
|
||||
"defaultMessage": "proxy hostiteľa"
|
||||
},
|
||||
"proxy-host.forward-host": {
|
||||
"defaultMessage": "Cieľový názov hostiteľa / IP"
|
||||
@@ -530,6 +617,24 @@
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {presmerovací hostiteľ} few {presmerovací hostitelia} other {presmerovacích hostiteľov}}"
|
||||
},
|
||||
"redirection-hosts.http-code.300": {
|
||||
"defaultMessage": "300 Viacero možností"
|
||||
},
|
||||
"redirection-hosts.http-code.301": {
|
||||
"defaultMessage": "301 Trvalo presunuté"
|
||||
},
|
||||
"redirection-hosts.http-code.302": {
|
||||
"defaultMessage": "302 Dočasne presunuté"
|
||||
},
|
||||
"redirection-hosts.http-code.303": {
|
||||
"defaultMessage": "303 Pozrieť iné"
|
||||
},
|
||||
"redirection-hosts.http-code.307": {
|
||||
"defaultMessage": "307 Dočasné presmerovanie"
|
||||
},
|
||||
"redirection-hosts.http-code.308": {
|
||||
"defaultMessage": "308 Trvalé presmerovanie"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Administrátor"
|
||||
},
|
||||
@@ -582,11 +687,14 @@
|
||||
"defaultMessage": "SSL certifikát"
|
||||
},
|
||||
"stream": {
|
||||
"defaultMessage": "Stream"
|
||||
"defaultMessage": "stream"
|
||||
},
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Cieľový hostiteľ"
|
||||
},
|
||||
"stream.forward-host.placeholder": {
|
||||
"defaultMessage": "napriklad.sk alebo 10.0.0.1 alebo 2001:db8:3333:4444:5555:6666:7777:8888"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Vstupný port"
|
||||
},
|
||||
@@ -605,6 +713,9 @@
|
||||
"test": {
|
||||
"defaultMessage": "Test"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Dostupná aktualizácia: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "používateľa"
|
||||
},
|
||||
@@ -647,6 +758,9 @@
|
||||
"user.switch-light": {
|
||||
"defaultMessage": "Prepnúť na svetlý režim"
|
||||
},
|
||||
"user.two-factor": {
|
||||
"defaultMessage": "Dvojfakt. overenie"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Používateľské meno"
|
||||
},
|
||||
|
||||
@@ -275,6 +275,9 @@
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "此 CA 不支持通配符"
|
||||
},
|
||||
"domains.advanced": {
|
||||
"defaultMessage": "高级选项"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "强制 SSL"
|
||||
},
|
||||
@@ -287,6 +290,9 @@
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "HTTP/2 支持"
|
||||
},
|
||||
"domains.trust-forwarded-proto": {
|
||||
"defaultMessage": "信任上游代理传递的协议类型头"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "使用DNS验证"
|
||||
},
|
||||
|
||||
@@ -88,6 +88,7 @@ const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
http2Support: data?.http2Support || false,
|
||||
hstsEnabled: data?.hstsEnabled || false,
|
||||
hstsSubdomains: data?.hstsSubdomains || false,
|
||||
trustForwardedProto: data?.trustForwardedProto || false,
|
||||
// Advanced tab
|
||||
advancedConfig: data?.advancedConfig || "",
|
||||
meta: data?.meta || {},
|
||||
@@ -339,7 +340,7 @@ const ProxyHostModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
label="ssl-certificate"
|
||||
allowNew
|
||||
/>
|
||||
<SSLOptionsFields color="bg-lime" />
|
||||
<SSLOptionsFields color="bg-lime" forProxyHost={true} />
|
||||
</div>
|
||||
<div className="tab-pane" id="tab-advanced" role="tabpanel">
|
||||
<NginxConfigField />
|
||||
|
||||
@@ -41,7 +41,7 @@ const RenewCertificateModal = EasyModal.create(({ id, visible, remove }: Props)
|
||||
.finally(() => {
|
||||
setIsSubmitting(false);
|
||||
});
|
||||
}, [id, data, isFresh, isSubmitting, remove, queryClient.invalidateQueries]);
|
||||
}, [id, data, isFresh, isSubmitting, remove, queryClient]);
|
||||
|
||||
return (
|
||||
<Modal show={visible} onHide={isSubmitting ? undefined : remove}>
|
||||
|
||||
@@ -16,25 +16,34 @@
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
"@babel/compat-data@^7.27.2":
|
||||
version "7.28.0"
|
||||
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz"
|
||||
integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==
|
||||
|
||||
"@babel/core@^7.28.5":
|
||||
version "7.28.5"
|
||||
resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz"
|
||||
integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
|
||||
"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c"
|
||||
integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.27.1"
|
||||
"@babel/generator" "^7.28.5"
|
||||
"@babel/helper-compilation-targets" "^7.27.2"
|
||||
"@babel/helper-module-transforms" "^7.28.3"
|
||||
"@babel/helpers" "^7.28.4"
|
||||
"@babel/parser" "^7.28.5"
|
||||
"@babel/template" "^7.27.2"
|
||||
"@babel/traverse" "^7.28.5"
|
||||
"@babel/types" "^7.28.5"
|
||||
"@babel/helper-validator-identifier" "^7.28.5"
|
||||
js-tokens "^4.0.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
"@babel/compat-data@^7.28.6":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d"
|
||||
integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==
|
||||
|
||||
"@babel/core@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322"
|
||||
integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.29.0"
|
||||
"@babel/generator" "^7.29.0"
|
||||
"@babel/helper-compilation-targets" "^7.28.6"
|
||||
"@babel/helper-module-transforms" "^7.28.6"
|
||||
"@babel/helpers" "^7.28.6"
|
||||
"@babel/parser" "^7.29.0"
|
||||
"@babel/template" "^7.28.6"
|
||||
"@babel/traverse" "^7.29.0"
|
||||
"@babel/types" "^7.29.0"
|
||||
"@jridgewell/remapping" "^2.3.5"
|
||||
convert-source-map "^2.0.0"
|
||||
debug "^4.1.0"
|
||||
@@ -53,12 +62,23 @@
|
||||
"@jridgewell/trace-mapping" "^0.3.28"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.27.2":
|
||||
version "7.27.2"
|
||||
resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz"
|
||||
integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
|
||||
"@babel/generator@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.0.tgz#4cba5a76b3c71d8be31761b03329d5dc7768447f"
|
||||
integrity sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.27.2"
|
||||
"@babel/parser" "^7.29.0"
|
||||
"@babel/types" "^7.29.0"
|
||||
"@jridgewell/gen-mapping" "^0.3.12"
|
||||
"@jridgewell/trace-mapping" "^0.3.28"
|
||||
jsesc "^3.0.2"
|
||||
|
||||
"@babel/helper-compilation-targets@^7.28.6":
|
||||
version "7.28.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25"
|
||||
integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.28.6"
|
||||
"@babel/helper-validator-option" "^7.27.1"
|
||||
browserslist "^4.24.0"
|
||||
lru-cache "^5.1.1"
|
||||
@@ -69,7 +89,7 @@
|
||||
resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz"
|
||||
integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
|
||||
|
||||
"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.27.1":
|
||||
"@babel/helper-module-imports@^7.16.7":
|
||||
version "7.27.1"
|
||||
resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz"
|
||||
integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
|
||||
@@ -77,14 +97,22 @@
|
||||
"@babel/traverse" "^7.27.1"
|
||||
"@babel/types" "^7.27.1"
|
||||
|
||||
"@babel/helper-module-transforms@^7.28.3":
|
||||
version "7.28.3"
|
||||
resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz"
|
||||
integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
|
||||
"@babel/helper-module-imports@^7.28.6":
|
||||
version "7.28.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c"
|
||||
integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.27.1"
|
||||
"@babel/helper-validator-identifier" "^7.27.1"
|
||||
"@babel/traverse" "^7.28.3"
|
||||
"@babel/traverse" "^7.28.6"
|
||||
"@babel/types" "^7.28.6"
|
||||
|
||||
"@babel/helper-module-transforms@^7.28.6":
|
||||
version "7.28.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e"
|
||||
integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.28.6"
|
||||
"@babel/helper-validator-identifier" "^7.28.5"
|
||||
"@babel/traverse" "^7.28.6"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.27.1":
|
||||
version "7.27.1"
|
||||
@@ -106,13 +134,13 @@
|
||||
resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz"
|
||||
integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
|
||||
|
||||
"@babel/helpers@^7.28.4":
|
||||
version "7.28.4"
|
||||
resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz"
|
||||
integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
|
||||
"@babel/helpers@^7.28.6":
|
||||
version "7.28.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7"
|
||||
integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==
|
||||
dependencies:
|
||||
"@babel/template" "^7.27.2"
|
||||
"@babel/types" "^7.28.4"
|
||||
"@babel/template" "^7.28.6"
|
||||
"@babel/types" "^7.28.6"
|
||||
|
||||
"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
|
||||
version "7.28.5"
|
||||
@@ -121,6 +149,13 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.28.5"
|
||||
|
||||
"@babel/parser@^7.28.6", "@babel/parser@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6"
|
||||
integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==
|
||||
dependencies:
|
||||
"@babel/types" "^7.29.0"
|
||||
|
||||
"@babel/plugin-transform-react-jsx-self@^7.27.1":
|
||||
version "7.27.1"
|
||||
resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz"
|
||||
@@ -149,7 +184,16 @@
|
||||
"@babel/parser" "^7.27.2"
|
||||
"@babel/types" "^7.27.1"
|
||||
|
||||
"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5":
|
||||
"@babel/template@^7.28.6":
|
||||
version "7.28.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57"
|
||||
integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.28.6"
|
||||
"@babel/parser" "^7.28.6"
|
||||
"@babel/types" "^7.28.6"
|
||||
|
||||
"@babel/traverse@^7.27.1":
|
||||
version "7.28.5"
|
||||
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz"
|
||||
integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==
|
||||
@@ -162,7 +206,20 @@
|
||||
"@babel/types" "^7.28.5"
|
||||
debug "^4.3.1"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5":
|
||||
"@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a"
|
||||
integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.29.0"
|
||||
"@babel/generator" "^7.29.0"
|
||||
"@babel/helper-globals" "^7.28.0"
|
||||
"@babel/parser" "^7.29.0"
|
||||
"@babel/template" "^7.28.6"
|
||||
"@babel/types" "^7.29.0"
|
||||
debug "^4.3.1"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.5":
|
||||
version "7.28.5"
|
||||
resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz"
|
||||
integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
|
||||
@@ -170,59 +227,67 @@
|
||||
"@babel/helper-string-parser" "^7.27.1"
|
||||
"@babel/helper-validator-identifier" "^7.28.5"
|
||||
|
||||
"@biomejs/biome@^2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.2.tgz"
|
||||
integrity sha512-8e9tzamuDycx7fdrcJ/F/GDZ8SYukc5ud6tDicjjFqURKYFSWMl0H0iXNXZEGmcmNUmABgGuHThPykcM41INgg==
|
||||
"@babel/types@^7.28.6", "@babel/types@^7.29.0":
|
||||
version "7.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7"
|
||||
integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.27.1"
|
||||
"@babel/helper-validator-identifier" "^7.28.5"
|
||||
|
||||
"@biomejs/biome@^2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.4.2.tgz#91fea27398106f87fa81118577756d9e29fe8c74"
|
||||
integrity sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==
|
||||
optionalDependencies:
|
||||
"@biomejs/cli-darwin-arm64" "2.3.2"
|
||||
"@biomejs/cli-darwin-x64" "2.3.2"
|
||||
"@biomejs/cli-linux-arm64" "2.3.2"
|
||||
"@biomejs/cli-linux-arm64-musl" "2.3.2"
|
||||
"@biomejs/cli-linux-x64" "2.3.2"
|
||||
"@biomejs/cli-linux-x64-musl" "2.3.2"
|
||||
"@biomejs/cli-win32-arm64" "2.3.2"
|
||||
"@biomejs/cli-win32-x64" "2.3.2"
|
||||
"@biomejs/cli-darwin-arm64" "2.4.2"
|
||||
"@biomejs/cli-darwin-x64" "2.4.2"
|
||||
"@biomejs/cli-linux-arm64" "2.4.2"
|
||||
"@biomejs/cli-linux-arm64-musl" "2.4.2"
|
||||
"@biomejs/cli-linux-x64" "2.4.2"
|
||||
"@biomejs/cli-linux-x64-musl" "2.4.2"
|
||||
"@biomejs/cli-win32-arm64" "2.4.2"
|
||||
"@biomejs/cli-win32-x64" "2.4.2"
|
||||
|
||||
"@biomejs/cli-darwin-arm64@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.2.tgz"
|
||||
integrity sha512-4LECm4kc3If0JISai4c3KWQzukoUdpxy4fRzlrPcrdMSRFksR9ZoXK7JBcPuLBmd2SoT4/d7CQS33VnZpgBjew==
|
||||
"@biomejs/cli-darwin-arm64@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.2.tgz#a748ec0a0d8f4ea559b4a3834e8981500caaa5fa"
|
||||
integrity sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==
|
||||
|
||||
"@biomejs/cli-darwin-x64@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.2.tgz#9c3dffdac12e4f4d8db7680ca20f58ace1f38c23"
|
||||
integrity sha512-jNMnfwHT4N3wi+ypRfMTjLGnDmKYGzxVr1EYAPBcauRcDnICFXN81wD6wxJcSUrLynoyyYCdfW6vJHS/IAoTDA==
|
||||
"@biomejs/cli-darwin-x64@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.2.tgz#b825d247a7e582c00c9782524284bea2033a272c"
|
||||
integrity sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==
|
||||
|
||||
"@biomejs/cli-linux-arm64-musl@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.2.tgz#a0424d2fe355cc43c375b3fbf3e42d39b7221d0e"
|
||||
integrity sha512-2Zz4usDG1GTTPQnliIeNx6eVGGP2ry5vE/v39nT73a3cKN6t5H5XxjcEoZZh62uVZvED7hXXikclvI64vZkYqw==
|
||||
"@biomejs/cli-linux-arm64-musl@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.2.tgz#9a2d15f525928f06d21fbc0eaea2e332be3ed5d9"
|
||||
integrity sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==
|
||||
|
||||
"@biomejs/cli-linux-arm64@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.2.tgz#f85717c04d420ede20523d173a1fc10df60d4d37"
|
||||
integrity sha512-amnqvk+gWybbQleRRq8TMe0rIv7GHss8mFJEaGuEZYWg1Tw14YKOkeo8h6pf1c+d3qR+JU4iT9KXnBKGON4klw==
|
||||
"@biomejs/cli-linux-arm64@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.2.tgz#0f7928a3253cdb10ebf5884db452d81d7a49ba30"
|
||||
integrity sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==
|
||||
|
||||
"@biomejs/cli-linux-x64-musl@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.2.tgz#d3e114c744c32d2c50a77c13476bd941819c92d8"
|
||||
integrity sha512-gzB19MpRdTuOuLtPpFBGrV3Lq424gHyq2lFj8wfX9tvLMLdmA/R9C7k/mqBp/spcbWuHeIEKgEs3RviOPcWGBA==
|
||||
"@biomejs/cli-linux-x64-musl@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.2.tgz#07c971451e62f6e147ec58b7acae345792d331b1"
|
||||
integrity sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==
|
||||
|
||||
"@biomejs/cli-linux-x64@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.2.tgz#f66ce85d2d757d45e6edecce04753a805bd816f0"
|
||||
integrity sha512-8BG/vRAhFz1pmuyd24FQPhNeueLqPtwvZk6yblABY2gzL2H8fLQAF/Z2OPIc+BPIVPld+8cSiKY/KFh6k81xfA==
|
||||
"@biomejs/cli-linux-x64@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.2.tgz#0c7755fe8b5b2745d6afa8e14806591aefef52e3"
|
||||
integrity sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==
|
||||
|
||||
"@biomejs/cli-win32-arm64@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.2.tgz#b46f8b47a3d97e766cc5ad5eb67d90eeb230b2cb"
|
||||
integrity sha512-lCruqQlfWjhMlOdyf5pDHOxoNm4WoyY2vZ4YN33/nuZBRstVDuqPPjS0yBkbUlLEte11FbpW+wWSlfnZfSIZvg==
|
||||
"@biomejs/cli-win32-arm64@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.2.tgz#a25007d0eb8ac4bbf81fb0fd010a68ce38fd46d1"
|
||||
integrity sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==
|
||||
|
||||
"@biomejs/cli-win32-x64@2.3.2":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.2.tgz#a14f5e220dd496705278315ee3e5e028dd657344"
|
||||
integrity sha512-6Ee9P26DTb4D8sN9nXxgbi9Dw5vSOfH98M7UlmkjKB2vtUbrRqCbZiNfryGiwnPIpd6YUoTl7rLVD2/x1CyEHQ==
|
||||
"@biomejs/cli-win32-x64@2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.2.tgz#7693a47973bd1c910a7ce3d7eb8133292f779646"
|
||||
integrity sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==
|
||||
|
||||
"@emotion/babel-plugin@^11.13.5":
|
||||
version "11.13.5"
|
||||
@@ -462,62 +527,63 @@
|
||||
resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz"
|
||||
integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==
|
||||
|
||||
"@formatjs/cli@^6.12.0":
|
||||
version "6.12.0"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/cli/-/cli-6.12.0.tgz#8bfb1a500faf53fb220b46bc5c559e0f7acf4a27"
|
||||
integrity sha512-mF3U8XxwEWR+ttlG5e4onYO+M5T22jnnQq7Ce/WK10CTVYR8Us433hbML6vgBLkiTS/MuCq61L0op3yNRSp2Kg==
|
||||
"@formatjs/cli@^6.12.2":
|
||||
version "6.12.2"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/cli/-/cli-6.12.2.tgz#0ca91899249f41860deb2b2921e6ad0a4db55de9"
|
||||
integrity sha512-y215aarLZXei3u1WDRAiet/VajgvUXzvz4ifPENDSPXfIog0aBJKtFvIU7EWbcFWy7rstbn5GcwwQW4F1G3TJg==
|
||||
|
||||
"@formatjs/ecma402-abstract@2.3.6":
|
||||
version "2.3.6"
|
||||
resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz"
|
||||
integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==
|
||||
"@formatjs/ecma402-abstract@3.1.1":
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-3.1.1.tgz#329fa5eed8024ee389e9c82be8c798315631b11d"
|
||||
integrity sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==
|
||||
dependencies:
|
||||
"@formatjs/fast-memoize" "2.2.7"
|
||||
"@formatjs/intl-localematcher" "0.6.2"
|
||||
decimal.js "^10.4.3"
|
||||
tslib "^2.8.0"
|
||||
"@formatjs/fast-memoize" "3.1.0"
|
||||
"@formatjs/intl-localematcher" "0.8.1"
|
||||
decimal.js "^10.6.0"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@formatjs/fast-memoize@2.2.7":
|
||||
version "2.2.7"
|
||||
resolved "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz"
|
||||
integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==
|
||||
"@formatjs/fast-memoize@3.1.0":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-3.1.0.tgz#f8643d44803df8f579506d40804f4faeba6f5da2"
|
||||
integrity sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==
|
||||
dependencies:
|
||||
tslib "^2.8.0"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@formatjs/icu-messageformat-parser@2.11.4":
|
||||
version "2.11.4"
|
||||
resolved "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz"
|
||||
integrity sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==
|
||||
"@formatjs/icu-messageformat-parser@3.5.1":
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.1.tgz#a08faadbbb333d9e4fa7276c92a2b66a37788aa1"
|
||||
integrity sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract" "2.3.6"
|
||||
"@formatjs/icu-skeleton-parser" "1.8.16"
|
||||
tslib "^2.8.0"
|
||||
"@formatjs/ecma402-abstract" "3.1.1"
|
||||
"@formatjs/icu-skeleton-parser" "2.1.1"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@formatjs/icu-skeleton-parser@1.8.16":
|
||||
version "1.8.16"
|
||||
resolved "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz"
|
||||
integrity sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==
|
||||
"@formatjs/icu-skeleton-parser@2.1.1":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.1.tgz#a05b45733bd0f277c50f31b32e4a73375569d3c8"
|
||||
integrity sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract" "2.3.6"
|
||||
tslib "^2.8.0"
|
||||
"@formatjs/ecma402-abstract" "3.1.1"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@formatjs/intl-localematcher@0.6.2":
|
||||
version "0.6.2"
|
||||
resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz"
|
||||
integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==
|
||||
"@formatjs/intl-localematcher@0.8.1":
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.8.1.tgz#554fe5f8c746ba52d430674de9a242fae64f67ff"
|
||||
integrity sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==
|
||||
dependencies:
|
||||
tslib "^2.8.0"
|
||||
"@formatjs/fast-memoize" "3.1.0"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@formatjs/intl@3.1.8":
|
||||
version "3.1.8"
|
||||
resolved "https://registry.npmjs.org/@formatjs/intl/-/intl-3.1.8.tgz"
|
||||
integrity sha512-LWXgwI5zTMatvR8w8kCNh/priDTOF/ZssokMBHJ7ZWXFoYLVOYo0EJERD9Eajv+xsfQO1QkuAt77KWQ1OI4mOQ==
|
||||
"@formatjs/intl@4.1.2":
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-4.1.2.tgz#4a0d487e6290067462f93d034ef36a8aaf6f671b"
|
||||
integrity sha512-V60fNY/X/7zqmRffr7qPwscGmVGYDmlKF069mSQ2a/7fE22q602NtIfOQY8vzRA63Gr/O/U6vjRVBHMabrnA9A==
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract" "2.3.6"
|
||||
"@formatjs/fast-memoize" "2.2.7"
|
||||
"@formatjs/icu-messageformat-parser" "2.11.4"
|
||||
intl-messageformat "10.7.18"
|
||||
tslib "^2.8.0"
|
||||
"@formatjs/ecma402-abstract" "3.1.1"
|
||||
"@formatjs/fast-memoize" "3.1.0"
|
||||
"@formatjs/icu-messageformat-parser" "3.5.1"
|
||||
intl-messageformat "11.1.2"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
|
||||
version "0.3.13"
|
||||
@@ -683,10 +749,10 @@
|
||||
uncontrollable "^8.0.4"
|
||||
warning "^4.0.3"
|
||||
|
||||
"@rolldown/pluginutils@1.0.0-beta.53":
|
||||
version "1.0.0-beta.53"
|
||||
resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz"
|
||||
integrity sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==
|
||||
"@rolldown/pluginutils@1.0.0-rc.3":
|
||||
version "1.0.0-rc.3"
|
||||
resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz#8a88cc92a0f741befc7bc109cb1a4c6b9408e1c5"
|
||||
integrity sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.50.0":
|
||||
version "4.50.0"
|
||||
@@ -813,41 +879,41 @@
|
||||
"@popperjs/core" "^2.11.8"
|
||||
bootstrap "5.3.7"
|
||||
|
||||
"@tabler/icons-react@^3.35.0":
|
||||
version "3.35.0"
|
||||
resolved "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.35.0.tgz"
|
||||
integrity sha512-XG7t2DYf3DyHT5jxFNp5xyLVbL4hMJYJhiSdHADzAjLRYfL7AnjlRfiHDHeXxkb2N103rEIvTsBRazxXtAUz2g==
|
||||
"@tabler/icons-react@^3.36.1":
|
||||
version "3.36.1"
|
||||
resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-3.36.1.tgz#332d4407b5e2a9a783ce0a26567727aaedd5a9a8"
|
||||
integrity sha512-/8nOXeNeMoze9xY/QyEKG65wuvRhkT3q9aytaur6Gj8bYU2A98YVJyLc9MRmc5nVvpy+bRlrrwK/Ykr8WGyUWg==
|
||||
dependencies:
|
||||
"@tabler/icons" "3.35.0"
|
||||
"@tabler/icons" ""
|
||||
|
||||
"@tabler/icons@3.35.0":
|
||||
version "3.35.0"
|
||||
resolved "https://registry.npmjs.org/@tabler/icons/-/icons-3.35.0.tgz"
|
||||
integrity sha512-yYXe+gJ56xlZFiXwV9zVoe3FWCGuZ/D7/G4ZIlDtGxSx5CGQK110wrnT29gUj52kEZoxqF7oURTk97GQxELOFQ==
|
||||
"@tabler/icons@":
|
||||
version "3.36.1"
|
||||
resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-3.36.1.tgz#a893104b3c56e02458b13342abb6e466d4a81a8d"
|
||||
integrity sha512-f4Jg3Fof/Vru5ioix/UO4GX+sdDsF9wQo47FbtvG+utIYYVQ/QVAC0QYgcBbAjQGfbdOh2CCf0BgiFOF9Ixtjw==
|
||||
|
||||
"@tanstack/query-core@5.90.6":
|
||||
version "5.90.6"
|
||||
resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.6.tgz"
|
||||
integrity sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==
|
||||
"@tanstack/query-core@5.90.20":
|
||||
version "5.90.20"
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.20.tgz#e12128e39210715d4ce4fb299c33498ac297771e"
|
||||
integrity sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==
|
||||
|
||||
"@tanstack/query-devtools@5.92.0":
|
||||
version "5.92.0"
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.92.0.tgz#8fc38b0112c6c136630f54e2f7e77f0c379e66c8"
|
||||
integrity sha512-N8D27KH1vEpVacvZgJL27xC6yPFUy0Zkezn5gnB3L3gRCxlDeSuiya7fKge8Y91uMTnC8aSxBQhcK6ocY7alpQ==
|
||||
"@tanstack/query-devtools@5.93.0":
|
||||
version "5.93.0"
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.93.0.tgz#517f61d4e2cfb9af671e34ad5e7e871052bca814"
|
||||
integrity sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==
|
||||
|
||||
"@tanstack/react-query-devtools@^5.91.2":
|
||||
version "5.91.2"
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.91.2.tgz#1cadfad644b699b618c0636471d19339bda51ac7"
|
||||
integrity sha512-ZJ1503ay5fFeEYFUdo7LMNFzZryi6B0Cacrgr2h1JRkvikK1khgIq6Nq2EcblqEdIlgB/r7XDW8f8DQ89RuUgg==
|
||||
"@tanstack/react-query-devtools@^5.91.3":
|
||||
version "5.91.3"
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.91.3.tgz#0f65340fa3f7e7d5575de928ad70cfa6b5f74ff1"
|
||||
integrity sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==
|
||||
dependencies:
|
||||
"@tanstack/query-devtools" "5.92.0"
|
||||
"@tanstack/query-devtools" "5.93.0"
|
||||
|
||||
"@tanstack/react-query@^5.90.6":
|
||||
version "5.90.6"
|
||||
resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.6.tgz"
|
||||
integrity sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==
|
||||
"@tanstack/react-query@^5.90.21":
|
||||
version "5.90.21"
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.90.21.tgz#e0eb40831a76510be438109435b8807ef63ab1b9"
|
||||
integrity sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==
|
||||
dependencies:
|
||||
"@tanstack/query-core" "5.90.6"
|
||||
"@tanstack/query-core" "5.90.20"
|
||||
|
||||
"@tanstack/react-table@^8.21.3":
|
||||
version "8.21.3"
|
||||
@@ -887,10 +953,10 @@
|
||||
picocolors "^1.1.1"
|
||||
redent "^3.0.0"
|
||||
|
||||
"@testing-library/react@^16.3.0":
|
||||
version "16.3.0"
|
||||
resolved "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz"
|
||||
integrity sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==
|
||||
"@testing-library/react@^16.3.2":
|
||||
version "16.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.2.tgz#672883b7acb8e775fc0492d9e9d25e06e89786d0"
|
||||
integrity sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
|
||||
@@ -1045,10 +1111,10 @@
|
||||
resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz"
|
||||
integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==
|
||||
|
||||
"@types/react@*", "@types/react@16 || 17 || 18 || 19", "@types/react@>=16.9.11", "@types/react@^19.2.7":
|
||||
version "19.2.7"
|
||||
resolved "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz"
|
||||
integrity sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==
|
||||
"@types/react@*", "@types/react@>=16.9.11", "@types/react@^19.2.14":
|
||||
version "19.2.14"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.14.tgz#39604929b5e3957e3a6fa0001dafb17c7af70bad"
|
||||
integrity sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==
|
||||
dependencies:
|
||||
csstype "^3.2.2"
|
||||
|
||||
@@ -1093,74 +1159,74 @@
|
||||
resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
|
||||
integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
|
||||
|
||||
"@vitejs/plugin-react@^5.1.2":
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz"
|
||||
integrity sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==
|
||||
"@vitejs/plugin-react@^5.1.4":
|
||||
version "5.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz#5b477e060bf612a7394c4febacc5de33a219b0e4"
|
||||
integrity sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==
|
||||
dependencies:
|
||||
"@babel/core" "^7.28.5"
|
||||
"@babel/core" "^7.29.0"
|
||||
"@babel/plugin-transform-react-jsx-self" "^7.27.1"
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.27.1"
|
||||
"@rolldown/pluginutils" "1.0.0-beta.53"
|
||||
"@rolldown/pluginutils" "1.0.0-rc.3"
|
||||
"@types/babel__core" "^7.20.5"
|
||||
react-refresh "^0.18.0"
|
||||
|
||||
"@vitest/expect@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.6.tgz"
|
||||
integrity sha512-5j8UUlBVhOjhj4lR2Nt9sEV8b4WtbcYh8vnfhTNA2Kn5+smtevzjNq+xlBuVhnFGXiyPPNzGrOVvmyHWkS5QGg==
|
||||
"@vitest/expect@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.0.18.tgz#361510d99fbf20eb814222e4afcb8539d79dc94d"
|
||||
integrity sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==
|
||||
dependencies:
|
||||
"@standard-schema/spec" "^1.0.0"
|
||||
"@types/chai" "^5.2.2"
|
||||
"@vitest/spy" "4.0.6"
|
||||
"@vitest/utils" "4.0.6"
|
||||
chai "^6.0.1"
|
||||
"@vitest/spy" "4.0.18"
|
||||
"@vitest/utils" "4.0.18"
|
||||
chai "^6.2.1"
|
||||
tinyrainbow "^3.0.3"
|
||||
|
||||
"@vitest/mocker@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.6.tgz"
|
||||
integrity sha512-3COEIew5HqdzBFEYN9+u0dT3i/NCwppLnO1HkjGfAP1Vs3vti1Hxm/MvcbC4DAn3Szo1M7M3otiAaT83jvqIjA==
|
||||
"@vitest/mocker@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.0.18.tgz#b9735da114ef65ea95652c5bdf13159c6fab4865"
|
||||
integrity sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==
|
||||
dependencies:
|
||||
"@vitest/spy" "4.0.6"
|
||||
"@vitest/spy" "4.0.18"
|
||||
estree-walker "^3.0.3"
|
||||
magic-string "^0.30.19"
|
||||
magic-string "^0.30.21"
|
||||
|
||||
"@vitest/pretty-format@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.6.tgz"
|
||||
integrity sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==
|
||||
"@vitest/pretty-format@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.0.18.tgz#fbccd4d910774072ec15463553edb8ca5ce53218"
|
||||
integrity sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==
|
||||
dependencies:
|
||||
tinyrainbow "^3.0.3"
|
||||
|
||||
"@vitest/runner@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.6.tgz"
|
||||
integrity sha512-trPk5qpd7Jj+AiLZbV/e+KiiaGXZ8ECsRxtnPnCrJr9OW2mLB72Cb824IXgxVz/mVU3Aj4VebY+tDTPn++j1Og==
|
||||
"@vitest/runner@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.0.18.tgz#c2c0a3ed226ec85e9312f9cc8c43c5b3a893a8b1"
|
||||
integrity sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==
|
||||
dependencies:
|
||||
"@vitest/utils" "4.0.6"
|
||||
"@vitest/utils" "4.0.18"
|
||||
pathe "^2.0.3"
|
||||
|
||||
"@vitest/snapshot@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.6.tgz"
|
||||
integrity sha512-PaYLt7n2YzuvxhulDDu6c9EosiRuIE+FI2ECKs6yvHyhoga+2TBWI8dwBjs+IeuQaMtZTfioa9tj3uZb7nev1g==
|
||||
"@vitest/snapshot@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.0.18.tgz#bcb40fd6d742679c2ac927ba295b66af1c6c34c5"
|
||||
integrity sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==
|
||||
dependencies:
|
||||
"@vitest/pretty-format" "4.0.6"
|
||||
magic-string "^0.30.19"
|
||||
"@vitest/pretty-format" "4.0.18"
|
||||
magic-string "^0.30.21"
|
||||
pathe "^2.0.3"
|
||||
|
||||
"@vitest/spy@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.6.tgz"
|
||||
integrity sha512-g9jTUYPV1LtRPRCQfhbMintW7BTQz1n6WXYQYRQ25qkyffA4bjVXjkROokZnv7t07OqfaFKw1lPzqKGk1hmNuQ==
|
||||
"@vitest/spy@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.0.18.tgz#ba0f20503fb6d08baf3309d690b3efabdfa88762"
|
||||
integrity sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==
|
||||
|
||||
"@vitest/utils@4.0.6":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.6.tgz"
|
||||
integrity sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==
|
||||
"@vitest/utils@4.0.18":
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.0.18.tgz#9636b16d86a4152ec68a8d6859cff702896433d4"
|
||||
integrity sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==
|
||||
dependencies:
|
||||
"@vitest/pretty-format" "4.0.6"
|
||||
"@vitest/pretty-format" "4.0.18"
|
||||
tinyrainbow "^3.0.3"
|
||||
|
||||
ansi-regex@^5.0.1:
|
||||
@@ -1244,10 +1310,10 @@ ccount@^2.0.0:
|
||||
resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz"
|
||||
integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
|
||||
|
||||
chai@^6.0.1:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz"
|
||||
integrity sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==
|
||||
chai@^6.2.1:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e"
|
||||
integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==
|
||||
|
||||
character-entities-html4@^2.0.0:
|
||||
version "2.1.0"
|
||||
@@ -1317,10 +1383,10 @@ cosmiconfig@^7.0.0:
|
||||
path-type "^4.0.0"
|
||||
yaml "^1.10.0"
|
||||
|
||||
country-flag-icons@^1.5.21:
|
||||
version "1.5.21"
|
||||
resolved "https://registry.npmjs.org/country-flag-icons/-/country-flag-icons-1.5.21.tgz"
|
||||
integrity sha512-0KmU4oeiyAM+F+atzK99ghQDQJKxEY3tiDhnRraVFL4o65rZgrmrx7xKi0b+hxcVpcEpuUbu+KCC6TKTZQTDcA==
|
||||
country-flag-icons@^1.6.13:
|
||||
version "1.6.13"
|
||||
resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.6.13.tgz#744de466baf5d8189942ba08fc57167f74037282"
|
||||
integrity sha512-mR9GoTXtj3zAXoZXBkb3J4QvyDllFEPtEfZvHb9U23TAHYXfkJyP03pRtZiR0spxo6Ibja3R/hn6a68T4LHBuA==
|
||||
|
||||
css.escape@^1.5.1:
|
||||
version "1.5.1"
|
||||
@@ -1337,16 +1403,16 @@ date-fns@^4.1.0:
|
||||
resolved "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz"
|
||||
integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==
|
||||
|
||||
debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.4.3:
|
||||
debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
|
||||
version "4.4.3"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
|
||||
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
||||
dependencies:
|
||||
ms "^2.1.3"
|
||||
|
||||
decimal.js@^10.4.3:
|
||||
decimal.js@^10.6.0:
|
||||
version "10.6.0"
|
||||
resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a"
|
||||
integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==
|
||||
|
||||
decode-named-character-reference@^1.0.0:
|
||||
@@ -1406,12 +1472,7 @@ electron-to-chromium@^1.5.211:
|
||||
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.213.tgz"
|
||||
integrity sha512-xr9eRzSLNa4neDO0xVFrkXu3vyIzG4Ay08dApecw42Z1NbmCt+keEpXdvlYGVe0wtvY5dhW0Ay0lY0IOfsCg0Q==
|
||||
|
||||
entities@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
|
||||
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
|
||||
|
||||
entities@^6.0.0:
|
||||
entities@^6.0.0, entities@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz"
|
||||
integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==
|
||||
@@ -1524,10 +1585,10 @@ find-root@^1.1.0:
|
||||
resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz"
|
||||
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
|
||||
|
||||
formik@^2.4.6:
|
||||
version "2.4.6"
|
||||
resolved "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz"
|
||||
integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==
|
||||
formik@^2.4.9:
|
||||
version "2.4.9"
|
||||
resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.9.tgz#7e5b81e9c9e215d0ce2ac8fed808cf7fba0cd204"
|
||||
integrity sha512-5nI94BMnlFDdQRBY4Sz39WkhxajZJ57Fzs8wVbtsQlm5ScKIR1QLYqv/ultBnobObtlUyxpxoLodpixrsf36Og==
|
||||
dependencies:
|
||||
"@types/hoist-non-react-statics" "^3.3.1"
|
||||
deepmerge "^2.1.1"
|
||||
@@ -1566,15 +1627,15 @@ globrex@^0.1.2:
|
||||
resolved "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz"
|
||||
integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
|
||||
|
||||
happy-dom@^20.3.7:
|
||||
version "20.3.7"
|
||||
resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-20.3.7.tgz#0e210b88c12f71e786f3b21baccb5f62fc181120"
|
||||
integrity sha512-sb5IzoRl1WJKsUSRe+IloJf3z1iDq5PQ7Yk/ULMsZ5IAQEs9ZL7RsFfiKBXU7nK9QmO+iz0e59EH8r8jexTZ/g==
|
||||
happy-dom@^20.6.1:
|
||||
version "20.6.1"
|
||||
resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-20.6.1.tgz#af9cf1722871621334e0451b01548d551c91b515"
|
||||
integrity sha512-+0vhESXXhFwkdjZnJ5DlmJIfUYGgIEEjzIjB+aKJbFuqlvvKyOi+XkI1fYbgYR9QCxG5T08koxsQ6HrQfa5gCQ==
|
||||
dependencies:
|
||||
"@types/node" ">=20.0.0"
|
||||
"@types/whatwg-mimetype" "^3.0.2"
|
||||
"@types/ws" "^8.18.1"
|
||||
entities "^4.5.0"
|
||||
entities "^6.0.1"
|
||||
whatwg-mimetype "^3.0.0"
|
||||
ws "^8.18.3"
|
||||
|
||||
@@ -1749,15 +1810,15 @@ inline-style-parser@0.2.4:
|
||||
resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz"
|
||||
integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==
|
||||
|
||||
intl-messageformat@10.7.18:
|
||||
version "10.7.18"
|
||||
resolved "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz"
|
||||
integrity sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==
|
||||
intl-messageformat@11.1.2:
|
||||
version "11.1.2"
|
||||
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-11.1.2.tgz#c72879165d15633f38b092479822c5d831c21ac5"
|
||||
integrity sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg==
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract" "2.3.6"
|
||||
"@formatjs/fast-memoize" "2.2.7"
|
||||
"@formatjs/icu-messageformat-parser" "2.11.4"
|
||||
tslib "^2.8.0"
|
||||
"@formatjs/ecma402-abstract" "3.1.1"
|
||||
"@formatjs/fast-memoize" "3.1.0"
|
||||
"@formatjs/icu-messageformat-parser" "3.5.1"
|
||||
tslib "^2.8.1"
|
||||
|
||||
invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
@@ -1859,9 +1920,9 @@ lodash.debounce@^4.0.8:
|
||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||
|
||||
lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
version "4.17.23"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a"
|
||||
integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==
|
||||
|
||||
longest-streak@^3.0.0:
|
||||
version "3.1.0"
|
||||
@@ -1887,9 +1948,9 @@ lz-string@^1.5.0:
|
||||
resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz"
|
||||
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
|
||||
|
||||
magic-string@^0.30.19:
|
||||
magic-string@^0.30.21:
|
||||
version "0.30.21"
|
||||
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91"
|
||||
integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==
|
||||
dependencies:
|
||||
"@jridgewell/sourcemap-codec" "^1.5.5"
|
||||
@@ -2244,6 +2305,11 @@ object-assign@^4.1.1:
|
||||
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
|
||||
obug@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be"
|
||||
integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
|
||||
@@ -2418,10 +2484,10 @@ react-bootstrap@^2.10.10:
|
||||
uncontrollable "^7.2.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
react-dom@^19.2.3:
|
||||
version "19.2.3"
|
||||
resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz"
|
||||
integrity sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==
|
||||
react-dom@^19.2.4:
|
||||
version "19.2.4"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.4.tgz#6fac6bd96f7db477d966c7ec17c1a2b1ad8e6591"
|
||||
integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==
|
||||
dependencies:
|
||||
scheduler "^0.27.0"
|
||||
|
||||
@@ -2430,19 +2496,18 @@ react-fast-compare@^2.0.1:
|
||||
resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz"
|
||||
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
|
||||
|
||||
react-intl@^7.1.14:
|
||||
version "7.1.14"
|
||||
resolved "https://registry.npmjs.org/react-intl/-/react-intl-7.1.14.tgz"
|
||||
integrity sha512-VE/0Wi/lHJlBC7APQpCzLUdIt3GB5B0GZrRW8Q+ACbkHI4j+Wwgg9J1TniN6zmLHmPH5gxXcMy+fkSPfw5p1WQ==
|
||||
react-intl@^8.1.3:
|
||||
version "8.1.3"
|
||||
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-8.1.3.tgz#216e0a916c40a535c590995c3103fe9e2525d2e4"
|
||||
integrity sha512-eL1/d+uQdnapirynOGAriW0K9uAoyarjRGL3V9LaTRuohNSvPgCfJX06EZl5M52h/Hu7Gz7A1sD7dNHcos1lNg==
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract" "2.3.6"
|
||||
"@formatjs/icu-messageformat-parser" "2.11.4"
|
||||
"@formatjs/intl" "3.1.8"
|
||||
"@formatjs/ecma402-abstract" "3.1.1"
|
||||
"@formatjs/icu-messageformat-parser" "3.5.1"
|
||||
"@formatjs/intl" "4.1.2"
|
||||
"@types/hoist-non-react-statics" "^3.3.1"
|
||||
"@types/react" "16 || 17 || 18 || 19"
|
||||
hoist-non-react-statics "^3.3.2"
|
||||
intl-messageformat "10.7.18"
|
||||
tslib "^2.8.0"
|
||||
intl-messageformat "11.1.2"
|
||||
tslib "^2.8.1"
|
||||
|
||||
react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0:
|
||||
version "16.13.1"
|
||||
@@ -2481,17 +2546,17 @@ react-refresh@^0.18.0:
|
||||
resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz"
|
||||
integrity sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==
|
||||
|
||||
react-router-dom@^7.9.5:
|
||||
version "7.9.5"
|
||||
resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.5.tgz"
|
||||
integrity sha512-mkEmq/K8tKN63Ae2M7Xgz3c9l9YNbY+NHH6NNeUmLA3kDkhKXRsNb/ZpxaEunvGo2/3YXdk5EJU3Hxp3ocaBPw==
|
||||
react-router-dom@^7.13.0:
|
||||
version "7.13.0"
|
||||
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.13.0.tgz#8b5f7204fadca680f0e94f207c163f0dcd1cfdf5"
|
||||
integrity sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==
|
||||
dependencies:
|
||||
react-router "7.9.5"
|
||||
react-router "7.13.0"
|
||||
|
||||
react-router@7.9.5:
|
||||
version "7.9.5"
|
||||
resolved "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz"
|
||||
integrity sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==
|
||||
react-router@7.13.0:
|
||||
version "7.13.0"
|
||||
resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.13.0.tgz#de9484aee764f4f65b93275836ff5944d7f5bd3b"
|
||||
integrity sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==
|
||||
dependencies:
|
||||
cookie "^1.0.1"
|
||||
set-cookie-parser "^2.6.0"
|
||||
@@ -2528,10 +2593,10 @@ react-transition-group@^4.3.0, react-transition-group@^4.4.5:
|
||||
loose-envify "^1.4.0"
|
||||
prop-types "^15.6.2"
|
||||
|
||||
react@^19.2.3:
|
||||
version "19.2.3"
|
||||
resolved "https://registry.npmjs.org/react/-/react-19.2.3.tgz"
|
||||
integrity sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==
|
||||
react@^19.2.4:
|
||||
version "19.2.4"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-19.2.4.tgz#438e57baa19b77cb23aab516cf635cd0579ee09a"
|
||||
integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==
|
||||
|
||||
readdirp@^4.0.1:
|
||||
version "4.1.2"
|
||||
@@ -2661,10 +2726,10 @@ rollup@^4.43.0:
|
||||
"@rollup/rollup-win32-x64-msvc" "4.50.0"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
rooks@^9.3.0:
|
||||
version "9.3.0"
|
||||
resolved "https://registry.npmjs.org/rooks/-/rooks-9.3.0.tgz"
|
||||
integrity sha512-ez9ReItW+a/GXsA92Lfh5KWTjhbzlp354KOlC5oh9RHVD5fs/GaWwBq72F2xkDXVblgCgFs0Nel1hxojtszhgw==
|
||||
rooks@^9.5.0:
|
||||
version "9.5.0"
|
||||
resolved "https://registry.yarnpkg.com/rooks/-/rooks-9.5.0.tgz#bbe15fdf64fff44b9a1750cc913de3401572f012"
|
||||
integrity sha512-AtmaX8yjQkJAW7EXW+UU481bpGwuk455hjD/aEUuy7N7VjvXlNmO8BErQ+jEUQp1DRA/PTWonv+Dq1nEkJdgkw==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.3"
|
||||
lodash.debounce "^4.0.8"
|
||||
@@ -2732,10 +2797,10 @@ stackback@0.0.2:
|
||||
resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz"
|
||||
integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
|
||||
|
||||
std-env@^3.9.0:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz"
|
||||
integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==
|
||||
std-env@^3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b"
|
||||
integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==
|
||||
|
||||
stringify-entities@^4.0.0:
|
||||
version "4.0.4"
|
||||
@@ -2791,10 +2856,10 @@ tinybench@^2.9.0:
|
||||
resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz"
|
||||
integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==
|
||||
|
||||
tinyexec@^0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz"
|
||||
integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==
|
||||
tinyexec@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251"
|
||||
integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==
|
||||
|
||||
tinyglobby@^0.2.15:
|
||||
version "0.2.15"
|
||||
@@ -2836,7 +2901,7 @@ tsconfck@^3.0.3:
|
||||
resolved "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz"
|
||||
integrity sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==
|
||||
|
||||
tslib@^2.0.0, tslib@^2.8.0:
|
||||
tslib@^2.0.0, tslib@^2.8.0, tslib@^2.8.1:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
|
||||
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
|
||||
@@ -2987,10 +3052,10 @@ vite-plugin-checker@^0.12.0:
|
||||
tinyglobby "^0.2.15"
|
||||
vscode-uri "^3.1.0"
|
||||
|
||||
vite-tsconfig-paths@^5.1.4:
|
||||
version "5.1.4"
|
||||
resolved "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz"
|
||||
integrity sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==
|
||||
vite-tsconfig-paths@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.1.tgz#d5c28cba79c89ebf76489ef1040024b21df6da3a"
|
||||
integrity sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
globrex "^0.1.2"
|
||||
@@ -3010,27 +3075,27 @@ vite-tsconfig-paths@^5.1.4:
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.3"
|
||||
|
||||
vitest@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmjs.org/vitest/-/vitest-4.0.6.tgz"
|
||||
integrity sha512-gR7INfiVRwnEOkCk47faros/9McCZMp5LM+OMNWGLaDBSvJxIzwjgNFufkuePBNaesGRnLmNfW+ddbUJRZn0nQ==
|
||||
vitest@^4.0.18:
|
||||
version "4.0.18"
|
||||
resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.0.18.tgz#56f966353eca0b50f4df7540cd4350ca6d454a05"
|
||||
integrity sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==
|
||||
dependencies:
|
||||
"@vitest/expect" "4.0.6"
|
||||
"@vitest/mocker" "4.0.6"
|
||||
"@vitest/pretty-format" "4.0.6"
|
||||
"@vitest/runner" "4.0.6"
|
||||
"@vitest/snapshot" "4.0.6"
|
||||
"@vitest/spy" "4.0.6"
|
||||
"@vitest/utils" "4.0.6"
|
||||
debug "^4.4.3"
|
||||
"@vitest/expect" "4.0.18"
|
||||
"@vitest/mocker" "4.0.18"
|
||||
"@vitest/pretty-format" "4.0.18"
|
||||
"@vitest/runner" "4.0.18"
|
||||
"@vitest/snapshot" "4.0.18"
|
||||
"@vitest/spy" "4.0.18"
|
||||
"@vitest/utils" "4.0.18"
|
||||
es-module-lexer "^1.7.0"
|
||||
expect-type "^1.2.2"
|
||||
magic-string "^0.30.19"
|
||||
magic-string "^0.30.21"
|
||||
obug "^2.1.1"
|
||||
pathe "^2.0.3"
|
||||
picomatch "^4.0.3"
|
||||
std-env "^3.9.0"
|
||||
std-env "^3.10.0"
|
||||
tinybench "^2.9.0"
|
||||
tinyexec "^0.3.2"
|
||||
tinyexec "^1.0.2"
|
||||
tinyglobby "^0.2.15"
|
||||
tinyrainbow "^3.0.3"
|
||||
vite "^6.0.0 || ^7.0.0"
|
||||
|
||||
@@ -22,7 +22,7 @@ docker buildx build \
|
||||
--build-arg BUILD_DATE="$(date '+%Y-%m-%d %T %Z')" \
|
||||
--build-arg GOPROXY="${GOPROXY:-}" \
|
||||
--build-arg GOPRIVATE="${GOPRIVATE:-}" \
|
||||
--platform linux/amd64,linux/arm64,linux/arm/7 \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--progress plain \
|
||||
--pull \
|
||||
-f docker/Dockerfile \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM cypress/included:14.0.1
|
||||
FROM cypress/included:15.9.0
|
||||
|
||||
# Disable Cypress CLI colors
|
||||
ENV FORCE_COLOR=0
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
const { defineConfig } = require('cypress');
|
||||
|
||||
module.exports = defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: 'cypress-multi-reporters',
|
||||
reporterOptions: {
|
||||
configFile: 'multi-reporter.json'
|
||||
},
|
||||
video: true,
|
||||
videosFolder: 'results/videos',
|
||||
screenshotsFolder: 'results/screenshots',
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return require("../plugins/index.js")(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: '{{baseUrl}}/api/schema?ts=' + Date.now(),
|
||||
},
|
||||
baseUrl: 'http://fullstack:81',
|
||||
}
|
||||
});
|
||||
23
test/cypress/config/ci.mjs
Normal file
23
test/cypress/config/ci.mjs
Normal file
@@ -0,0 +1,23 @@
|
||||
import { defineConfig } from 'cypress';
|
||||
import pluginSetup from '../plugins/index.mjs';
|
||||
|
||||
export default defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: "cypress-multi-reporters",
|
||||
reporterOptions: {
|
||||
configFile: "multi-reporter.json"
|
||||
},
|
||||
video: true,
|
||||
videosFolder: "results/videos",
|
||||
screenshotsFolder: "results/screenshots",
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return pluginSetup(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: `{{baseUrl}}/api/schema?ts=${Date.now()}`,
|
||||
},
|
||||
baseUrl: "http://fullstack:81",
|
||||
}
|
||||
});
|
||||
@@ -1,22 +0,0 @@
|
||||
const { defineConfig } = require('cypress');
|
||||
|
||||
module.exports = defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: 'cypress-multi-reporters',
|
||||
reporterOptions: {
|
||||
configFile: 'multi-reporter.json'
|
||||
},
|
||||
video: true,
|
||||
videosFolder: 'results/videos',
|
||||
screenshotsFolder: 'results/screenshots',
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return require("../plugins/index.js")(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: '{{baseUrl}}/api/schema?ts=' + Date.now(),
|
||||
},
|
||||
baseUrl: 'http://127.0.0.1:3081',
|
||||
}
|
||||
});
|
||||
23
test/cypress/config/dev.mjs
Normal file
23
test/cypress/config/dev.mjs
Normal file
@@ -0,0 +1,23 @@
|
||||
import { defineConfig } from 'cypress';
|
||||
import pluginSetup from '../plugins/index.mjs';
|
||||
|
||||
export default defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: "cypress-multi-reporters",
|
||||
reporterOptions: {
|
||||
configFile: "multi-reporter.json"
|
||||
},
|
||||
video: true,
|
||||
videosFolder: "results/videos",
|
||||
screenshotsFolder: "results/screenshots",
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return pluginSetup(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: `{{baseUrl}}/api/schema?ts=${Date.now()}`,
|
||||
},
|
||||
baseUrl: "http://127.0.0.1:3081",
|
||||
}
|
||||
});
|
||||
@@ -24,10 +24,10 @@ describe('Streams', () => {
|
||||
|
||||
// Create a custom cert pair
|
||||
cy.exec('mkcert -cert-file=/test/cypress/fixtures/website1.pem -key-file=/test/cypress/fixtures/website1.key.pem website1.example.com').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.exitCode).to.eq(0);
|
||||
// Install CA
|
||||
cy.exec('mkcert -install').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.exitCode).to.eq(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('Streams', () => {
|
||||
expect(data).to.have.property('udp_forwarding', false);
|
||||
|
||||
cy.exec('curl --noproxy -- http://website1.example.com:1500').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.exitCode).to.eq(0);
|
||||
expect(result.stdout).to.contain('yay it works');
|
||||
});
|
||||
});
|
||||
@@ -107,7 +107,7 @@ describe('Streams', () => {
|
||||
expect(data).to.have.property('udp_forwarding', true);
|
||||
|
||||
cy.exec('curl --noproxy -- http://website1.example.com:1502').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.exitCode).to.eq(0);
|
||||
expect(result.stdout).to.contain('yay it works');
|
||||
});
|
||||
});
|
||||
@@ -176,6 +176,7 @@ describe('Streams', () => {
|
||||
'cert_chain_of_trust',
|
||||
'cert_extlifeSpan',
|
||||
'cert_revocation',
|
||||
'engine_problem',
|
||||
'overall_grade',
|
||||
];
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const logger = require('./logger');
|
||||
const axios = require('axios').default;
|
||||
import axios from "axios";
|
||||
import logger from "./logger.mjs";
|
||||
|
||||
const BackendApi = function (config, token) {
|
||||
this.config = config;
|
||||
@@ -22,18 +22,16 @@ BackendApi.prototype.setToken = function(token) {
|
||||
* @param {bool} returnOnError
|
||||
*/
|
||||
BackendApi.prototype._prepareOptions = function (returnOnError) {
|
||||
let options = {
|
||||
const options = {
|
||||
headers: {
|
||||
Accept: 'application/json'
|
||||
}
|
||||
}
|
||||
Accept: "application/json",
|
||||
},
|
||||
};
|
||||
if (this.token) {
|
||||
options.headers.Authorization = 'Bearer ' + this.token;
|
||||
options.headers.Authorization = `Bearer ${this.token}`;
|
||||
}
|
||||
if (returnOnError) {
|
||||
options.validateStatus = function () {
|
||||
return true;
|
||||
}
|
||||
options.validateStatus = () => true;
|
||||
}
|
||||
return options;
|
||||
};
|
||||
@@ -44,13 +42,30 @@ BackendApi.prototype._prepareOptions = function(returnOnError) {
|
||||
* @param {function} reject
|
||||
* @param {bool} returnOnError
|
||||
*/
|
||||
BackendApi.prototype._handleResponse = function(response, resolve, reject, returnOnError) {
|
||||
logger('Response data:', response.data);
|
||||
if (!returnOnError && typeof response.data === 'object' && typeof response.data.error === 'object') {
|
||||
if (typeof response.data === 'object' && typeof response.data.error === 'object' && typeof response.data.error.message !== 'undefined') {
|
||||
reject(new Error(response.data.error.code + ': ' + response.data.error.message));
|
||||
BackendApi.prototype._handleResponse = (
|
||||
response,
|
||||
resolve,
|
||||
reject,
|
||||
returnOnError,
|
||||
) => {
|
||||
logger("Response data:", response.data);
|
||||
if (
|
||||
!returnOnError &&
|
||||
typeof response.data === "object" &&
|
||||
typeof response.data.error === "object"
|
||||
) {
|
||||
if (
|
||||
typeof response.data === "object" &&
|
||||
typeof response.data.error === "object" &&
|
||||
typeof response.data.error.message !== "undefined"
|
||||
) {
|
||||
reject(
|
||||
new Error(
|
||||
`${response.data.error.code}: ${response.data.error.message}`,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
reject(new Error('Error ' + response.status));
|
||||
reject(new Error(`Error ${response.status}`));
|
||||
}
|
||||
} else {
|
||||
resolve(response.data);
|
||||
@@ -63,10 +78,10 @@ BackendApi.prototype._handleResponse = function(response, resolve, reject, retur
|
||||
* @param {function} reject
|
||||
* @param {bool} returnOnError
|
||||
*/
|
||||
BackendApi.prototype._handleError = function(err, resolve, reject, returnOnError) {
|
||||
logger('Axios Error:', err);
|
||||
BackendApi.prototype._handleError = (err, resolve, reject, returnOnError) => {
|
||||
logger("Axios Error:", err);
|
||||
if (returnOnError) {
|
||||
resolve(typeof err.response.data !== 'undefined' ? err.response.data : err);
|
||||
resolve(typeof err.response.data !== "undefined" ? err.response.data : err);
|
||||
} else {
|
||||
reject(err);
|
||||
}
|
||||
@@ -84,11 +99,11 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) {
|
||||
const options = this._prepareOptions(returnOnError);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let opts = {
|
||||
const opts = {
|
||||
method: method,
|
||||
url: path,
|
||||
...options
|
||||
}
|
||||
...options,
|
||||
};
|
||||
if (data !== undefined && data !== null) {
|
||||
opts.data = data;
|
||||
}
|
||||
@@ -110,16 +125,17 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) {
|
||||
* @returns {Promise<object>}
|
||||
*/
|
||||
BackendApi.prototype.postForm = function (path, form, returnOnError) {
|
||||
logger('POST', this.config.baseUrl + path);
|
||||
logger("POST", this.config.baseUrl + path);
|
||||
const options = this._prepareOptions(returnOnError);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const opts = {
|
||||
...options,
|
||||
...form.getHeaders(),
|
||||
}
|
||||
};
|
||||
|
||||
this.axios.post(path, form, opts)
|
||||
this.axios
|
||||
.post(path, form, opts)
|
||||
.then((response) => {
|
||||
this._handleResponse(response, resolve, reject, returnOnError);
|
||||
})
|
||||
@@ -129,4 +145,4 @@ BackendApi.prototype.postForm = function (path, form, returnOnError) {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = BackendApi;
|
||||
export default BackendApi;
|
||||
@@ -1,7 +0,0 @@
|
||||
const _ = require("lodash");
|
||||
|
||||
module.exports = function() {
|
||||
let arr = _.values(arguments);
|
||||
arr.unshift('[Backend API]');
|
||||
console.log.apply(null, arr);
|
||||
};
|
||||
7
test/cypress/plugins/backendApi/logger.mjs
Normal file
7
test/cypress/plugins/backendApi/logger.mjs
Normal file
@@ -0,0 +1,7 @@
|
||||
const log = (...args) => {
|
||||
const arr = args;
|
||||
arr.unshift("[Backend API]");
|
||||
console.log(...arr);
|
||||
};
|
||||
|
||||
export default log;
|
||||
@@ -1,13 +1,12 @@
|
||||
const fs = require('fs');
|
||||
const FormData = require('form-data');
|
||||
const logger = require('./logger');
|
||||
const Client = require('./client');
|
||||
import fs from "node:fs";
|
||||
import FormData from "form-data";
|
||||
import Client from "./client.mjs";
|
||||
import logger from "./logger.mjs";
|
||||
|
||||
module.exports = function (config) {
|
||||
logger('Client Ready using', config.baseUrl);
|
||||
export default (config) => {
|
||||
logger("Client Ready using", config.baseUrl);
|
||||
|
||||
return {
|
||||
|
||||
/**
|
||||
* @param {object} options
|
||||
* @param {string} options.path API path
|
||||
@@ -18,7 +17,7 @@ module.exports = function (config) {
|
||||
backendApiGet: (options) => {
|
||||
const api = new Client(config);
|
||||
api.setToken(options.token);
|
||||
return api.request('get', options.path, options.returnOnError || false);
|
||||
return api.request("get", options.path, options.returnOnError || false);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -32,7 +31,12 @@ module.exports = function (config) {
|
||||
backendApiPost: (options) => {
|
||||
const api = new Client(config);
|
||||
api.setToken(options.token);
|
||||
return api.request('post', options.path, options.returnOnError || false, options.data);
|
||||
return api.request(
|
||||
"post",
|
||||
options.path,
|
||||
options.returnOnError || false,
|
||||
options.data,
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -48,8 +52,11 @@ module.exports = function (config) {
|
||||
api.setToken(options.token);
|
||||
|
||||
const form = new FormData();
|
||||
for (let [key, value] of Object.entries(options.files)) {
|
||||
form.append(key, fs.createReadStream(config.fixturesFolder + '/' + value));
|
||||
for (const [key, value] of Object.entries(options.files)) {
|
||||
form.append(
|
||||
key,
|
||||
fs.createReadStream(`${config.fixturesFolder}/${value}`),
|
||||
);
|
||||
}
|
||||
return api.postForm(options.path, form, options.returnOnError || false);
|
||||
},
|
||||
@@ -65,7 +72,12 @@ module.exports = function (config) {
|
||||
backendApiPut: (options) => {
|
||||
const api = new Client(config);
|
||||
api.setToken(options.token);
|
||||
return api.request('put', options.path, options.returnOnError || false, options.data);
|
||||
return api.request(
|
||||
"put",
|
||||
options.path,
|
||||
options.returnOnError || false,
|
||||
options.data,
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -78,7 +90,11 @@ module.exports = function (config) {
|
||||
backendApiDelete: (options) => {
|
||||
const api = new Client(config);
|
||||
api.setToken(options.token);
|
||||
return api.request('delete', options.path, options.returnOnError || false);
|
||||
}
|
||||
return api.request(
|
||||
"delete",
|
||||
options.path,
|
||||
options.returnOnError || false,
|
||||
);
|
||||
},
|
||||
};
|
||||
};
|
||||
@@ -1,21 +0,0 @@
|
||||
const { SwaggerValidation } = require('@jc21/cypress-swagger-validation');
|
||||
const chalk = require('chalk');
|
||||
|
||||
module.exports = (on, config) => {
|
||||
// Replace swaggerBase config var wildcard
|
||||
if (typeof config.env.swaggerBase !== 'undefined') {
|
||||
config.env.swaggerBase = config.env.swaggerBase.replace('{{baseUrl}}', config.baseUrl);
|
||||
}
|
||||
|
||||
// Plugin Events
|
||||
on('task', SwaggerValidation(config));
|
||||
on('task', require('./backendApi/task')(config));
|
||||
on('task', {
|
||||
log(message) {
|
||||
console.log(`${chalk.cyan.bold('[')}${chalk.blue.bold('LOG')}${chalk.cyan.bold(']')} ${chalk.red.bold(message)}`);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
27
test/cypress/plugins/index.mjs
Normal file
27
test/cypress/plugins/index.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import { SwaggerValidation } from "@jc21/cypress-swagger-validation";
|
||||
import chalk from "chalk";
|
||||
import backendTask from "./backendApi/task.mjs";
|
||||
|
||||
export default (on, config) => {
|
||||
// Replace swaggerBase config var wildcard
|
||||
if (typeof config.env.swaggerBase !== "undefined") {
|
||||
config.env.swaggerBase = config.env.swaggerBase.replace(
|
||||
"{{baseUrl}}",
|
||||
config.baseUrl,
|
||||
);
|
||||
}
|
||||
|
||||
// Plugin Events
|
||||
on("task", SwaggerValidation(config));
|
||||
on("task", backendTask(config));
|
||||
on("task", {
|
||||
log(message) {
|
||||
console.log(
|
||||
`${chalk.cyan.bold("[")}${chalk.blue.bold("LOG")}${chalk.cyan.bold("]")} ${chalk.red.bold(message)}`,
|
||||
);
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
@@ -35,7 +35,7 @@ Cypress.Commands.add("validateSwaggerFile", (url, savePath) => {
|
||||
.then((response) => cy.writeFile(savePath, response.body, { log: false }))
|
||||
.then(() => cy.exec(`yarn swagger-lint '${savePath}'`, { failOnNonZeroExit: false }))
|
||||
.then((result) => cy.task('log', `Swagger Vacuum Results:\n${result.stdout || ''}`)
|
||||
.then(() => expect(result.code).to.eq(0)));
|
||||
.then(() => expect(result.exitCode).to.eq(0)));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import './commands';
|
||||
import './commands.mjs';
|
||||
|
||||
Cypress.on('uncaught:exception', (/*err, runnable*/) => {
|
||||
// returning false here prevents Cypress from
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
{
|
||||
"include": [
|
||||
"./node_modules/cypress",
|
||||
"cypress/**/*.js"
|
||||
"cypress/**/*.js",
|
||||
"cypress/config/dev.mjs",
|
||||
"cypress/config/ci.mjs",
|
||||
"cypress/plugins/index.mjs",
|
||||
"cypress/plugins/backendApi/task.mjs",
|
||||
"cypress/plugins/backendApi/logger.mjs",
|
||||
"cypress/plugins/backendApi/client.mjs",
|
||||
"cypress/support/commands.mjs"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@jc21/cypress-swagger-validation": "^0.3.2",
|
||||
"@quobix/vacuum": "^0.19.4",
|
||||
"@quobix/vacuum": "^0.23.4",
|
||||
"axios": "^1.13.1",
|
||||
"chalk": "^4.1.0",
|
||||
"cypress": "^14.0.1",
|
||||
"chalk": "^5.6.2",
|
||||
"cypress": "^15.9.0",
|
||||
"cypress-multi-reporters": "^2.0.5",
|
||||
"cypress-wait-until": "^3.0.2",
|
||||
"eslint": "^9.39.0",
|
||||
"eslint": "^10.0.0",
|
||||
"eslint-plugin-align-assignments": "^1.1.2",
|
||||
"eslint-plugin-chai-friendly": "^1.1.0",
|
||||
"eslint-plugin-cypress": "^5.2.0",
|
||||
@@ -21,9 +21,9 @@
|
||||
"mocha-junit-reporter": "^2.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"cypress": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress open --config-file=cypress/config/ci.js",
|
||||
"cypress:headless": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress run --config-file=cypress/config/ci.js",
|
||||
"cypress:dev": "cypress run --config-file=cypress/config/dev.js",
|
||||
"cypress": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress open --config-file=cypress/config/ci.mjs",
|
||||
"cypress:headless": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress run --config-file=cypress/config/ci.mjs",
|
||||
"cypress:dev": "cypress run --config-file=cypress/config/dev.mjs",
|
||||
"swagger-lint": "vacuum lint -b -q -d -a --no-clip -n=warn"
|
||||
},
|
||||
"author": "",
|
||||
|
||||
678
test/yarn.lock
678
test/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user