mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2024-12-06 19:27:24 +01:00
Compare commits
1033 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d3c06dbe4 | |||
| 152b7666d8 | |||
| 4e6d65645f | |||
| 8434b9fce4 | |||
| f4bd65dd2c | |||
| a856c4d6e1 | |||
| 2f334b5f9f | |||
| 2145df0dfb | |||
| 331c761a1c | |||
| 03b3b6379b | |||
| 050c087a51 | |||
| 61c41b8ec3 | |||
| 47d7896301 | |||
| d048d1fc98 | |||
| 3774a40498 | |||
| 208037946f | |||
| f23299f793 | |||
| aa15052eea | |||
| c556b8acef | |||
| 4d60876394 | |||
| 6e820a36ac | |||
| a277a5d167 | |||
| 8434a2d1fa | |||
| bee6a83f33 | |||
| b37ef94c22 | |||
| 3f6ac9a021 | |||
| 1d5f390f9b | |||
| d2048e540d | |||
| d121de808c | |||
| 4d3d37eaed | |||
| 0cd2e07fd3 | |||
| 0a18a565c7 | |||
| c4db4a2647 | |||
| e78dd069f1 | |||
| 9a2e5c92d5 | |||
| 833dd23dce | |||
| 514520ce1a | |||
| 21e3bce95d | |||
| 5dd81c071f | |||
| 269d088a60 | |||
| f73e09007a | |||
| 16c0276401 | |||
| 1831fdff2d | |||
| 8474b1cdec | |||
| 6d2cf77fb2 | |||
| ac0074ea86 | |||
| 52bd7b1d8f | |||
| 70cfbfb1b0 | |||
| 42cd1f2866 | |||
| ecc3b2b5b7 | |||
| ae9504584c | |||
| fb880616c7 | |||
| e1b757e177 | |||
| 6a8197d156 | |||
| be0ce673ff | |||
| 6da020aab1 | |||
| 689bcb0077 | |||
| fd041d9b3c | |||
| 9ac0e8c943 | |||
| 155e09407f | |||
| db95a465c8 | |||
| 6584f87dd2 | |||
| b076f5b3b6 | |||
| e5ade3b4ea | |||
| 7f9a1f5a98 | |||
| d94e304f31 | |||
| 3379f3a665 | |||
| 4ec1b4ed5a | |||
| 43d989474e | |||
| 1e0baa3911 | |||
| d8a3726f3a | |||
| 9faa36315f | |||
| e4e70ae6be | |||
| d555af68fe | |||
| 26f708d980 | |||
| 2ffb54a720 | |||
| b123ca4fd0 | |||
| 72b071dbaa | |||
| fd277973cd | |||
| aae95798b2 | |||
| d437c6b743 | |||
| f3018115ba | |||
| a0e17f9678 | |||
| 9b32329f41 | |||
| 001583b308 | |||
| 3df8e74bc8 | |||
| 042a74cc21 | |||
| fd7095ad88 | |||
| 6d6021c9bb | |||
| 824a22efad | |||
| ed609f0bec | |||
| b437119535 | |||
| d5a75bb708 | |||
| 512f5109d4 | |||
| d300095ab5 | |||
| 8d8921a0dd | |||
| ac8fa0d737 | |||
| b2592d9351 | |||
| adf0030b1c | |||
| 63845377d9 | |||
| 4b4c7baea4 | |||
| 94b6971ef7 | |||
| b725153a5e | |||
| da82020be4 | |||
| e7791c2a0f | |||
| 0461689d65 | |||
| aec0a606af | |||
| f55a7a792f | |||
| 4b0d901c93 | |||
| 4a57956093 | |||
| 88f3953f92 | |||
| 0d3e152306 | |||
| 9234c2c007 | |||
| 98ff4a7dcc | |||
| 7edcb8e3cc | |||
| 0387d36ebe | |||
| 047c4bf6e6 | |||
| 8cefea916a | |||
| 3c1b4fdf34 | |||
| e0773b1c06 | |||
| 3301800f42 | |||
| 4dd6fd06f4 | |||
| 1c57a9b2a5 | |||
| a9d1ccde38 | |||
| dde368f733 | |||
| cbcb0cc0f8 | |||
| fd365dc8fd | |||
| c849938da2 | |||
| 4b39ef0eba | |||
| 1ae247b2a6 | |||
| a2f192280b | |||
| 81c1a7eb16 | |||
| 030f3c9d83 | |||
| b4365f5c54 | |||
| e889714642 | |||
| e61cf52a65 | |||
| e6ae25d081 | |||
| ceb62fb0f2 | |||
| 29990110b1 | |||
| b4e5b8b6db | |||
| d6e96dc3cb | |||
| ab772d645b | |||
| f43e41d7d0 | |||
| fb8ca0b02f | |||
| e7ef809b10 | |||
| 798db6cb21 | |||
| 7745f8242b | |||
| 00aaa024a6 | |||
| a5166435ff | |||
| e3ce8b4d12 | |||
| c0c89e5d15 | |||
| fe46da3355 | |||
| 6ab5224353 | |||
| 12909de3c1 | |||
| 700518a0a2 | |||
| e959e54dc8 | |||
| 471ffa8dff | |||
| 35cc486fd7 | |||
| 292a209195 | |||
| 215083f6cf | |||
| 35550082bf | |||
| 15e4900133 | |||
| 6df4ea4d69 | |||
| cc9d556665 | |||
| cb3f0ec9b4 | |||
| 0244187c29 | |||
| 0dd713e634 | |||
| 972e53df71 | |||
| 91fe448782 | |||
| cfbd7f05d0 | |||
| 3ea9f805f4 | |||
| fc2df47753 | |||
| 7455accf58 | |||
| 83a9666807 | |||
| 6681da605e | |||
| e433bdaeec | |||
| 5b4fe24957 | |||
| 7166654215 | |||
| c8a255178e | |||
| 5f27b9243f | |||
| 6b7ae48570 | |||
| bc3d9ec099 | |||
| 0eeed1695c | |||
| 83e432793b | |||
| 6cdfd9ebc1 | |||
| ecbc55f318 | |||
| c288886fd4 | |||
| 80315bd50e | |||
| a2b4fbc36f | |||
| df33db24bb | |||
| 437b06b64b | |||
| f649e2946e | |||
| 1b61176818 | |||
| 374447ccc7 | |||
| af9349d4a7 | |||
| 4ff911def0 | |||
| e890bfcf10 | |||
| 9a5cbbba49 | |||
| b877bea86c | |||
| 306ac20457 | |||
| ba138581e1 | |||
| 456c59c746 | |||
| 6c76c041c4 | |||
| a239be993c | |||
| a82df0d931 | |||
| e4595860f5 | |||
| 18ecda7955 | |||
| 8ddb191a7a | |||
| cd6b772e72 | |||
| 29a4ac42d0 | |||
| 5d3bc0fabd | |||
| 1d5d3ecd7a | |||
| 8033d052fe | |||
| 6d0bf1c68b | |||
| 560f3d9b29 | |||
| 7ea64c46e9 | |||
| 88b46ef9ef | |||
| ef34f01914 | |||
| f5b3568893 | |||
| 6147ee925e | |||
| 5586d16afd | |||
| ca4d92d793 | |||
| 0a50672ab6 | |||
| f6b219772d | |||
| ad848a6478 | |||
| 0418264070 | |||
| 882674867c | |||
| e39f18b0d1 | |||
| 6efa4e2beb | |||
| 17a108f75f | |||
| bc6825c148 | |||
| 395152c1ab | |||
| 5e5f0de0e2 | |||
| b3ae2f4dbb | |||
| 726b6e69f7 | |||
| c00b690ed3 | |||
| 8d37f5df8d | |||
| 5b6dbaf43e | |||
| b8008606fd | |||
| f51c12ed9a | |||
| 3c0af95468 | |||
| ee4c6a3a8b | |||
| d44f75af1b | |||
| b221446bb0 | |||
| 523449f050 | |||
| 322048d5af | |||
| 671715042e | |||
| f37bb2e7dc | |||
| 3267832fe5 | |||
| e31b01b80e | |||
| 0a18432860 | |||
| a2baa85b08 | |||
| 3bfdc21256 | |||
| 49da5d7acc | |||
| 5bc2cd9be4 | |||
| 07739ee84e | |||
| 91d23be4e3 | |||
| 9dcb1e1c9c | |||
| 5729dddaf9 | |||
| d1bb22d768 | |||
| db61a9a175 | |||
| e4a97d4813 | |||
| 8dd6880f8c | |||
| 34dfbe2c36 | |||
| 2110ecc382 | |||
| 4db34f5894 | |||
| d1a338107b | |||
| 0d0b7e117f | |||
| 3538f9719f | |||
| feaafdc559 | |||
| eb148eb8f0 | |||
| e879d41ee4 | |||
| bb26f5b2c7 | |||
| 8e61d3eadf | |||
| 749ab36b1a | |||
| c68874743d | |||
| 1a76f4ebfc | |||
| 59238d1dc1 | |||
| 661f3d6899 | |||
| 14b889a85f | |||
| ac25171420 | |||
| 7281ed5968 | |||
| dc541b2c72 | |||
| 9a854fd8fe | |||
| 8eb44c404d | |||
| 61b25e1213 | |||
| d3a5a3d0d6 | |||
| 366fcf0bed | |||
| 29c0fcbad6 | |||
| de84d5d463 | |||
| 078114ee67 | |||
| 49f350fb00 | |||
| e141b5ff20 | |||
| 181f163cb5 | |||
| 30a9d3ae8d | |||
| 83e09ad5a7 | |||
| 8e5255a275 | |||
| e4f06368bb | |||
| 0edd87324c | |||
| 96e034aa75 | |||
| 821432263a | |||
| 5edb16f36e | |||
| a233bc0045 | |||
| eed40d095e | |||
| 0d0e5295f4 | |||
| 51ac4bc688 | |||
| 4f97592965 | |||
| be5a763d39 | |||
| c435ce0224 | |||
| 67d8ede247 | |||
| 5e98ce32b7 | |||
| a2c01655f0 | |||
| 3a71281937 | |||
| f235ec8b5a | |||
| fa7df05b92 | |||
| 1f3ac7a9ec | |||
| 5bd002a568 | |||
| 5fb0cc5fab | |||
| 818b9595aa | |||
| c78f641e85 | |||
| 081380c8d5 | |||
| 7e451bce0b | |||
| a082ec0604 | |||
| 973a10a9d1 | |||
| 1ec95096d5 | |||
| e81cc45405 | |||
| b9ef11e8bf | |||
| 0d8dd03c3d | |||
| 74d610d9ad | |||
| 9146ca6c63 | |||
| d7e0ae0fa0 | |||
| 29ee48530c | |||
| abe53a4bdd | |||
| 2d23bedf12 | |||
| 4e17fb476b | |||
| c803ec7e26 | |||
| 7e67f33766 | |||
| 9dd5644183 | |||
| 5a8028a72d | |||
| 747de511d4 | |||
| 7800938fd2 | |||
| ab80fe13e9 | |||
| 5d106c4064 | |||
| 2ac1026e4b | |||
| b78c7e1c53 | |||
| 849bdcda7b | |||
| 5aae8cd0e3 | |||
| adc5a2020a | |||
| 40b1521f72 | |||
| ac23c66659 | |||
| 84bc33db8a | |||
| 6392df36c3 | |||
| c82843279c | |||
| b394eb8e55 | |||
| bb422d4454 | |||
| 3dfe23836c | |||
| d45f39aae3 | |||
| cb091040a8 | |||
| ddd538944a | |||
| 1f879f67a9 | |||
| ee89dedd0f | |||
| 9ab5333652 | |||
| 3bd97ae1b0 | |||
| 432062e0f4 | |||
| 0c8bbb4bc2 | |||
| 48e96c46d5 | |||
| 25e9acf618 | |||
| a517e80236 | |||
| 3d4d3bc73b | |||
| cf4d1f73fa | |||
| c203d1a0d8 | |||
| 5f29f6b039 | |||
| f75b5b867b | |||
| 67463ca136 | |||
| 8db541f37f | |||
| a5229d0e92 | |||
| 38ec0f9f95 | |||
| 3d80759a21 | |||
| d95cd36b3e | |||
| 4c6b96ad5d | |||
| c3bef2867e | |||
| efc5bff2e1 | |||
| ffe3db8c08 | |||
| 4ada0feae3 | |||
| e17de6058e | |||
| 9efe6cfb39 | |||
| c86a1a50bd | |||
| c55476b196 | |||
| 3b47decbb0 | |||
| d0bfa082e0 | |||
| 6b7a8b009e | |||
| ca59e585d8 | |||
| bbde7a108a | |||
| 87731a8b5c | |||
| 29d4bd4ccf | |||
| 925ad90f91 | |||
| 650ae61c43 | |||
| 02f3f9704f | |||
| da7c3057b4 | |||
| 040b45cafa | |||
| 8ece310b9f | |||
| 96959db3c2 | |||
| 6360100611 | |||
| b833044cea | |||
| 97909830f5 | |||
| 8ae2de2f49 | |||
| bf7b659e89 | |||
| 4e3c7749af | |||
| f63441921f | |||
| 725ba83606 | |||
| 281906c0b5 | |||
| 8ed121f43d | |||
| 81a9cab2b3 | |||
| 8d98a417c5 | |||
| 6fa81b179b | |||
| 9e169fbb42 | |||
| 27f84f880a | |||
| 0d9c941b4e | |||
| 8865aa9c8c | |||
| 6d8c4218f1 | |||
| c134a43337 | |||
| 780759dc27 | |||
| 85128f08f3 | |||
| d2f8c1e5f1 | |||
| 9c88b9c1e9 | |||
| 13fd2ce4e2 | |||
| 9979f516d6 | |||
| 39a5cd2d6e | |||
| 784516283f | |||
| ce503232c3 | |||
| f2edf9130f | |||
| 413ab50fc4 | |||
| c1880bd3ff | |||
| 0f0a672275 | |||
| 06c5f991e7 | |||
| babc5b7a38 | |||
| b96c996a45 | |||
| fb8f2c2f9a | |||
| 6794937391 | |||
| f022e84979 | |||
| fd5ac952cc | |||
| 07f60e5c77 | |||
| 628b8a7e1f | |||
| 30a442807d | |||
| 1626c8edd1 | |||
| ca6561bf6c | |||
| 273a81471d | |||
| 8b07a67133 | |||
| 32089ea272 | |||
| 658acd147c | |||
| ca3370a6ac | |||
| c4e2557de2 | |||
| 6f2b4fdf86 | |||
| f302ff71c9 | |||
| fee87a44d6 | |||
| 8944609b63 | |||
| be87c45f27 | |||
| 1b1807c79a | |||
| a8f4699816 | |||
| ac3df6dd77 | |||
| 5c67908460 | |||
| 7b67ef3015 | |||
| e5a3b5ee2f | |||
| 5e9ff4d2bf | |||
| daa71764b6 | |||
| 6a6c2ef192 | |||
| 320315956d | |||
| 4f10d129c2 | |||
| 62eb3fcd85 | |||
| ab40e4e2cf | |||
| 0bb9450642 | |||
| a6e15532b9 | |||
| 9a89a8a77e | |||
| fe3675dc7a | |||
| 5c9acc2bff | |||
| c94e937a50 | |||
| 3e4e10e644 | |||
| ba7bb57ca2 | |||
| 14c125150a | |||
| 053701a702 | |||
| 3fc3e43042 | |||
| b0dc68d7d4 | |||
| e895baaeb4 | |||
| c47f6fdb21 | |||
| 9e188e441a | |||
| f6efcdf9f9 | |||
| b1ceda3af4 | |||
| cd3a0684d0 | |||
| f25e54c6cb | |||
| 66f86cf497 | |||
| d260edc547 | |||
| ba1e6fa984 | |||
| 6b59f36213 | |||
| 1894960762 | |||
| 83c5c55f32 | |||
| fb8c0b9a48 | |||
| d34691152c | |||
| cea80b482e | |||
| c460a8fa5c | |||
| 5f852437fe | |||
| 8aded1a685 | |||
| f2acb9e150 | |||
| 6f3a00c9b8 | |||
| fbae107c04 | |||
| 6c1ae77a2a | |||
| 67e8ca6714 | |||
| a56d976947 | |||
| ac0bb6bee2 | |||
| dee67dac75 | |||
| 9458cfbd1a | |||
| 4b8bdd22b3 | |||
| a4c143e2d1 | |||
| e91019feb9 | |||
| 8a37ec72b7 | |||
| c263a33095 | |||
| 4b2c0115db | |||
| 673f40bd85 | |||
| b9f8108cd3 | |||
| a16ecf656b | |||
| 842cff130b | |||
| 346b9b4b79 | |||
| 56c317d223 | |||
| b7b150a979 | |||
| fae848bd1b | |||
| a5b8087dc5 | |||
| 7aa078e025 | |||
| 4b6b276b64 | |||
| 0373daae5c | |||
| 7f30dd0475 | |||
| d2a77c2371 | |||
| 104f65b541 | |||
| d0fb4b6914 | |||
| 42c3272def | |||
| 2812889d61 | |||
| bd3a13b2a5 | |||
| 289d179142 | |||
| deca493912 | |||
| d16bf7d6c0 | |||
| 3f1415dad1 | |||
| 3e744b6b2d | |||
| 56c4f8a106 | |||
| 99ef8bae4c | |||
| b7f0343730 | |||
| c807b59fb4 | |||
| 60fc57431a | |||
| d988a3a307 | |||
| de763d3fa9 | |||
| 21bfb61cc8 | |||
| a79adeb280 | |||
| 9b7a019222 | |||
| e65143d276 | |||
| 61bb183eda | |||
| f3d3a6db91 | |||
| 9ebb443cb7 | |||
| fa4c4d0a8d | |||
| 3e1518fef6 | |||
| e59db84721 | |||
| c281b31fc8 | |||
| 1c93ca9896 | |||
| df5836e573 | |||
| 41ef35f0d0 | |||
| 5e6ce8643f | |||
| f575400bc8 | |||
| 6d9a335b0e | |||
| f94eb5f318 | |||
| 245fa421a2 | |||
| 655094a816 | |||
| d544650b05 | |||
| d9d682585c | |||
| 44a202552e | |||
| fd6673420b | |||
| 0e9cd5db9c | |||
| 6da6e6f145 | |||
| bdaa7460e4 | |||
| d6d1c1ac35 | |||
| 67958155fc | |||
| 198bd74ec6 | |||
| 92eec95dad | |||
| b73a034fca | |||
| 11b508f021 | |||
| c2b5be37f9 | |||
| 1a04863a08 | |||
| 077d3eb993 | |||
| ac38221bdf | |||
| 9f146b8fc3 | |||
| 9a2d9659a7 | |||
| 6faae5350a | |||
| 2616709e7f | |||
| bed9ff084c | |||
| fb3082b0bb | |||
| c8439b8429 | |||
| 4c3632d3e7 | |||
| 24d8cd57da | |||
| b7c0a8b0c2 | |||
| d6d7b22b1e | |||
| 5269c957ce | |||
| bf8d2672c8 | |||
| 8461acab9b | |||
| 731ae43fe8 | |||
| 5354c85352 | |||
| 22a37bb923 | |||
| 07bbece704 | |||
| 9af2f50d81 | |||
| 7b148f7970 | |||
| a1e52d919f | |||
| 899b487daa | |||
| 86eeb5fc44 | |||
| 62a708b416 | |||
| a7ce8704b3 | |||
| 7319a13077 | |||
| 95bd4d93c5 | |||
| 69c33f0395 | |||
| cd4caea2dc | |||
| c9daf19940 | |||
| 7c2540b193 | |||
| 3e600552dc | |||
| 69ee6b1699 | |||
| ca1ea042b2 | |||
| f26df7d9bb | |||
| ba45705571 | |||
| bf8ea71c77 | |||
| 7deb64a5de | |||
| e283865d3d | |||
| a32be3e96b | |||
| 0cfd6eab3f | |||
| c2361f13e6 | |||
| bc81de54b9 | |||
| 07884bc9b1 | |||
| 58c3204187 | |||
| 19d3deddd4 | |||
| f0233b947e | |||
| c6a90a2fd0 | |||
| 3607c30d98 | |||
| 717105f243 | |||
| 2373e4a06d | |||
| 4c76803f13 | |||
| 6a46e88f8f | |||
| e4e94d5be0 | |||
| a3b896fa70 | |||
| 60347a90e9 | |||
| a02d4ec46f | |||
| 485bae8f22 | |||
| 655477316b | |||
| e22f87dee7 | |||
| d3337322dd | |||
| 6202f4f943 | |||
| b42cc9ed3e | |||
| fbf72c0f61 | |||
| cbd0b0c070 | |||
| 874f049323 | |||
| 42ab4020e2 | |||
| 7ab9683b87 | |||
| 865facfd05 | |||
| 0951f4a202 | |||
| 882ec27969 | |||
| a84158c1ff | |||
| 161d3ec817 | |||
| 5b15249689 | |||
| 602fce1c7e | |||
| f2f653e345 | |||
| b55738bd6e | |||
| b39a59ce72 | |||
| 9872daf29f | |||
| 91044e730b | |||
| 656a7dceef | |||
| d636502eaa | |||
| 389fd158ad | |||
| 30fa63b379 | |||
| 691063545c | |||
| 421934efed | |||
| f056b9dc7f | |||
| 48d421ba28 | |||
| 096b714117 | |||
| 0d25dc1aaa | |||
| 63d3c2d06f | |||
| 5fc704ccad | |||
| 61d99561c1 | |||
| c26ce2083f | |||
| 847d71f72a | |||
| 3c35039445 | |||
| 1a64d44857 | |||
| ba5f0c212c | |||
| 4eddb5d7f3 | |||
| 3b104710d5 | |||
| 74db0004bd | |||
| 6e67352a0f | |||
| b127f02468 | |||
| c9c53d9670 | |||
| d36dbb868b | |||
| b7fb2cfe92 | |||
| d0a0c77556 | |||
| 9469b9c78a | |||
| e4988f34c7 | |||
| 1fe9e24f0a | |||
| 9c39de3454 | |||
| 9bb68ad4eb | |||
| 5bf774bee1 | |||
| 99514464fb | |||
| 3bf1c1e531 | |||
| e2e31094aa | |||
| f29ff15167 | |||
| 1c64252015 | |||
| ead19915f3 | |||
| 967e0dd98a | |||
| bd0324dba0 | |||
| 607fb83a1e | |||
| bb5fc58f3a | |||
| afbec0aca9 | |||
| 1e5d9dfbff | |||
| cfcb657cde | |||
| 7f243e6f06 | |||
| 7e7032c051 | |||
| b7b808d98d | |||
| a21289bf11 | |||
| 4a8d01224a | |||
| f0eebc43e3 | |||
| 49fbf031d1 | |||
| 4060718e5c | |||
| 49b0f11ae7 | |||
| 9b83d35ef4 | |||
| eb20add0c7 | |||
| 1f122e9145 | |||
| 329d0ecaed | |||
| 77a2ee948a | |||
| ebeda6345e | |||
| e35138ebed | |||
| 8ba6c4f7e7 | |||
| 6df7b72e08 | |||
| fe13b12f43 | |||
| ea28da90b2 | |||
| b243324c65 | |||
| a2dde00f40 | |||
| 5ff07faa7e | |||
| 272c652847 | |||
| 3964bbf3fe | |||
| 11175aaa5f | |||
| 7fcc4a7ef0 | |||
| 5abb9458c7 | |||
| 0ca5587a6f | |||
| d29650882b | |||
| 9c3a7b02ec | |||
| ef3a073af5 | |||
| 15c4857a4b | |||
| 63a71afbc8 | |||
| 64761ee9c6 | |||
| d6c344b5ec | |||
| d27826d10e | |||
| 4ac52a0e25 | |||
| efa841d75a | |||
| d1fac583ea | |||
| 8cb44c7b97 | |||
| f2293a9dda | |||
| da0d1d4a2f | |||
| 6a8d5e2166 | |||
| d732665a23 | |||
| e0748c9bc7 | |||
| 23573543a3 | |||
| bfb328238e | |||
| 64cc4f57d6 | |||
| 7a3c91c6a4 | |||
| 508bc62852 | |||
| 59e8446d47 | |||
| d13596d2f7 | |||
| 9adccfa341 | |||
| 5cc3b53378 | |||
| b62b0a2fb7 | |||
| 1faac4edf2 | |||
| 4c60dce169 | |||
| 771f31f44d | |||
| 8bedb95e1d | |||
| ac4be08df2 | |||
| 0d6e058e23 | |||
| bee2ceb667 | |||
| 6af13d4f40 | |||
| 9dd0ebd899 | |||
| 6e97bfa717 | |||
| 07b69f41eb | |||
| 6bd2ac7d6d | |||
| 528e5ef3bc | |||
| bc1c50ac92 | |||
| 8c2ab42b75 | |||
| 62053d15d4 | |||
| 6fed642aba | |||
| 72ac549a58 | |||
| 9f38617135 | |||
| 94eec805df | |||
| 05a940e732 | |||
| 1c43cc2181 | |||
| 657ee73ff1 | |||
| 4ee5d993cf | |||
| 70a445e2d7 | |||
| 2115da210d | |||
| 540554c4f6 | |||
| 1337c50d28 | |||
| c5ceb3b2b1 | |||
| 57fc1d8f08 | |||
| 1518ecd1e9 | |||
| 6be0343918 | |||
| cf8812c932 | |||
| 5bc3e474a9 | |||
| 13eaa346bc | |||
| d7437cc4a7 | |||
| ddb3c6590c | |||
| 89d6773bda | |||
| 3651b9484f | |||
| 2200c950b7 | |||
| 14f84f01b5 | |||
| cb014027bb | |||
| 32e5155783 | |||
| a3159ad59e | |||
| 60a40197f1 | |||
| 7d693a4271 | |||
| f192748bf9 | |||
| 96f401cba6 | |||
| ffd2430160 | |||
| 190cd2d6bb | |||
| 7ba58bdbd3 | |||
| 08ab62108f | |||
| 1028de8158 | |||
| 301499dc52 | |||
| 5c2f13ed8e | |||
| e30ad81f69 | |||
| 21f36f535f | |||
| c14236823a | |||
| 551a9fe1c6 | |||
| e3399e1035 | |||
| c413b4af3f | |||
| dbf5dec23b | |||
| 10f0eb17d7 | |||
| e3b680c351 | |||
| 0df0545777 | |||
| 165bfc9f5f | |||
| 5830bd73b9 | |||
| 3c4ce839b9 | |||
| ac9f052309 | |||
| 049e424957 | |||
| 07e78aec48 | |||
| 3fec135fe5 | |||
| 867fe1322b | |||
| 95208a50a7 | |||
| 514b13fcc2 | |||
| 4cbc1f5bbe | |||
| 64de36cdf2 | |||
| 093b48ad7b | |||
| 05f6a55a0b | |||
| 2523424f68 | |||
| b81325d7bf | |||
| 3e10b7b2b1 | |||
| e5cb750015 | |||
| 28f72086ec | |||
| a6b9bd7b01 | |||
| 2c5eac9dad | |||
| 87f61b8527 | |||
| 74bfe490c6 | |||
| 015167f34d | |||
| 4bafc7ff1a | |||
| bf8beb50b4 | |||
| e5034a34f5 | |||
| a561605653 | |||
| e8596c1554 | |||
| ab67481e99 | |||
| 1b611e67c8 | |||
| c5aa2b9f77 | |||
| cff6c4d1f5 | |||
| 077cf75ef2 | |||
| ff1770204c | |||
| b9a95840e0 | |||
| 2d7576c57e | |||
| 251aac716a | |||
| 6694a42270 | |||
| f78a4c6ad1 | |||
| 83fad8bcda | |||
| f539e813aa | |||
| 5d65166777 | |||
| 70346138a7 | |||
| d68656559c | |||
| 01660b5b80 | |||
| 74010acd85 | |||
| 7c7d255172 | |||
| 058f1e9835 | |||
| b4fc629ec0 | |||
| ae06b2da75 | |||
| 54d423a11f | |||
| 5da6c97a00 | |||
| bf2f13443f | |||
| 9ce4c3fe2f | |||
| 4a07bf666d | |||
| 5be46b4b20 | |||
| 7fd825b76b | |||
| b23d59dec7 | |||
| 492d450d26 | |||
| 04412f3624 | |||
| c41057b28a | |||
| 8312bc0100 | |||
| 85ac43bc5e | |||
| d1a0780c7a | |||
| f9b8d76527 | |||
| 26f00eeae4 | |||
| 1bc2df2178 | |||
| 8dfbcef198 | |||
| 6690b7735d | |||
| a9e7222e5e | |||
| f8edeb2775 | |||
| d1786fe159 | |||
| 157a12fb7c | |||
| 3f723b1638 | |||
| e2e9835d01 | |||
| 7599617b67 | |||
| 18a5b11033 | |||
| fff31b0f34 | |||
| c02e30663a | |||
| 4c6527cafc | |||
| 55bddb12e5 | |||
| d95861e1fb | |||
| 94754a5cb3 | |||
| 546f862236 | |||
| f105e29e56 | |||
| 5c15993d06 | |||
| a369ea1080 | |||
| 98068c0f57 | |||
| e0ef8683a2 | |||
| 66412a75f9 | |||
| 84d8fb0899 | |||
| c631537dbe | |||
| 8d2f49541c | |||
| 55a28e3437 | |||
| 67ea2d01c8 | |||
| dab229e37c | |||
| 7084473330 | |||
| dd2e335fae | |||
| 1ff87bbc12 | |||
| 2ebfdcf0c9 | |||
| 8ab161a3ee | |||
| e74b9617be | |||
| c3d88c83e3 | |||
| 3e912a7474 | |||
| 0d726a1d83 | |||
| affabf065e | |||
| e6ea77d263 | |||
| df73c2a458 | |||
| 96c5c79aef | |||
| 64922f07ff | |||
| bae21f3210 | |||
| 0702a4e58e | |||
| 31f1d304d6 | |||
| 291a74c295 | |||
| c0e9d1eb2f | |||
| a7cabdde3a | |||
| 3af560c2d0 | |||
| 1d23d5c761 | |||
| 995db12f22 | |||
| 4c60bfb66b | |||
| 1716747047 | |||
| 090b4d0388 | |||
| a9f068daa8 | |||
| f5ee91aeb3 | |||
| e2ee2cbf2d | |||
| dcf8364899 | |||
| b783602786 | |||
| 005e64eb9f | |||
| e9e5d293cc | |||
| a57255350f | |||
| 781442bf1e | |||
| 604bd2c576 | |||
| d9e1e1bbb7 | |||
| 907e9e182d | |||
| 0f238a5021 | |||
| 8d432bd60a | |||
| fd932c7678 | |||
| 46a9f5cb96 | |||
| f990d3f674 | |||
| 4a6de8deee | |||
| 9a7a216b23 | |||
| fccaaaae4d | |||
| a882b0be82 | |||
| db7bbab768 | |||
| 030e553549 | |||
| 8b0ca8e367 | |||
| 83b2b07200 | |||
| bdb591af9e | |||
| 2993a08777 | |||
| 2a2d3d57ec | |||
| 33c2c131c2 | |||
| e4286c96a7 | |||
| 2d9486b6fd | |||
| 632ee2d0bd | |||
| b09f201819 | |||
| baaf39c23d | |||
| b7467c10e8 | |||
| 701ef18606 | |||
| 3e7d2b216b | |||
| 41f16c20b6 | |||
| 96bc0b53c3 | |||
| b80baa78ef | |||
| ce88e0745d | |||
| 256bd2336f | |||
| 1b6993ee70 | |||
| af319b4729 | |||
| 1a15b4f18d | |||
| 3ddd3b49fd | |||
| e2c4b32311 | |||
| 8fb2821343 | |||
| 93f29734b7 | |||
| 569d2b0dce | |||
| b7e1e4fd9e | |||
| a1cebb889c | |||
| f040de5788 | |||
| e869c76e63 | |||
| 6f298ada61 | |||
| 26a8e234fa | |||
| 43b5720532 | |||
| a25f196ceb | |||
| f9e15a4470 | |||
| 447cf12629 | |||
| bb0f4bfa62 | |||
| bf036cbb88 | |||
| 8a9495de18 | |||
| 3e9614879a | |||
| 0057c793ee | |||
| ea5bdab374 | |||
| 0e96ad62bb | |||
| aa26f3908b | |||
| d3f90647f5 | |||
| 7d6c6129f2 | |||
| 0bc12f3bdf | |||
| 13767d13d6 | |||
| a215958cec | |||
| 288086c78d | |||
| 31aa9c9644 | |||
| ddbfdf6f6e | |||
| 43c7063538 | |||
| 3f089fb239 | |||
| 2d0f7d5126 |
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"presets": [
|
|
||||||
["env", {
|
|
||||||
"targets": {
|
|
||||||
"browsers": ["Chrome >= 65"]
|
|
||||||
},
|
|
||||||
"debug": false,
|
|
||||||
"modules": false,
|
|
||||||
"useBuiltIns": "usage"
|
|
||||||
}]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Ignore everything
|
||||||
|
*
|
||||||
|
|
||||||
|
# Only allow the following for docker build:
|
||||||
|
!backend/
|
||||||
|
!docker/
|
||||||
|
!scripts/
|
||||||
|
!test/
|
||||||
@@ -6,15 +6,30 @@ labels: bug
|
|||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Are you in the right place?
|
||||||
|
- If you are looking for support on how to get your upstream server forwarding, please consider asking the community on Reddit.
|
||||||
|
- If you are writing code changes to contribute and need to ask about the internals of the software, Gitter is the best place to ask.
|
||||||
|
- If you think you found a bug with NPM (not Nginx, or your upstream server or MySql) then you are in the *right place.*
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
**Checklist**
|
**Checklist**
|
||||||
- Have you pulled and found the error with `jc21/nginx-proxy-manager:latest` docker image?
|
- Have you pulled and found the error with `jc21/nginx-proxy-manager:latest` docker image?
|
||||||
|
- Yes / No
|
||||||
- Are you sure you're not using someone else's docker image?
|
- Are you sure you're not using someone else's docker image?
|
||||||
- If having problems with Lets Encrypt, have you made absolutely sure your site is accessible from outside of your network?
|
- Yes / No
|
||||||
|
- Have you searched for similar issues (both open and closed)?
|
||||||
|
- Yes / No
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
- A clear and concise description of what the bug is.
|
<!-- A clear and concise description of what the bug is. -->
|
||||||
- What version of Nginx Proxy Manager is reported on the login page?
|
|
||||||
|
|
||||||
|
**Nginx Proxy Manager Version**
|
||||||
|
<!-- What version of Nginx Proxy Manager is reported on the login page? -->
|
||||||
|
|
||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
Steps to reproduce the behavior:
|
Steps to reproduce the behavior:
|
||||||
@@ -23,14 +38,18 @@ Steps to reproduce the behavior:
|
|||||||
3. Scroll down to '....'
|
3. Scroll down to '....'
|
||||||
4. See error
|
4. See error
|
||||||
|
|
||||||
|
|
||||||
**Expected behavior**
|
**Expected behavior**
|
||||||
A clear and concise description of what you expected to happen.
|
<!-- A clear and concise description of what you expected to happen. -->
|
||||||
|
|
||||||
|
|
||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||||
|
|
||||||
|
|
||||||
**Operating System**
|
**Operating System**
|
||||||
- Please specify if using a Rpi, Mac, orchestration tool or any other setups that might affect the reproduction of this error.
|
<!-- Please specify if using a Rpi, Mac, orchestration tool or any other setups that might affect the reproduction of this error. -->
|
||||||
|
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here, docker version, browser version if applicable to the problem. Too much info is better than too little.
|
<!-- Add any other context about the problem here, docker version, browser version, logs if applicable to the problem. Too much info is better than too little. -->
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
name: DNS challenge provider request
|
||||||
|
about: Suggest a new provider to be available for a certificate DNS challenge
|
||||||
|
title: ''
|
||||||
|
labels: dns provider request
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**What provider would you like to see added to NPM?**
|
||||||
|
<!-- What is this provider called? -->
|
||||||
|
|
||||||
|
|
||||||
|
**Have you checked if a certbot plugin exists?**
|
||||||
|
<!--
|
||||||
|
Currently NPM only supports DNS challenge providers for which a certbot plugin exists.
|
||||||
|
You can visit pypi.org, and search for a package with the name `certbot-dns-<privider>`.
|
||||||
|
-->
|
||||||
@@ -7,14 +7,26 @@ assignees: ''
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Are you in the right place?
|
||||||
|
- If you are looking for support on how to get your upstream server forwarding, please consider asking the community on Reddit.
|
||||||
|
- If you are writing code changes to contribute and need to ask about the internals of the software, Gitter is the best place to ask.
|
||||||
|
- If you think you found a bug with NPM (not Nginx, or your upstream server or MySql) then you are in the *right place.*
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
**Is your feature request related to a problem? Please describe.**
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
|
||||||
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
**Describe the solution you'd like**
|
||||||
A clear and concise description of what you want to happen.
|
<!-- A clear and concise description of what you want to happen. -->
|
||||||
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
**Describe alternatives you've considered**
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
||||||
|
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context or screenshots about the feature request here.
|
<!-- Add any other context or screenshots about the feature request here. -->
|
||||||
|
|||||||
+26
-11
@@ -1,14 +1,29 @@
|
|||||||
|
git.idea
|
||||||
|
.env
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.idea
|
|
||||||
._*
|
._*
|
||||||
node_modules
|
*.code-workspace
|
||||||
core*
|
vendor
|
||||||
config/development.json
|
bin/*
|
||||||
|
backend/config.json
|
||||||
|
backend/embed/assets
|
||||||
|
backend/.task
|
||||||
|
backend/coverage.out
|
||||||
|
backend/coverage.html
|
||||||
|
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
|
dist
|
||||||
webpack_stats.html
|
backend/embed/acme.sh
|
||||||
data/*
|
docker/dev/resolv.conf
|
||||||
yarn-error.log
|
docker/dev/dnsrouter-config.json.tmp
|
||||||
yarn.lock
|
thunder-tests
|
||||||
tmp
|
test/cypress/videos
|
||||||
certbot.log
|
|
||||||
|
|
||||||
|
|||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
FROM jc21/nginx-proxy-manager-base:latest
|
|
||||||
|
|
||||||
MAINTAINER Jamie Curnow <jc@jc21.com>
|
|
||||||
LABEL maintainer="Jamie Curnow <jc@jc21.com>"
|
|
||||||
|
|
||||||
ENV SUPPRESS_NO_CONFIG_WARNING=1
|
|
||||||
ENV S6_FIX_ATTRS_HIDDEN=1
|
|
||||||
RUN echo "fs.file-max = 65535" > /etc/sysctl.conf
|
|
||||||
|
|
||||||
# Nginx, Node and required packages should already be installed from the base image
|
|
||||||
|
|
||||||
# root filesystem
|
|
||||||
COPY rootfs /
|
|
||||||
|
|
||||||
# s6 overlay
|
|
||||||
RUN curl -L -o /tmp/s6-overlay-amd64.tar.gz "https://github.com/just-containers/s6-overlay/releases/download/v1.21.4.0/s6-overlay-amd64.tar.gz" \
|
|
||||||
&& tar xzf /tmp/s6-overlay-amd64.tar.gz -C /
|
|
||||||
|
|
||||||
# App
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
|
|
||||||
ADD dist /app/dist
|
|
||||||
ADD node_modules /app/node_modules
|
|
||||||
ADD src/backend /app/src/backend
|
|
||||||
ADD package.json /app/package.json
|
|
||||||
ADD knexfile.js /app/knexfile.js
|
|
||||||
|
|
||||||
# Volumes
|
|
||||||
VOLUME [ "/data", "/etc/letsencrypt" ]
|
|
||||||
CMD [ "/init" ]
|
|
||||||
|
|
||||||
# Ports
|
|
||||||
EXPOSE 80
|
|
||||||
EXPOSE 81
|
|
||||||
EXPOSE 443
|
|
||||||
EXPOSE 9876
|
|
||||||
|
|
||||||
HEALTHCHECK --interval=15s --timeout=3s CMD curl -f http://localhost:9876/health || exit 1
|
|
||||||
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
FROM jc21/nginx-proxy-manager-base:arm64
|
|
||||||
|
|
||||||
MAINTAINER Jamie Curnow <jc@jc21.com>
|
|
||||||
LABEL maintainer="Jamie Curnow <jc@jc21.com>"
|
|
||||||
|
|
||||||
ENV SUPPRESS_NO_CONFIG_WARNING=1
|
|
||||||
ENV S6_FIX_ATTRS_HIDDEN=1
|
|
||||||
RUN echo "fs.file-max = 65535" > /etc/sysctl.conf
|
|
||||||
|
|
||||||
# Nginx, Node and required packages should already be installed from the base image
|
|
||||||
|
|
||||||
# root filesystem
|
|
||||||
COPY rootfs /
|
|
||||||
|
|
||||||
# s6 overlay
|
|
||||||
RUN curl -L -o /tmp/s6-overlay-aarch64.tar.gz "https://github.com/just-containers/s6-overlay/releases/download/v1.21.8.0/s6-overlay-aarch64.tar.gz" \
|
|
||||||
&& tar xzf /tmp/s6-overlay-aarch64.tar.gz -C /
|
|
||||||
|
|
||||||
# App
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
|
|
||||||
ADD dist /app/dist
|
|
||||||
ADD node_modules /app/node_modules
|
|
||||||
ADD src/backend /app/src/backend
|
|
||||||
ADD package.json /app/package.json
|
|
||||||
ADD knexfile.js /app/knexfile.js
|
|
||||||
|
|
||||||
# Volumes
|
|
||||||
VOLUME [ "/data", "/etc/letsencrypt" ]
|
|
||||||
CMD [ "/init" ]
|
|
||||||
|
|
||||||
# Ports
|
|
||||||
EXPOSE 80
|
|
||||||
EXPOSE 81
|
|
||||||
EXPOSE 443
|
|
||||||
EXPOSE 9876
|
|
||||||
|
|
||||||
HEALTHCHECK --interval=15s --timeout=3s CMD curl -f http://localhost:9876/health || exit 1
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
FROM jc21/nginx-proxy-manager-base:armv6
|
|
||||||
|
|
||||||
MAINTAINER Jamie Curnow <jc@jc21.com>
|
|
||||||
LABEL maintainer="Jamie Curnow <jc@jc21.com>"
|
|
||||||
|
|
||||||
ENV SUPPRESS_NO_CONFIG_WARNING=1
|
|
||||||
ENV S6_FIX_ATTRS_HIDDEN=1
|
|
||||||
RUN echo "fs.file-max = 65535" > /etc/sysctl.conf
|
|
||||||
|
|
||||||
# Nginx, Node and required packages should already be installed from the base image
|
|
||||||
|
|
||||||
# root filesystem
|
|
||||||
COPY rootfs /
|
|
||||||
|
|
||||||
# s6 overlay
|
|
||||||
RUN curl -L -o /tmp/s6-overlay-arm.tar.gz "https://github.com/just-containers/s6-overlay/releases/download/v1.21.8.0/s6-overlay-arm.tar.gz" \
|
|
||||||
&& tar xzf /tmp/s6-overlay-arm.tar.gz -C /
|
|
||||||
|
|
||||||
# App
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
|
|
||||||
ADD dist /app/dist
|
|
||||||
ADD node_modules /app/node_modules
|
|
||||||
ADD src/backend /app/src/backend
|
|
||||||
ADD package.json /app/package.json
|
|
||||||
ADD knexfile.js /app/knexfile.js
|
|
||||||
|
|
||||||
# Volumes
|
|
||||||
VOLUME [ "/data", "/etc/letsencrypt" ]
|
|
||||||
CMD [ "/init" ]
|
|
||||||
|
|
||||||
# Ports
|
|
||||||
EXPOSE 80
|
|
||||||
EXPOSE 81
|
|
||||||
EXPOSE 443
|
|
||||||
EXPOSE 9876
|
|
||||||
|
|
||||||
HEALTHCHECK --interval=15s --timeout=3s CMD curl -f http://localhost:9876/health || exit 1
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
FROM jc21/nginx-proxy-manager-base:armhf
|
|
||||||
|
|
||||||
MAINTAINER Jamie Curnow <jc@jc21.com>
|
|
||||||
LABEL maintainer="Jamie Curnow <jc@jc21.com>"
|
|
||||||
|
|
||||||
ENV SUPPRESS_NO_CONFIG_WARNING=1
|
|
||||||
ENV S6_FIX_ATTRS_HIDDEN=1
|
|
||||||
RUN echo "fs.file-max = 65535" > /etc/sysctl.conf
|
|
||||||
|
|
||||||
# Nginx, Node and required packages should already be installed from the base image
|
|
||||||
|
|
||||||
# root filesystem
|
|
||||||
COPY rootfs /
|
|
||||||
|
|
||||||
# s6 overlay
|
|
||||||
RUN curl -L -o /tmp/s6-overlay-armhf.tar.gz "https://github.com/just-containers/s6-overlay/releases/download/v1.21.4.0/s6-overlay-armhf.tar.gz" \
|
|
||||||
&& tar xzf /tmp/s6-overlay-armhf.tar.gz -C /
|
|
||||||
|
|
||||||
# App
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
|
|
||||||
ADD dist /app/dist
|
|
||||||
ADD node_modules /app/node_modules
|
|
||||||
ADD src/backend /app/src/backend
|
|
||||||
ADD package.json /app/package.json
|
|
||||||
ADD knexfile.js /app/knexfile.js
|
|
||||||
|
|
||||||
# Volumes
|
|
||||||
VOLUME [ "/data", "/etc/letsencrypt" ]
|
|
||||||
CMD [ "/init" ]
|
|
||||||
|
|
||||||
# Ports
|
|
||||||
EXPOSE 80
|
|
||||||
EXPOSE 81
|
|
||||||
EXPOSE 443
|
|
||||||
EXPOSE 9876
|
|
||||||
|
|
||||||
HEALTHCHECK --interval=15s --timeout=3s CMD curl -f http://localhost:9876/health || exit 1
|
|
||||||
Vendored
+265
-357
@@ -1,360 +1,268 @@
|
|||||||
|
import groovy.transform.Field
|
||||||
|
|
||||||
|
@Field
|
||||||
|
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 {
|
pipeline {
|
||||||
options {
|
agent {
|
||||||
buildDiscarder(logRotator(numToKeepStr: '10'))
|
label 'docker-multiarch'
|
||||||
disableConcurrentBuilds()
|
}
|
||||||
}
|
options {
|
||||||
agent any
|
buildDiscarder(logRotator(numToKeepStr: '10'))
|
||||||
environment {
|
disableConcurrentBuilds()
|
||||||
IMAGE = "nginx-proxy-manager"
|
ansiColor('xterm')
|
||||||
BASE_IMAGE = "jc21/${IMAGE}-base"
|
}
|
||||||
TEMP_IMAGE = "${IMAGE}-build_${BUILD_NUMBER}"
|
environment {
|
||||||
TAG_VERSION = getPackageVersion()
|
DOCKER_ORG = 'jc21'
|
||||||
MAJOR_VERSION = "2"
|
IMAGE = 'nginx-proxy-manager'
|
||||||
BRANCH_LOWER = "${BRANCH_NAME.toLowerCase()}"
|
BUILD_VERSION = getVersion()
|
||||||
// Architectures:
|
BUILD_COMMIT = getCommit()
|
||||||
AMD64_TAG = "amd64"
|
MAJOR_VERSION = '3'
|
||||||
ARMV6_TAG = "armv6l"
|
BRANCH_LOWER = "${BRANCH_NAME.toLowerCase().replaceAll('\\\\', '-').replaceAll('/', '-').replaceAll('\\.', '-')}"
|
||||||
ARMV7_TAG = "armv7l"
|
BUILDX_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}"
|
||||||
ARM64_TAG = "arm64"
|
COMPOSE_INTERACTIVE_NO_CLI = 1
|
||||||
}
|
}
|
||||||
stages {
|
stages {
|
||||||
stage('Build PR') {
|
stage('Environment') {
|
||||||
when {
|
parallel {
|
||||||
changeRequest()
|
stage('Master') {
|
||||||
}
|
when {
|
||||||
steps {
|
branch 'master'
|
||||||
ansiColor('xterm') {
|
}
|
||||||
// Codebase
|
steps {
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
|
script {
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
|
buildxPushTags = "-t docker.io/${DOCKER_ORG}/${IMAGE}:${BUILD_VERSION} -t docker.io/${DOCKER_ORG}/${IMAGE}:${MAJOR_VERSION} -t docker.io/${DOCKER_ORG}/${IMAGE}:latest"
|
||||||
sh 'rm -rf node_modules'
|
echo 'Building on Master is disabled!'
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
|
sh 'exit 1'
|
||||||
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} node-prune'
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Other') {
|
||||||
|
when {
|
||||||
|
not {
|
||||||
|
branch 'master'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Build') {
|
||||||
|
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}" \\
|
||||||
|
.
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
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
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Docs') {
|
||||||
|
steps {
|
||||||
|
dir(path: 'docs') {
|
||||||
|
sh 'yarn install'
|
||||||
|
sh 'yarn build'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Test Sqlite') {
|
||||||
|
environment {
|
||||||
|
COMPOSE_PROJECT_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}_sqlite"
|
||||||
|
COMPOSE_FILE = 'docker/docker-compose.ci.yml'
|
||||||
|
}
|
||||||
|
when {
|
||||||
|
not {
|
||||||
|
equals expected: 'UNSTABLE', actual: currentBuild.result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 {
|
||||||
|
// Dumps to analyze later
|
||||||
|
sh 'mkdir -p debug/sqlite'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q fullstack) > debug/sqlite/docker_fullstack.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q stepca) > debug/sqlite/docker_stepca.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q pdns) > debug/sqlite/docker_pdns.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q pdns-db) > debug/sqlite/docker_pdns-db.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q dnsrouter) > debug/sqlite/docker_dnsrouter.log 2>&1'
|
||||||
|
junit 'test/results/junit/*'
|
||||||
|
sh 'docker-compose down --remove-orphans --volumes -t 30 || true'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Test Mysql') {
|
||||||
|
environment {
|
||||||
|
COMPOSE_PROJECT_NAME = "npm_${BRANCH_LOWER}_${BUILD_NUMBER}_mysql"
|
||||||
|
COMPOSE_FILE = 'docker/docker-compose.ci.yml:docker/docker-compose.ci.mysql.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/mysql'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q fullstack) > debug/mysql/docker_fullstack.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q stepca) > debug/mysql/docker_stepca.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q pdns) > debug/mysql/docker_pdns.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q pdns-db) > debug/mysql/docker_pdns-db.log 2>&1'
|
||||||
|
sh 'docker logs $(docker-compose ps --all -q dnsrouter) > debug/mysql/docker_dnsrouter.log 2>&1'
|
||||||
|
junit 'test/results/junit/*'
|
||||||
|
sh 'docker-compose down --remove-orphans --volumes -t 30 || true'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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'
|
||||||
|
|
||||||
// Docker Build
|
junit 'test/results/junit/*'
|
||||||
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE}-${AMD64_TAG} .'
|
sh 'docker-compose down --remove-orphans --volumes -t 30 || true'
|
||||||
|
}
|
||||||
// Dockerhub
|
}
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${AMD64_TAG} docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}-${AMD64_TAG}'
|
}
|
||||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
stage('MultiArch Build') {
|
||||||
sh "docker login -u '${duser}' -p '${dpass}'"
|
when {
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}-${AMD64_TAG}'
|
not {
|
||||||
}
|
equals expected: 'UNSTABLE', actual: currentBuild.result
|
||||||
|
}
|
||||||
sh 'docker rmi ${TEMP_IMAGE}-${AMD64_TAG}'
|
}
|
||||||
|
steps {
|
||||||
script {
|
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
||||||
def comment = pullRequest.comment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}-${AMD64_TAG}`")
|
sh 'docker login -u "${duser}" -p "${dpass}"'
|
||||||
}
|
sh "./scripts/buildx --push ${buildxPushTags}"
|
||||||
}
|
// sh './scripts/buildx -o type=local,dest=docker-build'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Build Develop') {
|
}
|
||||||
when {
|
stage('Docs / Comment') {
|
||||||
branch 'develop'
|
parallel {
|
||||||
}
|
stage('Docs Job') {
|
||||||
steps {
|
when {
|
||||||
ansiColor('xterm') {
|
allOf {
|
||||||
// Codebase
|
branch pattern: "^(develop|master|v3)\$", comparator: "REGEXP"
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
|
not {
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
|
equals expected: 'UNSTABLE', actual: currentBuild.result
|
||||||
sh 'rm -rf node_modules'
|
}
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
|
}
|
||||||
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} node-prune'
|
}
|
||||||
|
steps {
|
||||||
// Docker Build
|
build wait: false, job: 'nginx-proxy-manager-docs', parameters: [string(name: 'docs_branch', value: "$BRANCH_NAME")]
|
||||||
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE}-${AMD64_TAG} .'
|
}
|
||||||
|
}
|
||||||
// Dockerhub
|
stage('PR Comment') {
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${AMD64_TAG} docker.io/jc21/${IMAGE}:develop-${AMD64_TAG}'
|
when {
|
||||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
allOf {
|
||||||
sh "docker login -u '${duser}' -p '${dpass}'"
|
changeRequest()
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:develop-${AMD64_TAG}'
|
not {
|
||||||
}
|
equals expected: 'UNSTABLE', actual: currentBuild.result
|
||||||
|
}
|
||||||
sh 'docker rmi ${TEMP_IMAGE}-${AMD64_TAG}'
|
}
|
||||||
}
|
}
|
||||||
}
|
steps {
|
||||||
}
|
script {
|
||||||
stage('Build Master') {
|
npmGithubPrComment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`\n\n**Note:** ensure you backup your NPM instance before testing this PR image! Especially if this PR contains database changes.", true)
|
||||||
when {
|
}
|
||||||
branch 'master'
|
}
|
||||||
}
|
}
|
||||||
parallel {
|
}
|
||||||
// ========================
|
}
|
||||||
// amd64
|
}
|
||||||
// ========================
|
post {
|
||||||
stage('amd64') {
|
always {
|
||||||
agent {
|
sh './scripts/ci/build-cleanup'
|
||||||
label 'amd64'
|
echo 'Reverting ownership'
|
||||||
}
|
sh 'docker run --rm -v $(pwd):/data jc21/gotools:latest chown -R "$(id -u):$(id -g)" /data'
|
||||||
steps {
|
printResult()
|
||||||
ansiColor('xterm') {
|
}
|
||||||
// Codebase
|
failure {
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
|
archiveArtifacts(artifacts: 'debug/**/*', allowEmptyArchive: true)
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
|
dir(path: 'test') {
|
||||||
sh 'rm -rf node_modules'
|
archiveArtifacts allowEmptyArchive: true, artifacts: 'results/**/*', excludes: '**/*.xml'
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
|
}
|
||||||
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} node-prune'
|
}
|
||||||
|
unstable {
|
||||||
// Docker Build
|
archiveArtifacts(artifacts: 'debug/**/*', allowEmptyArchive: true)
|
||||||
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE}-${AMD64_TAG} .'
|
dir(path: 'test') {
|
||||||
|
archiveArtifacts allowEmptyArchive: true, artifacts: 'results/**/*', excludes: '**/*.xml'
|
||||||
// Dockerhub
|
}
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${AMD64_TAG} docker.io/jc21/${IMAGE}:${TAG_VERSION}-${AMD64_TAG}'
|
}
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${AMD64_TAG} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${AMD64_TAG}'
|
}
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${AMD64_TAG} docker.io/jc21/${IMAGE}:latest-${AMD64_TAG}'
|
|
||||||
|
|
||||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
|
||||||
sh "docker login -u '${duser}' -p '${dpass}'"
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}-${AMD64_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${AMD64_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:latest-${AMD64_TAG}'
|
|
||||||
}
|
|
||||||
|
|
||||||
sh 'docker rmi ${TEMP_IMAGE}-${AMD64_TAG}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ========================
|
|
||||||
// arm64
|
|
||||||
// ========================
|
|
||||||
stage('arm64') {
|
|
||||||
agent {
|
|
||||||
label 'arm64'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
// Codebase
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
|
|
||||||
sh 'sudo rm -rf node_modules'
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
|
|
||||||
|
|
||||||
// Docker Build
|
|
||||||
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE}-${ARM64_TAG} -f Dockerfile.${ARM64_TAG} .'
|
|
||||||
|
|
||||||
// Dockerhub
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARM64_TAG} docker.io/jc21/${IMAGE}:${TAG_VERSION}-${ARM64_TAG}'
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARM64_TAG} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${ARM64_TAG}'
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARM64_TAG} docker.io/jc21/${IMAGE}:latest-${ARM64_TAG}'
|
|
||||||
|
|
||||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
|
||||||
sh "docker login -u '${duser}' -p '${dpass}'"
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}-${ARM64_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${ARM64_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:latest-${ARM64_TAG}'
|
|
||||||
}
|
|
||||||
|
|
||||||
sh 'docker rmi ${TEMP_IMAGE}-${ARM64_TAG}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ========================
|
|
||||||
// armv7l
|
|
||||||
// ========================
|
|
||||||
stage('armv7l') {
|
|
||||||
agent {
|
|
||||||
label 'armv7l'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
// Codebase
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
|
|
||||||
sh 'rm -rf node_modules'
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
|
|
||||||
|
|
||||||
// Docker Build
|
|
||||||
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE}-${ARMV7_TAG} -f Dockerfile.${ARMV7_TAG} .'
|
|
||||||
|
|
||||||
// Dockerhub
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARMV7_TAG} docker.io/jc21/${IMAGE}:${TAG_VERSION}-${ARMV7_TAG}'
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARMV7_TAG} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV7_TAG}'
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARMV7_TAG} docker.io/jc21/${IMAGE}:latest-${ARMV7_TAG}'
|
|
||||||
|
|
||||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
|
||||||
sh "docker login -u '${duser}' -p '${dpass}'"
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}-${ARMV7_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV7_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:latest-${ARMV7_TAG}'
|
|
||||||
}
|
|
||||||
|
|
||||||
sh 'docker rmi ${TEMP_IMAGE}-${ARMV7_TAG}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ========================
|
|
||||||
// armv6l - Disabled for the time being
|
|
||||||
// ========================
|
|
||||||
/*
|
|
||||||
stage('armv6l') {
|
|
||||||
agent {
|
|
||||||
label 'armv6l'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
// Codebase
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
|
|
||||||
sh 'rm -rf node_modules'
|
|
||||||
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
|
|
||||||
|
|
||||||
// Docker Build
|
|
||||||
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE}-${ARMV6_TAG} -f Dockerfile.${ARMV6_TAG} .'
|
|
||||||
|
|
||||||
// Dockerhub
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARMV6_TAG} docker.io/jc21/${IMAGE}:${TAG_VERSION}-${ARMV6_TAG}'
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARMV6_TAG} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV6_TAG}'
|
|
||||||
sh 'docker tag ${TEMP_IMAGE}-${ARMV6_TAG} docker.io/jc21/${IMAGE}:latest-${ARMV6_TAG}'
|
|
||||||
|
|
||||||
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
|
|
||||||
sh "docker login -u '${duser}' -p '${dpass}'"
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}-${ARMV6_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV6_TAG}'
|
|
||||||
sh 'docker push docker.io/jc21/${IMAGE}:latest-${ARMV6_TAG}'
|
|
||||||
}
|
|
||||||
|
|
||||||
sh 'docker rmi ${TEMP_IMAGE}-${ARMV6_TAG}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ========================
|
|
||||||
// latest manifest
|
|
||||||
// ========================
|
|
||||||
stage('Latest Manifest') {
|
|
||||||
when {
|
|
||||||
branch 'master'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
// =======================
|
|
||||||
// latest
|
|
||||||
// =======================
|
|
||||||
sh 'docker pull jc21/${IMAGE}:latest-${AMD64_TAG}'
|
|
||||||
sh 'docker pull jc21/${IMAGE}:latest-${ARM64_TAG}'
|
|
||||||
sh 'docker pull jc21/${IMAGE}:latest-${ARMV7_TAG}'
|
|
||||||
//sh 'docker pull jc21/${IMAGE}:latest-${ARMV6_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest push --purge jc21/${IMAGE}:latest || echo ""'
|
|
||||||
sh 'docker manifest create jc21/${IMAGE}:latest jc21/${IMAGE}:latest-${AMD64_TAG} jc21/${IMAGE}:latest-${ARM64_TAG} jc21/${IMAGE}:latest-${ARMV7_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:latest jc21/${IMAGE}:latest-${AMD64_TAG} --arch ${AMD64_TAG}'
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:latest jc21/${IMAGE}:latest-${ARM64_TAG} --os linux --arch ${ARM64_TAG}'
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:latest jc21/${IMAGE}:latest-${ARMV7_TAG} --os linux --arch arm --variant ${ARMV7_TAG}'
|
|
||||||
//sh 'docker manifest annotate jc21/${IMAGE}:latest jc21/${IMAGE}:latest-${ARMV6_TAG} --os linux --arch arm --variant ${ARMV6_TAG}'
|
|
||||||
sh 'docker manifest push --purge jc21/${IMAGE}:latest'
|
|
||||||
|
|
||||||
// =======================
|
|
||||||
// major version
|
|
||||||
// =======================
|
|
||||||
sh 'docker pull jc21/${IMAGE}:${MAJOR_VERSION}-${AMD64_TAG}'
|
|
||||||
sh 'docker pull jc21/${IMAGE}:${MAJOR_VERSION}-${ARM64_TAG}'
|
|
||||||
sh 'docker pull jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV7_TAG}'
|
|
||||||
//sh 'docker pull jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV6_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest push --purge jc21/${IMAGE}:${MAJOR_VERSION} || echo ""'
|
|
||||||
sh 'docker manifest create jc21/${IMAGE}:${MAJOR_VERSION} jc21/${IMAGE}:${MAJOR_VERSION}-${AMD64_TAG} jc21/${IMAGE}:${MAJOR_VERSION}-${ARM64_TAG} jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV7_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:${MAJOR_VERSION} jc21/${IMAGE}:${MAJOR_VERSION}-${AMD64_TAG} --arch ${AMD64_TAG}'
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:${MAJOR_VERSION} jc21/${IMAGE}:${MAJOR_VERSION}-${ARM64_TAG} --os linux --arch ${ARM64_TAG}'
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:${MAJOR_VERSION} jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV7_TAG} --os linux --arch arm --variant ${ARMV7_TAG}'
|
|
||||||
//sh 'docker manifest annotate jc21/${IMAGE}:${MAJOR_VERSION} jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV6_TAG} --os linux --arch arm --variant ${ARMV6_TAG}'
|
|
||||||
|
|
||||||
// =======================
|
|
||||||
// version
|
|
||||||
// =======================
|
|
||||||
sh 'docker pull jc21/${IMAGE}:${TAG_VERSION}-${AMD64_TAG}'
|
|
||||||
sh 'docker pull jc21/${IMAGE}:${TAG_VERSION}-${ARM64_TAG}'
|
|
||||||
sh 'docker pull jc21/${IMAGE}:${TAG_VERSION}-${ARMV7_TAG}'
|
|
||||||
//sh 'docker pull jc21/${IMAGE}:${TAG_VERSION}-${ARMV6_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest push --purge jc21/${IMAGE}:${TAG_VERSION} || echo ""'
|
|
||||||
sh 'docker manifest create jc21/${IMAGE}:${TAG_VERSION} jc21/${IMAGE}:${TAG_VERSION}-${AMD64_TAG} jc21/${IMAGE}:${TAG_VERSION}-${ARM64_TAG} jc21/${IMAGE}:${TAG_VERSION}-${ARMV7_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:${TAG_VERSION} jc21/${IMAGE}:${TAG_VERSION}-${AMD64_TAG} --arch ${AMD64_TAG}'
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:${TAG_VERSION} jc21/${IMAGE}:${TAG_VERSION}-${ARM64_TAG} --os linux --arch ${ARM64_TAG}'
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:${TAG_VERSION} jc21/${IMAGE}:${TAG_VERSION}-${ARMV7_TAG} --os linux --arch arm --variant ${ARMV7_TAG}'
|
|
||||||
//sh 'docker manifest annotate jc21/${IMAGE}:${TAG_VERSION} jc21/${IMAGE}:${TAG_VERSION}-${ARMV6_TAG} --os linux --arch arm --variant ${ARMV6_TAG}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ========================
|
|
||||||
// develop
|
|
||||||
// ========================
|
|
||||||
stage('Develop Manifest') {
|
|
||||||
when {
|
|
||||||
branch 'develop'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
sh 'docker pull jc21/${IMAGE}:develop-${AMD64_TAG}'
|
|
||||||
//sh 'docker pull jc21/${IMAGE}:develop-${ARM64_TAG}'
|
|
||||||
//sh 'docker pull jc21/${IMAGE}:develop-${ARMV7_TAG}'
|
|
||||||
//sh 'docker pull jc21/${IMAGE}:${TAG_VERSION}-${ARMV6_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest push --purge jc21/${IMAGE}:develop || :'
|
|
||||||
sh 'docker manifest create jc21/${IMAGE}:develop jc21/${IMAGE}:develop-${AMD64_TAG}'
|
|
||||||
|
|
||||||
sh 'docker manifest annotate jc21/${IMAGE}:develop jc21/${IMAGE}:develop-${AMD64_TAG} --arch ${AMD64_TAG}'
|
|
||||||
//sh 'docker manifest annotate jc21/${IMAGE}:develop jc21/${IMAGE}:develop-${ARM64_TAG} --os linux --arch ${ARM64_TAG}'
|
|
||||||
//sh 'docker manifest annotate jc21/${IMAGE}:develop jc21/${IMAGE}:develop-${ARMV7_TAG} --os linux --arch arm --variant ${ARMV7_TAG}'
|
|
||||||
//sh 'docker manifest annotate jc21/${IMAGE}:develop jc21/${IMAGE}:develop-${ARMV6_TAG} --os linux --arch arm --variant ${ARMV6_TAG}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ========================
|
|
||||||
// cleanup
|
|
||||||
// ========================
|
|
||||||
stage('Latest Cleanup') {
|
|
||||||
when {
|
|
||||||
branch 'master'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
sh 'docker rmi jc21/${IMAGE}:latest jc21/${IMAGE}:latest-${AMD64_TAG} jc21/${IMAGE}:latest-${ARM64_TAG} jc21/${IMAGE}:latest-${ARMV7_TAG} || echo ""'
|
|
||||||
sh 'docker rmi jc21/${IMAGE}:${MAJOR_VERSION}-${AMD64_TAG} jc21/${IMAGE}:${MAJOR_VERSION}-${ARM64_TAG} jc21/${IMAGE}:${MAJOR_VERSION}-${ARMV7_TAG} || echo ""'
|
|
||||||
sh 'docker rmi jc21/${IMAGE}:${TAG_VERSION}-${AMD64_TAG} jc21/${IMAGE}:${TAG_VERSION}-${ARM64_TAG} jc21/${IMAGE}:${TAG_VERSION}-${ARMV7_TAG} || echo ""'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Develop Cleanup') {
|
|
||||||
when {
|
|
||||||
branch 'develop'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
sh 'docker rmi jc21/${IMAGE}:develop jc21/${IMAGE}:develop-${AMD64_TAG} || echo ""'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('PR Cleanup') {
|
|
||||||
when {
|
|
||||||
changeRequest()
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
sh 'docker rmi jc21/${IMAGE}:github-${BRANCH_LOWER}-${AMD64_TAG} || echo ""'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
success {
|
|
||||||
juxtapose event: 'success'
|
|
||||||
sh 'figlet "SUCCESS"'
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
juxtapose event: 'failure'
|
|
||||||
sh 'figlet "FAILURE"'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def getPackageVersion() {
|
|
||||||
ver = sh(script: 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} bash -c "cat /data/package.json|jq -r \'.version\'"', returnStdout: true)
|
|
||||||
return ver.trim()
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,22 @@
|
|||||||

|
<p align="center">
|
||||||
|
<img src="https://nginxproxymanager.com/github.png">
|
||||||
# Nginx Proxy Manager
|
<br><br>
|
||||||
|
<img src="https://img.shields.io/badge/version-2.9.19-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>
|
||||||
|
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||||
|
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
This project comes as a pre-built docker image that enables you to easily forward to your websites
|
This project comes as a pre-built docker image that enables you to easily forward to your websites
|
||||||
running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
|
running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
|
||||||
|
|
||||||
|
- [Quick Setup](#quick-setup)
|
||||||
|
- [Full Setup](https://nginxproxymanager.com/setup/)
|
||||||
|
- [Screenshots](https://nginxproxymanager.com/screenshots/)
|
||||||
|
|
||||||
## Project Goal
|
## 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 a easy way to accomplish reverse
|
||||||
@@ -17,71 +24,78 @@ proxying hosts with SSL termination and it had to be so easy that a monkey could
|
|||||||
While there might be advanced options they are optional and the project should be as simple as possible
|
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.
|
so that the barrier for entry here is low.
|
||||||
|
|
||||||
|
<a href="https://www.buymeacoffee.com/jc21" target="_blank"><img src="http://public.jc21.com/github/by-me-a-coffee.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;" ></a>
|
||||||
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Beautiful and Secure Admin Interface based on [Tabler](https://tabler.github.io/)
|
- Beautiful and Secure Admin Interface based on [Chakra UI](https://chakra-ui.com/)
|
||||||
- Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx
|
- 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
|
- Free SSL using Let's Encrypt or provide your own custom SSL certificates
|
||||||
- Access Lists and basic HTTP Authentication for your hosts
|
- Access Lists and basic HTTP Authentication for your hosts
|
||||||
- Advanced Nginx configuration available for super users
|
- Advanced Nginx configuration available for super users
|
||||||
- User management, permissions and audit log
|
- User management, permissions and audit log
|
||||||
|
|
||||||
|
|
||||||
## Screenshots
|
|
||||||
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/login.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/dashboard.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/proxy-hosts.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/proxy-hosts-new1.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/proxy-hosts-new2.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/redirection-hosts.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/redirection-hosts-new1.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/streams.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/streams-new1.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/dead-hosts.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/dead-hosts-new1.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/certificates.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/certificates-new1.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/certificates-new2.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/access-lists.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/access-lists-new1.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/users.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/users-permissions.jpg)
|
|
||||||
[](https://public.jc21.com/nginx-proxy-manager/v2/large/audit-log.jpg)
|
|
||||||
|
|
||||||
|
|
||||||
## Getting started
|
|
||||||
|
|
||||||
Please consult the [installation instructions](doc/INSTALL.md) for a complete guide or
|
|
||||||
if you just want to get up and running in the quickest time possible, grab all the files in the `doc/example/` folder and run `docker-compose up -d`
|
|
||||||
|
|
||||||
|
|
||||||
## Administration
|
|
||||||
|
|
||||||
When your docker container is running, connect to it on port `81` for the admin interface.
|
|
||||||
|
|
||||||
[http://localhost:81](http://localhost:81)
|
|
||||||
|
|
||||||
Note: Requesting SSL Certificates won't work until this project is accessible from the outside world, as explained below.
|
|
||||||
|
|
||||||
|
|
||||||
### Default Administrator 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.
|
|
||||||
|
|
||||||
|
|
||||||
## Hosting your home network
|
## Hosting your home network
|
||||||
|
|
||||||
I won't go in to too much detail here but here are the basics for someone new to this self-hosted world.
|
I won't go in to too much detail here but here are the basics for someone new to this self-hosted world.
|
||||||
|
|
||||||
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
|
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
|
||||||
2. Add port forwarding for port 80 and 443 to the server hosting this project
|
2. Add port forwarding for port 80 and 443 to the server hosting this project
|
||||||
3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS
|
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 here as your gateway to forward to your other web based services
|
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
|
||||||
|
|
||||||
|
|
||||||
|
## Quickest Setup
|
||||||
|
|
||||||
|
1. Install Docker and Docker-Compose
|
||||||
|
|
||||||
|
- [Docker Install documentation](https://docs.docker.com/install/)
|
||||||
|
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
|
||||||
|
|
||||||
|
2. Create a docker-compose.yml file similar to this:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: 'jc21/nginx-proxy-manager:v3'
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- '80:80'
|
||||||
|
- '81:81'
|
||||||
|
- '443:443'
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Bring up your stack by running
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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.
|
||||||
|
|
||||||
|
[http://127.0.0.1:81](http://127.0.0.1:81)
|
||||||
|
|
||||||
|
## 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).
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = false
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
---
|
||||||
|
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'
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# (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
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Backend
|
||||||
|
|
||||||
|
## Guides and materials
|
||||||
|
|
||||||
|
- [Nginx Proxy Protocol](https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/)
|
||||||
|
-
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
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
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,310 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"description": "AuthConfigObject",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"local",
|
||||||
|
"ldap",
|
||||||
|
"oauth"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"description": "ConfigObject"
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"description": "DeletedItemResponse",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": ["result"],
|
||||||
|
"properties": {
|
||||||
|
"result": {
|
||||||
|
"type": "boolean",
|
||||||
|
"nullable": true
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"$ref": "#/components/schemas/ErrorObject"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"description": "ErrorObject",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": ["code", "message"],
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Error code",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Error message"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"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)$"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"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)$"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"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!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"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!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"operationId": "deleteHost",
|
||||||
|
"summary": "Delete a Host",
|
||||||
|
"tags": [
|
||||||
|
"Hosts"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "path",
|
||||||
|
"name": "hostID",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"required": true,
|
||||||
|
"description": "Numeric ID of the Host",
|
||||||
|
"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 host that is in use!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"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!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"operationId": "schema",
|
||||||
|
"summary": "Returns this swagger API schema",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "200 response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"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"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"operationId": "deleteStream",
|
||||||
|
"summary": "Delete a Stream",
|
||||||
|
"tags": [
|
||||||
|
"Streams"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "path",
|
||||||
|
"name": "streamID",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"required": true,
|
||||||
|
"description": "Numeric ID of the Stream",
|
||||||
|
"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 Stream that is in use!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"operationId": "getStream",
|
||||||
|
"summary": "Get a Stream object by ID",
|
||||||
|
"tags": ["Streams"],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "path",
|
||||||
|
"name": "streamID",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"required": true,
|
||||||
|
"description": "ID of the Stream",
|
||||||
|
"example": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "200 response",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["result"],
|
||||||
|
"properties": {
|
||||||
|
"result": {
|
||||||
|
"$ref": "#/components/schemas/StreamObject"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"examples": {
|
||||||
|
"default": {
|
||||||
|
"value": {
|
||||||
|
"result": "TODO"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,286 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"operationId": "deleteUpstream",
|
||||||
|
"summary": "Delete a Upstream",
|
||||||
|
"tags": ["Upstreams"],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "path",
|
||||||
|
"name": "upstreamID",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"required": true,
|
||||||
|
"description": "Numeric ID of the Upstream",
|
||||||
|
"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 Upstream that is in use!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"operationId": "deleteUser",
|
||||||
|
"summary": "Delete a User",
|
||||||
|
"tags": [
|
||||||
|
"Users"
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"in": "path",
|
||||||
|
"name": "userID",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"required": true,
|
||||||
|
"description": "Numeric ID of the user",
|
||||||
|
"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 yourself!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user