mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-06-17 17:56:27 +00:00
Compare commits
445 Commits
v3
...
dfe2588523
Author | SHA1 | Date | |
---|---|---|---|
dfe2588523 | |||
63d06da8a8 | |||
b5a0d74654 | |||
99cce7e2b0 | |||
120d50e5c0 | |||
5454fd61b3 | |||
b33012705b | |||
e948b60194 | |||
7913c9a07d | |||
d1c23b6286 | |||
c7e2946dbf | |||
8936402229 | |||
001c77e686 | |||
5578e825b1 | |||
c93656a7a1 | |||
50aeae234f | |||
a5c06c1a34 | |||
51414ced3a | |||
5e35e538af | |||
13fec42d1f | |||
b4560d7dde | |||
6f9eed8a61 | |||
d66e4e03e6 | |||
1d19c29bb0 | |||
e20a11de4a | |||
d3a654b546 | |||
bed387ebd4 | |||
6ac9a82279 | |||
ef23e796ec | |||
3754a569ba | |||
b383f46656 | |||
3ce477d350 | |||
516b4d991c | |||
12d77e3ab6 | |||
8d80af3a26 | |||
1f45e6a5e9 | |||
dcb9628c36 | |||
029b184398 | |||
2422587530 | |||
4ee940d3dc | |||
47dddc548b | |||
256a667e2c | |||
79cd0c5294 | |||
09a03edfd7 | |||
35f0fe745d | |||
f1e433714e | |||
035eaed0a4 | |||
4b100a384d | |||
c5c5fa0a5a | |||
280bac8b43 | |||
02aefa50cd | |||
4d91cfc397 | |||
79a453f2fe | |||
c62c09569d | |||
09bcf4010c | |||
6aeade6c98 | |||
8655b7d2db | |||
2d929dffa8 | |||
52eaa042d8 | |||
b35aa50b88 | |||
c575a706b5 | |||
587b97c2d3 | |||
317003beda | |||
5a761236c5 | |||
b135527347 | |||
abca9cc89c | |||
6721923601 | |||
a88f77c1a5 | |||
a5b21d0306 | |||
8eab8d71f2 | |||
d06572bb5f | |||
d40f9e06fc | |||
69ec017a53 | |||
fa67f257ef | |||
0dcd648c9d | |||
c989a282e3 | |||
5aff969c04 | |||
bfbf7519ec | |||
bf36c7966a | |||
63cd9ba08f | |||
e3d4882c3d | |||
3e1b73143e | |||
10ece3548d | |||
0503a6af75 | |||
55d765e785 | |||
1fb9a75a33 | |||
9c2e838d61 | |||
c55e47aacf | |||
40d81d6e44 | |||
1c84eaac02 | |||
577954ef8c | |||
f0c75641d8 | |||
e42e2acf12 | |||
eaa11fe460 | |||
5b53825ccb | |||
a94660120f | |||
39f4836485 | |||
aec30207da | |||
209c1b3334 | |||
58138fbac4 | |||
da820db4e1 | |||
47b868bfc6 | |||
89a405f60c | |||
0353051436 | |||
a3630a6286 | |||
10d9760242 | |||
c722eb1cea | |||
0472abacd2 | |||
a2e85ceed8 | |||
cddd6fb985 | |||
db23c9a52f | |||
8646cb5a19 | |||
fe0c04610f | |||
9f16dae2ff | |||
00264bcfb2 | |||
834fb1a361 | |||
1be87f48c1 | |||
9c54d1b718 | |||
f7d1c490b3 | |||
fe4bd9fed6 | |||
58ef9a688e | |||
d19ebf5925 | |||
96fc6a20bb | |||
e69684919c | |||
be39253a6f | |||
30772a48bd | |||
33c867895c | |||
a7fe687bae | |||
4028120f55 | |||
d1119ec63f | |||
4c906283df | |||
8ec0c76f51 | |||
c70f65d349 | |||
883a272b0a | |||
6aee2bbcba | |||
025fc9776b | |||
b699f05f47 | |||
f7c87f63bd | |||
e4ef095254 | |||
09d5e2c94f | |||
459b7a2223 | |||
9c813bcce3 | |||
b8596ac01c | |||
082c4e1008 | |||
2273eae6ee | |||
997e9d431b | |||
b3564b6d4b | |||
4e27cdabc4 | |||
965873adc5 | |||
5de95a8c90 | |||
fa557d8159 | |||
bc8211a6a9 | |||
1c498f84ad | |||
ea6e9757e3 | |||
1308ae42c2 | |||
7be548575b | |||
c6aab8d4e6 | |||
da55e93183 | |||
af475ab5d4 | |||
7d85463dae | |||
13d4f98fdb | |||
388fff84f2 | |||
49a765516c | |||
27bc8c4e33 | |||
881a067aff | |||
1975e4a151 | |||
4704bd6a38 | |||
ca56e0483f | |||
3b8cb86d72 | |||
5165de4a91 | |||
1ab3575c68 | |||
ccf9cce825 | |||
3ad2188f78 | |||
33dbffb974 | |||
289e438c59 | |||
e08a4d4490 | |||
d1d1819677 | |||
4e0768d56c | |||
3666364418 | |||
9052502a17 | |||
b608d3392d | |||
edb81ecce0 | |||
e24181936f | |||
940d06cac9 | |||
134902d127 | |||
2df4620d05 | |||
f41b1069ae | |||
004a93fbc3 | |||
2d9f04edcd | |||
53dbe258a5 | |||
e4ba22f0f8 | |||
3197de41de | |||
0f7be7987b | |||
853c48dff6 | |||
410c3484ab | |||
44e9f377f9 | |||
0f3b76f607 | |||
f426e64569 | |||
4867db078c | |||
6b565e628f | |||
881d70502b | |||
62e4edddf0 | |||
4b9c02cc0c | |||
5af834e40b | |||
6f8db95249 | |||
fe93cb3474 | |||
fa851b61da | |||
3333a32612 | |||
9a79fce498 | |||
b1180f5077 | |||
5454352fe5 | |||
aee93a2f6f | |||
f38cb5b500 | |||
f1b7156c89 | |||
98465cf1b0 | |||
137e865b66 | |||
e740fb4064 | |||
f91f0ee8db | |||
1c9f751512 | |||
a602bdd514 | |||
f7b2be68cc | |||
ab4586fc6b | |||
a984a68065 | |||
52875fca6e | |||
63b50fcd95 | |||
5ab4aea03f | |||
d73135378e | |||
e19d685cb6 | |||
c8caaa56d9 | |||
11a98f4c12 | |||
4a85d4ac4e | |||
3138ba46ce | |||
cdd0b2e6d3 | |||
f458730d87 | |||
d20873dcbb | |||
d1e9407e4d | |||
63ee69f432 | |||
f39e527680 | |||
2dd4434ceb | |||
81054631f9 | |||
53d61bd626 | |||
847e879b3f | |||
4c59400731 | |||
824c837a38 | |||
2a06384a4a | |||
05307aa253 | |||
3d2406ac3d | |||
0127dc7f03 | |||
4349d42636 | |||
4b6f9d9419 | |||
c3f019c911 | |||
ecf0290203 | |||
4f41fe0c95 | |||
c3735fdbbb | |||
c432c34fb3 | |||
a1245bc161 | |||
db4ab1d548 | |||
86ddd9c83c | |||
67208e43cc | |||
ddf80302c6 | |||
5f2576946d | |||
9fe07fa6c3 | |||
d9b9af543e | |||
eb2e2e0478 | |||
9225d5d442 | |||
308a7149ed | |||
8a4a7d0caf | |||
5d03ede100 | |||
4a86bb42cc | |||
dad8561ea1 | |||
56a92e5c0e | |||
9d672f5813 | |||
d5ed70dbb6 | |||
c197e66d62 | |||
91cf3c8873 | |||
7f5e0414ac | |||
d179887c15 | |||
35abb4d7ae | |||
61b290e220 | |||
e1bcef6e5c | |||
81f51f9e2d | |||
661953db25 | |||
065c2dac42 | |||
2926844cbe | |||
c1960f3793 | |||
11a29a8b67 | |||
c40e48e678 | |||
124cb18e17 | |||
5ac9dc0758 | |||
9a799d51ce | |||
77eb618758 | |||
79fedfcea4 | |||
8fdb8ac853 | |||
4fdc80be01 | |||
f8e6c8d018 | |||
c3469de61b | |||
ea61b15a40 | |||
60175e6d8c | |||
2a07445005 | |||
dad3e1da7c | |||
82d9452001 | |||
095bc8f676 | |||
8c15340b83 | |||
a13f7c3792 | |||
6748985669 | |||
e2957f070b | |||
fccbde1371 | |||
fec36834f7 | |||
00aeef75b6 | |||
5b7682f13c | |||
b30fcb50c8 | |||
100c56ad10 | |||
44bebf366a | |||
6a28701242 | |||
09d1d3744c | |||
84e0b30f8d | |||
546ce8d4bc | |||
9b40bb288d | |||
c812b674b6 | |||
86e63197f6 | |||
c371b2e953 | |||
2142e25029 | |||
30076a0e66 | |||
42bd39163a | |||
cc4891d9ec | |||
40c26839f5 | |||
2ff66ee238 | |||
9d60b4a756 | |||
d2becc0681 | |||
579c32a724 | |||
b08ef17894 | |||
589ab8757e | |||
abdaac8584 | |||
d5c950a231 | |||
d9a1701927 | |||
6e500c35dc | |||
a06e96061f | |||
f0513d34f9 | |||
09349efbbe | |||
06453e9668 | |||
b1e904df84 | |||
5f435b6325 | |||
7b48488c29 | |||
3f6ad0d807 | |||
edba369ae8 | |||
b77d916bdd | |||
2706454635 | |||
32a3bb1d6d | |||
95665ca378 | |||
09d6cf7c48 | |||
2addc48a9b | |||
ebf07a7912 | |||
abe6493244 | |||
9f192ab275 | |||
52e013d289 | |||
331da3841e | |||
e227f4177b | |||
88fa7cdfff | |||
f3b3072711 | |||
cf6cc7dcc5 | |||
448c8a2dd5 | |||
634cfe13f1 | |||
7597515c20 | |||
93f57aece5 | |||
ef6da1bbe1 | |||
4ad9e68886 | |||
9b35e7c188 | |||
2aa6e55d6b | |||
1ac28410ff | |||
b0fd976b97 | |||
7fe7e94fbd | |||
8864960eb4 | |||
23326895b2 | |||
d2f707b76d | |||
a7f0c3b730 | |||
a9e84f1750 | |||
7ca3a9e7a6 | |||
c80d099193 | |||
35aba13122 | |||
b69e493c54 | |||
99d73a2da8 | |||
3c23aa935e | |||
8dee139810 | |||
6349cb6094 | |||
452838b04a | |||
fd30cfe98b | |||
6f281fef42 | |||
5920b0cf5e | |||
41bbfcf165 | |||
80a93e17fa | |||
4a1eebc54b | |||
264ba71462 | |||
e229fa89f8 | |||
d3b72ae07d | |||
b62b6b5112 | |||
c44f8c6155 | |||
0dfa3d9ca3 | |||
8c7c84906b | |||
662143cf21 | |||
c60fc7926e | |||
cfbdc6c340 | |||
2f6d8257ec | |||
b9a6b5d4f5 | |||
32f77dbcee | |||
052cb8f12d | |||
03b544023b | |||
5070499cfd | |||
e77b13d36e | |||
4bb237d7c2 | |||
aa5a7faa94 | |||
837f4dcbd4 | |||
d73a246b66 | |||
f85e82973d | |||
84afec567c | |||
e1525e5d56 | |||
d2688cf08c | |||
7372319568 | |||
60ffec5c64 | |||
23c88f6955 | |||
dd14207b63 | |||
103adfbb57 | |||
b673ebe2ca | |||
0e0c3df0cd | |||
8dbd482e08 | |||
ab5f7c0f26 | |||
191f493eb9 | |||
d1f4640a9c | |||
3d97f4578d | |||
fb0ef08fd8 | |||
0de78205b5 | |||
e0821bd927 | |||
e5966b54a8 | |||
d2f6b09901 | |||
5c8aa8517b | |||
1e5916db28 | |||
a3ae6956e2 | |||
518b84b38b | |||
932dc4bf02 | |||
bdc3a555b6 | |||
d4dcb61ee6 | |||
cce73beb2d | |||
063ac4619f | |||
edf369a3d4 | |||
4251157ffa | |||
9866eec21c |
@ -1,8 +0,0 @@
|
||||
# Ignore everything
|
||||
*
|
||||
|
||||
# Only allow the following for docker build:
|
||||
!backend/
|
||||
!docker/
|
||||
!scripts/
|
||||
!test/
|
21
.github/workflows/stale.yml
vendored
Normal file
21
.github/workflows/stale.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
stale-issue-label: 'stale'
|
||||
stale-pr-label: 'stale'
|
||||
stale-issue-message: 'Issue is now considered stale. If you want to keep it open, please comment :+1:'
|
||||
stale-pr-message: 'PR is now considered stale. If you want to keep it open, please comment :+1:'
|
||||
close-issue-message: 'Issue was closed due to inactivity.'
|
||||
close-pr-message: 'PR was closed due to inactivity.'
|
||||
days-before-stale: 182
|
||||
days-before-close: 365
|
||||
operations-per-run: 50
|
28
.gitignore
vendored
28
.gitignore
vendored
@ -1,29 +1,9 @@
|
||||
git.idea
|
||||
.env
|
||||
.DS_Store
|
||||
.idea
|
||||
._*
|
||||
*.code-workspace
|
||||
vendor
|
||||
bin/*
|
||||
backend/config.json
|
||||
backend/embed/assets
|
||||
backend/.task
|
||||
backend/coverage.out
|
||||
backend/coverage.html
|
||||
.vscode
|
||||
certbot-help.txt
|
||||
test/node_modules
|
||||
*/node_modules
|
||||
docs/.vuepress/dist
|
||||
frontend/build
|
||||
frontend/yarn-error.log
|
||||
frontend/.npmrc
|
||||
frontend/src/locale/lang
|
||||
test/cypress/fixtures/example.json
|
||||
.vscode
|
||||
docker-build
|
||||
data
|
||||
dist
|
||||
backend/embed/acme.sh
|
||||
docker/dev/resolv.conf
|
||||
docker/dev/dnsrouter-config.json.tmp
|
||||
thunder-tests
|
||||
test/cypress/videos
|
||||
docker/dev/resolv.conf
|
||||
|
151
Jenkinsfile
vendored
151
Jenkinsfile
vendored
@ -1,33 +1,22 @@
|
||||
import groovy.transform.Field
|
||||
|
||||
@Field
|
||||
def shOutput = ""
|
||||
def buildxPushTags = ""
|
||||
|
||||
def getVersion() {
|
||||
ver = sh(script: 'cat .version', returnStdout: true)
|
||||
return ver.trim()
|
||||
}
|
||||
|
||||
def getCommit() {
|
||||
ver = sh(script: 'git log -n 1 --format=%h', returnStdout: true)
|
||||
return ver.trim()
|
||||
}
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
label 'docker-multiarch'
|
||||
}
|
||||
options {
|
||||
buildDiscarder(logRotator(numToKeepStr: '10'))
|
||||
buildDiscarder(logRotator(numToKeepStr: '5'))
|
||||
disableConcurrentBuilds()
|
||||
ansiColor('xterm')
|
||||
}
|
||||
environment {
|
||||
DOCKER_ORG = 'jc21'
|
||||
IMAGE = 'nginx-proxy-manager'
|
||||
BUILD_VERSION = getVersion()
|
||||
BUILD_COMMIT = getCommit()
|
||||
MAJOR_VERSION = '3'
|
||||
MAJOR_VERSION = '2'
|
||||
BRANCH_LOWER = "${BRANCH_NAME.toLowerCase().replaceAll('\\\\', '-').replaceAll('/', '-').replaceAll('\\.', '-')}"
|
||||
BUILDX_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}"
|
||||
COMPOSE_INTERACTIVE_NO_CLI = 1
|
||||
@ -41,9 +30,7 @@ pipeline {
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
buildxPushTags = "-t docker.io/${DOCKER_ORG}/${IMAGE}:${BUILD_VERSION} -t docker.io/${DOCKER_ORG}/${IMAGE}:${MAJOR_VERSION} -t docker.io/${DOCKER_ORG}/${IMAGE}:latest"
|
||||
echo 'Building on Master is disabled!'
|
||||
sh 'exit 1'
|
||||
buildxPushTags = "-t docker.io/jc21/${IMAGE}:${BUILD_VERSION} -t docker.io/jc21/${IMAGE}:${MAJOR_VERSION} -t docker.io/jc21/${IMAGE}:latest"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -56,44 +43,44 @@ pipeline {
|
||||
steps {
|
||||
script {
|
||||
// Defaults to the Branch name, which is applies to all branches AND pr's
|
||||
// buildxPushTags = "-t docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}"
|
||||
buildxPushTags = "-t docker.io/${DOCKER_ORG}/${IMAGE}:v3"
|
||||
buildxPushTags = "-t docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Versions') {
|
||||
steps {
|
||||
sh 'cat frontend/package.json | jq --arg BUILD_VERSION "${BUILD_VERSION}" \'.version = $BUILD_VERSION\' | sponge frontend/package.json'
|
||||
sh 'echo -e "\\E[1;36mFrontend Version is:\\E[1;33m $(cat frontend/package.json | jq -r .version)\\E[0m"'
|
||||
sh 'cat backend/package.json | jq --arg BUILD_VERSION "${BUILD_VERSION}" \'.version = $BUILD_VERSION\' | sponge backend/package.json'
|
||||
sh 'echo -e "\\E[1;36mBackend Version is:\\E[1;33m $(cat backend/package.json | jq -r .version)\\E[0m"'
|
||||
sh 'sed -i -E "s/(version-)[0-9]+\\.[0-9]+\\.[0-9]+(-green)/\\1${BUILD_VERSION}\\2/" README.md'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Build') {
|
||||
stage('Builds') {
|
||||
parallel {
|
||||
stage('Project') {
|
||||
steps {
|
||||
sh './scripts/ci/build-frontend'
|
||||
sh './scripts/ci/test-backend'
|
||||
// Temporarily disable building backend binaries
|
||||
// sh './scripts/ci/build-backend'
|
||||
// Build the docker image used for testing below
|
||||
sh '''docker build --pull --no-cache \\
|
||||
-t "${IMAGE}:${BRANCH_LOWER}-ci-${BUILD_NUMBER}" \\
|
||||
-f docker/Dockerfile \\
|
||||
--build-arg BUILD_COMMIT="${BUILD_COMMIT}" \\
|
||||
--build-arg BUILD_DATE="$(date '+%Y-%m-%d %T %Z')" \\
|
||||
--build-arg BUILD_VERSION="${BUILD_VERSION}" \\
|
||||
.
|
||||
'''
|
||||
script {
|
||||
// Frontend and Backend
|
||||
def shStatusCode = sh(label: 'Checking and Building', returnStatus: true, script: '''
|
||||
set -e
|
||||
./scripts/ci/frontend-build > ${WORKSPACE}/tmp-sh-build 2>&1
|
||||
./scripts/ci/test-and-build > ${WORKSPACE}/tmp-sh-build 2>&1
|
||||
''')
|
||||
shOutput = readFile "${env.WORKSPACE}/tmp-sh-build"
|
||||
if (shStatusCode != 0) {
|
||||
error "${shOutput}"
|
||||
}
|
||||
}
|
||||
}
|
||||
post {
|
||||
success {
|
||||
junit 'test/results/junit/*'
|
||||
// archiveArtifacts allowEmptyArchive: false, artifacts: 'bin/*'
|
||||
publishHTML([
|
||||
allowMissing: false,
|
||||
alwaysLinkToLastBuild: false,
|
||||
keepAll: false,
|
||||
reportDir: 'test/results/html-reports',
|
||||
reportFiles: 'backend-coverage.html',
|
||||
reportName: 'HTML Reports',
|
||||
useWrapperFileDirectly: true
|
||||
])
|
||||
always {
|
||||
sh 'rm -f ${WORKSPACE}/tmp-sh-build'
|
||||
}
|
||||
failure {
|
||||
npmGithubPrComment("CI Error:\n\n```\n${shOutput}\n```", true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -110,7 +97,7 @@ pipeline {
|
||||
stage('Test Sqlite') {
|
||||
environment {
|
||||
COMPOSE_PROJECT_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}_sqlite"
|
||||
COMPOSE_FILE = 'docker/docker-compose.ci.yml'
|
||||
COMPOSE_FILE = 'docker/docker-compose.ci.yml:docker/docker-compose.ci.sqlite.yml'
|
||||
}
|
||||
when {
|
||||
not {
|
||||
@ -120,8 +107,6 @@ pipeline {
|
||||
steps {
|
||||
sh 'rm -rf ./test/results/junit/*'
|
||||
sh './scripts/ci/fulltest-cypress'
|
||||
// Adding this here as the schema needs to come from a running stack, but this will be used by docs later
|
||||
sh 'docker-compose exec -T fullstack curl -s --output /temp-docs/api-schema.json "http://fullstack:81/api/schema"'
|
||||
}
|
||||
post {
|
||||
always {
|
||||
@ -165,39 +150,6 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Test Postgres') {
|
||||
environment {
|
||||
COMPOSE_PROJECT_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}_postgres"
|
||||
COMPOSE_FILE = 'docker/docker-compose.ci.yml:docker/docker-compose.ci.postgres.yml'
|
||||
}
|
||||
when {
|
||||
not {
|
||||
equals expected: 'UNSTABLE', actual: currentBuild.result
|
||||
}
|
||||
}
|
||||
steps {
|
||||
sh 'rm -rf ./test/results/junit/*'
|
||||
sh './scripts/ci/fulltest-cypress'
|
||||
}
|
||||
post {
|
||||
always {
|
||||
// Dumps to analyze later
|
||||
sh 'mkdir -p debug/postgres'
|
||||
sh 'docker logs $(docker-compose ps --all -q fullstack) > debug/postgres/docker_fullstack.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q stepca) > debug/postgres/docker_stepca.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q pdns) > debug/postgres/docker_pdns.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q pdns-db) > debug/postgres/docker_pdns-db.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q dnsrouter) > debug/postgres/docker_dnsrouter.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q db-postgres) > debug/postgres/docker_db.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q authentik) > debug/postgres/docker_authentik.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q authentik-redis) > debug/postgres/docker_authentik-redis.log 2>&1'
|
||||
sh 'docker logs $(docker-compose ps --all -q authentik-ldap) > debug/postgres/docker_authentik-ldap.log 2>&1'
|
||||
|
||||
junit 'test/results/junit/*'
|
||||
sh 'docker-compose down --remove-orphans --volumes -t 30 || true'
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('MultiArch Build') {
|
||||
when {
|
||||
not {
|
||||
@ -208,7 +160,6 @@ pipeline {
|
||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
||||
sh 'docker login -u "${duser}" -p "${dpass}"'
|
||||
sh "./scripts/buildx --push ${buildxPushTags}"
|
||||
// sh './scripts/buildx -o type=local,dest=docker-build'
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -217,7 +168,7 @@ pipeline {
|
||||
stage('Docs Job') {
|
||||
when {
|
||||
allOf {
|
||||
branch pattern: "^(develop|master|v3)\$", comparator: "REGEXP"
|
||||
branch pattern: "^(develop|master)\$", comparator: "REGEXP"
|
||||
not {
|
||||
equals expected: 'UNSTABLE', actual: currentBuild.result
|
||||
}
|
||||
@ -247,22 +198,32 @@ pipeline {
|
||||
}
|
||||
post {
|
||||
always {
|
||||
sh './scripts/ci/build-cleanup'
|
||||
echo 'Reverting ownership'
|
||||
sh 'docker run --rm -v $(pwd):/data jc21/gotools:latest chown -R "$(id -u):$(id -g)" /data'
|
||||
printResult()
|
||||
sh 'echo Reverting ownership'
|
||||
sh 'docker run --rm -v "$(pwd):/data" jc21/ci-tools chown -R "$(id -u):$(id -g)" /data'
|
||||
}
|
||||
success {
|
||||
juxtapose event: 'success'
|
||||
sh 'figlet "SUCCESS"'
|
||||
}
|
||||
failure {
|
||||
archiveArtifacts(artifacts: 'debug/**/*', allowEmptyArchive: true)
|
||||
dir(path: 'test') {
|
||||
archiveArtifacts allowEmptyArchive: true, artifacts: 'results/**/*', excludes: '**/*.xml'
|
||||
}
|
||||
archiveArtifacts(artifacts: 'debug/**/*.*', allowEmptyArchive: true)
|
||||
juxtapose event: 'failure'
|
||||
sh 'figlet "FAILURE"'
|
||||
}
|
||||
unstable {
|
||||
archiveArtifacts(artifacts: 'debug/**/*', allowEmptyArchive: true)
|
||||
dir(path: 'test') {
|
||||
archiveArtifacts allowEmptyArchive: true, artifacts: 'results/**/*', excludes: '**/*.xml'
|
||||
}
|
||||
archiveArtifacts(artifacts: 'debug/**/*.*', allowEmptyArchive: true)
|
||||
juxtapose event: 'unstable'
|
||||
sh 'figlet "UNSTABLE"'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def getVersion() {
|
||||
ver = sh(script: 'cat .version', returnStdout: true)
|
||||
return ver.trim()
|
||||
}
|
||||
|
||||
def getCommit() {
|
||||
ver = sh(script: 'git log -n 1 --format=%h', returnStdout: true)
|
||||
return ver.trim()
|
||||
}
|
||||
|
47
README.md
47
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.9.19-green.svg?style=for-the-badge">
|
||||
<img src="https://img.shields.io/badge/version-2.11.3-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>
|
||||
@ -19,7 +19,7 @@ running at home or otherwise, including free SSL, without having to know too muc
|
||||
|
||||
## Project Goal
|
||||
|
||||
I created this project to fill a personal need to provide users with a easy way to accomplish reverse
|
||||
I created this project to fill a personal need to provide users with an easy way to accomplish reverse
|
||||
proxying hosts with SSL termination and it had to be so easy that a monkey could do it. This goal hasn't changed.
|
||||
While there might be advanced options they are optional and the project should be as simple as possible
|
||||
so that the barrier for entry here is low.
|
||||
@ -29,7 +29,7 @@ so that the barrier for entry here is low.
|
||||
|
||||
## Features
|
||||
|
||||
- Beautiful and Secure Admin Interface based on [Chakra UI](https://chakra-ui.com/)
|
||||
- Beautiful and Secure Admin Interface based on [Tabler](https://tabler.github.io/)
|
||||
- Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx
|
||||
- Free SSL using Let's Encrypt or provide your own custom SSL certificates
|
||||
- Access Lists and basic HTTP Authentication for your hosts
|
||||
@ -46,8 +46,7 @@ I won't go in to too much detail here but here are the basics for someone new to
|
||||
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)
|
||||
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
|
||||
|
||||
|
||||
## Quickest Setup
|
||||
## Quick Setup
|
||||
|
||||
1. Install Docker and Docker-Compose
|
||||
|
||||
@ -57,10 +56,9 @@ I won't go in to too much detail here but here are the basics for someone new to
|
||||
2. Create a docker-compose.yml file similar to this:
|
||||
|
||||
```yml
|
||||
version: '3'
|
||||
services:
|
||||
app:
|
||||
image: 'jc21/nginx-proxy-manager:v3'
|
||||
image: 'docker.io/jc21/nginx-proxy-manager:latest'
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '80:80'
|
||||
@ -68,8 +66,11 @@ services:
|
||||
- '443:443'
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./letsencrypt:/etc/letsencrypt
|
||||
```
|
||||
|
||||
This is the bare minimum configuration required. See the [documentation](https://nginxproxymanager.com/setup/) for more.
|
||||
|
||||
3. Bring up your stack by running
|
||||
|
||||
```bash
|
||||
@ -77,25 +78,43 @@ docker-compose up -d
|
||||
|
||||
# If using docker-compose-plugin
|
||||
docker compose up -d
|
||||
|
||||
```
|
||||
|
||||
4. Log in to the Admin UI
|
||||
|
||||
When your docker container is running, connect to it on port `81` for the admin interface.
|
||||
Sometimes this can take a little bit because of the entropy of keys.
|
||||
|
||||
[http://127.0.0.1:81](http://127.0.0.1:81)
|
||||
|
||||
## Contributors
|
||||
Default Admin User:
|
||||
```
|
||||
Email: admin@example.com
|
||||
Password: changeme
|
||||
```
|
||||
|
||||
Immediately after logging in with this default user you will be asked to modify your details and change your password.
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
All are welcome to create pull requests for this project, against the `develop` branch. Official releases are created from the `master` branch.
|
||||
|
||||
CI is used in this project. All PR's must pass before being considered. After passing,
|
||||
docker builds for PR's are available on dockerhub for manual verifications.
|
||||
|
||||
Documentation within the `develop` branch is available for preview at
|
||||
[https://develop.nginxproxymanager.com](https://develop.nginxproxymanager.com)
|
||||
|
||||
|
||||
### Contributors
|
||||
|
||||
Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors).
|
||||
|
||||
|
||||
## Getting Support
|
||||
|
||||
1. [Found a bug?](https://github.com/NginxProxyManager/nginx-proxy-manager/issues)
|
||||
2. [Discussions](https://github.com/NginxProxyManager/nginx-proxy-manager/discussions)
|
||||
3. [Development Gitter](https://gitter.im/nginx-proxy-manager/community)
|
||||
4. [Reddit](https://reddit.com/r/nginxproxymanager)
|
||||
|
||||
## Become a Contributor
|
||||
|
||||
A guide to setting up your own development environment [is found here](DEV-README.md).
|
||||
3. [Reddit](https://reddit.com/r/nginxproxymanager)
|
||||
|
@ -1,8 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = false
|
73
backend/.eslintrc.json
Normal file
73
backend/.eslintrc.json
Normal file
@ -0,0 +1,73 @@
|
||||
{
|
||||
"env": {
|
||||
"node": true,
|
||||
"es6": true
|
||||
},
|
||||
"extends": [
|
||||
"eslint:recommended"
|
||||
],
|
||||
"globals": {
|
||||
"Atomics": "readonly",
|
||||
"SharedArrayBuffer": "readonly"
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": [
|
||||
"align-assignments"
|
||||
],
|
||||
"rules": {
|
||||
"arrow-parens": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"indent": [
|
||||
"error",
|
||||
"tab"
|
||||
],
|
||||
"linebreak-style": [
|
||||
"error",
|
||||
"unix"
|
||||
],
|
||||
"quotes": [
|
||||
"error",
|
||||
"single"
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"key-spacing": [
|
||||
"error",
|
||||
{
|
||||
"align": "value"
|
||||
}
|
||||
],
|
||||
"comma-spacing": [
|
||||
"error",
|
||||
{
|
||||
"before": false,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"func-call-spacing": [
|
||||
"error",
|
||||
"never"
|
||||
],
|
||||
"keyword-spacing": [
|
||||
"error",
|
||||
{
|
||||
"before": true
|
||||
}
|
||||
],
|
||||
"no-irregular-whitespace": "error",
|
||||
"no-unused-expressions": 0,
|
||||
"align-assignments/align-assignments": [
|
||||
2,
|
||||
{
|
||||
"requiresOnly": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
8
backend/.gitignore
vendored
Normal file
8
backend/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
config/development.json
|
||||
data/*
|
||||
yarn-error.log
|
||||
tmp
|
||||
certbot.log
|
||||
node_modules
|
||||
core.*
|
||||
|
@ -1,166 +0,0 @@
|
||||
---
|
||||
linters:
|
||||
enable:
|
||||
# Prevents against memory leaks in production caused by not closing
|
||||
# file handle
|
||||
- bodyclose
|
||||
# Detects cloned code. DRY is good programming practice. Can cause issues
|
||||
# with testing code where simplicity is preferred over duplication.
|
||||
# Disabled for test code.
|
||||
# - dupl
|
||||
# Detects unchecked errors in go programs. These unchecked errors can be
|
||||
# critical bugs in some cases.
|
||||
- errcheck
|
||||
# Simplifies go code.
|
||||
- gosimple
|
||||
# Controls Go package import order and makes it always deterministic.
|
||||
- gci
|
||||
# Reports suspicious constructs, maintained by goteam. e.g. Printf unused
|
||||
# params not caught at compile time.
|
||||
- govet
|
||||
# Detect security issues with gocode. Use of secrets in code or obsolete
|
||||
# security algorithms. It's imaged heuristic methods are used in finding
|
||||
# problems. If issues with rules are found particular rules can be disabled
|
||||
# as required. Could possibility cause issues with testing.
|
||||
# Disabled for test code.
|
||||
- gosec
|
||||
# Detect repeated strings that could be replaced by a constant
|
||||
- goconst
|
||||
# Misc linters missing from other projects. Grouped into 3 categories
|
||||
# diagnostics, style and performance
|
||||
- gocritic
|
||||
# Limits code cyclomatic complexity
|
||||
- gocyclo
|
||||
# Detects if code needs to be gofmt'd
|
||||
- gofmt
|
||||
# Detects unused go package imports
|
||||
- goimports
|
||||
# Detects style mistakes not correctness. Golint is meant to carry out the
|
||||
# stylistic conventions put forth in Effective Go and CodeReviewComments.
|
||||
# golint has false positives and false negatives and can be tweaked.
|
||||
- revive
|
||||
# Detects ineffectual assignments in code
|
||||
- ineffassign
|
||||
# Reports long lines
|
||||
# - lll
|
||||
# Detect commonly misspelled english words in comments
|
||||
- misspell
|
||||
# Detect naked returns on non-trivial functions, and conform with
|
||||
# Go CodeReviewComments
|
||||
- nakedret
|
||||
# Detect slice allocations that can be preallocated
|
||||
- prealloc
|
||||
# Misc collection of static analysis tools
|
||||
- staticcheck
|
||||
# Detects unused struct fields
|
||||
# - structcheck
|
||||
# Parses and typechecks the code like the go compiler
|
||||
- typecheck
|
||||
# Detects unused constants, variables, functions and types
|
||||
- unused
|
||||
# Remove unnecessary type conversions
|
||||
- unconvert
|
||||
# Remove unnecessary(unused) function parameters
|
||||
- unparam
|
||||
linters-settings:
|
||||
errcheck:
|
||||
exclude-functions:
|
||||
- fmt.Fprint
|
||||
- fmt.Fprintf
|
||||
gci:
|
||||
sections:
|
||||
- standard # Standard section: captures all standard packages.
|
||||
- localmodule # Local module section: contains all local packages.
|
||||
# - prefix(gogs.jc21.com) # Prefixed gerrit.lan packages (jumgo).
|
||||
- default # Everything else (github.com, golang.org, etc).
|
||||
- blank # Blank section: contains all blank imports.
|
||||
custom-order: true
|
||||
goconst:
|
||||
# minimal length of string constant
|
||||
# default: 3
|
||||
min-len: 2
|
||||
# minimum number of occurrences of string constant
|
||||
# default: 3
|
||||
min-occurences: 2
|
||||
revive:
|
||||
enable-all-rules: true
|
||||
rules:
|
||||
- name: unchecked-type-assertion
|
||||
disabled: true
|
||||
# handled by goconst
|
||||
- name: add-constant
|
||||
disabled: true
|
||||
# cant limit this arbitrarily
|
||||
- name: argument-limit
|
||||
disabled: true
|
||||
# handled by gocyclo
|
||||
- name: cognitive-complexity
|
||||
disabled: true
|
||||
# false positive for Exported vs non-exported functions of the same name
|
||||
- name: confusing-naming
|
||||
disabled: true
|
||||
# false positives for "" - which is the nil value of a string (also 0)
|
||||
- name: confusing-results
|
||||
disabled: true
|
||||
# handled by gocyclo
|
||||
- name: cyclomatic
|
||||
disabled: true
|
||||
# have comments on exported functions but not on vars/types/constants
|
||||
- name: exported
|
||||
arguments:
|
||||
- "disableChecksOnConstants"
|
||||
- "disableChecksOnTypes"
|
||||
- "disableChecksOnVariables"
|
||||
# false positives on bool params
|
||||
- name: flag-parameter
|
||||
disabled: true
|
||||
# extreme verticalization can happen
|
||||
- name: function-length
|
||||
disabled: true
|
||||
# can false positive for non-getters
|
||||
- name: get-return
|
||||
disabled: true
|
||||
# only allows lowercase names
|
||||
- name: import-alias-naming
|
||||
disabled: true
|
||||
# handled by lll
|
||||
- name: line-length-limit
|
||||
disabled: true
|
||||
# don't want to arbitrarily limit this
|
||||
# many places have specific model.go files to contain all structs
|
||||
- name: max-public-structs
|
||||
disabled: true
|
||||
# disable package-comments
|
||||
- name: package-comments
|
||||
disabled: true
|
||||
# this is handled by errcheck
|
||||
- name: unhandled-error
|
||||
disabled: true
|
||||
- name: function-result-limit
|
||||
disabled: true
|
||||
issues:
|
||||
# Maximum count of issues with the same text. Set to 0 to disable. Default
|
||||
# is 3. We have chosen an arbitrary value that works based on practical usage.
|
||||
max-same: 20
|
||||
# See cmdline flag documentation for more info about default excludes
|
||||
# --exclude-use-default. Nothing is excluded by default
|
||||
exclude-use-default: false
|
||||
# Excluding configuration per-path, per-linter, per-text and per-source
|
||||
exclude-rules:
|
||||
# Exclude some linters from running on tests files.
|
||||
# TODO: Add examples why this is good
|
||||
- path: _test\.go
|
||||
linters:
|
||||
# Tests should be simple? Add example why this is good?
|
||||
- gocyclo
|
||||
# Error checking adds verbosity and complexity for minimal value
|
||||
- errcheck
|
||||
# Table test encourage duplication in defining the table tests.
|
||||
- dupl
|
||||
# Hard coded example tokens, SQL injection and other bad practices may
|
||||
# want to be tested
|
||||
- gosec
|
||||
# Test data can long
|
||||
# - lll
|
||||
run:
|
||||
go: '1.23'
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"printWidth": 320,
|
||||
"tabWidth": 4,
|
||||
"useTabs": true,
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"singleQuote": true,
|
||||
"bracketSpacing": true,
|
||||
"bracketSameLine": true,
|
||||
"jsxBracketSameLine": true,
|
||||
"trailingComma": "all",
|
||||
"proseWrap": "always"
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
---
|
||||
|
||||
# (mandatory)
|
||||
# Path to coverprofile file (output of `go test -coverprofile` command).
|
||||
profile: coverage.out
|
||||
|
||||
# (optional; but recommended to set)
|
||||
# When specified reported file paths will not contain local prefix in the output
|
||||
local-prefix: "npm"
|
||||
|
||||
# Holds coverage thresholds percentages, values should be in range [0-100]
|
||||
threshold:
|
||||
# (optional; default 0)
|
||||
# The minimum coverage that each file should have
|
||||
# file: 70
|
||||
# (optional; default 0)
|
||||
# The minimum coverage that each package should have
|
||||
# package: 30
|
||||
# (optional; default 0)
|
||||
# The minimum total coverage project should have
|
||||
total: 30
|
@ -1,6 +0,0 @@
|
||||
# Backend
|
||||
|
||||
## Guides and materials
|
||||
|
||||
- [Nginx Proxy Protocol](https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/)
|
||||
-
|
@ -1,70 +0,0 @@
|
||||
version: "3"
|
||||
|
||||
tasks:
|
||||
default:
|
||||
cmds:
|
||||
- task: run
|
||||
|
||||
run:
|
||||
desc: Build and run
|
||||
sources:
|
||||
- internal/**/*.go
|
||||
- cmd/**/*.go
|
||||
- ../frontend/src/locale/src/*.json
|
||||
cmds:
|
||||
- task: locale
|
||||
- task: build
|
||||
force: true
|
||||
- cmd: echo -e "==> Running..."
|
||||
silent: true
|
||||
- cmd: ../dist/bin/server
|
||||
ignore_error: true
|
||||
silent: true
|
||||
env:
|
||||
LOG_LEVEL: debug
|
||||
|
||||
build:
|
||||
desc: Build the server
|
||||
cmds:
|
||||
- cmd: echo -e "==> Building..."
|
||||
silent: true
|
||||
- cmd: rm -f dist/bin/*
|
||||
silent: true
|
||||
- cmd: go build -tags 'json1' -buildvcs=false -ldflags="-X main.commit={{.GIT_COMMIT}} -X main.version={{.VERSION}}" -o ../dist/bin/server ./cmd/server/main.go
|
||||
silent: true
|
||||
- cmd: go build -buildvcs=false -ldflags="-X main.commit={{.GIT_COMMIT}} -X main.version={{.VERSION}}" -o ../dist/bin/ipranges ./cmd/ipranges/main.go
|
||||
silent: true
|
||||
- cmd: rm -f /etc/nginx/conf.d/include/ipranges.conf && /app/dist/bin/ipranges > /etc/nginx/conf.d/include/ipranges.conf
|
||||
- task: lint
|
||||
vars:
|
||||
GIT_COMMIT:
|
||||
sh: git log -n 1 --format=%h
|
||||
VERSION:
|
||||
sh: cat ../.version
|
||||
|
||||
lint:
|
||||
desc: Linting
|
||||
cmds:
|
||||
- cmd: echo -e "==> Linting..."
|
||||
silent: true
|
||||
- cmd: bash scripts/lint.sh
|
||||
silent: true
|
||||
|
||||
test:
|
||||
desc: Testing
|
||||
cmds:
|
||||
- cmd: echo -e "==> Testing..."
|
||||
silent: true
|
||||
- cmd: bash scripts/test.sh
|
||||
silent: true
|
||||
|
||||
locale:
|
||||
desc: Locale
|
||||
dir: /app/frontend
|
||||
cmds:
|
||||
- cmd: yarn locale-compile
|
||||
silent: true
|
||||
ignore_error: true
|
||||
- cmd: chown -R "$PUID:$PGID" src/locale/lang
|
||||
silent: true
|
||||
ignore_error: true
|
90
backend/app.js
Normal file
90
backend/app.js
Normal file
@ -0,0 +1,90 @@
|
||||
const express = require('express');
|
||||
const bodyParser = require('body-parser');
|
||||
const fileUpload = require('express-fileupload');
|
||||
const compression = require('compression');
|
||||
const config = require('./lib/config');
|
||||
const log = require('./logger').express;
|
||||
|
||||
/**
|
||||
* App
|
||||
*/
|
||||
const app = express();
|
||||
app.use(fileUpload());
|
||||
app.use(bodyParser.json());
|
||||
app.use(bodyParser.urlencoded({extended: true}));
|
||||
|
||||
// Gzip
|
||||
app.use(compression());
|
||||
|
||||
/**
|
||||
* General Logging, BEFORE routes
|
||||
*/
|
||||
|
||||
app.disable('x-powered-by');
|
||||
app.enable('trust proxy', ['loopback', 'linklocal', 'uniquelocal']);
|
||||
app.enable('strict routing');
|
||||
|
||||
// pretty print JSON when not live
|
||||
if (config.debug()) {
|
||||
app.set('json spaces', 2);
|
||||
}
|
||||
|
||||
// CORS for everything
|
||||
app.use(require('./lib/express/cors'));
|
||||
|
||||
// General security/cache related headers + server header
|
||||
app.use(function (req, res, next) {
|
||||
let x_frame_options = 'DENY';
|
||||
|
||||
if (typeof process.env.X_FRAME_OPTIONS !== 'undefined' && process.env.X_FRAME_OPTIONS) {
|
||||
x_frame_options = process.env.X_FRAME_OPTIONS;
|
||||
}
|
||||
|
||||
res.set({
|
||||
'X-XSS-Protection': '1; mode=block',
|
||||
'X-Content-Type-Options': 'nosniff',
|
||||
'X-Frame-Options': x_frame_options,
|
||||
'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate',
|
||||
Pragma: 'no-cache',
|
||||
Expires: 0
|
||||
});
|
||||
next();
|
||||
});
|
||||
|
||||
app.use(require('./lib/express/jwt')());
|
||||
app.use('/', require('./routes/main'));
|
||||
|
||||
// production error handler
|
||||
// no stacktraces leaked to user
|
||||
// eslint-disable-next-line
|
||||
app.use(function (err, req, res, next) {
|
||||
|
||||
let payload = {
|
||||
error: {
|
||||
code: err.status,
|
||||
message: err.public ? err.message : 'Internal Error'
|
||||
}
|
||||
};
|
||||
|
||||
if (config.debug() || (req.baseUrl + req.path).includes('nginx/certificates')) {
|
||||
payload.debug = {
|
||||
stack: typeof err.stack !== 'undefined' && err.stack ? err.stack.split('\n') : null,
|
||||
previous: err.previous
|
||||
};
|
||||
}
|
||||
|
||||
// Not every error is worth logging - but this is good for now until it gets annoying.
|
||||
if (typeof err.stack !== 'undefined' && err.stack) {
|
||||
if (config.debug()) {
|
||||
log.debug(err.stack);
|
||||
} else if (typeof err.public == 'undefined' || !err.public) {
|
||||
log.warn(err.message);
|
||||
}
|
||||
}
|
||||
|
||||
res
|
||||
.status(err.status || 500)
|
||||
.send(payload);
|
||||
});
|
||||
|
||||
module.exports = app;
|
@ -1,125 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"npm/internal/config"
|
||||
"npm/internal/model"
|
||||
|
||||
"github.com/rotisserie/eris"
|
||||
)
|
||||
|
||||
var commit string
|
||||
var version string
|
||||
|
||||
var cloudfrontURL = "https://ip-ranges.amazonaws.com/ip-ranges.json"
|
||||
var cloudflare4URL = "https://www.cloudflare.com/ips-v4"
|
||||
var cloudflare6URL = "https://www.cloudflare.com/ips-v6"
|
||||
|
||||
func main() {
|
||||
config.InitArgs(&version, &commit)
|
||||
if err := config.InitIPRanges(&version, &commit); err != nil {
|
||||
fmt.Printf("# Config ERROR: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
exitCode := 0
|
||||
|
||||
// Cloudfront
|
||||
fmt.Printf("# Cloudfront Ranges from: %s\n", cloudfrontURL)
|
||||
if ranges, err := parseCloudfront(); err == nil {
|
||||
for _, item := range ranges {
|
||||
fmt.Printf("set_real_ip_from %s;\n", item)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("# ERROR: %v\n", err)
|
||||
}
|
||||
|
||||
// Cloudflare ipv4
|
||||
if !config.Configuration.DisableIPV4 {
|
||||
fmt.Printf("\n# Cloudflare Ranges from: %s\n", cloudflare4URL)
|
||||
if ranges, err := parseCloudflare(cloudflare4URL); err == nil {
|
||||
for _, item := range ranges {
|
||||
fmt.Printf("set_real_ip_from %s;\n", item)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("# ERROR: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Cloudflare ipv6
|
||||
if !config.Configuration.DisableIPV6 {
|
||||
fmt.Printf("\n# Cloudflare Ranges from: %s\n", cloudflare6URL)
|
||||
if ranges, err := parseCloudflare(cloudflare6URL); err == nil {
|
||||
for _, item := range ranges {
|
||||
fmt.Printf("set_real_ip_from %s;\n", item)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("# ERROR: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Done
|
||||
os.Exit(exitCode)
|
||||
}
|
||||
|
||||
func parseCloudfront() ([]string, error) {
|
||||
// nolint: gosec
|
||||
resp, err := http.Get(cloudfrontURL)
|
||||
if err != nil {
|
||||
return nil, eris.Wrapf(err, "Failed to download Cloudfront IP Ranges from %s", cloudfrontURL)
|
||||
}
|
||||
|
||||
// nolint: errcheck, gosec
|
||||
defer resp.Body.Close()
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, eris.Wrapf(err, "Failed to read Cloudfront IP Ranges body")
|
||||
}
|
||||
|
||||
var result model.CloudfrontIPRanges
|
||||
if err := json.Unmarshal(body, &result); err != nil {
|
||||
return nil, eris.Wrapf(err, "Failed to unmarshal Cloudfront IP Ranges file")
|
||||
}
|
||||
|
||||
ranges := make([]string, 0)
|
||||
if !config.Configuration.DisableIPV4 {
|
||||
for _, item := range result.IPV4Prefixes {
|
||||
ranges = append(ranges, item.Value)
|
||||
}
|
||||
}
|
||||
if !config.Configuration.DisableIPV6 {
|
||||
for _, item := range result.IPV6Prefixes {
|
||||
ranges = append(ranges, item.Value)
|
||||
}
|
||||
}
|
||||
|
||||
return ranges, nil
|
||||
}
|
||||
|
||||
func parseCloudflare(url string) ([]string, error) {
|
||||
// nolint: gosec
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return nil, eris.Wrapf(err, "Failed to download Cloudflare IP Ranges from %s", url)
|
||||
}
|
||||
|
||||
// nolint: errcheck, gosec
|
||||
defer resp.Body.Close()
|
||||
|
||||
scanner := bufio.NewScanner(resp.Body)
|
||||
scanner.Split(bufio.ScanLines)
|
||||
|
||||
ranges := make([]string, 0)
|
||||
for scanner.Scan() {
|
||||
if scanner.Text() != "" {
|
||||
ranges = append(ranges, scanner.Text())
|
||||
}
|
||||
}
|
||||
return ranges, nil
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"npm/internal/api"
|
||||
"npm/internal/config"
|
||||
"npm/internal/database"
|
||||
"npm/internal/entity/certificate"
|
||||
"npm/internal/entity/host"
|
||||
"npm/internal/entity/user"
|
||||
"npm/internal/errors"
|
||||
"npm/internal/jobqueue"
|
||||
"npm/internal/jwt"
|
||||
"npm/internal/logger"
|
||||
|
||||
// properly respect available cpu cores
|
||||
_ "go.uber.org/automaxprocs"
|
||||
)
|
||||
|
||||
var commit string
|
||||
var version string
|
||||
|
||||
func main() {
|
||||
config.InitArgs(&version, &commit)
|
||||
config.Init(&version, &commit)
|
||||
config.CreateDataFolders()
|
||||
logger.Info("Build Version: %s (%s)", version, commit)
|
||||
|
||||
database.Migrate(func() {
|
||||
if err := jwt.LoadKeys(); err != nil {
|
||||
logger.Error("KeysError", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
checkSetup()
|
||||
|
||||
// Internal Job Queue
|
||||
jobqueue.Start()
|
||||
certificate.AddPendingJobs()
|
||||
host.AddPendingJobs()
|
||||
|
||||
// Http server
|
||||
api.StartServer()
|
||||
irqchan := make(chan os.Signal, 1)
|
||||
signal.Notify(irqchan, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
for irq := range irqchan {
|
||||
if irq == syscall.SIGINT || irq == syscall.SIGTERM {
|
||||
logger.Info("Got ", irq, " shutting server down ...")
|
||||
// Close db
|
||||
sqlDB, _ := database.GetDB().DB()
|
||||
err := sqlDB.Close()
|
||||
if err != nil {
|
||||
logger.Error("DatabaseCloseError", err)
|
||||
}
|
||||
// nolint
|
||||
jobqueue.Shutdown()
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// checkSetup Quick check by counting the number of users in the database
|
||||
func checkSetup() {
|
||||
db := database.GetDB()
|
||||
var count int64
|
||||
|
||||
if db != nil {
|
||||
db.Model(&user.Model{}).
|
||||
Where("is_disabled = ?", false).
|
||||
Where("is_system = ?", false).
|
||||
Count(&count)
|
||||
|
||||
if count == 0 {
|
||||
logger.Warn("No users found, starting in Setup Mode")
|
||||
} else {
|
||||
config.IsSetup = true
|
||||
logger.Info("Application is setup")
|
||||
}
|
||||
} else {
|
||||
logger.Error("DatabaseError", errors.ErrDatabaseUnavailable)
|
||||
}
|
||||
}
|
2
backend/config/README.md
Normal file
2
backend/config/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
These files are use in development and are not deployed as part of the final product.
|
||||
|
10
backend/config/default.json
Normal file
10
backend/config/default.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"database": {
|
||||
"engine": "mysql",
|
||||
"host": "db",
|
||||
"name": "npm",
|
||||
"user": "npm",
|
||||
"password": "npm",
|
||||
"port": 3306
|
||||
}
|
||||
}
|
26
backend/config/sqlite-test-db.json
Normal file
26
backend/config/sqlite-test-db.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"database": {
|
||||
"engine": "knex-native",
|
||||
"knex": {
|
||||
"client": "sqlite3",
|
||||
"connection": {
|
||||
"filename": "/app/config/mydb.sqlite"
|
||||
},
|
||||
"pool": {
|
||||
"min": 0,
|
||||
"max": 1,
|
||||
"createTimeoutMillis": 3000,
|
||||
"acquireTimeoutMillis": 30000,
|
||||
"idleTimeoutMillis": 30000,
|
||||
"reapIntervalMillis": 1000,
|
||||
"createRetryIntervalMillis": 100,
|
||||
"propagateCreateError": false
|
||||
},
|
||||
"migrations": {
|
||||
"tableName": "migrations",
|
||||
"stub": "src/backend/lib/migrate_template.js",
|
||||
"directory": "src/backend/migrations"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
27
backend/db.js
Normal file
27
backend/db.js
Normal file
@ -0,0 +1,27 @@
|
||||
const config = require('./lib/config');
|
||||
|
||||
if (!config.has('database')) {
|
||||
throw new Error('Database config does not exist! Please read the instructions: https://nginxproxymanager.com/setup/');
|
||||
}
|
||||
|
||||
function generateDbConfig() {
|
||||
const cfg = config.get('database');
|
||||
if (cfg.engine === 'knex-native') {
|
||||
return cfg.knex;
|
||||
}
|
||||
return {
|
||||
client: cfg.engine,
|
||||
connection: {
|
||||
host: cfg.host,
|
||||
user: cfg.user,
|
||||
password: cfg.password,
|
||||
database: cfg.name,
|
||||
port: cfg.port
|
||||
},
|
||||
migrations: {
|
||||
tableName: 'migrations'
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = require('knex')(generateDbConfig());
|
1456
backend/doc/api.swagger.json
Normal file
1456
backend/doc/api.swagger.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,310 +0,0 @@
|
||||
{
|
||||
"openapi": "3.0.0",
|
||||
"info": {
|
||||
"title": "Nginx Proxy Manager API",
|
||||
"version": "{{VERSION}}"
|
||||
},
|
||||
"paths": {
|
||||
"/": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/get.json"
|
||||
}
|
||||
},
|
||||
"/auth": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/auth/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/auth/post.json"
|
||||
}
|
||||
},
|
||||
"/auth/refresh": {
|
||||
"post": {
|
||||
"$ref": "file://./paths/auth/refresh/post.json"
|
||||
}
|
||||
},
|
||||
"/auth/sse": {
|
||||
"post": {
|
||||
"$ref": "file://./paths/auth/sse/post.json"
|
||||
}
|
||||
},
|
||||
"/certificates": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/certificates/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/certificates/post.json"
|
||||
}
|
||||
},
|
||||
"/certificates/{certificateID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/certificates/certificateID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/certificates/certificateID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/certificates/certificateID/delete.json"
|
||||
}
|
||||
},
|
||||
"/certificates-authorities": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/certificates-authorities/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/certificates-authorities/post.json"
|
||||
}
|
||||
},
|
||||
"/certificates-authorities/{caID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/certificates-authorities/caID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/certificates-authorities/caID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/certificates-authorities/caID/delete.json"
|
||||
}
|
||||
},
|
||||
"/config": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/config/get.json"
|
||||
}
|
||||
},
|
||||
"/dns-providers": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/dns-providers/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/dns-providers/post.json"
|
||||
}
|
||||
},
|
||||
"/dns-providers/{providerID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/dns-providers/providerID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/dns-providers/providerID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/dns-providers/providerID/delete.json"
|
||||
}
|
||||
},
|
||||
"/hosts": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/hosts/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/hosts/post.json"
|
||||
}
|
||||
},
|
||||
"/hosts/{hostID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/hosts/hostID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/hosts/hostID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/hosts/hostID/delete.json"
|
||||
}
|
||||
},
|
||||
"/hosts/{hostID}/nginx-config": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/hosts/hostID/nginx-config/get.json"
|
||||
}
|
||||
},
|
||||
"/nginx-templates": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/nginx-templates/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/nginx-templates/post.json"
|
||||
}
|
||||
},
|
||||
"/nginx-templates/{templateID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/nginx-templates/templateID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/nginx-templates/templateID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/nginx-templates/templateID/delete.json"
|
||||
}
|
||||
},
|
||||
"/schema": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/schema/get.json"
|
||||
}
|
||||
},
|
||||
"/settings": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/settings/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/settings/post.json"
|
||||
}
|
||||
},
|
||||
"/settings/{name}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/settings/name/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/settings/name/put.json"
|
||||
}
|
||||
},
|
||||
"/streams": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/streams/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/streams/post.json"
|
||||
}
|
||||
},
|
||||
"/streams/{streamID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/streams/streamID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/streams/streamID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/streams/streamID/delete.json"
|
||||
}
|
||||
},
|
||||
"/upstreams": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/upstreams/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/upstreams/post.json"
|
||||
}
|
||||
},
|
||||
"/upstreams/{upstreamID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/upstreams/upstreamID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/upstreams/upstreamID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/upstreams/upstreamID/delete.json"
|
||||
}
|
||||
},
|
||||
"/upstreams/{upstreamID}/nginx-config": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/upstreams/upstreamID/nginx-config/get.json"
|
||||
}
|
||||
},
|
||||
"/users": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/users/get.json"
|
||||
},
|
||||
"post": {
|
||||
"$ref": "file://./paths/users/post.json"
|
||||
}
|
||||
},
|
||||
"/users/{userID}": {
|
||||
"get": {
|
||||
"$ref": "file://./paths/users/userID/get.json"
|
||||
},
|
||||
"put": {
|
||||
"$ref": "file://./paths/users/userID/put.json"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "file://./paths/users/userID/delete.json"
|
||||
}
|
||||
},
|
||||
"/users/{userID}/auth": {
|
||||
"post": {
|
||||
"$ref": "file://./paths/users/userID/auth/post.json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {
|
||||
"AuthConfigObject": {
|
||||
"$ref": "file://./components/AuthConfigObject.json"
|
||||
},
|
||||
"CertificateAuthorityList": {
|
||||
"$ref": "file://./components/CertificateAuthorityList.json"
|
||||
},
|
||||
"CertificateAuthorityObject": {
|
||||
"$ref": "file://./components/CertificateAuthorityObject.json"
|
||||
},
|
||||
"CertificateList": {
|
||||
"$ref": "file://./components/CertificateList.json"
|
||||
},
|
||||
"CertificateObject": {
|
||||
"$ref": "file://./components/CertificateObject.json"
|
||||
},
|
||||
"ConfigObject": {
|
||||
"$ref": "file://./components/ConfigObject.json"
|
||||
},
|
||||
"DeletedItemResponse": {
|
||||
"$ref": "file://./components/DeletedItemResponse.json"
|
||||
},
|
||||
"DNSProviderList": {
|
||||
"$ref": "file://./components/DNSProviderList.json"
|
||||
},
|
||||
"DNSProviderObject": {
|
||||
"$ref": "file://./components/DNSProviderObject.json"
|
||||
},
|
||||
"ErrorObject": {
|
||||
"$ref": "file://./components/ErrorObject.json"
|
||||
},
|
||||
"FilterObject": {
|
||||
"$ref": "file://./components/FilterObject.json"
|
||||
},
|
||||
"HealthObject": {
|
||||
"$ref": "file://./components/HealthObject.json"
|
||||
},
|
||||
"HostList": {
|
||||
"$ref": "file://./components/HostList.json"
|
||||
},
|
||||
"HostObject": {
|
||||
"$ref": "file://./components/HostObject.json"
|
||||
},
|
||||
"NginxTemplateList": {
|
||||
"$ref": "file://./components/NginxTemplateList.json"
|
||||
},
|
||||
"NginxTemplateObject": {
|
||||
"$ref": "file://./components/NginxTemplateObject.json"
|
||||
},
|
||||
"SettingList": {
|
||||
"$ref": "file://./components/SettingList.json"
|
||||
},
|
||||
"SettingObject": {
|
||||
"$ref": "file://./components/SettingObject.json"
|
||||
},
|
||||
"SortObject": {
|
||||
"$ref": "file://./components/SortObject.json"
|
||||
},
|
||||
"StreamList": {
|
||||
"$ref": "file://./components/StreamList.json"
|
||||
},
|
||||
"StreamObject": {
|
||||
"$ref": "file://./components/StreamObject.json"
|
||||
},
|
||||
"TokenObject": {
|
||||
"$ref": "file://./components/TokenObject.json"
|
||||
},
|
||||
"UpstreamList": {
|
||||
"$ref": "file://./components/UpstreamList.json"
|
||||
},
|
||||
"UpstreamObject": {
|
||||
"$ref": "file://./components/UpstreamObject.json"
|
||||
},
|
||||
"UserAuthObject": {
|
||||
"$ref": "file://./components/UserAuthObject.json"
|
||||
},
|
||||
"UserList": {
|
||||
"$ref": "file://./components/UserList.json"
|
||||
},
|
||||
"UserObject": {
|
||||
"$ref": "file://./components/UserObject.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "AuthConfigObject",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"local",
|
||||
"ldap",
|
||||
"oauth"
|
||||
]
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "CertificateAuthorityList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/CertificateAuthorityObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "CertificateAuthorityObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"name",
|
||||
"acmesh_server",
|
||||
"ca_bundle",
|
||||
"max_domains",
|
||||
"is_wildcard_supported",
|
||||
"is_readonly"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"acmesh_server": {
|
||||
"type": "string",
|
||||
"minLength": 2,
|
||||
"maxLength": 255
|
||||
},
|
||||
"ca_bundle": {
|
||||
"type": "string",
|
||||
"minLength": 0,
|
||||
"maxLength": 255
|
||||
},
|
||||
"max_domains": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"is_wildcard_supported": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"is_readonly": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "CertificateList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/CertificateObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "CertificateObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"expires_on",
|
||||
"type",
|
||||
"user_id",
|
||||
"certificate_authority_id",
|
||||
"dns_provider_id",
|
||||
"name",
|
||||
"is_ecc",
|
||||
"status",
|
||||
"domain_names"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"expires_on": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"nullable": true
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["custom", "http", "dns"]
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"certificate_authority_id": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"certificate_authority": {
|
||||
"$ref": "#/components/schemas/CertificateAuthorityObject"
|
||||
},
|
||||
"dns_provider_id": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"nullable": true
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"domain_names": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 4
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["ready", "requesting", "failed", "provided"]
|
||||
},
|
||||
"is_ecc": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"error_message": {
|
||||
"type": "string"
|
||||
},
|
||||
"user": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "ConfigObject"
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "DNSProviderList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/DNSProviderObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "DNSProviderObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"user_id",
|
||||
"name",
|
||||
"acmesh_name",
|
||||
"dns_sleep",
|
||||
"meta"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"acmesh_name": {
|
||||
"type": "string",
|
||||
"minLength": 4,
|
||||
"maxLength": 50
|
||||
},
|
||||
"dns_sleep": {
|
||||
"type": "integer"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "DeletedItemResponse",
|
||||
"additionalProperties": false,
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"type": "boolean",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"$ref": "#/components/schemas/ErrorObject"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "ErrorObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["code", "message"],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"description": "Error code",
|
||||
"minimum": 0
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "Error message"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "FilterObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["field", "modifier", "value"],
|
||||
"properties": {
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "Field to filter with"
|
||||
},
|
||||
"modifier": {
|
||||
"type": "string",
|
||||
"description": "Filter modifier",
|
||||
"pattern": "^(equals|not|min|max|greater|lesser|contains|starts|ends|in|notin)$"
|
||||
},
|
||||
"value": {
|
||||
"type": "array",
|
||||
"description": "Values used for filtering",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "HealthObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "commit", "healthy", "setup"],
|
||||
"properties": {
|
||||
"version": {
|
||||
"type": "string",
|
||||
"description": "Version",
|
||||
"minLength": 1
|
||||
},
|
||||
"commit": {
|
||||
"type": "string",
|
||||
"description": "Commit hash",
|
||||
"minLength": 7
|
||||
},
|
||||
"healthy": {
|
||||
"type": "boolean",
|
||||
"description": "Healthy?"
|
||||
},
|
||||
"setup": {
|
||||
"type": "boolean",
|
||||
"description": "Is the application set up?"
|
||||
},
|
||||
"acme.sh": {
|
||||
"type": "string",
|
||||
"description": "Acme.sh version",
|
||||
"minLength": 1
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "HostList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/HostObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "HostObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"user_id",
|
||||
"provider",
|
||||
"name",
|
||||
"domain_names"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"provider": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"domain_names": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 4
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "NginxTemplateList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/NginxTemplateObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "NginxTemplateObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"user_id",
|
||||
"name",
|
||||
"type",
|
||||
"template"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"pattern": "^proxy|redirect|dead|stream|upstream$"
|
||||
},
|
||||
"template": {
|
||||
"type": "string",
|
||||
"minLength": 20
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "SettingList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SettingObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "SettingObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "created_at", "updated_at", "name", "value"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 2,
|
||||
"maxLength": 100
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"minLength": 0,
|
||||
"maxLength": 100
|
||||
},
|
||||
"value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "SortObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["field", "direction"],
|
||||
"properties": {
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "Field for sorting on"
|
||||
},
|
||||
"direction": {
|
||||
"type": "string",
|
||||
"description": "Sort order",
|
||||
"pattern": "^(ASC|DESC)$"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "StreamList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/StreamObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "StreamObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"expires_on",
|
||||
"user_id",
|
||||
"provider",
|
||||
"name",
|
||||
"domain_names"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"expires_on": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"provider": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"domain_names": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "TokenObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["expires", "token"],
|
||||
"properties": {
|
||||
"expires": {
|
||||
"type": "number",
|
||||
"description": "Token Expiry Unix Time",
|
||||
"minimum": 1
|
||||
},
|
||||
"token": {
|
||||
"type": "string",
|
||||
"description": "JWT Token"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "UpstreamList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/UpstreamObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,140 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "UpstreamObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"user_id",
|
||||
"name",
|
||||
"nginx_template_id",
|
||||
"ip_hash",
|
||||
"ntlm",
|
||||
"keepalive",
|
||||
"keepalive_requests",
|
||||
"keepalive_time",
|
||||
"keepalive_timeout",
|
||||
"advanced_config",
|
||||
"status",
|
||||
"error_message",
|
||||
"servers"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"nginx_template_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"ip_hash": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"ntlm": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"keepalive": {
|
||||
"type": "integer"
|
||||
},
|
||||
"keepalive_requests": {
|
||||
"type": "integer"
|
||||
},
|
||||
"keepalive_time": {
|
||||
"type": "string"
|
||||
},
|
||||
"keepalive_timeout": {
|
||||
"type": "string"
|
||||
},
|
||||
"advanced_config": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"type": "string"
|
||||
},
|
||||
"error_message": {
|
||||
"type": "string"
|
||||
},
|
||||
"user": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
},
|
||||
"servers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"upstream_id",
|
||||
"server",
|
||||
"weight",
|
||||
"max_conns",
|
||||
"max_fails",
|
||||
"fail_timeout",
|
||||
"backup"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"upstream_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"server": {
|
||||
"type": "string",
|
||||
"minLength": 2
|
||||
},
|
||||
"weight": {
|
||||
"type": "integer"
|
||||
},
|
||||
"max_conns": {
|
||||
"type": "integer"
|
||||
},
|
||||
"max_fails": {
|
||||
"type": "integer"
|
||||
},
|
||||
"fail_timeout": {
|
||||
"type": "integer"
|
||||
},
|
||||
"backup": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "UserAuthObject",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "user_id", "type", "created_at", "updated_at"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"user_id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"pattern": "^(local|ldap|oauth)$"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "UserList",
|
||||
"additionalProperties": false,
|
||||
"required": ["total", "offset", "limit", "sort"],
|
||||
"properties": {
|
||||
"total": {
|
||||
"type": "integer",
|
||||
"description": "Total number of rows"
|
||||
},
|
||||
"offset": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Offset"
|
||||
},
|
||||
"limit": {
|
||||
"type": "integer",
|
||||
"description": "Pagination Limit"
|
||||
},
|
||||
"sort": {
|
||||
"type": "array",
|
||||
"description": "Sorting",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SortObject"
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"type": "array",
|
||||
"description": "Filters",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/FilterObject"
|
||||
}
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "UserObject",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"name",
|
||||
"email",
|
||||
"is_disabled"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Created Unix time with milliseconds"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Updated Unix time with milliseconds"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 2,
|
||||
"maxLength": 50
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"minLength": 5,
|
||||
"maxLength": 150
|
||||
},
|
||||
"gravatar_url": {
|
||||
"type": "string"
|
||||
},
|
||||
"is_disabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"is_system": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"auth": {
|
||||
"type": "object",
|
||||
"required": ["type"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"pattern": "^(local|ldap|oauth)$"
|
||||
}
|
||||
}
|
||||
},
|
||||
"capabilities": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
{
|
||||
"operationId": "getAuthConfig",
|
||||
"summary": "Returns auth configuration",
|
||||
"tags": ["Auth"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/AuthConfigObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": "todo"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
{
|
||||
"operationId": "requestToken",
|
||||
"summary": "Request a new access token from credentials",
|
||||
"tags": ["Auth"],
|
||||
"requestBody": {
|
||||
"description": "Credentials Payload",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.GetToken}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/TokenObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"expires": 1566540510,
|
||||
"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4",
|
||||
"scope": "user"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "403 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["error"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"type": "object",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"$ref": "#/components/schemas/ErrorObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": null,
|
||||
"error": {
|
||||
"code": 403,
|
||||
"message": "Not available during setup phase"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
{
|
||||
"operationId": "refreshToken",
|
||||
"summary": "Refresh your access token",
|
||||
"tags": ["Auth"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/TokenObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"expires": 1566540510,
|
||||
"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4",
|
||||
"scope": "user"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
{
|
||||
"operationId": "requestSSEToken",
|
||||
"summary": "Request a new SSE token",
|
||||
"tags": ["Auth"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/TokenObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"expires": 1566540510,
|
||||
"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4",
|
||||
"scope": "user"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
{
|
||||
"operationId": "deleteCertificateAuthority",
|
||||
"summary": "Delete a Certificate Authority",
|
||||
"tags": [
|
||||
"Certificate Authorities"
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "caID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the Certificate Authority",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
{
|
||||
"operationId": "getCertificateAuthority",
|
||||
"summary": "Get a Certificate Authority object by ID",
|
||||
"tags": ["Certificate Authorities"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "caID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Certificate Authority",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateAuthorityObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1627531400000,
|
||||
"updated_at": 1627531400000,
|
||||
"name": "ZeroSSL",
|
||||
"acmesh_server": "zerossl",
|
||||
"ca_bundle": "",
|
||||
"max_domains": 10,
|
||||
"is_wildcard_supported": true,
|
||||
"is_readonly": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
{
|
||||
"operationId": "updateCertificateAuthority",
|
||||
"summary": "Update an existing Certificate Authority",
|
||||
"tags": ["Certificate Authorities"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "caID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Certificate Authority",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Certificate Authority details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateCertificateAuthority}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateAuthorityObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1627531400000,
|
||||
"updated_at": 1627531400000,
|
||||
"name": "ZeroSSL",
|
||||
"acmesh_server": "zerossl",
|
||||
"ca_bundle": "",
|
||||
"max_domains": 10,
|
||||
"is_wildcard_supported": true,
|
||||
"is_readonly": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
{
|
||||
"operationId": "getCertificateAuthorities",
|
||||
"summary": "Get a list of Certificate Authorities",
|
||||
"tags": ["Certificate Authorities"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateAuthorityList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 2,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1627531400000,
|
||||
"updated_at": 1627531400000,
|
||||
"name": "ZeroSSL",
|
||||
"acmesh_server": "zerossl",
|
||||
"ca_bundle": "",
|
||||
"max_domains": 10,
|
||||
"is_wildcard_supported": true,
|
||||
"is_setup": true
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"created_at": 1627531400000,
|
||||
"updated_at": 1627531400000,
|
||||
"name": "Let's Encrypt",
|
||||
"acmesh_server": "https://acme-v02.api.letsencrypt.org/directory",
|
||||
"ca_bundle": "",
|
||||
"max_domains": 10,
|
||||
"is_wildcard_supported": true,
|
||||
"is_setup": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
{
|
||||
"operationId": "createCertificateAuthority",
|
||||
"summary": "Create a new Certificate Authority",
|
||||
"tags": ["Certificate Authorities"],
|
||||
"requestBody": {
|
||||
"description": "Certificate Authority to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateCertificateAuthority}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateAuthorityObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1627531400000,
|
||||
"updated_at": 1627531400000,
|
||||
"name": "ZeroSSL",
|
||||
"acmesh_server": "zerossl",
|
||||
"ca_bundle": "",
|
||||
"max_domains": 10,
|
||||
"is_wildcard_supported": true,
|
||||
"is_readonly": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
{
|
||||
"operationId": "deleteCertificate",
|
||||
"summary": "Delete a Certificate",
|
||||
"tags": [
|
||||
"Certificates"
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "certificateID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the certificate",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "400 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": null,
|
||||
"error": {
|
||||
"code": 400,
|
||||
"message": "You cannot delete a certificate that is in use!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
{
|
||||
"operationId": "getCertificate",
|
||||
"summary": "Get a certificate object by ID",
|
||||
"tags": ["Certificates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "certificateID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the certificate",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1604536109000,
|
||||
"updated_at": 1604536109000,
|
||||
"expires_on": null,
|
||||
"type": "dns",
|
||||
"user_id": 1,
|
||||
"certificate_authority_id": 2,
|
||||
"dns_provider_id": 1,
|
||||
"name": "test1.jc21.com.au",
|
||||
"domain_names": ["test1.jc21.com.au"],
|
||||
"is_ecc": 0,
|
||||
"status": "ready"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
{
|
||||
"operationId": "updateCertificate",
|
||||
"summary": "Update an existing Certificate",
|
||||
"tags": ["Certificates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "certificateID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the certificate",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Certificate details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateCertificate}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1604536109000,
|
||||
"updated_at": 1604536109000,
|
||||
"expires_on": null,
|
||||
"type": "dns",
|
||||
"user_id": 1,
|
||||
"certificate_authority_id": 2,
|
||||
"dns_provider_id": 1,
|
||||
"name": "test1.jc21.com.au",
|
||||
"domain_names": ["test1.jc21.com.au"],
|
||||
"is_ecc": 0,
|
||||
"status": "ready"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
{
|
||||
"operationId": "getCertificates",
|
||||
"summary": "Get a list of certificates",
|
||||
"tags": ["Certificates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 1,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1604536109000,
|
||||
"updated_at": 1604536109000,
|
||||
"expires_on": null,
|
||||
"type": "dns",
|
||||
"user_id": 1,
|
||||
"certificate_authority_id": 2,
|
||||
"dns_provider_id": 1,
|
||||
"name": "test1.jc21.com.au",
|
||||
"domain_names": [
|
||||
"test1.jc21.com.au"
|
||||
],
|
||||
"is_ecc": 0,
|
||||
"status": "ready"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
{
|
||||
"operationId": "createCertificate",
|
||||
"summary": "Create a new Certificate",
|
||||
"tags": ["Certificates"],
|
||||
"requestBody": {
|
||||
"description": "Certificate to create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateCertificate}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/CertificateObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1604536109000,
|
||||
"updated_at": 1604536109000,
|
||||
"expires_on": null,
|
||||
"type": "dns",
|
||||
"user_id": 1,
|
||||
"certificate_authority_id": 2,
|
||||
"dns_provider_id": 1,
|
||||
"name": "test1.jc21.com.au",
|
||||
"domain_names": ["test1.jc21.com.au"],
|
||||
"is_ecc": 0,
|
||||
"status": "ready"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
{
|
||||
"operationId": "config",
|
||||
"summary": "Returns the API Service configuration",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/ConfigObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"data": "/data",
|
||||
"log": {
|
||||
"level": "debug",
|
||||
"format": "nice"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
{
|
||||
"operationId": "getDNSProviders",
|
||||
"summary": "Get a list of DNS Providers",
|
||||
"tags": ["DNS Providers"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/DNSProviderList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 1,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1602593653000,
|
||||
"updated_at": 1602593653000,
|
||||
"user_id": 1,
|
||||
"name": "Route53",
|
||||
"acmesh_name": "dns_aws",
|
||||
"meta": {
|
||||
"AWS_ACCESS_KEY_ID": "abc123",
|
||||
"AWS_SECRET_ACCESS_KEY": "def098"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
{
|
||||
"operationId": "createDNSProvider",
|
||||
"summary": "Create a new DNS Provider",
|
||||
"tags": ["DNS Providers"],
|
||||
"requestBody": {
|
||||
"description": "DNS Provider to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateDNSProvider}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/DNSProviderObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1602593653000,
|
||||
"updated_at": 1602593653000,
|
||||
"user_id": 1,
|
||||
"name": "Route53",
|
||||
"acmesh_name": "dns_aws",
|
||||
"meta": {
|
||||
"AWS_ACCESS_KEY_ID": "abc123",
|
||||
"AWS_SECRET_ACCESS_KEY": "def098"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
{
|
||||
"operationId": "deleteDNSProvider",
|
||||
"summary": "Delete a DNS Provider",
|
||||
"tags": [
|
||||
"DNS Providers"
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "providerID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the DNS Provider",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "400 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": null,
|
||||
"error": {
|
||||
"code": 400,
|
||||
"message": "You cannot delete a DNS Provider that is in use!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
{
|
||||
"operationId": "getDNSProvider",
|
||||
"summary": "Get a DNS Provider object by ID",
|
||||
"tags": ["DNS Providers"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "providerID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the DNS Provider",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/DNSProviderObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1602593653000,
|
||||
"updated_at": 1602593653000,
|
||||
"user_id": 1,
|
||||
"name": "Route53",
|
||||
"acmesh_name": "dns_aws",
|
||||
"meta": {
|
||||
"AWS_ACCESS_KEY_ID": "abc123",
|
||||
"AWS_SECRET_ACCESS_KEY": "def098"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
{
|
||||
"operationId": "updateDNSProvider",
|
||||
"summary": "Update an existing DNS Provider",
|
||||
"tags": ["DNS Providers"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "providerID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the DNS Provider",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "DNS Provider details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateDNSProvider}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/DNSProviderObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1602593653000,
|
||||
"updated_at": 1602593653000,
|
||||
"user_id": 1,
|
||||
"name": "Route53",
|
||||
"acmesh_name": "dns_aws",
|
||||
"meta": {
|
||||
"AWS_ACCESS_KEY_ID": "abc123",
|
||||
"AWS_SECRET_ACCESS_KEY": "def098"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
{
|
||||
"operationId": "health",
|
||||
"summary": "Returns the API health status",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/HealthObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"version": "3.0.0",
|
||||
"commit": "9f119b6",
|
||||
"healthy": true,
|
||||
"setup": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"unhealthy": {
|
||||
"value": {
|
||||
"result": {
|
||||
"version": "3.0.0",
|
||||
"commit": "9f119b6",
|
||||
"healthy": false,
|
||||
"setup": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
{
|
||||
"operationId": "getHosts",
|
||||
"summary": "Get a list of Hosts",
|
||||
"tags": ["Hosts"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/HostList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 1,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "domain_names",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1646279455000,
|
||||
"updated_at": 1646279455000,
|
||||
"user_id": 2,
|
||||
"type": "proxy",
|
||||
"nginx_template_id": 1,
|
||||
"listen_interface": "",
|
||||
"domain_names": ["jc21.com"],
|
||||
"upstream_id": 0,
|
||||
"certificate_id": 0,
|
||||
"access_list_id": 0,
|
||||
"ssl_forced": false,
|
||||
"caching_enabled": false,
|
||||
"block_exploits": false,
|
||||
"allow_websocket_upgrade": false,
|
||||
"http2_support": false,
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"paths": "",
|
||||
"advanced_config": "",
|
||||
"is_disabled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
{
|
||||
"operationId": "getHost",
|
||||
"summary": "Get a Host object by ID",
|
||||
"tags": ["Hosts"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "hostID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Host",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/HostObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1646279455000,
|
||||
"updated_at": 1646279455000,
|
||||
"user_id": 2,
|
||||
"type": "proxy",
|
||||
"nginx_template_id": 1,
|
||||
"listen_interface": "",
|
||||
"domain_names": ["jc21.com"],
|
||||
"upstream_id": 0,
|
||||
"certificate_id": 0,
|
||||
"access_list_id": 0,
|
||||
"ssl_forced": false,
|
||||
"caching_enabled": false,
|
||||
"block_exploits": false,
|
||||
"allow_websocket_upgrade": false,
|
||||
"http2_support": false,
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"paths": "",
|
||||
"advanced_config": "",
|
||||
"is_disabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
{
|
||||
"operationId": "getHostNginxConfig",
|
||||
"summary": "Get a Host Nginx Config object by ID",
|
||||
"tags": ["Hosts"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "hostID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Host",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": "# ------------------------------------------------------------\n# a.example.com\n# ------------------------------------------------------------\nserver {\n listen 80;\n server_name a.example.com ;\n access_log /data/logs/host-1_access.log proxy;\n error_log /data/logs/host-1_error.log warn;\n # locations ?\n # default location:\n location / {\n # Access Rules ? todo\n # Access checks must...? todo\n # Proxy!\n add_header X-Served-By $host;\n proxy_set_header Host $host;\n proxy_set_header X-Forwarded-Scheme $scheme;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_set_header X-Forwarded-For $remote_addr;\n proxy_http_version 1.1;\n # proxy a single host\n proxy_pass http://192.168.0.10:80;\n }\n # Legacy Custom Configuration\n include /data/nginx/custom/server_proxy[.]conf;\n}\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
{
|
||||
"operationId": "updateHost",
|
||||
"summary": "Update an existing Host",
|
||||
"tags": ["Hosts"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "hostID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Host",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Host details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateHost}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/HostObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1646279455000,
|
||||
"updated_at": 1646279455000,
|
||||
"user_id": 2,
|
||||
"type": "proxy",
|
||||
"nginx_template_id": 1,
|
||||
"listen_interface": "",
|
||||
"domain_names": ["jc21.com"],
|
||||
"upstream_id": 0,
|
||||
"certificate_id": 0,
|
||||
"access_list_id": 0,
|
||||
"ssl_forced": false,
|
||||
"caching_enabled": false,
|
||||
"block_exploits": false,
|
||||
"allow_websocket_upgrade": false,
|
||||
"http2_support": false,
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"paths": "",
|
||||
"advanced_config": "",
|
||||
"is_disabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
{
|
||||
"operationId": "createHost",
|
||||
"summary": "Create a new Host",
|
||||
"tags": ["Hosts"],
|
||||
"requestBody": {
|
||||
"description": "Host to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateHost}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/HostObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1645700556000,
|
||||
"updated_at": 1645700556000,
|
||||
"user_id": 2,
|
||||
"type": "proxy",
|
||||
"nginx_template_id": 1,
|
||||
"listen_interface": "",
|
||||
"domain_names": ["jc21.com"],
|
||||
"upstream_id": 0,
|
||||
"certificate_id": 0,
|
||||
"access_list_id": 0,
|
||||
"ssl_forced": false,
|
||||
"caching_enabled": false,
|
||||
"block_exploits": false,
|
||||
"allow_websocket_upgrade": false,
|
||||
"http2_support": false,
|
||||
"hsts_enabled": false,
|
||||
"hsts_subdomains": false,
|
||||
"paths": "",
|
||||
"advanced_config": "",
|
||||
"is_disabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,80 +0,0 @@
|
||||
{
|
||||
"operationId": "getNginxTemplates",
|
||||
"summary": "Get a list of Nginx Templates",
|
||||
"tags": ["Nginx Templates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/NginxTemplateList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 1,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "created_at",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1646218093000,
|
||||
"updated_at": 1646218093000,
|
||||
"user_id": 1,
|
||||
"name": "Default Proxy Template",
|
||||
"type": "proxy",
|
||||
"template": "# this is a proxy template"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
{
|
||||
"operationId": "createNginxTemplate",
|
||||
"summary": "Create a new Nginx Template",
|
||||
"tags": ["Nginx Templates"],
|
||||
"requestBody": {
|
||||
"description": "Template to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateNginxTemplate}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/NginxTemplateObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 10,
|
||||
"created_at": 1646218093000,
|
||||
"updated_at": 1646218093000,
|
||||
"user_id": 1,
|
||||
"name": "My proxy template",
|
||||
"type": "proxy",
|
||||
"template": "# this is a proxy template"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
{
|
||||
"operationId": "deleteNginxTemplate",
|
||||
"summary": "Delete a Nginx Template",
|
||||
"tags": ["Nginx Templates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "templateID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the Template",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "400 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/DeletedItemResponse"
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": null,
|
||||
"error": {
|
||||
"code": 400,
|
||||
"message": "You cannot delete a template that is in use!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
{
|
||||
"operationId": "getNginxTemplate",
|
||||
"summary": "Get a Nginx Template object by ID",
|
||||
"tags": ["Nginx Templates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "templateID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Host Template",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/NginxTemplateObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1646218093000,
|
||||
"updated_at": 1646218093000,
|
||||
"user_id": 1,
|
||||
"name": "Default Proxy Template",
|
||||
"type": "proxy",
|
||||
"template": "# this is a proxy template"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
{
|
||||
"operationId": "updateNginxTemplate",
|
||||
"summary": "Update an existing Nginx Template",
|
||||
"tags": ["Nginx Templates"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "templateID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Template",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Template details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateNginxTemplate}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/NginxTemplateObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1646218093000,
|
||||
"updated_at": 1646218093000,
|
||||
"user_id": 1,
|
||||
"name": "My renamed proxy template",
|
||||
"type": "proxy",
|
||||
"template": "# this is a proxy template"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
{
|
||||
"operationId": "getSettings",
|
||||
"summary": "Get a list of settings",
|
||||
"tags": ["Settings"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/SettingList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 1,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1578010090000,
|
||||
"updated_at": 1578010095000,
|
||||
"name": "default-site",
|
||||
"value": {
|
||||
"html": "<p>not found</p>",
|
||||
"type": "custom"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
{
|
||||
"operationId": "getSetting",
|
||||
"summary": "Get a setting object by name",
|
||||
"tags": ["Settings"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "name",
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"minLength": 2
|
||||
},
|
||||
"required": true,
|
||||
"description": "Name of the setting",
|
||||
"example": "default-site"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/SettingObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 2,
|
||||
"created_at": 1578010090000,
|
||||
"updated_at": 1578010095000,
|
||||
"name": "default-site",
|
||||
"value": {
|
||||
"html": "<p>not found</p>",
|
||||
"type": "custom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
{
|
||||
"operationId": "updateSetting",
|
||||
"summary": "Update an existing Setting",
|
||||
"tags": ["Settings"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "name",
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"minLength": 2
|
||||
},
|
||||
"required": true,
|
||||
"description": "Name of the setting",
|
||||
"example": "default-site"
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Setting details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateSetting}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/SettingObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 2,
|
||||
"created_at": 1578010090000,
|
||||
"updated_at": 1578010090000,
|
||||
"name": "default-site",
|
||||
"value": {
|
||||
"html": "<p>not found</p>",
|
||||
"type": "custom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
{
|
||||
"operationId": "createSetting",
|
||||
"summary": "Create a new Setting",
|
||||
"tags": ["Settings"],
|
||||
"requestBody": {
|
||||
"description": "Setting to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateSetting}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/SettingObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 2,
|
||||
"created_at": 1578010090000,
|
||||
"updated_at": 1578010090000,
|
||||
"name": "default-site",
|
||||
"value": {
|
||||
"html": "<p>not found</p>",
|
||||
"type": "custom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
{
|
||||
"operationId": "getStreams",
|
||||
"summary": "Get a list of Streams",
|
||||
"tags": ["Streams"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/StreamList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 1,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": ["TODO"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
{
|
||||
"operationId": "createStream",
|
||||
"summary": "Create a new Stream",
|
||||
"tags": ["Streams"],
|
||||
"requestBody": {
|
||||
"description": "Stream to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateStream}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/StreamObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": "TODO"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
{
|
||||
"operationId": "updateStream",
|
||||
"summary": "Update an existing Stream",
|
||||
"tags": ["Streams"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "streamID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Stream",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Stream details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateStream}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/StreamObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": "TODO"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,286 +0,0 @@
|
||||
{
|
||||
"operationId": "getUpstreams",
|
||||
"summary": "Get a list of Upstreams",
|
||||
"tags": ["Upstreams"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "id,name.asc,value.desc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UpstreamList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 5,
|
||||
"offset": 0,
|
||||
"limit": 10,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1672804124000,
|
||||
"updated_at": 1672804124000,
|
||||
"user_id": 2,
|
||||
"name": "API servers",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": true,
|
||||
"ntlm": false,
|
||||
"keepalive": 10,
|
||||
"keepalive_requests": 10,
|
||||
"keepalive_time": "60s",
|
||||
"keepalive_timeout": "3s",
|
||||
"advanced_config": "",
|
||||
"status": "ok",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1672804124000,
|
||||
"updated_at": 1672804124000,
|
||||
"upstream_group_id": 1,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"created_at": 1672804124000,
|
||||
"updated_at": 1672804124000,
|
||||
"upstream_group_id": 1,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"created_at": 1672804197000,
|
||||
"updated_at": 1672804197000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 2",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": false,
|
||||
"ntlm": false,
|
||||
"keepalive": 0,
|
||||
"keepalive_requests": 0,
|
||||
"keepalive_time": "",
|
||||
"keepalive_timeout": "",
|
||||
"advanced_config": "",
|
||||
"status": "ok",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 3,
|
||||
"created_at": 1672804197000,
|
||||
"updated_at": 1672804197000,
|
||||
"upstream_group_id": 2,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"created_at": 1672804197000,
|
||||
"updated_at": 1672804197000,
|
||||
"upstream_group_id": 2,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"created_at": 1672804200000,
|
||||
"updated_at": 1672804200000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 2",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": false,
|
||||
"ntlm": false,
|
||||
"keepalive": 0,
|
||||
"keepalive_requests": 0,
|
||||
"keepalive_time": "",
|
||||
"keepalive_timeout": "",
|
||||
"advanced_config": "",
|
||||
"status": "ok",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 5,
|
||||
"created_at": 1672804200000,
|
||||
"updated_at": 1672804200000,
|
||||
"upstream_group_id": 3,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"created_at": 1672804200000,
|
||||
"updated_at": 1672804200000,
|
||||
"upstream_group_id": 3,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"created_at": 1672804201000,
|
||||
"updated_at": 1672804201000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 2",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": false,
|
||||
"ntlm": false,
|
||||
"keepalive": 0,
|
||||
"keepalive_requests": 0,
|
||||
"keepalive_time": "",
|
||||
"keepalive_timeout": "",
|
||||
"advanced_config": "",
|
||||
"status": "ok",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 7,
|
||||
"created_at": 1672804201000,
|
||||
"updated_at": 1672804201000,
|
||||
"upstream_group_id": 4,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"created_at": 1672804201000,
|
||||
"updated_at": 1672804201000,
|
||||
"upstream_group_id": 4,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"created_at": 1672804201000,
|
||||
"updated_at": 1672804201000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 2",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": false,
|
||||
"ntlm": false,
|
||||
"keepalive": 0,
|
||||
"keepalive_requests": 0,
|
||||
"keepalive_time": "",
|
||||
"keepalive_timeout": "",
|
||||
"advanced_config": "",
|
||||
"status": "ok",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 9,
|
||||
"created_at": 1672804201000,
|
||||
"updated_at": 1672804201000,
|
||||
"upstream_group_id": 5,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"created_at": 1672804201000,
|
||||
"updated_at": 1672804201000,
|
||||
"upstream_group_id": 5,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
{
|
||||
"operationId": "createUpstream",
|
||||
"summary": "Create a new Upstream",
|
||||
"tags": ["Upstreams"],
|
||||
"requestBody": {
|
||||
"description": "Upstream to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateUpstream}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UpstreamObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 6,
|
||||
"created_at": 1672806857000,
|
||||
"updated_at": 1672806857000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 2",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": false,
|
||||
"ntlm": false,
|
||||
"keepalive": 0,
|
||||
"keepalive_requests": 0,
|
||||
"keepalive_time": "",
|
||||
"keepalive_timeout": "",
|
||||
"advanced_config": "",
|
||||
"status": "ready",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 11,
|
||||
"created_at": 1672806857000,
|
||||
"updated_at": 1672806857000,
|
||||
"upstream_id": 6,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"created_at": 1672806857000,
|
||||
"updated_at": 1672806857000,
|
||||
"upstream_id": 6,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
{
|
||||
"operationId": "getUpstream",
|
||||
"summary": "Get a Upstream object by ID",
|
||||
"tags": ["Upstreams"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "upstreamID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Upstream",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UpstreamObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1672786008000,
|
||||
"updated_at": 1672786008000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 3",
|
||||
"ip_hash": true,
|
||||
"ntlm": false,
|
||||
"keepalive": 10,
|
||||
"keepalive_requests": 10,
|
||||
"keepalive_time": "60s",
|
||||
"keepalive_timeout": "3s",
|
||||
"advanced_config": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1672786009000,
|
||||
"updated_at": 1672786009000,
|
||||
"upstream_id": 1,
|
||||
"server": "api1.localhost:1234",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"created_at": 1672786009000,
|
||||
"updated_at": 1672786009000,
|
||||
"upstream_id": 1,
|
||||
"server": "api2.localhost:1234",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
{
|
||||
"operationId": "getUpstreamNginxConfig",
|
||||
"summary": "Get a Upstream Nginx Config object by ID",
|
||||
"tags": ["Upstreams"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "upstreamID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Upstream",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": "# ------------------------------------------------------------\n# Upstream 1: API servers\n# ------------------------------------------------------------\nupstream npm_upstream_1 {\nserver 192.168.0.10:80 weight=100 ;\n server 192.168.0.11:80 weight=50 ;\n}\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
{
|
||||
"operationId": "updateUpstream",
|
||||
"summary": "Update an existing Upstream",
|
||||
"tags": ["Upstreams"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "upstreamID",
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"required": true,
|
||||
"description": "ID of the Upstream",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Upstream details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateUpstream}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UpstreamObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"created_at": 1673234177000,
|
||||
"updated_at": 1673244559000,
|
||||
"user_id": 2,
|
||||
"name": "API servers 2",
|
||||
"nginx_template_id": 5,
|
||||
"ip_hash": false,
|
||||
"ntlm": false,
|
||||
"keepalive": 0,
|
||||
"keepalive_requests": 0,
|
||||
"keepalive_time": "",
|
||||
"keepalive_timeout": "",
|
||||
"advanced_config": "",
|
||||
"status": "ready",
|
||||
"error_message": "",
|
||||
"servers": [
|
||||
{
|
||||
"id": 1,
|
||||
"created_at": 1673234177000,
|
||||
"updated_at": 1673244559000,
|
||||
"upstream_id": 1,
|
||||
"server": "192.168.0.10:80",
|
||||
"weight": 100,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"created_at": 1673234177000,
|
||||
"updated_at": 1673244559000,
|
||||
"upstream_id": 1,
|
||||
"server": "192.168.0.11:80",
|
||||
"weight": 50,
|
||||
"max_conns": 0,
|
||||
"max_fails": 0,
|
||||
"fail_timeout": 0,
|
||||
"backup": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,111 +0,0 @@
|
||||
{
|
||||
"operationId": "getUsers",
|
||||
"summary": "Get a list of users",
|
||||
"tags": ["Users"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "query",
|
||||
"name": "offset",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row offset, default 0",
|
||||
"example": 0
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "limit",
|
||||
"schema": {
|
||||
"type": "number"
|
||||
},
|
||||
"description": "The pagination row limit, default 10",
|
||||
"example": 10
|
||||
},
|
||||
{
|
||||
"in": "query",
|
||||
"name": "sort",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The sorting of the list",
|
||||
"example": "name,email.asc"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UserList"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"total": 3,
|
||||
"offset": 0,
|
||||
"limit": 100,
|
||||
"sort": [
|
||||
{
|
||||
"field": "name",
|
||||
"direction": "ASC"
|
||||
},
|
||||
{
|
||||
"field": "email",
|
||||
"direction": "ASC"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Jamie Curnow",
|
||||
"email": "jc@jc21.com",
|
||||
"created_at": 1578010090000,
|
||||
"updated_at": 1578010095000,
|
||||
"gravatar_url": "https://www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?d=mm&r=pg&s=128",
|
||||
"is_disabled": false,
|
||||
"capabilities": ["full-admin"]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "John Doe",
|
||||
"email": "johdoe@example.com",
|
||||
"created_at": 1578010100000,
|
||||
"updated_at": 1578010105000,
|
||||
"gravatar_url": "https://www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?d=mm&r=pg&s=128",
|
||||
"is_disabled": false,
|
||||
"capabilities": [
|
||||
"hosts.view",
|
||||
"hosts.manage"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Jane Doe",
|
||||
"email": "janedoe@example.com",
|
||||
"created_at": 1578010110000,
|
||||
"updated_at": 1578010115000,
|
||||
"gravatar_url": "https://www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?d=mm&r=pg&s=128",
|
||||
"is_disabled": false,
|
||||
"capabilities": [
|
||||
"hosts.view",
|
||||
"hosts.manage"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
{
|
||||
"operationId": "createUser",
|
||||
"summary": "Create a new User",
|
||||
"tags": ["Users"],
|
||||
"requestBody": {
|
||||
"description": "User to Create",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.CreateUser}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "201 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"name": "Jamie Curnow",
|
||||
"email": "jc@jc21.com",
|
||||
"created_at": 1578010100000,
|
||||
"updated_at": 1578010100000,
|
||||
"gravatar_url": "https://www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?d=mm&r=pg&s=128",
|
||||
"is_disabled": false,
|
||||
"auth": {
|
||||
"$ref": "#/components/schemas/UserAuthObject"
|
||||
},
|
||||
"capabilities": ["full-admin"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "400 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["error"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"type": "object",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"$ref": "#/components/schemas/ErrorObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"error": {
|
||||
"code": 400,
|
||||
"message": "An user already exists with this email address"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
{
|
||||
"operationId": "setPassword",
|
||||
"summary": "Set a User's password",
|
||||
"tags": ["Users"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "userID",
|
||||
"schema": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^me$"
|
||||
}
|
||||
]
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the user or 'me' to set yourself",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "Credentials to set",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.SetAuth}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UserAuthObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 2,
|
||||
"created_at": 1648422222000,
|
||||
"updated_at": 1648423979000,
|
||||
"user_id": 3,
|
||||
"type": "password"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
{
|
||||
"operationId": "getUser",
|
||||
"summary": "Get a user object by ID or 'me'",
|
||||
"tags": ["Users"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "userID",
|
||||
"schema": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^me$"
|
||||
}
|
||||
]
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the user or 'me' to get yourself",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"name": "Jamie Curnow",
|
||||
"email": "jc@jc21.com",
|
||||
"created_at": 1578010100000,
|
||||
"updated_at": 1578010105000,
|
||||
"gravatar_url": "https://www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?d=mm&r=pg&s=128",
|
||||
"is_disabled": false,
|
||||
"capabilities": ["full-admin"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
{
|
||||
"operationId": "updateUser",
|
||||
"summary": "Update an existing User",
|
||||
"tags": ["Users"],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "userID",
|
||||
"schema": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^me$"
|
||||
}
|
||||
]
|
||||
},
|
||||
"required": true,
|
||||
"description": "Numeric ID of the user or 'me' to update yourself",
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"description": "User details to update",
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": "{{schema.UpdateUser}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["result"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"$ref": "#/components/schemas/UserObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"result": {
|
||||
"id": 1,
|
||||
"name": "Jamie Curnow",
|
||||
"email": "jc@jc21.com",
|
||||
"created_at": 1578010100000,
|
||||
"updated_at": 1578010110000,
|
||||
"gravatar_url": "https://www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?d=mm&r=pg&s=128",
|
||||
"is_disabled": false,
|
||||
"capabilities": ["full-admin"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "400 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": ["error"],
|
||||
"properties": {
|
||||
"result": {
|
||||
"type": "object",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"$ref": "#/components/schemas/ErrorObject"
|
||||
}
|
||||
}
|
||||
},
|
||||
"examples": {
|
||||
"duplicateemail": {
|
||||
"value": {
|
||||
"result": null,
|
||||
"error": {
|
||||
"code": 400,
|
||||
"message": "A user already exists with this email address"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nodisable": {
|
||||
"value": {
|
||||
"result": null,
|
||||
"error": {
|
||||
"code": 400,
|
||||
"message": "You cannot disable yourself!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package embed
|
||||
|
||||
import "embed"
|
||||
|
||||
// APIDocFiles contain all the files used for swagger schema generation
|
||||
//
|
||||
//go:embed api_docs
|
||||
var APIDocFiles embed.FS
|
||||
|
||||
// Assets are frontend assets served from within this app
|
||||
//
|
||||
//go:embed assets
|
||||
var Assets embed.FS
|
||||
|
||||
// MigrationFiles are database migrations
|
||||
//
|
||||
//go:embed migrations
|
||||
var MigrationFiles embed.FS
|
||||
|
||||
// NginxFiles hold nginx config templates
|
||||
//
|
||||
//go:embed nginx
|
||||
var NginxFiles embed.FS
|
@ -1,246 +0,0 @@
|
||||
-- migrate:up
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `jwt_keys`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`public_key` TEXT NOT NULL,
|
||||
`private_key` TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `user`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`email` VARCHAR(255) NOT NULL,
|
||||
`is_system` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`is_disabled` BOOLEAN NOT NULL DEFAULT FALSE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `capability`
|
||||
(
|
||||
`name` VARCHAR(50) PRIMARY KEY,
|
||||
UNIQUE (`name`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `user_has_capability`
|
||||
(
|
||||
`user_id` INT NOT NULL,
|
||||
`capability_name` VARCHAR(50) NOT NULL,
|
||||
UNIQUE (`user_id`, `capability_name`),
|
||||
FOREIGN KEY (`capability_name`) REFERENCES `capability`(`name`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `auth`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`type` VARCHAR(50) NOT NULL,
|
||||
`identity` VARCHAR(255) NOT NULL,
|
||||
`secret` VARCHAR(255) NOT NULL,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
|
||||
UNIQUE (`user_id`, `type`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `setting`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`description` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`value` TEXT NOT NULL,
|
||||
UNIQUE (`name`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `audit_log`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`object_type` VARCHAR(50) NOT NULL,
|
||||
`object_id` INT NOT NULL,
|
||||
`action` VARCHAR(50) NOT NULL,
|
||||
`meta` TEXT NOT NULL,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `certificate_authority`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`acmesh_server` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`ca_bundle` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`is_wildcard_supported` BOOLEAN NOT NULL DEFAULT FALSE, -- specific to each CA, acme v1 doesn't usually have wildcards
|
||||
`max_domains` INT NOT NULL DEFAULT 5, -- per request
|
||||
`is_readonly` BOOLEAN NOT NULL DEFAULT FALSE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `dns_provider`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`acmesh_name` VARCHAR(50) NOT NULL,
|
||||
`dns_sleep` INT NOT NULL DEFAULT 0,
|
||||
`meta` TEXT NOT NULL,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `certificate`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`type` VARCHAR(50) NOT NULL, -- custom,dns,http
|
||||
`certificate_authority_id` INT, -- null for a custom cert
|
||||
`dns_provider_id` INT, -- 0, for a http or custom cert
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`domain_names` TEXT NOT NULL,
|
||||
`expires_on` BIGINT NOT NULL DEFAULT 0,
|
||||
`status` VARCHAR(50) NOT NULL, -- ready,requesting,failed,provided
|
||||
`error_message` TEXT NOT NULL,
|
||||
`meta` TEXT NOT NULL,
|
||||
`is_ecc` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`certificate_authority_id`) REFERENCES `certificate_authority`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`dns_provider_id`) REFERENCES `dns_provider`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `stream`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`listen_interface` VARCHAR(50) NOT NULL,
|
||||
`incoming_port` INT NOT NULL,
|
||||
`tcp_forwarding` INT NOT NULL DEFAULT 0,
|
||||
`udp_forwarding` INT NOT NULL DEFAULT 0,
|
||||
`advanced_config` TEXT NOT NULL,
|
||||
`is_disabled` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `nginx_template`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`type` VARCHAR(50) NOT NULL,
|
||||
`template` TEXT NOT NULL,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `upstream`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`nginx_template_id` INT NOT NULL,
|
||||
`ip_hash` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`ntlm` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`keepalive` INT NOT NULL DEFAULT 0,
|
||||
`keepalive_requests` INT NOT NULL DEFAULT 0,
|
||||
`keepalive_time` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`keepalive_timeout` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`advanced_config` TEXT NOT NULL,
|
||||
`status` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`error_message` TEXT NOT NULL,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`nginx_template_id`) REFERENCES `nginx_template`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `upstream_server`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`upstream_id` INT NOT NULL,
|
||||
`server` VARCHAR(50) NOT NULL,
|
||||
`weight` INT NOT NULL DEFAULT 0,
|
||||
`max_conns` INT NOT NULL DEFAULT 0,
|
||||
`max_fails` INT NOT NULL DEFAULT 0,
|
||||
`fail_timeout` INT NOT NULL DEFAULT 0,
|
||||
`is_backup` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
FOREIGN KEY (`upstream_id`) REFERENCES `upstream`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `access_list`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`meta` TEXT NOT NULL,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `host`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`created_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_deleted` INT NOT NULL DEFAULT 0, -- int on purpose, gormism
|
||||
`user_id` INT NOT NULL,
|
||||
`type` VARCHAR(50) NOT NULL,
|
||||
`nginx_template_id` INT NOT NULL,
|
||||
`listen_interface` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`domain_names` TEXT NOT NULL,
|
||||
`upstream_id` INT,
|
||||
`proxy_scheme` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`proxy_host` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`proxy_port` INT NOT NULL DEFAULT 0,
|
||||
`certificate_id` INT,
|
||||
`access_list_id` INT,
|
||||
`ssl_forced` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`caching_enabled` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`block_exploits` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`allow_websocket_upgrade` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`http2_support` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`hsts_enabled` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`hsts_subdomains` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`paths` TEXT NOT NULL,
|
||||
`advanced_config` TEXT NOT NULL,
|
||||
`status` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`error_message` TEXT NOT NULL,
|
||||
`is_disabled` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`nginx_template_id`) REFERENCES `nginx_template`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`upstream_id`) REFERENCES `upstream`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`certificate_id`) REFERENCES `certificate`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`access_list_id`) REFERENCES `access_list`(`id`) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
|
||||
-- Not allowed to go down from initial
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user