From 3a7c888f53f2a41efc97c320438ad15b49a1571b Mon Sep 17 00:00:00 2001 From: gyurix Date: Mon, 9 Mar 2026 07:59:09 +0100 Subject: [PATCH] Add configuration files for Quackback services - Created firewall-quackback.json for firewall service configuration. - Added quackback-secret.json to manage sensitive information for Quackback services. - Introduced service-quackback.json to define the main Quackback application and its dependencies. - Developed template.json for Quackback setup, including fields for secrets and service configurations. --- applications-tree.json | 7 + quackback/domain-quackback.json | 60 +++++++ quackback/firewall-quackback-dns.json | 75 +++++++++ quackback/firewall-quackback-smtp.json | 75 +++++++++ quackback/firewall-quackback.json | 75 +++++++++ quackback/quackback-secret.json | 24 +++ quackback/service-quackback.json | 204 ++++++++++++++++++++++ quackback/template.json | 225 +++++++++++++++++++++++++ 8 files changed, 745 insertions(+) create mode 100644 quackback/domain-quackback.json create mode 100644 quackback/firewall-quackback-dns.json create mode 100644 quackback/firewall-quackback-smtp.json create mode 100644 quackback/firewall-quackback.json create mode 100644 quackback/quackback-secret.json create mode 100644 quackback/service-quackback.json create mode 100644 quackback/template.json diff --git a/applications-tree.json b/applications-tree.json index 734bc30..c748a27 100644 --- a/applications-tree.json +++ b/applications-tree.json @@ -83,6 +83,13 @@ "title": "matrix", "subtitle": "Communication", "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iNyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMuNDk5NTIgMTUuNDM3N1YzMy41NjUySDQuODAyNjVWMzRIM1YxNS4wMDUzSDQuODAyMDZWMTUuNDQwMUwzLjQ5OTUyIDE1LjQzNzdaTTguNTE4NDMgMjEuMTg0M1YyMi4xMDEzSDguNTQ0NTZDOC43NzI5NSAyMS43NjY1IDkuMDc1MSAyMS40ODg1IDkuNDI3NzcgMjEuMjg4OEM5Ljc3MjI3IDIxLjA5NjkgMTAuMTY3MiAyMS4wMDA3IDEwLjYxMTUgMjEuMDAwN0MxMS4wMzkyIDIxLjAwMDcgMTEuNDI5NCAyMS4wODM5IDExLjc4MjggMjEuMjUwMkMxMi4xMzYyIDIxLjQxNTkgMTIuNDA0NyAyMS43MDgxIDEyLjU4NzYgMjIuMTI3NUMxMi43ODg0IDIxLjgzMDUgMTMuMDYwNCAyMS41Njg1IDEzLjQwNTUgMjEuMzQxNkMxMy43NSAyMS4xMTQyIDE0LjE1NzQgMjEuMDAwNyAxNC42MjkgMjEuMDAwN0MxNC45ODY2IDIxLjAwMDcgMTUuMzE4IDIxLjA0NDcgMTUuNjIzMyAyMS4xMzE0QzE1LjkyODYgMjEuMjE5MyAxNi4xODk5IDIxLjM1ODkgMTYuNDA4NSAyMS41NTEzQzE2LjYyNTkgMjEuNzQzMiAxNi43OTY0IDIxLjk5NDQgMTYuOTE4NyAyMi4zMDQ0QzE3LjA0MDUgMjIuNjE0NSAxNy4xMDE3IDIyLjk4NzUgMTcuMTAxNyAyMy40MjUyVjI3Ljk1ODlIMTUuMjQ0NFYyNC4xMTk2QzE1LjI0NDQgMjMuODkyMSAxNS4yMzU1IDIzLjY3ODMgMTUuMjE4MiAyMy40NzY5QzE1LjIwNTggMjMuMjk0NCAxNS4xNTY5IDIzLjExNjMgMTUuMDc0NSAyMi45NTNDMTQuOTk1NCAyMi44MDQxIDE0Ljg3NSAyMi42ODExIDE0LjcyNzYgMjIuNTk5QzE0LjU3NSAyMi41MTIzIDE0LjM2NzcgMjIuNDY4NCAxNC4xMDU4IDIyLjQ2ODRDMTMuODQ0NCAyMi40Njg0IDEzLjYzMyAyMi41MTg5IDEzLjQ3MTQgMjIuNjE4N0MxMy4zMDk5IDIyLjcxOTYgMTMuMTgzMyAyMi44NTAzIDEzLjA5MTkgMjMuMDExOEMxMi45OTc0IDIzLjE4MjUgMTIuOTM1MyAyMy4zNjkyIDEyLjkwODkgMjMuNTYyNEMxMi44NzgxIDIzLjc2ODUgMTIuODYyNiAyMy45NzY2IDEyLjg2MjYgMjQuMTg0OVYyNy45NTg5SDExLjAwNDdWMjQuMTU4OEMxMS4wMDQ3IDIzLjk1OCAxMS4wMDA2IDIzLjc1OSAxMC45OTIyIDIzLjU2MjRDMTAuOTg1NSAyMy4zNzYxIDEwLjk0NzggMjMuMTkyMyAxMC44ODA2IDIzLjAxODRDMTAuODE2NSAyMi44NTQxIDEwLjcwMjEgMjIuNzE0MiAxMC41NTM5IDIyLjYxODdDMTAuNDAwNyAyMi41MTg5IDEwLjE3NjIgMjIuNDY4NCA5Ljg3OTc3IDIyLjQ2ODRDOS43NjIwOSAyMi40NzMzIDkuNjQ1NTMgMjIuNDkzMyA5LjUzMjkgMjIuNTI3OEM5LjM3OTQ0IDIyLjU3MiA5LjIzNjg0IDIyLjY0NzYgOS4xMTQxNiAyMi43NDk5QzguOTc4NzQgMjIuODU5MiA4Ljg2MzUyIDIzLjAxNjYgOC43NjczIDIzLjIyMTVDOC42NzE2NyAyMy40MjcgOC42MjM1NiAyMy42OTU1IDguNjIzNTYgMjQuMDI3NVYyNy45NTg5SDYuNzY1MDhWMjEuMTgxOUw4LjUxODQzIDIxLjE4NDNaTTE4LjI5NDkgMjIuMTgwM0MxOC40ODI2IDIxLjg5NTcgMTguNzMzMiAyMS42NTc5IDE5LjAyNzMgMjEuNDg1NEMxOS4zMzc1IDIxLjMwNTUgMTkuNjc1OCAyMS4xNzkyIDIwLjAyODEgMjEuMTExOEMyMC4zOTY1IDIxLjAzNzkgMjAuNzcxMyAyMS4wMDA3IDIxLjE0NzEgMjEuMDAwN0MyMS40ODc0IDIxLjAwMDcgMjEuODMxOSAyMS4wMjQ1IDIyLjE4MDYgMjEuMDcyNkMyMi41Mjk4IDIxLjEyMDcgMjIuODQ4MiAyMS4yMTUxIDIzLjEzNjIgMjEuMzU0N0MyMy40MjM3IDIxLjQ5NDMgMjMuNjU4OSAyMS42ODg1IDIzLjg0MyAyMS45Mzc0QzI0LjAyNiAyMi4xODY4IDI0LjExNzQgMjIuNTE2NSAyNC4xMTc0IDIyLjkyNjlWMjYuNDUxNEMyNC4xMTc0IDI2Ljc1NzkgMjQuMTM1MyAyNy4wNTAxIDI0LjE2OTcgMjcuMzI5M0MyNC4yMDQyIDI3LjYwOTEgMjQuMjY1MyAyNy44MTg3IDI0LjM1MjcgMjcuOTU4OUgyMi40NjkyQzIyLjM5OCAyNy43NDY4IDIyLjM1NDEgMjcuNTI2NCAyMi4zMzg2IDI3LjMwMzJDMjIuMDQxNiAyNy42MDkxIDIxLjY5MjkgMjcuODIzNSAyMS4yOTIgMjcuOTQ1MkMyMC44OTM0IDI4LjA2NzIgMjAuNDc4OCAyOC4xMjkzIDIwLjA2MTkgMjguMTI5NEMxOS43Mzg4IDI4LjEyOTQgMTkuNDM4MyAyOC4wODk2IDE5LjE1OTEgMjguMDEwNkMxOC44OTI4IDI3LjkzODcgMTguNjQzNSAyNy44MTQxIDE4LjQyNjIgMjcuNjQ0MUMxOC4yMTUyIDI3LjQ3NjIgMTguMDQ3MSAyNy4yNjA2IDE3LjkzNTYgMjcuMDE1MUMxNy44MTc0IDI2Ljc2MjEgMTcuNzU4NiAyNi40NjAzIDE3Ljc1ODYgMjYuMTExMUMxNy43NTg2IDI1LjcyNjggMTcuODI2MyAyNS40MTAyIDE3Ljk2MTcgMjUuMTYwOEMxOC4wOTY1IDI0LjkxMTkgMTguMjcwNiAyNC43MTM1IDE4LjQ4NSAyNC41NjQ0QzE4LjY5ODggMjQuNDE2IDE4Ljk0MjkgMjQuMzA0OSAxOS4yMTc5IDI0LjIzMDZDMTkuNDkyMyAyNC4xNTY0IDE5Ljc2OTcgMjQuMDk3NiAyMC4wNDg5IDI0LjA1MzZDMjAuMzI4IDI0LjAxMDMgMjAuNjAyNCAyMy45NzUyIDIwLjg3MjcgMjMuOTQ5MUMyMS4xNDM1IDIzLjkyMyAyMS4zODM1IDIzLjg4MzggMjEuNTkyNSAyMy44MzA5QzIxLjgwMjIgMjMuNzc4NiAyMS45NjczIDIzLjcwMiAyMi4wODk3IDIzLjYwMTZDMjIuMjEyIDIzLjUwMTMgMjIuMjY4NSAyMy4zNTUyIDIyLjI2MDIgMjMuMTYyMUMyMi4yNjAyIDIyLjk2MiAyMi4yMjc1IDIyLjgwMjIgMjIuMTYxNiAyMi42ODQ2QzIyLjEwMDYgMjIuNTcxMSAyMi4wMTAzIDIyLjQ3NTkgMjEuOTAwMiAyMi40MDlDMjEuNzgzNSAyMi4zNDEgMjEuNjU0NSAyMi4yOTY2IDIxLjUyMDcgMjIuMjc4M0MyMS4zNjY5IDIyLjI1NiAyMS4yMTE2IDIyLjI0NSAyMS4wNTYyIDIyLjI0NTZDMjAuNjg5NyAyMi4yNDU2IDIwLjQwMjMgMjIuMzI0IDIwLjE5MjYgMjIuNDgxNEMxOS45ODM1IDIyLjYzODMgMTkuODYxMiAyMi45MDA4IDE5LjgyNjEgMjMuMjY3MkgxNy45NjgyQzE3Ljk5NDQgMjIuODMwNyAxOC4xMDMxIDIyLjQ2ODQgMTguMjk0OSAyMi4xODAzWk0yMS45NjUgMjQuODA3NEMyMS44NDA3IDI0Ljg0ODIgMjEuNzEzOSAyNC44ODA5IDIxLjU4NTQgMjQuOTA1NEMyMS40NDQ1IDI0LjkzMjUgMjEuMzAyNyAyNC45NTQyIDIxLjE2MDIgMjQuOTcwN0MyMS4wMTE3IDI0Ljk4ODUgMjAuODYzMiAyNS4wMTA1IDIwLjcxNTMgMjUuMDM2QzIwLjU3NTggMjUuMDYyMyAyMC40MzgxIDI1LjA5NzQgMjAuMzAzMSAyNS4xNDEyQzIwLjE3NjcgMjUuMTgwNyAyMC4wNTc1IDI1LjI0MDQgMTkuOTUwMyAyNS4zMTgyQzE5Ljg0OTMgMjUuMzkyNCAxOS43NjkxIDI1LjQ4NjkgMTkuNzA3OSAyNS41OTk3QzE5LjY0NjggMjUuNzEzNyAxOS42MTY1IDI1Ljg1NzUgMTkuNjE2NSAyNi4wMzIxQzE5LjYxNjUgMjYuMTk4NCAxOS42NDY4IDI2LjMzOCAxOS43MDc5IDI2LjQ1MTRDMTkuNzY5MSAyNi41NjU1IDE5Ljg1MTcgMjYuNjU0NiAxOS45NTY4IDI2LjcyMDVDMjAuMDYxMyAyNi43ODU4IDIwLjE4MzEgMjYuODMxNiAyMC4zMjMzIDI2Ljg1NzdDMjAuNDYyMyAyNi44ODM4IDIwLjYwNjYgMjYuODk2OSAyMC43NTQ1IDI2Ljg5NjlDMjEuMTIwOSAyNi44OTY5IDIxLjQwNDMgMjYuODM2MyAyMS42MDUgMjYuNzEzNEMyMS44MDU4IDI2LjU5MTYgMjEuOTUzNyAyNi40NDQ5IDIyLjA1MDUgMjYuMjc0NEMyMi4xNDU1IDI2LjEwNDYgMjIuMjA0OSAyNS45MzIzIDIyLjIyNjkgMjUuNzU3N0MyMi4yNDgzIDI1LjU4MjUgMjIuMjU5NiAyNS40NDI5IDIyLjI1OTYgMjUuMzM3OFYyNC42NDI4QzIyLjE3MzYgMjQuNzE3MiAyMi4wNzM0IDI0Ljc3MzIgMjEuOTY1IDI0LjgwNzRaTTI5LjAwOTMgMjEuMTg0M1YyMi40MjkySDI3LjY0ODVWMjUuNzgzMkMyNy42NDg1IDI2LjA5OCAyNy43MDA4IDI2LjMwNzcgMjcuODA1MyAyNi40MTIyQzI3LjkwOTggMjYuNTE3NCAyOC4xMTk1IDI2LjU2OTYgMjguNDMzMSAyNi41Njk2QzI4LjUzODIgMjYuNTY5NiAyOC42MzggMjYuNTY1NSAyOC43MzQzIDI2LjU1NjZDMjguODI5OSAyNi41NDc3IDI4LjkyMTkgMjYuNTM0NiAyOS4wMDkzIDI2LjUxNzRWMjcuOTU4M0MyOC44MzU4IDI3Ljk4NjIgMjguNjYwOSAyOC4wMDM5IDI4LjQ4NTQgMjguMDExMkMyOC4yOTggMjguMDE5NiAyOC4xMTA1IDI4LjAyNCAyNy45MjI5IDI4LjAyNDJDMjcuNjM1NCAyOC4wMjQyIDI3LjM2MjIgMjguMDA0IDI3LjEwNSAyNy45NjQ4QzI2Ljg2NiAyNy45MzE4IDI2LjYzNTIgMjcuODU0IDI2LjQyNSAyNy43MzU2QzI2LjIyNzYgMjcuNjIxIDI2LjA2NjYgMjcuNDUzIDI1Ljk2MDUgMjcuMjUwOUMyNS44NDcgMjcuMDQxMiAyNS43OSAyNi43NjYyIDI1Ljc5IDI2LjQyNTNWMjIuNDI5MkgyNC42NjUxVjIxLjE4NDNIMjUuNzlWMTkuMTUyOUgyNy42NDg1VjIxLjE4NDNIMjkuMDA5M1pNMzEuNjY0OCAyMS4xODQzVjIyLjQ0MjJIMzEuNjkxQzMxLjg2ODkgMjIuMDE2OSAzMi4xNjk2IDIxLjY1NDIgMzIuNTU0NiAyMS40MDA1QzMyLjc0NTIgMjEuMjc0NCAzMi45NTIzIDIxLjE3NTEgMzMuMTY5OSAyMS4xMDUzQzMzLjM4OTggMjEuMDM1MiAzMy42MTkyIDIxIDMzLjg1IDIxLjAwMDdDMzMuOTcyMyAyMS4wMDA3IDM0LjEwNzIgMjEuMDIyNyAzNC4yNTU3IDIxLjA2NjFWMjIuNzk1NkMzNC4xNTE5IDIyLjc3NTcgMzQuMDQ3MiAyMi43NjA0IDMzLjk0MiAyMi43NDk5QzMzLjgyNDcgMjIuNzM3MSAzMy43MDY3IDIyLjczMDUgMzMuNTg4NiAyMi43MzAzQzMzLjI0ODMgMjIuNzMwMyAzMi45NjAyIDIyLjc4NzMgMzIuNzI1IDIyLjkwMDhDMzIuNDk5NyAyMy4wMDYxIDMyLjMwNDEgMjMuMTY1OSAzMi4xNTYgMjMuMzY1OEMzMi4wMDc4IDIzLjU3MTggMzEuOTAzMSAyMy44MDU4IDMxLjg0ODQgMjQuMDUzNkMzMS43ODU1IDI0LjMzMzEgMzEuNzU0OCAyNC42MTg5IDMxLjc1NjkgMjQuOTA1NFYyNy45NTgzSDI5Ljg5OVYyMS4xODcyTDMxLjY2NDggMjEuMTg0M1pNMzUuMDQwOSAyMC4xMzU5VjE4LjYwMjNIMzYuODk4N1YyMC4xMzU5SDM1LjA0MDlaTTM2Ljg5ODcgMjEuMTg0M1YyNy45NTUzSDM1LjA0MTVWMjEuMTg0M0gzNi44OTg3Wk0zNy44NjY5IDIxLjE4NDNIMzkuOTg2N0w0MS4xNzc2IDIyLjk1M0w0Mi4zNTQ4IDIxLjE4NDNINDQuNDA5M0w0Mi4xODQ5IDI0LjM1NTRMNDQuNjg0MyAyNy45NTg5SDQyLjU2MzlMNDEuMTUxNSAyNS44MjNMMzkuNzM3OCAyNy45NTg5SDM3LjY1NzhMNDAuMDkxMyAyNC4zOTQ2TDM3Ljg2NjkgMjEuMTg0M1pNNDYuOTU0NCAzMy41NjIzVjE1LjQzNDhINDUuNjUxM1YxNUg0Ny40NTM5VjMzLjk5NDdINDUuNjUxM1YzMy41NTk5TDQ2Ljk1NDQgMzMuNTYyM1oiIGZpbGw9IiMwNDA0MDQiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE1NF82KSI+CjxwYXRoIGQ9Ik00MyAwSDdDMy4xMzQwMSAwIDAgMy4xMzQwMSAwIDdWNDNDMCA0Ni44NjYgMy4xMzQwMSA1MCA3IDUwSDQzQzQ2Ljg2NiA1MCA1MCA0Ni44NjYgNTAgNDNWN0M1MCAzLjEzNDAxIDQ2Ljg2NiAwIDQzIDBaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMy40OTk1MiAxNS40Mzc3VjMzLjU2NTJINC44MDI2NVYzNEgzVjE1LjAwNTNINC44MDIwNlYxNS40NDAxTDMuNDk5NTIgMTUuNDM3N1pNOC41MTg0MyAyMS4xODQzVjIyLjEwMTNIOC41NDQ1NkM4Ljc3Mjk1IDIxLjc2NjUgOS4wNzUxIDIxLjQ4ODUgOS40Mjc3NyAyMS4yODg4QzkuNzcyMjcgMjEuMDk2OSAxMC4xNjcyIDIxLjAwMDcgMTAuNjExNSAyMS4wMDA3QzExLjAzOTIgMjEuMDAwNyAxMS40Mjk0IDIxLjA4MzkgMTEuNzgyOCAyMS4yNTAyQzEyLjEzNjIgMjEuNDE1OSAxMi40MDQ3IDIxLjcwODEgMTIuNTg3NiAyMi4xMjc1QzEyLjc4ODQgMjEuODMwNSAxMy4wNjA0IDIxLjU2ODUgMTMuNDA1NSAyMS4zNDE2QzEzLjc1IDIxLjExNDIgMTQuMTU3NCAyMS4wMDA3IDE0LjYyOSAyMS4wMDA3QzE0Ljk4NjYgMjEuMDAwNyAxNS4zMTggMjEuMDQ0NyAxNS42MjMzIDIxLjEzMTRDMTUuOTI4NiAyMS4yMTkzIDE2LjE4OTkgMjEuMzU4OSAxNi40MDg1IDIxLjU1MTNDMTYuNjI1OSAyMS43NDMyIDE2Ljc5NjQgMjEuOTk0NCAxNi45MTg3IDIyLjMwNDRDMTcuMDQwNSAyMi42MTQ1IDE3LjEwMTcgMjIuOTg3NSAxNy4xMDE3IDIzLjQyNTJWMjcuOTU4OUgxNS4yNDQ0VjI0LjExOTZDMTUuMjQ0NCAyMy44OTIxIDE1LjIzNTUgMjMuNjc4MyAxNS4yMTgyIDIzLjQ3NjlDMTUuMjA1OCAyMy4yOTQ0IDE1LjE1NjkgMjMuMTE2MyAxNS4wNzQ1IDIyLjk1M0MxNC45OTU0IDIyLjgwNDEgMTQuODc1IDIyLjY4MTEgMTQuNzI3NiAyMi41OTlDMTQuNTc1IDIyLjUxMjMgMTQuMzY3NyAyMi40Njg0IDE0LjEwNTggMjIuNDY4NEMxMy44NDQ0IDIyLjQ2ODQgMTMuNjMzIDIyLjUxODkgMTMuNDcxNCAyMi42MTg3QzEzLjMwOTkgMjIuNzE5NiAxMy4xODMzIDIyLjg1MDMgMTMuMDkxOSAyMy4wMTE4QzEyLjk5NzQgMjMuMTgyNSAxMi45MzUzIDIzLjM2OTIgMTIuOTA4OSAyMy41NjI0QzEyLjg3ODEgMjMuNzY4NSAxMi44NjI2IDIzLjk3NjYgMTIuODYyNiAyNC4xODQ5VjI3Ljk1ODlIMTEuMDA0N1YyNC4xNTg4QzExLjAwNDcgMjMuOTU4IDExLjAwMDYgMjMuNzU5IDEwLjk5MjIgMjMuNTYyNEMxMC45ODU1IDIzLjM3NjEgMTAuOTQ3OCAyMy4xOTIzIDEwLjg4MDYgMjMuMDE4NEMxMC44MTY1IDIyLjg1NDEgMTAuNzAyMSAyMi43MTQyIDEwLjU1MzkgMjIuNjE4N0MxMC40MDA3IDIyLjUxODkgMTAuMTc2MiAyMi40Njg0IDkuODc5NzcgMjIuNDY4NEM5Ljc2MjA5IDIyLjQ3MzMgOS42NDU1MyAyMi40OTMzIDkuNTMyOSAyMi41Mjc4QzkuMzc5NDQgMjIuNTcyIDkuMjM2ODQgMjIuNjQ3NiA5LjExNDE2IDIyLjc0OTlDOC45Nzg3NCAyMi44NTkyIDguODYzNTIgMjMuMDE2NiA4Ljc2NzMgMjMuMjIxNUM4LjY3MTY3IDIzLjQyNyA4LjYyMzU2IDIzLjY5NTUgOC42MjM1NiAyNC4wMjc1VjI3Ljk1ODlINi43NjUwOFYyMS4xODE5TDguNTE4NDMgMjEuMTg0M1pNMTguMjk0OSAyMi4xODAzQzE4LjQ4MjYgMjEuODk1NyAxOC43MzMyIDIxLjY1NzkgMTkuMDI3MyAyMS40ODU0QzE5LjMzNzUgMjEuMzA1NSAxOS42NzU4IDIxLjE3OTIgMjAuMDI4MSAyMS4xMTE4QzIwLjM5NjUgMjEuMDM3OSAyMC43NzEzIDIxLjAwMDcgMjEuMTQ3MSAyMS4wMDA3QzIxLjQ4NzQgMjEuMDAwNyAyMS44MzE5IDIxLjAyNDUgMjIuMTgwNiAyMS4wNzI2QzIyLjUyOTggMjEuMTIwNyAyMi44NDgyIDIxLjIxNTEgMjMuMTM2MiAyMS4zNTQ3QzIzLjQyMzcgMjEuNDk0MyAyMy42NTg5IDIxLjY4ODUgMjMuODQzIDIxLjkzNzRDMjQuMDI2IDIyLjE4NjggMjQuMTE3NCAyMi41MTY1IDI0LjExNzQgMjIuOTI2OVYyNi40NTE0QzI0LjExNzQgMjYuNzU3OSAyNC4xMzUzIDI3LjA1MDEgMjQuMTY5NyAyNy4zMjkzQzI0LjIwNDIgMjcuNjA5MSAyNC4yNjUzIDI3LjgxODcgMjQuMzUyNyAyNy45NTg5SDIyLjQ2OTJDMjIuMzk4IDI3Ljc0NjggMjIuMzU0MSAyNy41MjY0IDIyLjMzODYgMjcuMzAzMkMyMi4wNDE2IDI3LjYwOTEgMjEuNjkyOSAyNy44MjM1IDIxLjI5MiAyNy45NDUyQzIwLjg5MzQgMjguMDY3MiAyMC40Nzg4IDI4LjEyOTMgMjAuMDYxOSAyOC4xMjk0QzE5LjczODggMjguMTI5NCAxOS40MzgzIDI4LjA4OTYgMTkuMTU5MSAyOC4wMTA2QzE4Ljg5MjggMjcuOTM4NyAxOC42NDM1IDI3LjgxNDEgMTguNDI2MiAyNy42NDQxQzE4LjIxNTIgMjcuNDc2MiAxOC4wNDcxIDI3LjI2MDYgMTcuOTM1NiAyNy4wMTUxQzE3LjgxNzQgMjYuNzYyMSAxNy43NTg2IDI2LjQ2MDMgMTcuNzU4NiAyNi4xMTExQzE3Ljc1ODYgMjUuNzI2OCAxNy44MjYzIDI1LjQxMDIgMTcuOTYxNyAyNS4xNjA4QzE4LjA5NjUgMjQuOTExOSAxOC4yNzA2IDI0LjcxMzUgMTguNDg1IDI0LjU2NDRDMTguNjk4OCAyNC40MTYgMTguOTQyOSAyNC4zMDQ5IDE5LjIxNzkgMjQuMjMwNkMxOS40OTIzIDI0LjE1NjQgMTkuNzY5NyAyNC4wOTc2IDIwLjA0ODkgMjQuMDUzNkMyMC4zMjggMjQuMDEwMyAyMC42MDI0IDIzLjk3NTIgMjAuODcyNyAyMy45NDkxQzIxLjE0MzUgMjMuOTIzIDIxLjM4MzUgMjMuODgzOCAyMS41OTI1IDIzLjgzMDlDMjEuODAyMiAyMy43Nzg2IDIxLjk2NzMgMjMuNzAyIDIyLjA4OTcgMjMuNjAxNkMyMi4yMTIgMjMuNTAxMyAyMi4yNjg1IDIzLjM1NTIgMjIuMjYwMiAyMy4xNjIxQzIyLjI2MDIgMjIuOTYyIDIyLjIyNzUgMjIuODAyMiAyMi4xNjE2IDIyLjY4NDZDMjIuMTAwNiAyMi41NzExIDIyLjAxMDMgMjIuNDc1OSAyMS45MDAyIDIyLjQwOUMyMS43ODM1IDIyLjM0MSAyMS42NTQ1IDIyLjI5NjYgMjEuNTIwNyAyMi4yNzgzQzIxLjM2NjkgMjIuMjU2IDIxLjIxMTYgMjIuMjQ1IDIxLjA1NjIgMjIuMjQ1NkMyMC42ODk3IDIyLjI0NTYgMjAuNDAyMyAyMi4zMjQgMjAuMTkyNiAyMi40ODE0QzE5Ljk4MzUgMjIuNjM4MyAxOS44NjEyIDIyLjkwMDggMTkuODI2MSAyMy4yNjcySDE3Ljk2ODJDMTcuOTk0NCAyMi44MzA3IDE4LjEwMzEgMjIuNDY4NCAxOC4yOTQ5IDIyLjE4MDNaTTIxLjk2NSAyNC44MDc0QzIxLjg0MDcgMjQuODQ4MiAyMS43MTM5IDI0Ljg4MDkgMjEuNTg1NCAyNC45MDU0QzIxLjQ0NDUgMjQuOTMyNSAyMS4zMDI3IDI0Ljk1NDIgMjEuMTYwMiAyNC45NzA3QzIxLjAxMTcgMjQuOTg4NSAyMC44NjMyIDI1LjAxMDUgMjAuNzE1MyAyNS4wMzZDMjAuNTc1OCAyNS4wNjIzIDIwLjQzODEgMjUuMDk3NCAyMC4zMDMxIDI1LjE0MTJDMjAuMTc2NyAyNS4xODA3IDIwLjA1NzUgMjUuMjQwNCAxOS45NTAzIDI1LjMxODJDMTkuODQ5MyAyNS4zOTI0IDE5Ljc2OTEgMjUuNDg2OSAxOS43MDc5IDI1LjU5OTdDMTkuNjQ2OCAyNS43MTM3IDE5LjYxNjUgMjUuODU3NSAxOS42MTY1IDI2LjAzMjFDMTkuNjE2NSAyNi4xOTg0IDE5LjY0NjggMjYuMzM4IDE5LjcwNzkgMjYuNDUxNEMxOS43NjkxIDI2LjU2NTUgMTkuODUxNyAyNi42NTQ2IDE5Ljk1NjggMjYuNzIwNUMyMC4wNjEzIDI2Ljc4NTggMjAuMTgzMSAyNi44MzE2IDIwLjMyMzMgMjYuODU3N0MyMC40NjIzIDI2Ljg4MzggMjAuNjA2NiAyNi44OTY5IDIwLjc1NDUgMjYuODk2OUMyMS4xMjA5IDI2Ljg5NjkgMjEuNDA0MyAyNi44MzYzIDIxLjYwNSAyNi43MTM0QzIxLjgwNTggMjYuNTkxNiAyMS45NTM3IDI2LjQ0NDkgMjIuMDUwNSAyNi4yNzQ0QzIyLjE0NTUgMjYuMTA0NiAyMi4yMDQ5IDI1LjkzMjMgMjIuMjI2OSAyNS43NTc3QzIyLjI0ODMgMjUuNTgyNSAyMi4yNTk2IDI1LjQ0MjkgMjIuMjU5NiAyNS4zMzc4VjI0LjY0MjhDMjIuMTczNiAyNC43MTcyIDIyLjA3MzQgMjQuNzczMiAyMS45NjUgMjQuODA3NFpNMjkuMDA5MyAyMS4xODQzVjIyLjQyOTJIMjcuNjQ4NVYyNS43ODMyQzI3LjY0ODUgMjYuMDk4IDI3LjcwMDggMjYuMzA3NyAyNy44MDUzIDI2LjQxMjJDMjcuOTA5OCAyNi41MTc0IDI4LjExOTUgMjYuNTY5NiAyOC40MzMxIDI2LjU2OTZDMjguNTM4MiAyNi41Njk2IDI4LjYzOCAyNi41NjU1IDI4LjczNDMgMjYuNTU2NkMyOC44Mjk5IDI2LjU0NzcgMjguOTIxOSAyNi41MzQ2IDI5LjAwOTMgMjYuNTE3NFYyNy45NTgzQzI4LjgzNTggMjcuOTg2MiAyOC42NjA5IDI4LjAwMzkgMjguNDg1NCAyOC4wMTEyQzI4LjI5OCAyOC4wMTk2IDI4LjExMDUgMjguMDI0IDI3LjkyMjkgMjguMDI0MkMyNy42MzU0IDI4LjAyNDIgMjcuMzYyMiAyOC4wMDQgMjcuMTA1IDI3Ljk2NDhDMjYuODY2IDI3LjkzMTggMjYuNjM1MiAyNy44NTQgMjYuNDI1IDI3LjczNTZDMjYuMjI3NiAyNy42MjEgMjYuMDY2NiAyNy40NTMgMjUuOTYwNSAyNy4yNTA5QzI1Ljg0NyAyNy4wNDEyIDI1Ljc5IDI2Ljc2NjIgMjUuNzkgMjYuNDI1M1YyMi40MjkySDI0LjY2NTFWMjEuMTg0M0gyNS43OVYxOS4xNTI5SDI3LjY0ODVWMjEuMTg0M0gyOS4wMDkzWk0zMS42NjQ4IDIxLjE4NDNWMjIuNDQyMkgzMS42OTFDMzEuODY4OSAyMi4wMTY5IDMyLjE2OTYgMjEuNjU0MiAzMi41NTQ2IDIxLjQwMDVDMzIuNzQ1MiAyMS4yNzQ0IDMyLjk1MjMgMjEuMTc1MSAzMy4xNjk5IDIxLjEwNTNDMzMuMzg5OCAyMS4wMzUyIDMzLjYxOTIgMjEgMzMuODUgMjEuMDAwN0MzMy45NzIzIDIxLjAwMDcgMzQuMTA3MiAyMS4wMjI3IDM0LjI1NTcgMjEuMDY2MVYyMi43OTU2QzM0LjE1MTkgMjIuNzc1NyAzNC4wNDcyIDIyLjc2MDQgMzMuOTQyIDIyLjc0OTlDMzMuODI0NyAyMi43MzcxIDMzLjcwNjcgMjIuNzMwNSAzMy41ODg2IDIyLjczMDNDMzMuMjQ4MyAyMi43MzAzIDMyLjk2MDIgMjIuNzg3MyAzMi43MjUgMjIuOTAwOEMzMi40OTk3IDIzLjAwNjEgMzIuMzA0MSAyMy4xNjU5IDMyLjE1NiAyMy4zNjU4QzMyLjAwNzggMjMuNTcxOCAzMS45MDMxIDIzLjgwNTggMzEuODQ4NCAyNC4wNTM2QzMxLjc4NTUgMjQuMzMzMSAzMS43NTQ4IDI0LjYxODkgMzEuNzU2OSAyNC45MDU0VjI3Ljk1ODNIMjkuODk5VjIxLjE4NzJMMzEuNjY0OCAyMS4xODQzWk0zNS4wNDA5IDIwLjEzNTlWMTguNjAyM0gzNi44OTg3VjIwLjEzNTlIMzUuMDQwOVpNMzYuODk4NyAyMS4xODQzVjI3Ljk1NTNIMzUuMDQxNVYyMS4xODQzSDM2Ljg5ODdaTTM3Ljg2NjkgMjEuMTg0M0gzOS45ODY3TDQxLjE3NzYgMjIuOTUzTDQyLjM1NDggMjEuMTg0M0g0NC40MDkzTDQyLjE4NDkgMjQuMzU1NEw0NC42ODQzIDI3Ljk1ODlINDIuNTYzOUw0MS4xNTE1IDI1LjgyM0wzOS43Mzc4IDI3Ljk1ODlIMzcuNjU3OEw0MC4wOTEzIDI0LjM5NDZMMzcuODY2OSAyMS4xODQzWk00Ni45NTQ0IDMzLjU2MjNWMTUuNDM0OEg0NS42NTEzVjE1SDQ3LjQ1MzlWMzMuOTk0N0g0NS42NTEzVjMzLjU1OTlMNDYuOTU0NCAzMy41NjIzWiIgZmlsbD0iIzA0MDQwNCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzE1NF82Ij4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=" + }, + { + "name": "Quackback", + "title": "quackback", + "subtitle": "Interactive platform", + "version": "latest", + "icon": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IHZpc2lvbmNvcnRleCBWVHJhY2VyIDAuNi41IC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjQwIiBoZWlnaHQ9IjY0MCI+CjxwYXRoIGQ9Ik0wIDAgQzAuNjEgLTAgMC42MSAtMCAzLjcgLTAuMDIgQzE2LjE3IDAgMjcuNTcgMS44MSAzOS4zOCA1LjgxIEM0MC40MSA2LjE2IDQxLjQ0IDYuNTEgNDIuNTEgNi44NyBDNTUuNzEgMTEuNSA2Ny4wNSAxNy45OSA3Ny41NiAyNy4yNSBDNzcuOTcgMjcuNTkgNzcuOTcgMjcuNTkgODAuMDQgMjkuMzMgQzk5Ljg1IDQ2LjM4IDExMy40MiA3MC45NiAxMTUuNTYgOTcuMjUgQzExNS45MiA5Ny4zOSAxMTUuOTIgOTcuMzkgMTE3LjcgOTguMDggQzEyMC42MiA5OS4yNyAxMjMuNDUgMTAwLjU4IDEyNi4zIDEwMS45NCBDMTQ1Ljg3IDExMS4xOSAxNjUuNyAxMTkuMzUgMTg2IDEyNi44OCBDMTkzLjMgMTI5LjU5IDIwMC41NCAxMzIuMzkgMjA3LjY5IDEzNS41IEMyMDguMDUgMTM1LjY1IDIwOC4wNSAxMzUuNjUgMjA5Ljg2IDEzNi40MiBDMjE0Ljc3IDEzOC42MiAyMTkuOTUgMTQxLjMgMjIyLjYyIDE0Ni4xOSBDMjIyLjUyIDE0OS42IDIyMS40NyAxNTEuNDEgMjE5LjU2IDE1NC4yNSBDMTk2LjggMTc0Ljg4IDE0NS4yMiAxNzMuMTYgMTE2LjQgMTc0LjY0IEM5Ni42IDE3NS42NiA5Ni42IDE3NS42NiA4OC41NiAxODEuMjUgQzg3LjAzIDE4NC4zMSA4Ny4zNiAxODYuODYgODcuNTYgMTkwLjI1IEM5MS41IDIwMS45MiA5OS42MiAyMTEuMDkgMTA3LjU2IDIyMC4yNSBDMTA4LjIgMjIxIDEwOC44NCAyMjEuNzQgMTA5LjUgMjIyLjUxIEMxMTEuMTcgMjI0LjQ0IDExMi44NyAyMjYuMzUgMTE0LjU2IDIyOC4yNSBDMTUxLjc5IDI3MC4wNCAxNTEuNzkgMjcwLjA0IDE1Ni4xMiAyOTIuMTIgQzE1Ni4yNyAyOTIuODIgMTU2LjQxIDI5My41MiAxNTYuNTYgMjk0LjI1IEMxNTcuMjIgMjk0LjU4IDE1Ny44OCAyOTQuOTEgMTU4LjU2IDI5NS4yNSBDMTU5LjM0IDI5Ny44MiAxNTkuOTggMzAwLjMyIDE2MC41NiAzMDIuOTQgQzE2MC42NSAzMDMuMzMgMTYwLjY1IDMwMy4zMyAxNjEuMDkgMzA1LjMgQzE2MS41OSAzMDcuNjEgMTYyLjA4IDMwOS45MyAxNjIuNTYgMzEyLjI1IEMxNjIuNzkgMzEzLjMzIDE2My4wMyAzMTQuNCAxNjMuMjcgMzE1LjUxIEMxNjkuNjcgMzUxLjMgMTYxLjA0IDM4Ny41NyAxNDAuNTYgNDE3LjI1IEMxMzguMDMgNDIwLjcxIDEzNS4zNyA0MjQuMDEgMTMyLjU2IDQyNy4yNSBDMTMxLjg4IDQyOC4wNCAxMzEuMTkgNDI4Ljg0IDEzMC40OSA0MjkuNjYgQzExNi4yOSA0NDUuNzYgMTAwLjcxIDQ1OC44IDgyLjU2IDQ3MC4yNSBDODEuOTEgNDcwLjY2IDgxLjI3IDQ3MS4wNyA4MC42IDQ3MS41IEMyOS4zIDUwMy43MyAtMzQuNjggNTEzLjkxIC05NC4zNiA1MDYuNjkgQy05OC4wOCA1MDYuMjQgLTEwMS42OSA1MDYuMTcgLTEwNS40NCA1MDYuMjUgQy0xMDUuNDQgNTA1LjU5IC0xMDUuNDQgNTA0LjkzIC0xMDUuNDQgNTA0LjI1IEMtMTA2LjA4IDUwNC4yMiAtMTA2LjczIDUwNC4yIC0xMDcuMzkgNTA0LjE3IEMtMTQ5LjIzIDUwMS42NSAtMTk0LjkgNDgyLjg5IC0yMjguNDQgNDU4LjI1IEMtMjI4Ljk4IDQ1Ny44NSAtMjI5LjUzIDQ1Ny40NSAtMjMwLjA5IDQ1Ny4wNSBDLTI0Ni4yNSA0NDUuMTYgLTI2MC45OSA0MzIuMDMgLTI3My40NCA0MTYuMjUgQy0yNzQuMjIgNDE1LjI5IC0yNzUgNDE0LjMyIC0yNzUuOCA0MTMuMzMgQy0yODYuNDEgMzk5Ljk4IC0yOTUuMzEgMzg1LjUzIC0zMDIuNTUgMzcwLjExIEMtMzAzLjM5IDM2OC4zNSAtMzA0LjI4IDM2Ni42MSAtMzA1LjE2IDM2NC44NyBDLTMxNy42NCAzMzkuODQgLTMyNC4wNCAzMTEuODggLTMyNy40NCAyODQuMjUgQy0zMjcuNTMgMjgzLjQ2IC0zMjcuNjMgMjgyLjY3IC0zMjcuNzMgMjgxLjg2IEMtMzI4LjQ1IDI3NS40NiAtMzI4LjU5IDI2OS4xMiAtMzI4LjU2IDI2Mi42OSBDLTMyOC41NyAyNjEuNzEgLTMyOC41NyAyNjAuNzMgLTMyOC41NyAyNTkuNzMgQy0zMjguNTUgMjQyLjUyIC0zMjguNTUgMjQyLjUyIC0zMjQuNDQgMjM3LjI1IEMtMzIxLjIxIDIzNS42NCAtMzE3Ljk0IDIzNS43OCAtMzE0LjQ0IDIzNi4yNSBDLTMxMS43MSAyMzcuMzIgLTMwOS4zNCAyMzguODEgLTMwNi44OCAyNDAuMzggQy0yODYuMjYgMjUyLjYyIC0yNjMuMSAyNTcuODQgLTIzOS40NCAyNjAuMjUgQy0yMzguOCAyNjAuMzIgLTIzOC44IDI2MC4zMiAtMjM1LjYgMjYwLjY1IEMtMjEzLjUzIDI2Mi40OCAtMTkxLjMyIDI2MC45NiAtMTY5LjI4IDI1OS40NSBDLTE2NS43OSAyNTkuMjIgLTE2Mi4zIDI1OC45OSAtMTU4LjgxIDI1OC43NiBDLTE1OC4xMyAyNTguNzEgLTE1Ny40NSAyNTguNjcgLTE1Ni43NCAyNTguNjIgQy0xNTAuNzggMjU4LjIzIC0xNDQuODEgMjU3Ljg1IC0xMzguODQgMjU3LjQ3IEMtMTM2Ljc5IDI1Ny4zNCAtMTM0Ljc0IDI1Ny4yIC0xMzIuNjkgMjU3LjA2IEMtMTEzLjY0IDI1NS43OSAtOTQuNTMgMjU2LjE0IC03NS40NSAyNTYuMTggQy03MC43IDI1Ni4xOSAtNjUuOTUgMjU2LjIgLTYxLjIxIDI1Ni4yIEMtNTEuOTUgMjU2LjIxIC00Mi42OSAyNTYuMjMgLTMzLjQ0IDI1Ni4yNSBDLTMzLjExIDI1NS41OSAtMzIuNzggMjU0LjkzIC0zMi40NCAyNTQuMjUgQy0zMC4zOCAyNTMuMTIgLTMwLjM4IDI1My4xMiAtMjguNDQgMjUyLjI1IEMtMjcuOTIgMjQ3LjM5IC0yNy44OSAyNDQuMzkgLTMwLjgxIDI0MC4zOCBDLTM3LjMxIDIzMi42IC00NC42OCAyMjUuOTIgLTUyLjU3IDIxOS42MSBDLTU2LjIzIDIxNi42IC01OS43IDIxMy40MiAtNjMuMTYgMjEwLjIgQy02NS45MSAyMDcuNjQgLTY4LjY5IDIwNS4xNiAtNzEuNTYgMjAyLjc1IEMtOTYuMyAxODEuMDcgLTExMS44OCAxNDkuODIgLTExNC4yNSAxMTcuMDYgQy0xMTUuNDQgOTQuNzIgLTExMC4yOCA3NC42NyAtOTkuNDQgNTUuMjUgQy05OC44OSA1NC4yNiAtOTguMzUgNTMuMjggLTk3Ljc5IDUyLjI2IEMtODMuMjUgMjcuNzYgLTU3LjIgMTAuNDcgLTMwLjA3IDMuMDQgQy0xOS45NSAwLjg0IC0xMC4zNiAtMC4wNyAwIDAgWiAiIGZpbGw9IiNGN0NDMjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2MS40Mzc1LDczLjc1KSIvPgo8cGF0aCBkPSJNMCAwIEMtMTUuNSAxLjY3IC0zMC40NSAyLjEzIC00NiAxIEMtNDYgMC42NyAtNDYgMC4zNCAtNDYgMCBDLTQxLjk3IC0wLjI5IC0zNy45MyAtMC41OCAtMzMuOSAtMC44NSBDLTMyLjUzIC0wLjk1IC0zMS4xNiAtMS4wNSAtMjkuOCAtMS4xNSBDLTQuNDYgLTIuOTcgLTQuNDYgLTIuOTcgMCAwIFogIiBmaWxsPSIjRjlEMjM3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDgsMzM1KSIvPgo8cGF0aCBkPSJNMCAwIEMtMC45OSAwLjMzIC0xLjk4IDAuNjYgLTMgMSBDLTMgMS42NiAtMyAyLjMyIC0zIDMgQy01LjYgMy4yMiAtOC4yMSAzLjQzIC0xMC44MSAzLjYyIEMtMTEuNTUgMy42OSAtMTIuMjkgMy43NSAtMTMuMDUgMy44MiBDLTE4LjY2IDQuMjMgLTE4LjY2IDQuMjMgLTIyIDIgQy0xOS40NiAxLjY2IC0xNi45MiAxLjMzIC0xNC4zOCAxIEMtMTMuNjYgMC45IC0xMi45NSAwLjgxIC0xMi4yMSAwLjcxIEMtOC4xMSAwLjE4IC00LjE1IC0wLjEgMCAwIFogIiBmaWxsPSIjRjNDNDIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNTIsNTc2KSIvPgo8cGF0aCBkPSJNMCAwIEM4LjkxIDAuNjYgMTcuODIgMS4zMiAyNyAyIEMyNyAyLjMzIDI3IDIuNjYgMjcgMyBDMjMuOTIgMy4yIDIwLjgzIDMuMzggMTcuNzUgMy41NiBDMTYuODggMy42MiAxNiAzLjY3IDE1LjExIDMuNzMgQzE0LjI2IDMuNzggMTMuNDIgMy44MyAxMi41NSAzLjg4IEMxMS43NyAzLjkzIDExIDMuOTcgMTAuMiA0LjAyIEM3Ljk3IDQgNi4xMyAzLjYzIDQgMyBDNCAyLjM0IDQgMS42OCA0IDEgQzIuNjggMC42NyAxLjM2IDAuMzQgMCAwIFogIiBmaWxsPSIjRjhENDNFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDgsMzMzKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMgMC4wNiAwLjMgMC4wNiAxLjggMC4zNyBDOC4xOSAxLjY2IDE0LjU5IDIuODUgMjEgNCBDMjEgNC4zMyAyMSA0LjY2IDIxIDUgQzEzLjUgNi42MiA3LjMyIDQuOTggMCAzIEMwIDIuMDEgMCAxLjAyIDAgMCBaICIgZmlsbD0iI0Y5RDEzNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODUsMzI4KSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAuMTYgNC4yOSAwLjE2IDI2IDEgQzI2IDEuMzMgMjYgMS42NiAyNiAyIEMxNi45OSAyLjU5IDguMDMgMy4xNCAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRkFENjNFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NzIsMjQ1KSIvPgo8cGF0aCBkPSJNMCAwIEM0IC0wLjAyIDggLTAuMDQgMTIuMDEgLTAuMDUgQzEzLjM2IC0wLjA2IDE0LjcyIC0wLjA3IDE2LjA4IC0wLjA4IEMxOC4wNSAtMC4wOSAyMC4wMSAtMC4wOSAyMS45NyAtMC4xIEMyMy4xNSAtMC4xIDI0LjMzIC0wLjExIDI1LjU0IC0wLjExIEMyOS4wOSAwIDMyLjUgMC40MyAzNiAxIEMzNiAxLjMzIDM2IDEuNjYgMzYgMiBDMzQuNTEgMi4xNyAzNC41MSAyLjE3IDI3IDMgQzI3IDIuMzQgMjcgMS42OCAyNyAxIEMxOC4wOSAxIDkuMTggMSAwIDEgQzAgMC42NyAwIDAuMzQgMCAwIFogIiBmaWxsPSIjRkFEOTQ1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDcsNzQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuMDEgMS42NyAyLjkxIDIuNiAzLjQ4IDUuMTkgQzMuNSA1LjU4IDMuNSA1LjU4IDMuNjIgNy41NiBDMy45MiAxMS44NCAzLjkyIDExLjg0IDUgMTQgQzQuMDYgMTYuMTIgNC4wNiAxNi4xMiAzIDE4IEMyLjQ5IDE1Ljk0IDEuOTkgMTMuODggMS41IDExLjgxIEMxLjIyIDEwLjY2IDAuOTQgOS41MiAwLjY2IDguMzMgQzAuMDkgNS40MyAtMC4xMyAyLjk0IDAgMCBaICIgZmlsbD0iI0Y4RDIzOCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LDIwMCkiLz4KPHBhdGggZD0iTTAgMCBDNS4yOCAwLjMzIDEwLjU2IDAuNjYgMTYgMSBDMTYgMS4zMyAxNiAxLjY2IDE2IDIgQzEzLjIgMi4xNiAxMy4yIDIuMTYgLTEgMyBDLTAuNjcgMi4wMSAtMC4zNCAxLjAyIDAgMCBaICIgZmlsbD0iI0Y5RDIzQSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAzLDI0MykiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwLjk5IDAuNjYgMS45OCAxIDMgQy0xLjMxIDUuMzEgLTMuNjIgNy42MiAtNiAxMCBDLTYuOTkgOS42NyAtNy45OCA5LjM0IC05IDkgQy02LjAzIDYuMDMgLTMuMDYgMy4wNiAwIDAgWiAiIGZpbGw9IiNGN0M4MUMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4NSw1MDcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuODEgMC41IDEuODEgMC41IDExIDMgQzcgNSA3IDUgMy44MSA0LjMxIEMyLjg4IDMuODggMS45NiAzLjQ1IDEgMyBDMC42NyAyLjAxIDAuMzQgMS4wMiAwIDAgWiAiIGZpbGw9IiNGQUQxMzIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcwLDMyMykiLz4KPHBhdGggZD0iTTAgMCBDMCAzLjQgLTAuNTIgNC4wNyAtMi41IDYuNjkgQy0yLjk2IDcuMzEgLTMuNDMgNy45MyAtMy45MSA4LjU3IEMtNC4yNyA5LjA0IC00LjYzIDkuNTIgLTUgMTAgQy01LjYxIDguMTcgLTUuNjEgOC4xNyAtNiA2IEMtNC4yMSAzLjM1IC0yLjg4IDEuNDQgMCAwIFogIiBmaWxsPSIjRkJDRjFGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzAsMTE5KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjY2IDAuMzMgMS4zMiAwLjY2IDIgMSBDLTAuNDYgNS44IC0wLjQ2IDUuOCAtMy4xOSA2LjgxIEMtMy43OSA2Ljg3IC00LjM4IDYuOTQgLTUgNyBDLTUuMzMgNi4wMSAtNS42NiA1LjAyIC02IDQgQy00LjAyIDIuNjggLTIuMDQgMS4zNiAwIDAgWiAiIGZpbGw9IiNGOUQyMzYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMiw4OSkiLz4KPHBhdGggZD0iTTAgMCBDMS4yNiAwLjEyIDIuNTIgMC4yNSAzLjgxIDAuMzggQzQuMTcgMC40MSA0LjE3IDAuNDEgNS45NiAwLjU5IEM4IDEgOCAxIDExIDMgQzcuNyAzIDQuNCAzIDEgMyBDMC42NyAyLjAxIDAuMzQgMS4wMiAwIDAgWiAiIGZpbGw9IiNGNkM0MUMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMiw1NzIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuNjMgMC40NSAzLjI1IDAuOTEgNC44OCAxLjM4IEM1Ljc4IDEuNjMgNi42OCAxLjg5IDcuNjIgMi4xNSBDMTAgMyAxMCAzIDEyIDUgQzcuMTIgNS4zNSA0LjIzIDQuNDIgMCAyIEMwIDEuMzQgMCAwLjY4IDAgMCBaICIgZmlsbD0iI0Y5RDMzOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDAzLDgxKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMzIDAuNjYgMC42NiAxLjMyIDEgMiBDMC4zNiAyLjI5IC0wLjI4IDIuNTggLTAuOTQgMi44OCBDLTMgNCAtMyA0IC00IDYgQy02LjU2IDYuNjIgLTYuNTYgNi42MiAtOSA3IEMtOC4yNiA0LjYxIC03LjUzIDMuMjkgLTUuMzEgMi4wNyBDLTMuNTYgMS4zMyAtMS43OCAwLjY2IDAgMCBaICIgZmlsbD0iI0Y0QzUxRCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDIzLDU1MikiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwIDAuNjYgMCAxIDAgQzEuMzMgMi42NCAxLjY2IDUuMjggMiA4IEMyLjk5IDguMzMgMy45OCA4LjY2IDUgOSBDNC4wMSA5LjY2IDMuMDIgMTAuMzIgMiAxMSBDMC40NCA5LjQ0IDAuNDQgOS40NCAtMSA3IEMtMC42OSAzLjI1IC0wLjY5IDMuMjUgMCAwIFogIiBmaWxsPSIjRjdEMDNCIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NzUsMTYzKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjQ5IDAuMzMgMC40OSAwLjMzIDMgMiBDMy4xOSA1LjYyIDMuMTkgNS42MiAzIDkgQzIuNjcgOS4xNyAyLjY3IDkuMTcgMSAxMCBDMC42NyA2LjcgMC4zNCAzLjQgMCAwIFogIiBmaWxsPSIjRjZEMDM1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNiwzNjgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuODkgMC4xMyAxLjc5IDAuMjYgMi43MSAwLjM5IEMzLjYxIDAuNTEgNC41MSAwLjYzIDUuNDQgMC43NSBDNi4xMiAwLjg2IDYuODEgMC45NiA3LjUyIDEuMDcgQzcuNTIgMS40IDcuNTIgMS43MyA3LjUyIDIuMDcgQzUuMzcgMi4yNCA1LjM3IDIuMjQgLTUuNDggMy4wNyBDLTIuNDggMC4wNyAtMi40OCAwLjA3IDAgMCBaICIgZmlsbD0iI0Y5RDQ0MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTI1LjQ4MDQ2ODc1LDI0MC45MjU3ODEyNSkiLz4KPHBhdGggZD0iTTAgMCBDMy42NSAxLjI1IDQuNzggMS42NyA3IDUgQzYuNjcgNS42NiA2LjM0IDYuMzIgNiA3IEM1LjM0IDcgNC42OCA3IDQgNyBDMy4zNCA1Ljg0IDMuMzQgNS44NCAwIDAgWiAiIGZpbGw9IiNGOUQxMzQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQyNyw5MykiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwLjY2IDIuNjQgMS4zMiA0IDIgQzIuNzEgMi43IDEuNDIgMy4zOCAwLjEyIDQuMDYgQy0wLjIzIDQuMjUgLTAuMjMgNC4yNSAtMi4wNSA1LjIyIEMtMi43IDUuNDggLTMuMzQgNS43NCAtNCA2IEMtNC42NiA1LjY3IC01LjMyIDUuMzQgLTYgNSBDLTUuMiA0LjczIC00LjM5IDQuNDYgLTMuNTYgNC4xOSBDLTIuNzIgMy44IC0xLjg3IDMuNCAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRjVDRTNBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0MjUsNTUxKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjY2IDAuNjYgMS4zMiAxLjMyIDIgMiBDMS45NyA0LjczIDEuNDQgNy4zIDEgMTAgQy0wLjg1IDYuODggLTEuMjkgNC42MiAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogIiBmaWxsPSIjRjhEMDNDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOSwzNzgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMCAwLjY2IDAgMSAwIEMxLjMzIDMuOTYgMS42NiA3LjkyIDIgMTIgQy0xIDkgLTEgOSAtMS4wNyA2Ljc0IEMtMC45NSA1Ljk0IC0wLjgyIDUuMTQgLTAuNjkgNC4zMSBDLTAuNTcgMy41IC0wLjQ1IDIuNyAtMC4zMiAxLjg2IEMtMC4yMiAxLjI1IC0wLjExIDAuNjMgMCAwIFogIiBmaWxsPSIjRjhEMjNBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MjMsMzg2KSIvPgo8cGF0aCBkPSJNMCAwIEMxLjY1IDAgMy4zIDAgNSAwIEM1IDAuMzMgNSAwLjY2IDUgMSBDMy4zNSAxIDEuNyAxIDAgMSBDMCAwLjY3IDAgMC4zNCAwIDAgWiAiIGZpbGw9IiNFREM2MkUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NCw1ODIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQgMSA0IDEgNCAxIFogIiBmaWxsPSIjRUNDNDJDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjMsNTgyKSIvPgo8cGF0aCBkPSJNMCAwIEMzIDEgMyAxIDMgMSBaICIgZmlsbD0iI0YyQ0IzOCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTU2LDIzOSkiLz4KPHBhdGggZD0iTTAgMCBDMiAxIDIgMSAyIDEgWiAiIGZpbGw9IiNFREM0MkMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwOCw1ODMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMSAyIDEgMiAxIFogIiBmaWxsPSIjRUZDNTJFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIsNTgzKSIvPgo8cGF0aCBkPSJNMCAwIEMyIDEgMiAxIDIgMSBaICIgZmlsbD0iI0VEQzQyRCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzcxLDU3NSkiLz4KPHBhdGggZD0iTTAgMCBDMiAxIDIgMSAyIDEgWiAiIGZpbGw9IiNGNUQwM0IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwMiwyNDcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMSAyIDEgMiAxIFogIiBmaWxsPSIjRUZDQzM5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NDksMjAwKSIvPgo8cGF0aCBkPSJNMCAwIEMyIDEgMiAxIDIgMSBaICIgZmlsbD0iI0Y0RDAzQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzg1LDc0KSIvPgo8L3N2Zz4K" } ] } \ No newline at end of file diff --git a/quackback/domain-quackback.json b/quackback/domain-quackback.json new file mode 100644 index 0000000..ac273c4 --- /dev/null +++ b/quackback/domain-quackback.json @@ -0,0 +1,60 @@ +{ + "main": { + "SERVICE_NAME": "quackback", + "DOMAIN": "#DOMAIN" + }, + "containers": [ + { + "IMAGE": "safebox/domain-check", + "UPDATE": "true", + "MEMORY": "64M", + "NAME": "domain_checker", + "ROLES": "domain_checker", + "NETWORK": "host", + "SELECTOR": "", + "SCALE": "0", + "EXTRA": "--rm --privileged", + "PRE_START": [], + "DEPEND": [], + "POST_START": [], + "CMD": "", + "ENVS": [ + { + "PROXY": "smarthostloadbalancer" + }, + { + "TARGET": "quackback-app" + }, + { + "PORT": "3000" + }, + { + "DOMAIN": "#DOMAIN" + }, + { + "SMARTHOST_PROXY_PATH": "/smarthost-domains" + }, + { + "OPERATION": "CREATE" + } + ], + "VOLUMES": [ + { + "SOURCE": "/etc/user/config/smarthost-domains", + "DEST": "/smarthost-domains", + "TYPE": "rw" + }, + { + "SOURCE": "/etc/system/data/dns/hosts.local", + "DEST": "/etc/dns/hosts.local", + "TYPE": "ro" + }, + { + "SOURCE": "/var/run/docker.sock", + "DEST": "/var/run/docker.sock", + "TYPE": "rw" + } + ] + } + ] +} \ No newline at end of file diff --git a/quackback/firewall-quackback-dns.json b/quackback/firewall-quackback-dns.json new file mode 100644 index 0000000..3a99379 --- /dev/null +++ b/quackback/firewall-quackback-dns.json @@ -0,0 +1,75 @@ +{ + "main": { + "SERVICE_NAME": "firewalls", + "DOMAIN": "null" + }, + "containers": [ + { + "IMAGE": "safebox/firewall", + "NAME": "firewall", + "MEMORY": "64M", + "NETWORK": "host", + "SCALE": "0", + "VOLUMES": [ + { + "SOURCE": "/run/", + "DEST": "/run/", + "TYPE": "rw" + }, + { + "SOURCE": "/etc/user/config/services", + "DEST": "/services", + "TYPE": "ro" + }, + { + "SOURCE": "/etc/system/data/dns/hosts.local", + "DEST": "/etc/dns/hosts.local", + "TYPE": "ro" + }, + { + "SOURCE": "/var/run/docker.sock", + "DEST": "/var/run/docker.sock", + "TYPE": "rw" + } + ], + "PORTS": [], + "READYNESS": [ + { + "tcp": "" + }, + { + "HTTP": "" + }, + { + "EXEC": "/ready.sh" + } + ], + "ENVS": [ + { + "CHAIN": "DOCKER-USER" + }, + { + "SOURCE": "coredns" + }, + { + "TARGET": "quackback-app" + }, + { + "TYPE": "udp" + }, + { + "TARGET_PORT": "53" + }, + { + "COMMENT": "dns for quackback" + } + ], + "EXTRA": "--privileged --rm", + "DEPEND": "null", + "START_ON_BOOT": "false", + "CMD": "null", + "PRE_START": "null", + "POST_START": "null" + } + ] +} \ No newline at end of file diff --git a/quackback/firewall-quackback-smtp.json b/quackback/firewall-quackback-smtp.json new file mode 100644 index 0000000..3650487 --- /dev/null +++ b/quackback/firewall-quackback-smtp.json @@ -0,0 +1,75 @@ +{ + "main": { + "SERVICE_NAME": "firewalls", + "DOMAIN": "null" + }, + "containers": [ + { + "IMAGE": "safebox/firewall", + "NAME": "firewall", + "MEMORY": "64M", + "NETWORK": "host", + "SCALE": "0", + "VOLUMES": [ + { + "SOURCE": "/run/", + "DEST": "/run/", + "TYPE": "rw" + }, + { + "SOURCE": "/etc/user/config/services", + "DEST": "/services", + "TYPE": "ro" + }, + { + "SOURCE": "/etc/system/data/dns/hosts.local", + "DEST": "/etc/dns/hosts.local", + "TYPE": "ro" + }, + { + "SOURCE": "/var/run/docker.sock", + "DEST": "/var/run/docker.sock", + "TYPE": "rw" + } + ], + "PORTS": [], + "READYNESS": [ + { + "tcp": "" + }, + { + "HTTP": "" + }, + { + "EXEC": "/ready.sh" + } + ], + "ENVS": [ + { + "CHAIN": "DOCKER-USER" + }, + { + "SOURCE": "quackback-app" + }, + { + "TARGET": "smtp" + }, + { + "TYPE": "tcp" + }, + { + "TARGET_PORT": "25" + }, + { + "COMMENT": "smtp for openproject" + } + ], + "EXTRA": "--privileged --rm", + "DEPEND": "null", + "START_ON_BOOT": "false", + "CMD": "null", + "PRE_START": "null", + "POST_START": "null" + } + ] +} \ No newline at end of file diff --git a/quackback/firewall-quackback.json b/quackback/firewall-quackback.json new file mode 100644 index 0000000..3348333 --- /dev/null +++ b/quackback/firewall-quackback.json @@ -0,0 +1,75 @@ +{ + "main": { + "SERVICE_NAME": "firewalls", + "DOMAIN": "null" + }, + "containers": [ + { + "IMAGE": "safebox/firewall", + "NAME": "firewall", + "MEMORY": "64M", + "NETWORK": "host", + "SCALE": "0", + "VOLUMES": [ + { + "SOURCE": "/run/", + "DEST": "/run/", + "TYPE": "rw" + }, + { + "SOURCE": "/etc/user/config/services", + "DEST": "/services", + "TYPE": "ro" + }, + { + "SOURCE": "/etc/system/data/dns/hosts.local", + "DEST": "/etc/dns/hosts.local", + "TYPE": "ro" + }, + { + "SOURCE": "/var/run/docker.sock", + "DEST": "/var/run/docker.sock", + "TYPE": "rw" + } + ], + "PORTS": [], + "READYNESS": [ + { + "tcp": "" + }, + { + "HTTP": "" + }, + { + "EXEC": "/ready.sh" + } + ], + "ENVS": [ + { + "CHAIN": "DOCKER-USER" + }, + { + "SOURCE": "smarthostbackend" + }, + { + "TARGET": "quackback-app" + }, + { + "TYPE": "tcp" + }, + { + "TARGET_PORT": "3000" + }, + { + "COMMENT": "proxy for quackback" + } + ], + "EXTRA": "--privileged --rm", + "DEPEND": "null", + "START_ON_BOOT": "false", + "CMD": "null", + "PRE_START": "null", + "POST_START": "null" + } + ] +} \ No newline at end of file diff --git a/quackback/quackback-secret.json b/quackback/quackback-secret.json new file mode 100644 index 0000000..1122c23 --- /dev/null +++ b/quackback/quackback-secret.json @@ -0,0 +1,24 @@ +{ + "quackbackpostgres": { + "POSTGRES_DB": "#DB_NAME", + "POSTGRES_USER": "#DB_USER", + "POSTGRES_PASSWORD": "#DB_PASSWORD" + }, + "quackbackminio": { + "MINIO_ROOT_USER": "#MINIO_ROOT_USER", + "MINIO_ROOT_PASSWORD": "#MINIO_ROOT_PASSWORD" + }, + "quackbackapp": { + "SECRET_KEY": "#SECRET_KEY", + "UTILS_SECRET": "#UTILS_SECRET", + "DATABASE_URL": "postgres://#DB_USER:#DB_PASSWORD@quackbackpostgres-db:5432/#DB_NAME", + "SLACK_CLIENT_ID": "#SLACK_CLIENT_ID", + "SLACK_CLIENT_SECRET": "#SLACK_CLIENT_SECRET", + "GOOGLE_CLIENT_ID": "#GOOGLE_CLIENT_ID", + "GOOGLE_CLIENT_SECRET": "#GOOGLE_CLIENT_SECRET", + "GITHUB_CLIENT_ID": "#GITHUB_CLIENT_ID", + "GITHUB_CLIENT_SECRET": "#GITHUB_CLIENT_SECRET", + "EMAIL_SMTP_USER": "#SMTP_USERNAME", + "EMAIL_SMTP_PASS": "#SMTP_PASSWORD" + } +} \ No newline at end of file diff --git a/quackback/service-quackback.json b/quackback/service-quackback.json new file mode 100644 index 0000000..f423edb --- /dev/null +++ b/quackback/service-quackback.json @@ -0,0 +1,204 @@ +{ + "main": { + "SERVICE_NAME": "quackback", + "DOMAIN": "#DOMAIN" + }, + "containers": [ + { + "IMAGE": "alpine:latest", + "UPDATE": "true", + "NAME": "quackback-init", + "NETWORK": "host", + "MEMORY": "64M", + "VOLUMES": [ + { + "SOURCE": "USER_DATA", + "DEST": "/etc/user/data", + "TYPE": "rw" + } + ], + "EXTRA": "--rm", + "DEPEND": "null", + "START_ON_BOOT": "false", + "ENTRYPOINT": "sh -c", + "CMD": "mkdir -p /etc/user/data/quackback/data && mkdir -p /etc/user/data/quackback/db && mkdir -p /etc/user/data/quackback/minio && mkdir -p /etc/user/data/quackback/dragonfly", + "PRE_START": "null", + "POST_START": "null" + }, + { + "IMAGE": "postgres-quackback:18", + "UPDATE": "true", + "NAME": "quackbackpostgres-db", + "MEMORY": "256M", + "NETWORK": "quackback-net", + "SELECTOR": "quackbackpostgres-db", + "VOLUMES": [ + { + "SOURCE": "/etc/user/data/quackback/db", + "DEST": "/var/lib/postgresql/data", + "TYPE": "rw" + } + ], + "PORTS": [ + { + "SOURCE": "null", + "DEST": "5432", + "TYPE": "tcp" + } + ], + "ENV_FILES": [ + "/etc/user/secret/quackback/quackback.json" + ], + "EXTRA": "--restart always", + "DEPEND": "null", + "START_ON_BOOT": "false", + "CMD": "postgres -c shared_preload_libraries=pg_cron -c cron.database_name=quackback -c max_connections=200", + "PRE_START": "null", + "POST_START": "null" + }, + { + "IMAGE": "minio/minio:latest", + "UPDATE": "true", + "NAME": "quackbackminio-app", + "MEMORY": "2048M", + "NETWORK": "quackback-net", + "SELECTOR": "quackbackminio-app", + "VOLUMES": [ + { + "SOURCE": "/etc/user/data/quackback/minio", + "DEST": "/data", + "TYPE": "rw" + } + ], + "PORTS": [ + { + "SOURCE": "null", + "DEST": "9000", + "TYPE": "tcp" + }, + { + "SOURCE": "null", + "DEST": "9001", + "TYPE": "tcp" + } + ], + "ENV_FILES": [ + "/etc/user/secret/quackback/quackback.json" + ], + "EXTRA": "--restart always", + "DEPEND": "null", + "START_ON_BOOT": "false", + "CMD": "server /data --console-address \":9001\"", + "PRE_START": "null", + "POST_START": "null" + }, + { + "IMAGE": "docker.dragonflydb.io/dragonflydb/dragonfly:v1.27.1", + "UPDATE": "true", + "NAME": "quackbackredis-server", + "MEMORY": "128M", + "NETWORK": "quackback-net", + "SELECTOR": "quackbackredis", + "PORTS": [ + { + "SOURCE": "null", + "DEST": "6379", + "TYPE": "tcp" + } + ], + "VOLUMES": [ + { + "SOURCE": "/etc/user/data/quackback/dragonfly", + "DEST": "/data", + "TYPE": "rw" + } + ], + "EXTRA": "--restart always --ulimit memlock=-1:-1", + "DEPEND": "null", + "START_ON_BOOT": "false", + "CMD": "dragonfly --cluster_mode=emulated --lock_on_hashtags", + "PRE_START": "null", + "POST_START": "null" + }, + { + "IMAGE": "minio/mc:latest", + "UPDATE": "true", + "NAME": "quackbackminio-init", + "NETWORK": "quackback-net", + "MEMORY": "256M", + "ENV_FILES": [ + "/etc/user/secret/quackback/quackback.json" + ], + "EXTRA": "--rm", + "DEPEND": "null", + "START_ON_BOOT": "false", + "ENTRYPOINT": "sh -c", + "CMD": "mc alias set local http://quackbackminio-app:9000 \"$MINIO_ROOT_USER\" \"$MINIO_ROOT_PASSWORD\"; mc mb local/quackback --ignore-existing; mc anonymous set download local/quackback; exit 0;", + "PRE_START": "null", + "POST_START": "null" + }, + { + "IMAGE": "safebox/quackback:latest", + "UPDATE": "true", + "NAME": "quackbackapp", + "NETWORK": "quackback-net", + "SELECTOR": "quackback-app", + "PORTS": [ + { + "SOURCE": "null", + "DEST": "3000", + "TYPE": "tcp" + } + ], + "ENVS": [ + { + "REDIS_URL": "redis://quackbackredis-server:6379" + }, + { + "BASE_URL": "https://#DOMAIN" + }, + { + "DISABLE_TELEMETRY": "true" + }, + { + "EMAIL_SMTP_HOST": "#SMTP_HOST" + }, + { + "EMAIL_SMTP_PORT": "#SMTP_PORT" + }, + { + "EMAIL_FROM": "#SMTP_FROM_EMAIL" + }, + { + "OPENAI_OPENAI_BASE_URL": "#OPENAI_BASE_URL" + }, + { + "S3_ENDPOINT": "http://quackbackminio-app:9000" + }, + { + "S3_BUCKET": "quackback" + }, + { + "S3_REGION": "europe-east-1" + }, + { + "S3_FORCE_PATH_STYLE": "true" + } + ], + "ENV_FILES": [ + "/etc/user/secret/quackback/quackback.json" + ], + "EXTRA": "--restart always", + "DEPEND": [], + "START_ON_BOOT": "true", + "CMD": "null", + "PRE_START": "null", + "POST_START": [ + "firewall-quackback", + "domain-quackback", + "firewall-quackback-dns", + "firewall-quackback-smtp" + ] + } + ] +} \ No newline at end of file diff --git a/quackback/template.json b/quackback/template.json new file mode 100644 index 0000000..beca7dc --- /dev/null +++ b/quackback/template.json @@ -0,0 +1,225 @@ +{ + "name": "quuackback", + "title": "quuackback", + "subtitle": "Interactive portal communication platform", + "description": "Quackback is an open-source interactive portal platform designed to facilitate seamless communication and collaboration within organizations.", + "icon": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IHZpc2lvbmNvcnRleCBWVHJhY2VyIDAuNi41IC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjQwIiBoZWlnaHQ9IjY0MCI+CjxwYXRoIGQ9Ik0wIDAgQzAuNjEgLTAgMC42MSAtMCAzLjcgLTAuMDIgQzE2LjE3IDAgMjcuNTcgMS44MSAzOS4zOCA1LjgxIEM0MC40MSA2LjE2IDQxLjQ0IDYuNTEgNDIuNTEgNi44NyBDNTUuNzEgMTEuNSA2Ny4wNSAxNy45OSA3Ny41NiAyNy4yNSBDNzcuOTcgMjcuNTkgNzcuOTcgMjcuNTkgODAuMDQgMjkuMzMgQzk5Ljg1IDQ2LjM4IDExMy40MiA3MC45NiAxMTUuNTYgOTcuMjUgQzExNS45MiA5Ny4zOSAxMTUuOTIgOTcuMzkgMTE3LjcgOTguMDggQzEyMC42MiA5OS4yNyAxMjMuNDUgMTAwLjU4IDEyNi4zIDEwMS45NCBDMTQ1Ljg3IDExMS4xOSAxNjUuNyAxMTkuMzUgMTg2IDEyNi44OCBDMTkzLjMgMTI5LjU5IDIwMC41NCAxMzIuMzkgMjA3LjY5IDEzNS41IEMyMDguMDUgMTM1LjY1IDIwOC4wNSAxMzUuNjUgMjA5Ljg2IDEzNi40MiBDMjE0Ljc3IDEzOC42MiAyMTkuOTUgMTQxLjMgMjIyLjYyIDE0Ni4xOSBDMjIyLjUyIDE0OS42IDIyMS40NyAxNTEuNDEgMjE5LjU2IDE1NC4yNSBDMTk2LjggMTc0Ljg4IDE0NS4yMiAxNzMuMTYgMTE2LjQgMTc0LjY0IEM5Ni42IDE3NS42NiA5Ni42IDE3NS42NiA4OC41NiAxODEuMjUgQzg3LjAzIDE4NC4zMSA4Ny4zNiAxODYuODYgODcuNTYgMTkwLjI1IEM5MS41IDIwMS45MiA5OS42MiAyMTEuMDkgMTA3LjU2IDIyMC4yNSBDMTA4LjIgMjIxIDEwOC44NCAyMjEuNzQgMTA5LjUgMjIyLjUxIEMxMTEuMTcgMjI0LjQ0IDExMi44NyAyMjYuMzUgMTE0LjU2IDIyOC4yNSBDMTUxLjc5IDI3MC4wNCAxNTEuNzkgMjcwLjA0IDE1Ni4xMiAyOTIuMTIgQzE1Ni4yNyAyOTIuODIgMTU2LjQxIDI5My41MiAxNTYuNTYgMjk0LjI1IEMxNTcuMjIgMjk0LjU4IDE1Ny44OCAyOTQuOTEgMTU4LjU2IDI5NS4yNSBDMTU5LjM0IDI5Ny44MiAxNTkuOTggMzAwLjMyIDE2MC41NiAzMDIuOTQgQzE2MC42NSAzMDMuMzMgMTYwLjY1IDMwMy4zMyAxNjEuMDkgMzA1LjMgQzE2MS41OSAzMDcuNjEgMTYyLjA4IDMwOS45MyAxNjIuNTYgMzEyLjI1IEMxNjIuNzkgMzEzLjMzIDE2My4wMyAzMTQuNCAxNjMuMjcgMzE1LjUxIEMxNjkuNjcgMzUxLjMgMTYxLjA0IDM4Ny41NyAxNDAuNTYgNDE3LjI1IEMxMzguMDMgNDIwLjcxIDEzNS4zNyA0MjQuMDEgMTMyLjU2IDQyNy4yNSBDMTMxLjg4IDQyOC4wNCAxMzEuMTkgNDI4Ljg0IDEzMC40OSA0MjkuNjYgQzExNi4yOSA0NDUuNzYgMTAwLjcxIDQ1OC44IDgyLjU2IDQ3MC4yNSBDODEuOTEgNDcwLjY2IDgxLjI3IDQ3MS4wNyA4MC42IDQ3MS41IEMyOS4zIDUwMy43MyAtMzQuNjggNTEzLjkxIC05NC4zNiA1MDYuNjkgQy05OC4wOCA1MDYuMjQgLTEwMS42OSA1MDYuMTcgLTEwNS40NCA1MDYuMjUgQy0xMDUuNDQgNTA1LjU5IC0xMDUuNDQgNTA0LjkzIC0xMDUuNDQgNTA0LjI1IEMtMTA2LjA4IDUwNC4yMiAtMTA2LjczIDUwNC4yIC0xMDcuMzkgNTA0LjE3IEMtMTQ5LjIzIDUwMS42NSAtMTk0LjkgNDgyLjg5IC0yMjguNDQgNDU4LjI1IEMtMjI4Ljk4IDQ1Ny44NSAtMjI5LjUzIDQ1Ny40NSAtMjMwLjA5IDQ1Ny4wNSBDLTI0Ni4yNSA0NDUuMTYgLTI2MC45OSA0MzIuMDMgLTI3My40NCA0MTYuMjUgQy0yNzQuMjIgNDE1LjI5IC0yNzUgNDE0LjMyIC0yNzUuOCA0MTMuMzMgQy0yODYuNDEgMzk5Ljk4IC0yOTUuMzEgMzg1LjUzIC0zMDIuNTUgMzcwLjExIEMtMzAzLjM5IDM2OC4zNSAtMzA0LjI4IDM2Ni42MSAtMzA1LjE2IDM2NC44NyBDLTMxNy42NCAzMzkuODQgLTMyNC4wNCAzMTEuODggLTMyNy40NCAyODQuMjUgQy0zMjcuNTMgMjgzLjQ2IC0zMjcuNjMgMjgyLjY3IC0zMjcuNzMgMjgxLjg2IEMtMzI4LjQ1IDI3NS40NiAtMzI4LjU5IDI2OS4xMiAtMzI4LjU2IDI2Mi42OSBDLTMyOC41NyAyNjEuNzEgLTMyOC41NyAyNjAuNzMgLTMyOC41NyAyNTkuNzMgQy0zMjguNTUgMjQyLjUyIC0zMjguNTUgMjQyLjUyIC0zMjQuNDQgMjM3LjI1IEMtMzIxLjIxIDIzNS42NCAtMzE3Ljk0IDIzNS43OCAtMzE0LjQ0IDIzNi4yNSBDLTMxMS43MSAyMzcuMzIgLTMwOS4zNCAyMzguODEgLTMwNi44OCAyNDAuMzggQy0yODYuMjYgMjUyLjYyIC0yNjMuMSAyNTcuODQgLTIzOS40NCAyNjAuMjUgQy0yMzguOCAyNjAuMzIgLTIzOC44IDI2MC4zMiAtMjM1LjYgMjYwLjY1IEMtMjEzLjUzIDI2Mi40OCAtMTkxLjMyIDI2MC45NiAtMTY5LjI4IDI1OS40NSBDLTE2NS43OSAyNTkuMjIgLTE2Mi4zIDI1OC45OSAtMTU4LjgxIDI1OC43NiBDLTE1OC4xMyAyNTguNzEgLTE1Ny40NSAyNTguNjcgLTE1Ni43NCAyNTguNjIgQy0xNTAuNzggMjU4LjIzIC0xNDQuODEgMjU3Ljg1IC0xMzguODQgMjU3LjQ3IEMtMTM2Ljc5IDI1Ny4zNCAtMTM0Ljc0IDI1Ny4yIC0xMzIuNjkgMjU3LjA2IEMtMTEzLjY0IDI1NS43OSAtOTQuNTMgMjU2LjE0IC03NS40NSAyNTYuMTggQy03MC43IDI1Ni4xOSAtNjUuOTUgMjU2LjIgLTYxLjIxIDI1Ni4yIEMtNTEuOTUgMjU2LjIxIC00Mi42OSAyNTYuMjMgLTMzLjQ0IDI1Ni4yNSBDLTMzLjExIDI1NS41OSAtMzIuNzggMjU0LjkzIC0zMi40NCAyNTQuMjUgQy0zMC4zOCAyNTMuMTIgLTMwLjM4IDI1My4xMiAtMjguNDQgMjUyLjI1IEMtMjcuOTIgMjQ3LjM5IC0yNy44OSAyNDQuMzkgLTMwLjgxIDI0MC4zOCBDLTM3LjMxIDIzMi42IC00NC42OCAyMjUuOTIgLTUyLjU3IDIxOS42MSBDLTU2LjIzIDIxNi42IC01OS43IDIxMy40MiAtNjMuMTYgMjEwLjIgQy02NS45MSAyMDcuNjQgLTY4LjY5IDIwNS4xNiAtNzEuNTYgMjAyLjc1IEMtOTYuMyAxODEuMDcgLTExMS44OCAxNDkuODIgLTExNC4yNSAxMTcuMDYgQy0xMTUuNDQgOTQuNzIgLTExMC4yOCA3NC42NyAtOTkuNDQgNTUuMjUgQy05OC44OSA1NC4yNiAtOTguMzUgNTMuMjggLTk3Ljc5IDUyLjI2IEMtODMuMjUgMjcuNzYgLTU3LjIgMTAuNDcgLTMwLjA3IDMuMDQgQy0xOS45NSAwLjg0IC0xMC4zNiAtMC4wNyAwIDAgWiAiIGZpbGw9IiNGN0NDMjkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2MS40Mzc1LDczLjc1KSIvPgo8cGF0aCBkPSJNMCAwIEMtMTUuNSAxLjY3IC0zMC40NSAyLjEzIC00NiAxIEMtNDYgMC42NyAtNDYgMC4zNCAtNDYgMCBDLTQxLjk3IC0wLjI5IC0zNy45MyAtMC41OCAtMzMuOSAtMC44NSBDLTMyLjUzIC0wLjk1IC0zMS4xNiAtMS4wNSAtMjkuOCAtMS4xNSBDLTQuNDYgLTIuOTcgLTQuNDYgLTIuOTcgMCAwIFogIiBmaWxsPSIjRjlEMjM3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDgsMzM1KSIvPgo8cGF0aCBkPSJNMCAwIEMtMC45OSAwLjMzIC0xLjk4IDAuNjYgLTMgMSBDLTMgMS42NiAtMyAyLjMyIC0zIDMgQy01LjYgMy4yMiAtOC4yMSAzLjQzIC0xMC44MSAzLjYyIEMtMTEuNTUgMy42OSAtMTIuMjkgMy43NSAtMTMuMDUgMy44MiBDLTE4LjY2IDQuMjMgLTE4LjY2IDQuMjMgLTIyIDIgQy0xOS40NiAxLjY2IC0xNi45MiAxLjMzIC0xNC4zOCAxIEMtMTMuNjYgMC45IC0xMi45NSAwLjgxIC0xMi4yMSAwLjcxIEMtOC4xMSAwLjE4IC00LjE1IC0wLjEgMCAwIFogIiBmaWxsPSIjRjNDNDIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNTIsNTc2KSIvPgo8cGF0aCBkPSJNMCAwIEM4LjkxIDAuNjYgMTcuODIgMS4zMiAyNyAyIEMyNyAyLjMzIDI3IDIuNjYgMjcgMyBDMjMuOTIgMy4yIDIwLjgzIDMuMzggMTcuNzUgMy41NiBDMTYuODggMy42MiAxNiAzLjY3IDE1LjExIDMuNzMgQzE0LjI2IDMuNzggMTMuNDIgMy44MyAxMi41NSAzLjg4IEMxMS43NyAzLjkzIDExIDMuOTcgMTAuMiA0LjAyIEM3Ljk3IDQgNi4xMyAzLjYzIDQgMyBDNCAyLjM0IDQgMS42OCA0IDEgQzIuNjggMC42NyAxLjM2IDAuMzQgMCAwIFogIiBmaWxsPSIjRjhENDNFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDgsMzMzKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMgMC4wNiAwLjMgMC4wNiAxLjggMC4zNyBDOC4xOSAxLjY2IDE0LjU5IDIuODUgMjEgNCBDMjEgNC4zMyAyMSA0LjY2IDIxIDUgQzEzLjUgNi42MiA3LjMyIDQuOTggMCAzIEMwIDIuMDEgMCAxLjAyIDAgMCBaICIgZmlsbD0iI0Y5RDEzNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODUsMzI4KSIvPgo8cGF0aCBkPSJNMCAwIEM0LjI5IDAuMTYgNC4yOSAwLjE2IDI2IDEgQzI2IDEuMzMgMjYgMS42NiAyNiAyIEMxNi45OSAyLjU5IDguMDMgMy4xNCAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRkFENjNFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NzIsMjQ1KSIvPgo8cGF0aCBkPSJNMCAwIEM0IC0wLjAyIDggLTAuMDQgMTIuMDEgLTAuMDUgQzEzLjM2IC0wLjA2IDE0LjcyIC0wLjA3IDE2LjA4IC0wLjA4IEMxOC4wNSAtMC4wOSAyMC4wMSAtMC4wOSAyMS45NyAtMC4xIEMyMy4xNSAtMC4xIDI0LjMzIC0wLjExIDI1LjU0IC0wLjExIEMyOS4wOSAwIDMyLjUgMC40MyAzNiAxIEMzNiAxLjMzIDM2IDEuNjYgMzYgMiBDMzQuNTEgMi4xNyAzNC41MSAyLjE3IDI3IDMgQzI3IDIuMzQgMjcgMS42OCAyNyAxIEMxOC4wOSAxIDkuMTggMSAwIDEgQzAgMC42NyAwIDAuMzQgMCAwIFogIiBmaWxsPSIjRkFEOTQ1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDcsNzQpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIuMDEgMS42NyAyLjkxIDIuNiAzLjQ4IDUuMTkgQzMuNSA1LjU4IDMuNSA1LjU4IDMuNjIgNy41NiBDMy45MiAxMS44NCAzLjkyIDExLjg0IDUgMTQgQzQuMDYgMTYuMTIgNC4wNiAxNi4xMiAzIDE4IEMyLjQ5IDE1Ljk0IDEuOTkgMTMuODggMS41IDExLjgxIEMxLjIyIDEwLjY2IDAuOTQgOS41MiAwLjY2IDguMzMgQzAuMDkgNS40MyAtMC4xMyAyLjk0IDAgMCBaICIgZmlsbD0iI0Y4RDIzOCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LDIwMCkiLz4KPHBhdGggZD0iTTAgMCBDNS4yOCAwLjMzIDEwLjU2IDAuNjYgMTYgMSBDMTYgMS4zMyAxNiAxLjY2IDE2IDIgQzEzLjIgMi4xNiAxMy4yIDIuMTYgLTEgMyBDLTAuNjcgMi4wMSAtMC4zNCAxLjAyIDAgMCBaICIgZmlsbD0iI0Y5RDIzQSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAzLDI0MykiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwLjk5IDAuNjYgMS45OCAxIDMgQy0xLjMxIDUuMzEgLTMuNjIgNy42MiAtNiAxMCBDLTYuOTkgOS42NyAtNy45OCA5LjM0IC05IDkgQy02LjAzIDYuMDMgLTMuMDYgMy4wNiAwIDAgWiAiIGZpbGw9IiNGN0M4MUMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4NSw1MDcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuODEgMC41IDEuODEgMC41IDExIDMgQzcgNSA3IDUgMy44MSA0LjMxIEMyLjg4IDMuODggMS45NiAzLjQ1IDEgMyBDMC42NyAyLjAxIDAuMzQgMS4wMiAwIDAgWiAiIGZpbGw9IiNGQUQxMzIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcwLDMyMykiLz4KPHBhdGggZD0iTTAgMCBDMCAzLjQgLTAuNTIgNC4wNyAtMi41IDYuNjkgQy0yLjk2IDcuMzEgLTMuNDMgNy45MyAtMy45MSA4LjU3IEMtNC4yNyA5LjA0IC00LjYzIDkuNTIgLTUgMTAgQy01LjYxIDguMTcgLTUuNjEgOC4xNyAtNiA2IEMtNC4yMSAzLjM1IC0yLjg4IDEuNDQgMCAwIFogIiBmaWxsPSIjRkJDRjFGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzAsMTE5KSIvPgo8cGF0aCBkPSJNMCAwIEMwLjY2IDAuMzMgMS4zMiAwLjY2IDIgMSBDLTAuNDYgNS44IC0wLjQ2IDUuOCAtMy4xOSA2LjgxIEMtMy43OSA2Ljg3IC00LjM4IDYuOTQgLTUgNyBDLTUuMzMgNi4wMSAtNS42NiA1LjAyIC02IDQgQy00LjAyIDIuNjggLTIuMDQgMS4zNiAwIDAgWiAiIGZpbGw9IiNGOUQyMzYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMiw4OSkiLz4KPHBhdGggZD0iTTAgMCBDMS4yNiAwLjEyIDIuNTIgMC4yNSAzLjgxIDAuMzggQzQuMTcgMC40MSA0LjE3IDAuNDEgNS45NiAwLjU5IEM4IDEgOCAxIDExIDMgQzcuNyAzIDQuNCAzIDEgMyBDMC42NyAyLjAxIDAuMzQgMS4wMiAwIDAgWiAiIGZpbGw9IiNGNkM0MUMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMiw1NzIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzEuNjMgMC40NSAzLjI1IDAuOTEgNC44OCAxLjM4IEM1Ljc4IDEuNjMgNi42OCAxLjg5IDcuNjIgMi4xNSBDMTAgMyAxMCAzIDEyIDUgQzcuMTIgNS4zNSA0LjIzIDQuNDIgMCAyIEMwIDEuMzQgMCAwLjY4IDAgMCBaICIgZmlsbD0iI0Y5RDMzOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDAzLDgxKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjMzIDAuNjYgMC42NiAxLjMyIDEgMiBDMC4zNiAyLjI5IC0wLjI4IDIuNTggLTAuOTQgMi44OCBDLTMgNCAtMyA0IC00IDYgQy02LjU2IDYuNjIgLTYuNTYgNi42MiAtOSA3IEMtOC4yNiA0LjYxIC03LjUzIDMuMjkgLTUuMzEgMi4wNyBDLTMuNTYgMS4zMyAtMS43OCAwLjY2IDAgMCBaICIgZmlsbD0iI0Y0QzUxRCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDIzLDU1MikiLz4KPHBhdGggZD0iTTAgMCBDMC4zMyAwIDAuNjYgMCAxIDAgQzEuMzMgMi42NCAxLjY2IDUuMjggMiA4IEMyLjk5IDguMzMgMy45OCA4LjY2IDUgOSBDNC4wMSA5LjY2IDMuMDIgMTAuMzIgMiAxMSBDMC40NCA5LjQ0IDAuNDQgOS40NCAtMSA3IEMtMC42OSAzLjI1IC0wLjY5IDMuMjUgMCAwIFogIiBmaWxsPSIjRjdEMDNCIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NzUsMTYzKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjQ5IDAuMzMgMC40OSAwLjMzIDMgMiBDMy4xOSA1LjYyIDMuMTkgNS42MiAzIDkgQzIuNjcgOS4xNyAyLjY3IDkuMTcgMSAxMCBDMC42NyA2LjcgMC4zNCAzLjQgMCAwIFogIiBmaWxsPSIjRjZEMDM1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNiwzNjgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuODkgMC4xMyAxLjc5IDAuMjYgMi43MSAwLjM5IEMzLjYxIDAuNTEgNC41MSAwLjYzIDUuNDQgMC43NSBDNi4xMiAwLjg2IDYuODEgMC45NiA3LjUyIDEuMDcgQzcuNTIgMS40IDcuNTIgMS43MyA3LjUyIDIuMDcgQzUuMzcgMi4yNCA1LjM3IDIuMjQgLTUuNDggMy4wNyBDLTIuNDggMC4wNyAtMi40OCAwLjA3IDAgMCBaICIgZmlsbD0iI0Y5RDQ0MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTI1LjQ4MDQ2ODc1LDI0MC45MjU3ODEyNSkiLz4KPHBhdGggZD0iTTAgMCBDMy42NSAxLjI1IDQuNzggMS42NyA3IDUgQzYuNjcgNS42NiA2LjM0IDYuMzIgNiA3IEM1LjM0IDcgNC42OCA3IDQgNyBDMy4zNCA1Ljg0IDMuMzQgNS44NCAwIDAgWiAiIGZpbGw9IiNGOUQxMzQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQyNyw5MykiLz4KPHBhdGggZD0iTTAgMCBDMS4zMiAwLjY2IDIuNjQgMS4zMiA0IDIgQzIuNzEgMi43IDEuNDIgMy4zOCAwLjEyIDQuMDYgQy0wLjIzIDQuMjUgLTAuMjMgNC4yNSAtMi4wNSA1LjIyIEMtMi43IDUuNDggLTMuMzQgNS43NCAtNCA2IEMtNC42NiA1LjY3IC01LjMyIDUuMzQgLTYgNSBDLTUuMiA0LjczIC00LjM5IDQuNDYgLTMuNTYgNC4xOSBDLTIuNzIgMy44IC0xLjg3IDMuNCAtMSAzIEMtMC42NyAyLjAxIC0wLjM0IDEuMDIgMCAwIFogIiBmaWxsPSIjRjVDRTNBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0MjUsNTUxKSIvPgo8cGF0aCBkPSJNMCAwIEMwLjY2IDAuNjYgMS4zMiAxLjMyIDIgMiBDMS45NyA0LjczIDEuNDQgNy4zIDEgMTAgQy0wLjg1IDYuODggLTEuMjkgNC42MiAtMSAxIEMtMC42NyAwLjY3IC0wLjM0IDAuMzQgMCAwIFogIiBmaWxsPSIjRjhEMDNDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOSwzNzgpIi8+CjxwYXRoIGQ9Ik0wIDAgQzAuMzMgMCAwLjY2IDAgMSAwIEMxLjMzIDMuOTYgMS42NiA3LjkyIDIgMTIgQy0xIDkgLTEgOSAtMS4wNyA2Ljc0IEMtMC45NSA1Ljk0IC0wLjgyIDUuMTQgLTAuNjkgNC4zMSBDLTAuNTcgMy41IC0wLjQ1IDIuNyAtMC4zMiAxLjg2IEMtMC4yMiAxLjI1IC0wLjExIDAuNjMgMCAwIFogIiBmaWxsPSIjRjhEMjNBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MjMsMzg2KSIvPgo8cGF0aCBkPSJNMCAwIEMxLjY1IDAgMy4zIDAgNSAwIEM1IDAuMzMgNSAwLjY2IDUgMSBDMy4zNSAxIDEuNyAxIDAgMSBDMCAwLjY3IDAgMC4zNCAwIDAgWiAiIGZpbGw9IiNFREM2MkUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NCw1ODIpIi8+CjxwYXRoIGQ9Ik0wIDAgQzQgMSA0IDEgNCAxIFogIiBmaWxsPSIjRUNDNDJDIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjMsNTgyKSIvPgo8cGF0aCBkPSJNMCAwIEMzIDEgMyAxIDMgMSBaICIgZmlsbD0iI0YyQ0IzOCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTU2LDIzOSkiLz4KPHBhdGggZD0iTTAgMCBDMiAxIDIgMSAyIDEgWiAiIGZpbGw9IiNFREM0MkMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwOCw1ODMpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMSAyIDEgMiAxIFogIiBmaWxsPSIjRUZDNTJFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIsNTgzKSIvPgo8cGF0aCBkPSJNMCAwIEMyIDEgMiAxIDIgMSBaICIgZmlsbD0iI0VEQzQyRCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzcxLDU3NSkiLz4KPHBhdGggZD0iTTAgMCBDMiAxIDIgMSAyIDEgWiAiIGZpbGw9IiNGNUQwM0IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwMiwyNDcpIi8+CjxwYXRoIGQ9Ik0wIDAgQzIgMSAyIDEgMiAxIFogIiBmaWxsPSIjRUZDQzM5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NDksMjAwKSIvPgo8cGF0aCBkPSJNMCAwIEMyIDEgMiAxIDIgMSBaICIgZmlsbD0iI0Y0RDAzQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzg1LDc0KSIvPgo8L3N2Zz4K", + "fields": [ + { + "description": "Secret key", + "key": "SECRET_KEY", + "value": "", + "required": "true", + "generated": "openssl|hex|32" + }, + { + "description": "Util secret key", + "key": "UTILS_SECRET", + "value": "", + "required": "true", + "generated": "openssl|hex|32" + }, + { + "description": "Postgres database name", + "key": "DB_NAME", + "value": "", + "required": "true", + "generated": "time|md5|8" + }, + { + "description": "Postgres username", + "key": "DB_USER", + "value": "", + "required": "true", + "generated": "time|md5|8" + }, + { + "description": "Postgres password for user", + "key": "DB_PASSWORD", + "value": "", + "required": "true", + "generated": "random|md5|12" + }, + { + "description": "Postgres root user password", + "key": "DB_ROOT_PASSWORD", + "value": "", + "required": "true", + "generated": "random|sha256|20" + }, + { + "description": "Domain:", + "key": "DOMAIN", + "value": "", + "required": "true" + }, + { + "description": "Slack client ID", + "key": "SLACK_CLIENT_ID", + "value": "", + "info": "Create a new app in your Slack workspace at https://api.slack.com/apps?new_app=1 and add 'Sign in with Slack' under 'Add features and functionality'. Set the Redirect URL to 'https:///auth/slack.callback'.", + "advanced": "true" + }, + { + "description": "Slack client secret", + "key": "SLACK_CLIENT_SECRET", + "value": "", + "advanced": "true" + }, + { + "description": "Google client ID", + "key": "GOOGLE_CLIENT_ID", + "value": "", + "info": "Create OAuth 2.0 credentials in Google Cloud Console at https://console.cloud.google.com/apis/credentials and set the Redirect URL to 'https:///auth/google.callback'.", + "advanced": "true" + }, + { + "description": "Google client secret", + "key": "GOOGLE_CLIENT_SECRET", + "value": "", + "advanced": "true" + }, + { + "description": "Azure client ID", + "key": "AZURE_CLIENT_ID", + "value": "", + "info": "Register an application in Azure AD at https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade and set the Redirect URL to 'https:///auth/azuread.callback'.", + "advanced": "true" + }, + { + "description": "Azure client secret", + "key": "AZURE_CLIENT_SECRET", + "value": "", + "advanced": "true" + }, + { + "description": "Azure resource app ID", + "key": "AZURE_RESOURCE_APP_ID", + "value": "", + "info": "This is usually the same as the client ID, but can vary based on your Azure AD setup.", + "advanced": "true" + }, + { + "description": "Discord client ID", + "key": "DISCORD_CLIENT_ID", + "value": "", + "info": "Create an application in Discord Developer Portal at https://discord.com/developers/applications and set the Redirect URL to 'https:///auth/discord.callback'.", + "advanced": "true" + }, + { + "description": "Discord client secret", + "key": "DISCORD_CLIENT_SECRET", + "value": "", + "advanced": "true" + }, + { + "description": "Discord server ID (optional)", + "key": "DISCORD_SERVER_ID", + "value": "", + "info": "(Optional) If you want to restrict login to members of a specific Discord server, provide the server ID here.", + "advanced": "true" + }, + { + "description": "OpenID Connect client ID", + "key": "OIDC_CLIENT_ID", + "value": "", + "info": "Set up an OpenID Connect application with your provider and set the Redirect URL to 'https:///auth/oidc.callback'.", + "advanced": "true" + }, + { + "description": "OpenID Connect client secret", + "key": "OIDC_CLIENT_SECRET", + "value": "", + "advanced": "true" + }, + { + "description": "OpenID Connect provider auth URI", + "key": "OIDC_AUTH_URI", + "value": "", + "info": "The authorization endpoint URL of your OpenID Connect provider.", + "advanced": "true" + }, + { + "description": "OpenID Connect provider token URI", + "key": "OIDC_TOKEN_URI", + "value": "", + "info": "The token endpoint URL of your OpenID Connect provider.", + "advanced": "true" + }, + { + "description": "OpenID Connect provider userinfo URI", + "key": "OIDC_USERINFO_URI", + "value": "", + "info": "The userinfo endpoint URL of your OpenID Connect provider.", + "advanced": "true" + }, + { + "description": "OpenID Connect provider logout URI (optional)", + "key": "OIDC_LOGOUT_URI", + "value": "", + "info": "(Optional) The logout endpoint URL of your OpenID Connect provider, if supported.", + "advanced": "true" + }, + { + "description": "OpenID Connect username claim", + "key": "OIDC_USERNAME_CLAIM", + "value": "preferred_username", + "info": "The claim in the ID token or userinfo response to use as the username. Defaults to 'preferred_username'.", + "advanced": "true" + }, + { + "description": "OpenID Connect display name", + "key": "OIDC_DISPLAY_NAME", + "value": "OpenID Connect", + "info": "The display name for the OpenID Connect authentication option. Defaults to 'OpenID Connect'.", + "advanced": "true" + }, + { + "description": "OpenID Connect scopes", + "key": "OIDC_SCOPES", + "value": "openid profile email", + "info": "Space-separated list of scopes to request during authentication. Defaults to 'openid profile email'.", + "advanced": "true" + }, + { + "description": "SMTP host", + "key": "SMTP_HOST", + "value": "", + "info": "Used for sending invitation and password reset emails. Leave blank to disable email functionality.", + "advanced": "true" + }, + { + "description": "SMTP port", + "key": "SMTP_PORT", + "value": "587", + "info": "(Optional) The port to connect to on the SMTP server. Defaults to 587.", + "advanced": "true" + }, + { + "description": "SMTP service (e.g., gmail)", + "key": "SMTP_SERVICE", + "value": "", + "info": "Used for sending invitation and password reset emails. Leave blank to disable email functionality.", + "advanced": "true" + }, + { + "description": "SMTP username (email address)", + "key": "SMTP_USERNAME", + "value": "", + "advanced": "true" + }, + { + "description": "SMTP password", + "key": "SMTP_PASSWORD", + "value": "", + "advanced": "true" + }, + { + "description": "From email address", + "key": "SMTP_FROM_EMAIL", + "value": "", + "info": "(Optional) The email address that emails will be sent from. Defaults to the SMTP username if not set.", + "advanced": "true" + } + ] +} \ No newline at end of file