├── src ├── main │ ├── aspect │ │ └── .gitkeep │ ├── resources │ │ ├── META-INF │ │ │ ├── services │ │ │ │ ├── javax.xml.xpath.XPathFactory │ │ │ │ └── javax.xml.transform.TransformerFactory │ │ │ └── MANIFEST.MF │ │ ├── images │ │ │ ├── logo.png │ │ │ └── logo.svg │ │ ├── io │ │ │ └── jare │ │ │ │ └── tk │ │ │ │ └── error.html.vm │ │ ├── log4j.properties │ │ └── xsl │ │ │ ├── domains.xsl │ │ │ ├── layout.xsl │ │ │ └── index.xsl │ ├── java │ │ └── io │ │ │ └── jare │ │ │ ├── package-info.java │ │ │ ├── tk │ │ │ ├── package-info.java │ │ │ ├── TkRefresh.java │ │ │ ├── RqUser.java │ │ │ ├── TkAdd.java │ │ │ ├── TkIndex.java │ │ │ ├── TkDelete.java │ │ │ ├── Destination.java │ │ │ ├── TkDomains.java │ │ │ ├── TkAppAuth.java │ │ │ ├── TkInvalidate.java │ │ │ ├── TkAppFallback.java │ │ │ ├── RsPage.java │ │ │ ├── TkRelay.java │ │ │ └── TkApp.java │ │ │ ├── fake │ │ │ ├── package-info.java │ │ │ ├── FkUser.java │ │ │ ├── FkDomain.java │ │ │ ├── FkUsage.java │ │ │ └── FkBase.java │ │ │ ├── cached │ │ │ ├── package-info.java │ │ │ ├── CdDomain.java │ │ │ ├── CdUsage.java │ │ │ └── CdBase.java │ │ │ ├── dynamo │ │ │ ├── package-info.java │ │ │ ├── DyDomain.java │ │ │ ├── Dynamo.java │ │ │ ├── DyBase.java │ │ │ ├── DyUser.java │ │ │ └── DyUsage.java │ │ │ ├── model │ │ │ ├── package-info.java │ │ │ ├── User.java │ │ │ ├── Base.java │ │ │ ├── Domain.java │ │ │ └── Usage.java │ │ │ ├── smarts │ │ │ ├── package-info.java │ │ │ └── SafeUser.java │ │ │ ├── Entrance.java │ │ │ └── Logs.java │ └── scss │ │ └── main.scss └── test │ ├── aspect │ └── .gitkeep │ ├── java │ └── io │ │ └── jare │ │ ├── package-info.java │ │ ├── tk │ │ ├── package-info.java │ │ ├── RqUserTest.java │ │ ├── TkInvalidateITCase.java │ │ ├── PingingTest.java │ │ ├── DestinationTest.java │ │ ├── TkIndexTest.java │ │ ├── TkAppTest.java │ │ └── TkRelayTest.java │ │ ├── cached │ │ ├── package-info.java │ │ └── CdUsageTest.java │ │ ├── dynamo │ │ ├── package-info.java │ │ ├── DyUsageITCase.java │ │ ├── DyDomainITCase.java │ │ ├── DyBaseITCase.java │ │ ├── DyUserITCase.java │ │ └── DyUsageTest.java │ │ ├── smarts │ │ ├── package-info.java │ │ └── SafeUserTest.java │ │ └── LogsTest.java │ ├── resources │ ├── META-INF │ │ └── MANIFEST.MF │ ├── log4j.properties │ └── io │ │ └── jare │ │ └── test │ └── dynamodb │ └── domains.json ├── .gitignore ├── renovate.json ├── system.properties ├── .pdd ├── Procfile ├── .0pdd.yml ├── .gitattributes ├── deploy.sh ├── .github └── workflows │ ├── reuse.yml │ ├── typos.yml │ ├── xcop.yml │ ├── pdd.yml │ ├── yamllint.yml │ ├── copyrights.yml │ ├── shellcheck.yml │ ├── markdown-lint.yml │ ├── bashate.yml │ ├── actionlint.yml │ ├── codecov.yml │ └── mvn.yml ├── REUSE.toml ├── LICENSE.txt ├── LICENSES └── MIT.txt ├── .rultor.yml ├── README.md ├── nginx.conf.sigil └── pom.xml /src/main/aspect/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/test/aspect/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | *.iml 4 | *.log 5 | ajcore.* 6 | node_modules/ 7 | target/ 8 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/services/javax.xml.xpath.XPathFactory: -------------------------------------------------------------------------------- 1 | net.sf.saxon.xpath.XPathFactoryImpl 2 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/services/javax.xml.transform.TransformerFactory: -------------------------------------------------------------------------------- 1 | net.sf.saxon.TransformerFactoryImpl 2 | -------------------------------------------------------------------------------- /src/main/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yegor256/jare/HEAD/src/main/resources/images/logo.png -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /system.properties: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 2 | # SPDX-License-Identifier: MIT 3 | 4 | java.runtime.version=11 5 | -------------------------------------------------------------------------------- /.pdd: -------------------------------------------------------------------------------- 1 | --source=. 2 | --verbose 3 | --exclude target/**/* 4 | --exclude src/main/resources/images/**/* 5 | --rule min-words:20 6 | --rule min-estimate:15 7 | --rule max-estimate:90 8 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: java -Dfile.encoding=UTF-8 -Xmx400m -XX:MaxPermSize=64m -XX:+UnlockExperimentalVMOptions -cp target/jare.jar:target/deps/* io.jare.Entrance --port=${PORT} --threads=50 --max-latency=45000 2 | -------------------------------------------------------------------------------- /src/main/java/io/jare/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Jare. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare; 12 | -------------------------------------------------------------------------------- /src/main/java/io/jare/tk/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Takes. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.tk; 12 | -------------------------------------------------------------------------------- /src/test/java/io/jare/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Jare, tests. 8 | * 9 | * @since 0.7 10 | */ 11 | package io.jare; 12 | -------------------------------------------------------------------------------- /.0pdd.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 2 | # SPDX-License-Identifier: MIT 3 | --- 4 | errors: 5 | - yegor256@gmail.com 6 | # alerts: 7 | # github: 8 | # - yegor256 9 | 10 | tags: 11 | - pdd 12 | - bug 13 | -------------------------------------------------------------------------------- /src/main/java/io/jare/fake/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Fakes. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.fake; 12 | -------------------------------------------------------------------------------- /src/test/java/io/jare/tk/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Takes, tests. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.tk; 12 | -------------------------------------------------------------------------------- /src/main/java/io/jare/cached/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Cached. 8 | * 9 | * @since 0.7 10 | */ 11 | package io.jare.cached; 12 | -------------------------------------------------------------------------------- /src/main/java/io/jare/dynamo/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Dynamo. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.dynamo; 12 | -------------------------------------------------------------------------------- /src/main/java/io/jare/model/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * The model. 8 | * 9 | * @since 0.1 10 | */ 11 | package io.jare.model; 12 | -------------------------------------------------------------------------------- /src/main/java/io/jare/smarts/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Smarts. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.smarts; 12 | -------------------------------------------------------------------------------- /src/test/java/io/jare/cached/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Cached, tests. 8 | * 9 | * @since 0.7 10 | */ 11 | package io.jare.cached; 12 | -------------------------------------------------------------------------------- /src/test/java/io/jare/dynamo/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Dynamo, tests. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.dynamo; 12 | -------------------------------------------------------------------------------- /src/test/java/io/jare/smarts/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | 6 | /** 7 | * Smarts, tests. 8 | * 9 | * @since 1.0 10 | */ 11 | package io.jare.smarts; 12 | -------------------------------------------------------------------------------- /src/main/resources/io/jare/tk/error.html.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |${err}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Check out all text files in UNIX format, with LF as end of line
2 | # Don't change this file. If you have any ideas about it, please
3 | # submit a separate issue about it and we'll discuss.
4 |
5 | * text=auto eol=lf
6 | *.java ident
7 | *.xml ident
8 | *.png binary
9 |
--------------------------------------------------------------------------------
/src/main/scss/main.scss:
--------------------------------------------------------------------------------
1 | // SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | // SPDX-License-Identifier: MIT
3 |
4 | .logo {
5 | height: 75px;
6 | }
7 |
8 | .flash {
9 | &.SEVERE { color: red; }
10 |
11 | &.INFO { color: green; }
12 |
13 | &.WARNING { color: orange; }
14 | }
15 |
16 | footer li {
17 | font-size: 80%;
18 | font-family: monospace;
19 | }
20 |
--------------------------------------------------------------------------------
/deploy.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
4 | # SPDX-License-Identifier: MIT
5 |
6 | set -e -o pipefail
7 |
8 | cd "$(dirname "$0")"
9 | cp /code/home/assets/jare/settings.xml .
10 | git add settings.xml
11 | git commit -m 'settings.xml for heroku'
12 | trap 'git reset HEAD~1 && rm settings.xml' EXIT
13 | git push heroku master -f
14 |
--------------------------------------------------------------------------------
/src/test/resources/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Jare-Revision: a1b2c3e
2 | Jare-Version: 1.0
3 | Jare-Date: ${timestamp}
4 | Jare-DynamoKey: ${failsafe.dynamo.key}
5 | Jare-DynamoSecret: ${failsafe.dynamo.secret}
6 | Jare-S3Key: -
7 | Jare-S3Secret: -
8 | Jare-CloudFrontKey: -
9 | Jare-CloudFrontSecret: -
10 | Jare-GithubId: ${failsafe.github.id}
11 | Jare-GithubSecret: ${failsafe.github.secret}
12 | Jare-SecurityKey: 0123456701234567
13 | Jare-SentryDsn: test
14 |
--------------------------------------------------------------------------------
/src/test/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 |
4 | log4j.rootLogger=WARN, CONSOLE
5 |
6 | log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
7 | log4j.appender.CONSOLE.layout=com.jcabi.log.MulticolorLayout
8 | log4j.appender.CONSOLE.layout.ConversionPattern=[%color{%p}] %c: %m%n
9 |
10 | log4j.logger.io.jare=INFO
11 | log4j.logger.com.jcabi.dynamo=INFO
12 |
--------------------------------------------------------------------------------
/.github/workflows/reuse.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: reuse
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | reuse:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: fsfe/reuse-action@v5
20 |
--------------------------------------------------------------------------------
/.github/workflows/typos.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: typos
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | typos:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: crate-ci/typos@v1.32.0
20 |
--------------------------------------------------------------------------------
/.github/workflows/xcop.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: xcop
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | xcop:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: g4s8/xcop-action@master
20 |
--------------------------------------------------------------------------------
/.github/workflows/pdd.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: pdd
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | pdd:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: volodya-lombrozo/pdd-action@master
20 |
--------------------------------------------------------------------------------
/src/main/resources/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Jare-Revision: BUILD
2 | Jare-Version: ${project.version}
3 | Jare-Date: ${timestamp}
4 | Jare-DynamoKey: ${dynamo.key}
5 | Jare-DynamoSecret: ${dynamo.secret}
6 | Jare-S3Key: ${s3.key}
7 | Jare-S3Secret: ${s3.secret}
8 | Jare-CloudFrontKey: ${cloudfront.key}
9 | Jare-CloudFrontSecret: ${cloudfront.secret}
10 | Jare-GithubId: ${github.id}
11 | Jare-GithubSecret: ${github.secret}
12 | Jare-SecurityKey: ${security.key}
13 | Jare-SentryDsn: ${sentry.dsn}
14 |
--------------------------------------------------------------------------------
/.github/workflows/yamllint.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: yamllint
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | yamllint:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: ibiqlik/action-yamllint@v3
20 |
--------------------------------------------------------------------------------
/.github/workflows/copyrights.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: copyrights
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | copyrights:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: yegor256/copyrights-action@0.0.8
20 |
--------------------------------------------------------------------------------
/.github/workflows/shellcheck.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: shellcheck
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | shellcheck:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: ludeeus/action-shellcheck@master
20 |
--------------------------------------------------------------------------------
/.github/workflows/markdown-lint.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
2 | # SPDX-License-Identifier: MIT
3 | ---
4 | # yamllint disable rule:line-length
5 | name: markdown-lint
6 | 'on':
7 | push:
8 | branches:
9 | - master
10 | pull_request:
11 | branches:
12 | - master
13 | jobs:
14 | markdown-lint:
15 | timeout-minutes: 15
16 | runs-on: ubuntu-24.04
17 | steps:
18 | - uses: actions/checkout@v4
19 | - uses: DavidAnson/markdownlint-cli2-action@v20.0.0
20 |
--------------------------------------------------------------------------------
/src/main/java/io/jare/fake/FkUser.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: Copyright (c) 2016-2025 Yegor Bugayenko
3 | * SPDX-License-Identifier: MIT
4 | */
5 | package io.jare.fake;
6 |
7 | import io.jare.model.Domain;
8 | import io.jare.model.User;
9 | import java.util.Collections;
10 |
11 | /**
12 | * Fake user.
13 | *
14 | * @since 1.0
15 | */
16 | public final class FkUser implements User {
17 |
18 | @Override
19 | public Iterable