├── server ├── .nvmrc ├── typings │ ├── middlewares │ │ └── authentication.d.ts │ ├── controllers │ │ ├── docker │ │ │ └── container.d.ts │ │ ├── common.d.ts │ │ ├── deployment.d.ts │ │ ├── wsController.d.ts │ │ └── handlerFactory.d.ts │ ├── services │ │ ├── emailHandler.d.ts │ │ ├── nginxHandler.d.ts │ │ ├── dockerContainer.d.ts │ │ ├── github.d.ts │ │ └── oneClickDeploy.d.ts │ ├── utilities │ │ └── bootstrap.d.ts │ └── models │ │ ├── github.d.ts │ │ ├── docker │ │ ├── image.d.ts │ │ └── network.d.ts │ │ ├── portBinding.d.ts │ │ ├── deployment.d.ts │ │ ├── repository.d.ts │ │ └── user.d.ts ├── start.sh ├── utilities │ ├── logger.ts │ └── encryption.ts ├── Dockerfile ├── cli │ └── actions │ │ ├── listCreatedDockerNetworks.ts │ │ ├── listActiveContainers.ts │ │ └── listCreatedContainers.ts ├── middlewares │ ├── rateLimiter.ts │ └── common.ts ├── config │ └── ws.ts ├── routes │ ├── webhook.ts │ ├── server.ts │ ├── portBinding.ts │ └── docker │ │ ├── image.ts │ │ └── network.ts ├── tsconfig.json └── controllers │ ├── portBinding.ts │ └── docker │ ├── image.ts │ └── network.ts ├── setup-utility ├── client │ ├── .env │ ├── src │ │ ├── components │ │ │ ├── molecules │ │ │ │ ├── EnvironVariables │ │ │ │ │ ├── EnvironVariables.css │ │ │ │ │ └── index.ts │ │ │ │ ├── DeployOutput │ │ │ │ │ └── index.ts │ │ │ │ ├── LoadingScreen │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── LoadingScreen.tsx │ │ │ │ │ └── LoadingScreen.css │ │ │ │ ├── StepsContainer │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── StepsContainer.tsx │ │ │ │ │ └── StepsContainer.css │ │ │ │ ├── ToastContainer │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ToastContainer.css │ │ │ │ │ └── ToastContainer.tsx │ │ │ │ └── OptionalEnvironVariables │ │ │ │ │ ├── index.ts │ │ │ │ │ └── OptionalEnvironVariables.css │ │ │ ├── atoms │ │ │ │ ├── Toast │ │ │ │ │ ├── Toast.css │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Toast.tsx │ │ │ │ ├── Input │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Input.css │ │ │ │ │ └── Input.tsx │ │ │ │ ├── Button │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Button.tsx │ │ │ │ │ └── Button.css │ │ │ │ ├── Loader │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Loader.tsx │ │ │ │ └── StepContainer │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── StepContainer.css │ │ │ │ │ └── StepContainer.tsx │ │ │ └── organisms │ │ │ │ └── Layout.tsx │ │ ├── custom.d.ts │ │ ├── pages │ │ │ ├── Setup │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── Application.tsx │ │ ├── services │ │ │ ├── store.ts │ │ │ ├── env │ │ │ │ ├── api.ts │ │ │ │ └── slice.ts │ │ │ └── toast │ │ │ │ └── slice.ts │ │ ├── hooks │ │ │ ├── useServerIP.ts │ │ │ └── useEnvironVariables.ts │ │ ├── main.tsx │ │ └── assets │ │ │ └── stylesheets │ │ │ └── global.css │ ├── tsconfig.json │ ├── vite.config.ts │ ├── tsconfig.node.json │ ├── eslint.config.js │ ├── tsconfig.app.json │ └── package.json ├── server │ ├── requirements.txt │ ├── core │ │ └── config.py │ ├── api │ │ ├── host.py │ │ ├── __init__.py │ │ ├── websocket.py │ │ └── env.py │ ├── main.py │ └── services │ │ └── env.py └── .env ├── client ├── src │ ├── components │ │ ├── organisms │ │ │ ├── PortBinding │ │ │ │ ├── PortBinding.css │ │ │ │ ├── index.js │ │ │ │ └── PortBinding.jsx │ │ │ ├── Docker │ │ │ │ ├── DockerImage │ │ │ │ │ ├── DockerImage.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── DockerImage.jsx │ │ │ │ ├── DockerContainer │ │ │ │ │ ├── DockerContainer.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── DockerContainer.jsx │ │ │ │ ├── DockerNetwork │ │ │ │ │ ├── index.js │ │ │ │ │ ├── DockerNetwork.jsx │ │ │ │ │ └── DockerNetwork.css │ │ │ │ └── index.js │ │ │ ├── Storage │ │ │ │ └── index.js │ │ │ ├── Repository │ │ │ │ ├── index.js │ │ │ │ └── Repository.jsx │ │ │ ├── DeleteAccount │ │ │ │ └── index.js │ │ │ ├── DocumentsExplorer │ │ │ │ └── index.js │ │ │ ├── EnvironmentVariables │ │ │ │ └── index.js │ │ │ ├── Layout │ │ │ │ ├── Layout.css │ │ │ │ └── index.js │ │ │ ├── Menu │ │ │ │ └── index.js │ │ │ ├── Header │ │ │ │ └── index.js │ │ │ ├── CloudShell │ │ │ │ └── index.js │ │ │ ├── ContextMenu │ │ │ │ ├── index.js │ │ │ │ └── ContextMenu.css │ │ │ ├── MinimalForm │ │ │ │ └── index.js │ │ │ ├── ConfirmModal │ │ │ │ └── index.js │ │ │ ├── DataRenderer │ │ │ │ └── index.js │ │ │ ├── RelatedItems │ │ │ │ ├── index.js │ │ │ │ └── RelatedItems.css │ │ │ ├── DeploymentItem │ │ │ │ └── index.js │ │ │ ├── ProtectedRoute │ │ │ │ ├── index.js │ │ │ │ └── ProtectedRoute.css │ │ │ ├── WhenCreatingAccount │ │ │ │ └── index.js │ │ │ └── AuthenticatedUserRelatedSections │ │ │ │ ├── AuthenticatedUserRelatedSections.css │ │ │ │ └── index.js │ │ ├── molecules │ │ │ ├── PortBinding │ │ │ │ ├── PortBindingBody │ │ │ │ │ ├── PortBindingBody.css │ │ │ │ │ └── index.js │ │ │ │ ├── PortBindingFooter │ │ │ │ │ ├── PortBindingFooter.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── PortBindingFooter.jsx │ │ │ │ ├── PortBindingHeader │ │ │ │ │ ├── PortBindingHeader.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── PortBindingHeader.jsx │ │ │ │ └── index.js │ │ │ ├── Docker │ │ │ │ ├── DockerImage │ │ │ │ │ ├── DockerImageBody │ │ │ │ │ │ ├── DockerImageBody.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── DockerImageFooter │ │ │ │ │ │ ├── DockerImageFooter.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── DockerImageHeader │ │ │ │ │ │ ├── DockerImageHeader.css │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── DockerImageHeader.jsx │ │ │ │ │ └── index.js │ │ │ │ ├── DockerNetwork │ │ │ │ │ ├── DockerNetworkBody │ │ │ │ │ │ ├── DockerNetworkBody.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── DockerNetworkFooter │ │ │ │ │ │ ├── DockerNetworkFooter.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── DockerNetworkHeader │ │ │ │ │ │ ├── DockerNetworkHeader.css │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── DockerNetworkHeader.jsx │ │ │ │ │ └── index.js │ │ │ │ └── DockerContainer │ │ │ │ │ ├── DockerContainerBody │ │ │ │ │ ├── DockerContainerBody.css │ │ │ │ │ └── index.js │ │ │ │ │ ├── DockerContainerFooter │ │ │ │ │ ├── DockerContainerFooter.css │ │ │ │ │ └── index.js │ │ │ │ │ ├── DockerContainerHeader │ │ │ │ │ ├── DockerContainerHeader.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── DockerContainerHeader.jsx │ │ │ │ │ └── index.js │ │ │ ├── DashboardModule │ │ │ │ ├── index.js │ │ │ │ └── DashboardModule.css │ │ │ ├── OneClickDeploys │ │ │ │ └── index.js │ │ │ ├── UserStickyFooterStats │ │ │ │ └── index.js │ │ │ ├── ConfirmModal │ │ │ │ ├── ConfirmModalFooter │ │ │ │ │ └── index.js │ │ │ │ ├── index.js │ │ │ │ ├── ConfirmModalBody │ │ │ │ │ ├── index.js │ │ │ │ │ └── ConfirmModalBody.css │ │ │ │ └── ConfirmModalHeader │ │ │ │ │ └── index.js │ │ │ ├── Header │ │ │ │ ├── index.js │ │ │ │ ├── HeaderLinks │ │ │ │ │ ├── index.js │ │ │ │ │ └── HeaderLinks.css │ │ │ │ └── HeaderNavigation │ │ │ │ │ ├── index.js │ │ │ │ │ └── HeaderNavigation.css │ │ │ ├── Repository │ │ │ │ ├── index.js │ │ │ │ └── RepositoryHeader.jsx │ │ │ ├── DataRenderer │ │ │ │ └── index.js │ │ │ ├── MenuItem │ │ │ │ ├── index.js │ │ │ │ └── MenuItem.css │ │ │ ├── Breadcrumbs │ │ │ │ ├── index.js │ │ │ │ └── Breadcrumbs.css │ │ │ ├── RelatedItem │ │ │ │ └── index.js │ │ │ ├── FileExplorer │ │ │ │ └── index.js │ │ │ ├── PolicyArticle │ │ │ │ ├── index.js │ │ │ │ └── PolicyArticle.css │ │ │ ├── WelcomeSection │ │ │ │ └── index.js │ │ │ └── FileExplorerHeader │ │ │ │ ├── index.js │ │ │ │ └── FileExplorerHeader.css │ │ └── atoms │ │ │ ├── Toast │ │ │ └── index.js │ │ │ ├── Loader │ │ │ ├── index.js │ │ │ └── Loader.jsx │ │ │ ├── Select │ │ │ └── index.js │ │ │ ├── DashboardCard │ │ │ ├── DashboardCard │ │ │ │ ├── index.js │ │ │ │ ├── DashboardCard.jsx │ │ │ │ └── DashboardCard.css │ │ │ ├── DashboardCardBody │ │ │ │ └── index.js │ │ │ ├── DashboardCardFooter │ │ │ │ └── index.js │ │ │ ├── DashboardCardHeader │ │ │ │ ├── index.js │ │ │ │ ├── DashboardCardHeader.jsx │ │ │ │ └── DashboardCardHeader.css │ │ │ └── index.js │ │ │ ├── DashboardModule │ │ │ ├── DashboardModuleBody │ │ │ │ ├── index.js │ │ │ │ ├── DashboardModuleBody.css │ │ │ │ └── DashboardModuleBody.jsx │ │ │ ├── DashboardModuleFooter │ │ │ │ ├── index.js │ │ │ │ ├── DashboardModuleFooter.css │ │ │ │ └── DashboardModuleFooter.jsx │ │ │ ├── DashboardModuleHeader │ │ │ │ └── index.js │ │ │ └── index.js │ │ │ ├── Input │ │ │ └── index.js │ │ │ ├── Waves │ │ │ ├── index.js │ │ │ └── Waves.css │ │ │ ├── Banner │ │ │ ├── index.js │ │ │ ├── Banner.jsx │ │ │ └── Banner.css │ │ │ ├── Button │ │ │ └── index.js │ │ │ ├── IconLink │ │ │ ├── index.js │ │ │ └── IconLink.css │ │ │ ├── ClickSpark │ │ │ ├── index.js │ │ │ └── ClickSpark.jsx │ │ │ ├── HeaderBrand │ │ │ ├── index.js │ │ │ └── HeaderBrand.jsx │ │ │ ├── HamburguerMenu │ │ │ └── index.js │ │ │ ├── HeaderNavItem │ │ │ ├── index.js │ │ │ └── HeaderNavItem.css │ │ │ ├── DashedContainer │ │ │ ├── index.js │ │ │ ├── DashedContainer.css │ │ │ └── DashedContainer.jsx │ │ │ ├── ContextMenuOption │ │ │ └── index.js │ │ │ ├── SquaredBackground │ │ │ ├── index.js │ │ │ └── SquaredBackground.jsx │ │ │ ├── CircleContainedText │ │ │ ├── index.js │ │ │ └── CircleContainedText.jsx │ │ │ ├── EnvironmentVariable │ │ │ └── index.js │ │ │ ├── FileExplorerContent │ │ │ └── index.js │ │ │ ├── RepositoryBasicItem │ │ │ └── index.js │ │ │ ├── EnvironmentMobileActions │ │ │ └── index.js │ │ │ └── AnimatedMain.jsx │ ├── pages │ │ ├── protected │ │ │ ├── docker │ │ │ │ ├── container │ │ │ │ │ ├── Storage │ │ │ │ │ │ ├── Storage.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── CreateDockerContainer │ │ │ │ │ │ ├── CreateDockerContainer.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── EnvironmentVariables │ │ │ │ │ │ ├── EnvironmentVariables.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── Shell │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── Explorer │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ ├── image │ │ │ │ │ ├── CreateDockerImage │ │ │ │ │ │ ├── CreateDockerImage.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── Explorer │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ ├── network │ │ │ │ │ ├── CreateDockerNetwork │ │ │ │ │ │ ├── CreateDockerNetwork.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── Explorer │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ └── index.js │ │ │ ├── portBinding │ │ │ │ ├── CreatePortBinding │ │ │ │ │ ├── CreatePortBinding.css │ │ │ │ │ └── index.js │ │ │ │ ├── Explorer │ │ │ │ │ └── index.js │ │ │ │ └── index.js │ │ │ ├── repository │ │ │ │ ├── EnvironmentVariables │ │ │ │ │ ├── EnvironmentVariables.css │ │ │ │ │ └── index.js │ │ │ │ ├── SetupDeployment │ │ │ │ │ ├── SetupDeployment.css │ │ │ │ │ └── index.js │ │ │ │ ├── Shell │ │ │ │ │ └── index.js │ │ │ │ ├── CreateRepository │ │ │ │ │ └── index.js │ │ │ │ ├── RepositoryDeployments │ │ │ │ │ ├── index.js │ │ │ │ │ └── RepositoryDeployments.css │ │ │ │ └── index.js │ │ │ ├── general │ │ │ │ ├── index.js │ │ │ │ └── Dashboard │ │ │ │ │ └── index.js │ │ │ ├── authentication │ │ │ │ ├── ChangePassword │ │ │ │ │ ├── ChangePassword.css │ │ │ │ │ └── index.js │ │ │ │ ├── Account │ │ │ │ │ ├── index.js │ │ │ │ │ └── Account.css │ │ │ │ └── index.js │ │ │ ├── github │ │ │ │ ├── Authenticate │ │ │ │ │ ├── index.js │ │ │ │ │ └── Authenticate.css │ │ │ │ ├── NeedAuthenticate │ │ │ │ │ └── index.js │ │ │ │ └── index.js │ │ │ └── index.js │ │ ├── guest │ │ │ ├── authentication │ │ │ │ ├── SignIn │ │ │ │ │ ├── SignIn.css │ │ │ │ │ └── index.js │ │ │ │ ├── SignUp │ │ │ │ │ ├── index.js │ │ │ │ │ └── SignUp.css │ │ │ │ └── index.js │ │ │ └── index.js │ │ ├── everybody │ │ │ ├── legal │ │ │ │ ├── index.js │ │ │ │ └── PrivacyPolicy │ │ │ │ │ └── index.js │ │ │ ├── general │ │ │ │ ├── Home │ │ │ │ │ └── index.js │ │ │ │ ├── ServiceStatus │ │ │ │ │ └── index.js │ │ │ │ └── index.js │ │ │ └── index.js │ │ └── index.js │ ├── hooks │ │ ├── api │ │ │ ├── index.js │ │ │ ├── user │ │ │ │ ├── index.js │ │ │ │ ├── useUserDockerImages.js │ │ │ │ ├── useUserDockerNetworks.js │ │ │ │ ├── useUserPortBinding.js │ │ │ │ ├── useUserDockerContainers.js │ │ │ │ └── useUserRepositories.js │ │ │ ├── docker │ │ │ │ ├── useDeleteDockerImage.js │ │ │ │ ├── useDeleteDockerNetwork.js │ │ │ │ └── useDeleteDockerContainer.js │ │ │ ├── server │ │ │ │ └── useServerIP.js │ │ │ └── portBinding │ │ │ │ └── useDeletePortBinding.js │ │ ├── ws │ │ │ ├── index.js │ │ │ └── useWebSocket.js │ │ └── common │ │ │ ├── index.js │ │ │ ├── useDocumentTitle.js │ │ │ ├── useKeyPress.js │ │ │ └── useQuery.js │ ├── assets │ │ └── images │ │ │ ├── CreateDockerImage.jpeg │ │ │ ├── CreateDockerNetwork.jpeg │ │ │ ├── CreatePortBinding.jpeg │ │ │ └── CreateDockerContainer.jpeg │ ├── utilities │ │ ├── common │ │ │ ├── index.js │ │ │ ├── fileUtils.js │ │ │ └── reduxUtils.js │ │ └── api │ │ │ ├── index.js │ │ │ └── eventManager.js │ └── services │ │ ├── deployment │ │ └── slice.js │ │ ├── authentication │ │ └── slice.js │ │ ├── core │ │ └── toastSlice.js │ │ ├── github │ │ └── slice.js │ │ └── docker │ │ └── image │ │ └── service.js ├── icons │ ├── apple-icon.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── ms-icon-144x144.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ └── android-icon-192x192.png └── .env.example ├── screenshots ├── Dashboard.png ├── Home-Page.png ├── QuantumCLI.png ├── Cloud-Console.png ├── File-Explorer.png ├── RepositoryCLI.png ├── User-Profile.png ├── Github-OAuth-Apps.png ├── NameCheapARecord.png ├── QuantumStorageDir.png ├── Setup-Utility-Home.png ├── NGINX-Proxy-Manager.png ├── Setup-Utility-Script.png ├── Create-New-Repository.png ├── Github-OAuth-App-Config.png ├── Quantum-Cloud-Platform.png ├── RepositoryEnvironVariables.png ├── Docker-Compose-Environ-Variables.png └── Setup-Utility-Quantum-Deployment.png ├── scripts ├── .clocignore ├── codelines.sh └── kill-setup-utility.sh ├── .gitignore └── .github └── FUNDING.yml /server/.nvmrc: -------------------------------------------------------------------------------- 1 | 20.11.0 2 | -------------------------------------------------------------------------------- /setup-utility/client/.env: -------------------------------------------------------------------------------- 1 | VITE_SERVER=http://0.0.0.0:9080 -------------------------------------------------------------------------------- /client/src/components/organisms/PortBinding/PortBinding.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/Storage/Storage.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerImage/DockerImage.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/hooks/api/index.js: -------------------------------------------------------------------------------- 1 | export { default as user } from './user'; -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerContainer/DockerContainer.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/portBinding/CreatePortBinding/CreatePortBinding.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingBody/PortBindingBody.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingFooter/PortBindingFooter.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingHeader/PortBindingHeader.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/docker/image/CreateDockerImage/CreateDockerImage.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/repository/EnvironmentVariables/EnvironmentVariables.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/EnvironVariables/EnvironVariables.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageBody/DockerImageBody.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/docker/network/CreateDockerNetwork/CreateDockerNetwork.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageFooter/DockerImageFooter.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageHeader/DockerImageHeader.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkBody/DockerNetworkBody.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/CreateDockerContainer/CreateDockerContainer.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/EnvironmentVariables/EnvironmentVariables.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerBody/DockerContainerBody.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkFooter/DockerNetworkFooter.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkHeader/DockerNetworkHeader.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/pages/protected/general/index.js: -------------------------------------------------------------------------------- 1 | export { default as Dashboard } from './Dashboard'; -------------------------------------------------------------------------------- /client/src/components/atoms/Toast/index.js: -------------------------------------------------------------------------------- 1 | import Toast from './Toast'; 2 | 3 | export default Toast; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerFooter/DockerContainerFooter.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerHeader/DockerContainerHeader.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /setup-utility/client/src/custom.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | declare module '*.css'; -------------------------------------------------------------------------------- /client/src/components/atoms/Loader/index.js: -------------------------------------------------------------------------------- 1 | import Loader from './Loader'; 2 | 3 | export default Loader; -------------------------------------------------------------------------------- /client/src/components/atoms/Select/index.js: -------------------------------------------------------------------------------- 1 | import Select from './Select'; 2 | 3 | export default Select; -------------------------------------------------------------------------------- /screenshots/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Dashboard.png -------------------------------------------------------------------------------- /screenshots/Home-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Home-Page.png -------------------------------------------------------------------------------- /screenshots/QuantumCLI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/QuantumCLI.png -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Toast/Toast.css: -------------------------------------------------------------------------------- 1 | .Toast-Message{ 2 | font-size: .9rem; 3 | } -------------------------------------------------------------------------------- /setup-utility/client/src/pages/Setup/index.ts: -------------------------------------------------------------------------------- 1 | import Setup from './Setup'; 2 | 3 | export default Setup; -------------------------------------------------------------------------------- /client/icons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon.png -------------------------------------------------------------------------------- /client/src/components/organisms/Storage/index.js: -------------------------------------------------------------------------------- 1 | import Storage from './Storage'; 2 | 3 | export default Storage; -------------------------------------------------------------------------------- /screenshots/Cloud-Console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Cloud-Console.png -------------------------------------------------------------------------------- /screenshots/File-Explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/File-Explorer.png -------------------------------------------------------------------------------- /screenshots/RepositoryCLI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/RepositoryCLI.png -------------------------------------------------------------------------------- /screenshots/User-Profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/User-Profile.png -------------------------------------------------------------------------------- /client/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/favicon-32x32.png -------------------------------------------------------------------------------- /client/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/favicon-96x96.png -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/Shell/index.js: -------------------------------------------------------------------------------- 1 | import Shell from './Shell'; 2 | 3 | export default Shell; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Input/index.ts: -------------------------------------------------------------------------------- 1 | import Input from './Input'; 2 | 3 | export default Input; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Toast/index.ts: -------------------------------------------------------------------------------- 1 | import Toast from './Toast'; 2 | 3 | export default Toast; -------------------------------------------------------------------------------- /setup-utility/client/src/pages/index.ts: -------------------------------------------------------------------------------- 1 | import Setup from './Setup'; 2 | 3 | export default { 4 | Setup 5 | }; -------------------------------------------------------------------------------- /client/icons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-57x57.png -------------------------------------------------------------------------------- /client/icons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-60x60.png -------------------------------------------------------------------------------- /client/icons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-72x72.png -------------------------------------------------------------------------------- /client/icons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-76x76.png -------------------------------------------------------------------------------- /client/icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /screenshots/Github-OAuth-Apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Github-OAuth-Apps.png -------------------------------------------------------------------------------- /screenshots/NameCheapARecord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/NameCheapARecord.png -------------------------------------------------------------------------------- /screenshots/QuantumStorageDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/QuantumStorageDir.png -------------------------------------------------------------------------------- /screenshots/Setup-Utility-Home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Setup-Utility-Home.png -------------------------------------------------------------------------------- /server/typings/middlewares/authentication.d.ts: -------------------------------------------------------------------------------- 1 | export interface IDecodedToken{ 2 | id: string, 3 | iat: number 4 | } -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Button/index.ts: -------------------------------------------------------------------------------- 1 | import Button from './Button'; 2 | 3 | export default Button; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Loader/index.ts: -------------------------------------------------------------------------------- 1 | import Loader from './Loader'; 2 | 3 | export default Loader; -------------------------------------------------------------------------------- /client/icons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-114x114.png -------------------------------------------------------------------------------- /client/icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /client/icons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-144x144.png -------------------------------------------------------------------------------- /client/icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /client/icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /client/src/components/organisms/Repository/index.js: -------------------------------------------------------------------------------- 1 | import Repository from './Repository'; 2 | 3 | export default Repository; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/Storage/index.js: -------------------------------------------------------------------------------- 1 | import Storage from './Storage'; 2 | 3 | export default Storage; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/image/Explorer/index.js: -------------------------------------------------------------------------------- 1 | import Explorer from './Explorer'; 2 | 3 | export default Explorer; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/network/Explorer/index.js: -------------------------------------------------------------------------------- 1 | import Explorer from './Explorer'; 2 | 3 | export default Explorer; -------------------------------------------------------------------------------- /client/src/pages/protected/portBinding/Explorer/index.js: -------------------------------------------------------------------------------- 1 | import Explorer from './Explorer'; 2 | 3 | export default Explorer; -------------------------------------------------------------------------------- /screenshots/NGINX-Proxy-Manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/NGINX-Proxy-Manager.png -------------------------------------------------------------------------------- /screenshots/Setup-Utility-Script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Setup-Utility-Script.png -------------------------------------------------------------------------------- /client/icons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/icons/android-icon-192x192.png -------------------------------------------------------------------------------- /client/src/components/organisms/PortBinding/index.js: -------------------------------------------------------------------------------- 1 | import PortBindings from './PortBinding'; 2 | 3 | export default PortBindings; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/Explorer/index.js: -------------------------------------------------------------------------------- 1 | import Explorer from './Explorer'; 2 | 3 | export default Explorer; -------------------------------------------------------------------------------- /screenshots/Create-New-Repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Create-New-Repository.png -------------------------------------------------------------------------------- /screenshots/Github-OAuth-App-Config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Github-OAuth-App-Config.png -------------------------------------------------------------------------------- /screenshots/Quantum-Cloud-Platform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Quantum-Cloud-Platform.png -------------------------------------------------------------------------------- /client/src/components/organisms/DeleteAccount/index.js: -------------------------------------------------------------------------------- 1 | import DeleteAccount from './DeleteAccount'; 2 | 3 | export default DeleteAccount; -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerImage/index.js: -------------------------------------------------------------------------------- 1 | import DockerImage from './DockerImage'; 2 | 3 | export default DockerImage; -------------------------------------------------------------------------------- /server/typings/controllers/docker/container.d.ts: -------------------------------------------------------------------------------- 1 | export interface IRequestDockerImage{ 2 | name: string; 3 | tag: string; 4 | } -------------------------------------------------------------------------------- /setup-utility/server/requirements.txt: -------------------------------------------------------------------------------- 1 | fastapi 2 | uvicorn[standard] 3 | requests 4 | python-dotenv 5 | aiohttp 6 | anyio>=3.4.0 7 | psutil -------------------------------------------------------------------------------- /screenshots/RepositoryEnvironVariables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/RepositoryEnvironVariables.png -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCard/index.js: -------------------------------------------------------------------------------- 1 | import DashboardCard from './DashboardCard'; 2 | 3 | export default DashboardCard; -------------------------------------------------------------------------------- /client/src/components/molecules/DashboardModule/index.js: -------------------------------------------------------------------------------- 1 | import DashboardModule from './DashboardModule'; 2 | 3 | export default DashboardModule; -------------------------------------------------------------------------------- /client/src/components/molecules/OneClickDeploys/index.js: -------------------------------------------------------------------------------- 1 | import OneClickDeploys from './OneClickDeploys'; 2 | 3 | export default OneClickDeploys; -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerNetwork/index.js: -------------------------------------------------------------------------------- 1 | import DockerNetwork from './DockerNetwork'; 2 | 3 | export default DockerNetwork; -------------------------------------------------------------------------------- /server/typings/services/emailHandler.d.ts: -------------------------------------------------------------------------------- 1 | export interface EmailOptions { 2 | to?: string; 3 | subject: string; 4 | html: string; 5 | } -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/StepContainer/index.ts: -------------------------------------------------------------------------------- 1 | import StepContainer from './StepContainer'; 2 | 3 | export default StepContainer; -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/DeployOutput/index.ts: -------------------------------------------------------------------------------- 1 | import DeployOutput from './DeployOutput'; 2 | 3 | export default DeployOutput; -------------------------------------------------------------------------------- /client/src/assets/images/CreateDockerImage.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/src/assets/images/CreateDockerImage.jpeg -------------------------------------------------------------------------------- /client/src/assets/images/CreateDockerNetwork.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/src/assets/images/CreateDockerNetwork.jpeg -------------------------------------------------------------------------------- /client/src/assets/images/CreatePortBinding.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/src/assets/images/CreatePortBinding.jpeg -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerContainer/index.js: -------------------------------------------------------------------------------- 1 | import DockerContainer from './DockerContainer'; 2 | 3 | export default DockerContainer; -------------------------------------------------------------------------------- /client/src/components/organisms/DocumentsExplorer/index.js: -------------------------------------------------------------------------------- 1 | import DocumentsExplorer from './DocumentsExplorer'; 2 | 3 | export default DocumentsExplorer; -------------------------------------------------------------------------------- /screenshots/Docker-Compose-Environ-Variables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Docker-Compose-Environ-Variables.png -------------------------------------------------------------------------------- /screenshots/Setup-Utility-Quantum-Deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/screenshots/Setup-Utility-Quantum-Deployment.png -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/LoadingScreen/index.ts: -------------------------------------------------------------------------------- 1 | import LoadingScreen from './LoadingScreen'; 2 | 3 | export default LoadingScreen; -------------------------------------------------------------------------------- /client/src/assets/images/CreateDockerContainer.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rodyherrera/Quantum/HEAD/client/src/assets/images/CreateDockerContainer.jpeg -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingBody/index.js: -------------------------------------------------------------------------------- 1 | import PortBindingBody from './PortBindingBody'; 2 | 3 | export default PortBindingBody; -------------------------------------------------------------------------------- /client/src/hooks/ws/index.js: -------------------------------------------------------------------------------- 1 | export { default as useRemoteTerminal } from './useRemoteTerminal'; 2 | export { default as useWebSocket } from './useWebSocket'; -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/StepsContainer/index.ts: -------------------------------------------------------------------------------- 1 | import StepsContainer from './StepsContainer'; 2 | 3 | export default StepsContainer; -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/ToastContainer/index.ts: -------------------------------------------------------------------------------- 1 | import ToastContainer from './ToastContainer'; 2 | 3 | export default ToastContainer; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCardBody/index.js: -------------------------------------------------------------------------------- 1 | import DashboardCardBody from './DashboardCardBody'; 2 | 3 | export default DashboardCardBody; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/image/CreateDockerImage/index.js: -------------------------------------------------------------------------------- 1 | import CreateDockerImage from './CreateDockerImage'; 2 | 3 | export default CreateDockerImage; -------------------------------------------------------------------------------- /client/src/pages/protected/portBinding/CreatePortBinding/index.js: -------------------------------------------------------------------------------- 1 | import CreatePortBinding from './CreatePortBinding'; 2 | 3 | export default CreatePortBinding; -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/EnvironVariables/index.ts: -------------------------------------------------------------------------------- 1 | import EnvironVariables from './EnvironVariables'; 2 | 3 | export default EnvironVariables; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageBody/index.js: -------------------------------------------------------------------------------- 1 | import DockerImageHeader from './DockerImageBody'; 2 | 3 | export default DockerImageHeader; -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingFooter/index.js: -------------------------------------------------------------------------------- 1 | import PortBindingFooter from './PortBindingFooter'; 2 | 3 | export default PortBindingFooter; -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingHeader/index.js: -------------------------------------------------------------------------------- 1 | import PortBindingHeader from './PortBindingHeader'; 2 | 3 | export default PortBindingHeader; -------------------------------------------------------------------------------- /client/src/components/molecules/UserStickyFooterStats/index.js: -------------------------------------------------------------------------------- 1 | import UserStickyFooterStats from './UserStickyFooterStats'; 2 | 3 | export default UserStickyFooterStats -------------------------------------------------------------------------------- /client/src/components/organisms/EnvironmentVariables/index.js: -------------------------------------------------------------------------------- 1 | import EnvironmentVariables from './EnvironmentVariables'; 2 | 3 | export default EnvironmentVariables; -------------------------------------------------------------------------------- /client/src/pages/protected/portBinding/index.js: -------------------------------------------------------------------------------- 1 | export { default as CreatePortBinding } from './CreatePortBinding'; 2 | export { default as Explorer } from './Explorer'; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCardFooter/index.js: -------------------------------------------------------------------------------- 1 | import DashboardCardFooter from './DashboardCardFooter'; 2 | 3 | export default DashboardCardFooter; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCardHeader/index.js: -------------------------------------------------------------------------------- 1 | import DashboardCardHeader from './DashboardCardHeader'; 2 | 3 | export default DashboardCardHeader; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardModule/DashboardModuleBody/index.js: -------------------------------------------------------------------------------- 1 | import DashboardModuleBody from './DashboardModuleBody'; 2 | 3 | export default DashboardModuleBody; -------------------------------------------------------------------------------- /client/src/components/molecules/ConfirmModal/ConfirmModalFooter/index.js: -------------------------------------------------------------------------------- 1 | import ConfirmModalFooter from './ConfirmModalFooter'; 2 | 3 | export default ConfirmModalFooter; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageFooter/index.js: -------------------------------------------------------------------------------- 1 | import DockerImageFooter from './DockerImageFooter'; 2 | 3 | export default DockerImageFooter; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageHeader/index.js: -------------------------------------------------------------------------------- 1 | import DockerImageHeader from './DockerImageHeader'; 2 | 3 | export default DockerImageHeader; -------------------------------------------------------------------------------- /client/src/components/molecules/Header/index.js: -------------------------------------------------------------------------------- 1 | export { default as HeaderLinks } from './HeaderLinks'; 2 | export { default as HeaderNavigation } from './HeaderNavigation'; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/network/CreateDockerNetwork/index.js: -------------------------------------------------------------------------------- 1 | import CreateDockerNetwork from './CreateDockerNetwork'; 2 | 3 | export default CreateDockerNetwork; -------------------------------------------------------------------------------- /server/typings/services/nginxHandler.d.ts: -------------------------------------------------------------------------------- 1 | export interface DomainConfig { 2 | domain: string; 3 | ipv4: string; 4 | port: number; 5 | useSSL?: boolean; 6 | } -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkBody/index.js: -------------------------------------------------------------------------------- 1 | import DockerNetworkBody from './DockerNetworkBody'; 2 | 3 | export default DockerNetworkBody; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/EnvironmentVariables/index.js: -------------------------------------------------------------------------------- 1 | import EnvironmentVariables from './EnvironmentVariables'; 2 | 3 | export default EnvironmentVariables; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardModule/DashboardModuleFooter/index.js: -------------------------------------------------------------------------------- 1 | import DashboardModuleFooter from './DashboardModuleFooter'; 2 | 3 | export default DashboardModuleFooter; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardModule/DashboardModuleHeader/index.js: -------------------------------------------------------------------------------- 1 | import DashboardModuleHeader from './DashboardModuleHeader'; 2 | 3 | export default DashboardModuleHeader; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerHeader/index.js: -------------------------------------------------------------------------------- 1 | import DockerContainer from './DockerContainerHeader'; 2 | 3 | export default DockerContainer; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkFooter/index.js: -------------------------------------------------------------------------------- 1 | import DockerNetworkFooter from './DockerNetworkFooter'; 2 | 3 | export default DockerNetworkFooter; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkHeader/index.js: -------------------------------------------------------------------------------- 1 | import DockerNetworkHeader from './DockerNetworkHeader'; 2 | 3 | export default DockerNetworkHeader; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/CreateDockerContainer/index.js: -------------------------------------------------------------------------------- 1 | import CreateDockerContainer from './CreateDockerContainer'; 2 | 3 | export default CreateDockerContainer; -------------------------------------------------------------------------------- /setup-utility/client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerBody/index.js: -------------------------------------------------------------------------------- 1 | import DockerContainerBody from './DockerContainerBody'; 2 | 3 | export default DockerContainerBody; -------------------------------------------------------------------------------- /server/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "@server/start.sh: Starting Node.js server with npx tsx..." 4 | npx tsx server.ts 5 | 6 | echo "@server/start.sh: Node.js server has stopped." -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerFooter/index.js: -------------------------------------------------------------------------------- 1 | import DockerContainerFooter from './DockerContainerFooter'; 2 | 3 | export default DockerContainerFooter; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/index.js: -------------------------------------------------------------------------------- 1 | export { default as container } from './container'; 2 | export { default as image } from './image'; 3 | export { default as network } from './network'; 4 | -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/OptionalEnvironVariables/index.ts: -------------------------------------------------------------------------------- 1 | import OptionalEnvironVariables from './OptionalEnvironVariables'; 2 | 3 | export default OptionalEnvironVariables; -------------------------------------------------------------------------------- /client/src/utilities/common/index.js: -------------------------------------------------------------------------------- 1 | export { default as dateUtils } from './dateUtils'; 2 | export { default as fileUtils } from './fileUtils'; 3 | export { default as reduxUtils } from './reduxUtils'; -------------------------------------------------------------------------------- /server/typings/services/dockerContainer.d.ts: -------------------------------------------------------------------------------- 1 | export interface IContainerStoragePath{ 2 | userContainerPath: string; 3 | containerStoragePath: string; 4 | repositoryContainerPath: string; 5 | } -------------------------------------------------------------------------------- /server/utilities/logger.ts: -------------------------------------------------------------------------------- 1 | import pino from 'pino'; 2 | import pretty from 'pino-pretty'; 3 | 4 | const logger = pino({ 5 | level: process.env.LOG_LEVEL || 'info' 6 | }, pretty()); 7 | 8 | export default logger; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/StepContainer/StepContainer.css: -------------------------------------------------------------------------------- 1 | .Setup-Utility-Step-Title{ 2 | font-weight: 400; 3 | font-size: .9rem; 4 | } 5 | 6 | .Setup-Utility-Step-Title:hover{ 7 | opacity: .8; 8 | } -------------------------------------------------------------------------------- /setup-utility/server/core/config.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | env_path = Path(__file__).resolve().parent.parent.parent.parent / '.env' 4 | setup_utility_env_path = Path(__file__).resolve().parent.parent.parent / '.env' -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardModule/DashboardModuleBody/DashboardModuleBody.css: -------------------------------------------------------------------------------- 1 | .Dashboard-Module-Body-Container{ 2 | max-height: 450px; 3 | height: 450px; 4 | overflow-y: scroll; 5 | position: relative; 6 | } -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/index.js: -------------------------------------------------------------------------------- 1 | export { default as DockerContainer } from './DockerContainer'; 2 | export { default as DockerImage } from './DockerImage'; 3 | export { default as DockerNetwork } from './DockerNetwork'; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/image/index.js: -------------------------------------------------------------------------------- 1 | import CreateDockerImage from './CreateDockerImage'; 2 | import Explorer from './Explorer'; 3 | 4 | const pages = { 5 | CreateDockerImage, 6 | Explorer 7 | }; 8 | 9 | export default pages; -------------------------------------------------------------------------------- /client/src/utilities/api/index.js: -------------------------------------------------------------------------------- 1 | export { default as apiRequestBuilder } from './apiRequestBuilder'; 2 | export { default as serverRequestBuilder } from './serverRequestBuilder'; 3 | export { default as operationHandler } from './operationHandler'; -------------------------------------------------------------------------------- /server/typings/controllers/common.d.ts: -------------------------------------------------------------------------------- 1 | import { Request } from 'express'; 2 | import { IUser } from '@typings/models/user'; 3 | 4 | export interface IRequest extends Request{ 5 | user?: null; 6 | handlerData?: {}; 7 | query: any 8 | } -------------------------------------------------------------------------------- /client/src/components/molecules/Repository/index.js: -------------------------------------------------------------------------------- 1 | export { default as RepositoryHeader } from './RepositoryHeader'; 2 | export { default as RepositoryBody } from './RepositoryBody'; 3 | export { default as RepositoryFooter } from './RepositoryFooter'; -------------------------------------------------------------------------------- /client/src/pages/protected/docker/network/index.js: -------------------------------------------------------------------------------- 1 | import CreateDockerNetwork from './CreateDockerNetwork'; 2 | import Explorer from './Explorer'; 3 | 4 | const pages = { 5 | CreateDockerNetwork, 6 | Explorer 7 | }; 8 | 9 | export default pages; -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/index.js: -------------------------------------------------------------------------------- 1 | export { default as PortBindingBody } from './PortBindingBody'; 2 | export { default as PortBindingFooter } from './PortBindingFooter'; 3 | export { default as PortBindingHeader } from './PortBindingHeader'; -------------------------------------------------------------------------------- /client/src/components/molecules/ConfirmModal/index.js: -------------------------------------------------------------------------------- 1 | export { default as ConfirmModalFooter } from './ConfirmModalFooter'; 2 | export { default as ConfirmModalHeader } from './ConfirmModalHeader'; 3 | export { default as ConfirmModalBody } from './ConfirmModalBody'; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/index.js: -------------------------------------------------------------------------------- 1 | export { default as DockerImageBody } from './DockerImageBody'; 2 | export { default as DockerImageHeader } from './DockerImageHeader'; 3 | export { default as DockerImageFooter } from './DockerImageFooter'; -------------------------------------------------------------------------------- /client/src/hooks/common/index.js: -------------------------------------------------------------------------------- 1 | export { default as useQuery } from './useQuery'; 2 | export { default as useWindowSize } from './useWindowSize'; 3 | export { default as useDocumentTitle } from './useDocumentTitle'; 4 | export { default as useKeyPress } from './useKeyPress'; -------------------------------------------------------------------------------- /server/typings/controllers/deployment.d.ts: -------------------------------------------------------------------------------- 1 | export interface ActiveDeploymentEnvironment{ 2 | _id: ObjectId; 3 | environment: Record; 4 | } 5 | 6 | export interface ActiveDeploymentRepositoryDocument{ 7 | deployments: ActiveDeploymentEnvironment[] 8 | } -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardModule/index.js: -------------------------------------------------------------------------------- 1 | export { default as DashboardModuleBody } from './DashboardModuleBody'; 2 | export { default as DashboardModuleFooter } from './DashboardModuleFooter'; 3 | export { default as DashboardModuleHeader } from './DashboardModuleHeader'; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/index.js: -------------------------------------------------------------------------------- 1 | export { default as DockerNetworkHeader } from './DockerNetworkHeader'; 2 | export { default as DockerNetworkBody } from './DockerNetworkBody'; 3 | export { default as DockerNetworkFooter } from './DockerNetworkFooter'; -------------------------------------------------------------------------------- /server/typings/utilities/bootstrap.d.ts: -------------------------------------------------------------------------------- 1 | import { Application, RequestHandler } from 'express'; 2 | 3 | export interface ConfigureAppParams{ 4 | app: Application; 5 | routes: string[]; 6 | suffix: string; 7 | middlewares: RequestHandler[]; 8 | settings: {}; 9 | }; -------------------------------------------------------------------------------- /server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20.11.0 AS build 2 | 3 | WORKDIR /app 4 | 5 | COPY package*.json ./ 6 | 7 | COPY . ./ 8 | 9 | RUN chmod +x start.sh 10 | 11 | EXPOSE 80 12 | 13 | CMD ["/bin/bash", "-c", "npm install; npm start"] 14 | 15 | RUN echo '@deploy.sh: STEP 4...' 16 | -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/index.js: -------------------------------------------------------------------------------- 1 | export { default as DockerContainerBody } from './DockerContainerBody'; 2 | export { default as DockerContainerHeader } from './DockerContainerHeader'; 3 | export { default as DockerContainerFooter } from './DockerContainerFooter'; -------------------------------------------------------------------------------- /server/typings/services/github.d.ts: -------------------------------------------------------------------------------- 1 | export type DeploymentState = 'error' | 'failure' | 'inactive' | 'in_progress' | 'queued' | 'pending' | 'success'; 2 | 3 | // @middlewares/github.ts 4 | declare module 'express-session'{ 5 | interface SessionData{ 6 | userId?: string; 7 | } 8 | } -------------------------------------------------------------------------------- /setup-utility/server/api/host.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | from services.env import get_server_ip 3 | 4 | router = APIRouter() 5 | 6 | @router.get('/host-ip') 7 | async def get_host_ip(): 8 | return { 9 | 'status': 'success', 10 | 'data': { 'ip': get_server_ip() } 11 | } -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/index.js: -------------------------------------------------------------------------------- 1 | export { default as DashboardCardHeader } from './DashboardCardHeader'; 2 | export { default as DashboardCardBody } from './DashboardCardBody'; 3 | export { default as DashboardCardFooter } from './DashboardCardFooter'; 4 | export { default as DashboardCard } from './DashboardCard'; -------------------------------------------------------------------------------- /server/typings/models/github.d.ts: -------------------------------------------------------------------------------- 1 | import mongoose, { Document, Schema } from 'mongoose'; 2 | 3 | export interface IGithub extends Document{ 4 | user: mongoose.Schema.Types.ObjectId; 5 | githubId: string; 6 | accessToken: string; 7 | username: string; 8 | avatarUrl?: string; 9 | getDecryptedAccessToken(): string; 10 | } -------------------------------------------------------------------------------- /scripts/.clocignore: -------------------------------------------------------------------------------- 1 | ./client/node_modules/ 2 | ./client/package-lock.json 3 | 4 | ./server/node_modules/ 5 | ./server/package-lock.json 6 | 7 | ./setup-utility/client/node_modules/ 8 | ./setup-utility/client/package-lock.json 9 | ./setup-utility/server/venv/ 10 | ./setup-utility/server/__pycache__/ 11 | ./setup-utility/server/.requirements_hash -------------------------------------------------------------------------------- /client/src/components/molecules/DataRenderer/index.js: -------------------------------------------------------------------------------- 1 | export { default as DockerContainers } from './DockerContainers'; 2 | export { default as DockerImages } from './DockerImages'; 3 | export { default as DockerNetworks } from './DockerNetworks'; 4 | export { default as Repositories } from './Repositories'; 5 | export { default as PortBindings } from './PortBindings'; -------------------------------------------------------------------------------- /setup-utility/server/api/__init__.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | from .env import router as env_router 3 | from .host import router as host_router 4 | from .websocket import router as websocket_router 5 | 6 | router = APIRouter() 7 | router.include_router(env_router) 8 | router.include_router(host_router) 9 | router.include_router(websocket_router) 10 | -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCard/DashboardCard.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './DashboardCard.css'; 3 | 4 | const DashboardCard = ({ children }) => { 5 | 6 | return ( 7 |
8 | {children} 9 |
10 | ); 11 | }; 12 | 13 | export default DashboardCard; -------------------------------------------------------------------------------- /server/typings/controllers/wsController.d.ts: -------------------------------------------------------------------------------- 1 | import { IRepository } from '@typings/models/repository'; 2 | import { IUser } from '@typings/models/user'; 3 | import { Socket } from 'socket.io'; 4 | 5 | export interface ISocket extends Socket{ 6 | user: IUser; 7 | repository: IRepository; 8 | } 9 | 10 | export type WsNextFunction = (error?: any) => Promise; -------------------------------------------------------------------------------- /setup-utility/.env: -------------------------------------------------------------------------------- 1 | # SERVER_IP: Used to be able to connect from 2 | # the client correctly to the server. 3 | SERVER_IP=0.0.0.0 4 | 5 | # SERVER_PORT: Port where the setup-utility 6 | # backend server will be built. 7 | SERVER_PORT=9080 8 | 9 | # CLIENT_PORT: Port where the web application will be 10 | # deployed that will allow you to deploy the app. 11 | CLIENT_PORT=3080 -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/StepsContainer/StepsContainer.tsx: -------------------------------------------------------------------------------- 1 | import './StepsContainer.css'; 2 | 3 | const StepsContainer = ({ children }: { children: React.ReactNode }) => { 4 | return ( 5 |
6 | {children} 7 |
8 | ); 9 | }; 10 | 11 | export default StepsContainer; -------------------------------------------------------------------------------- /server/cli/actions/listCreatedDockerNetworks.ts: -------------------------------------------------------------------------------- 1 | import { filterAvailableNetworks } from '@cli/utilities/docker'; 2 | 3 | const listCreatedDockerNetworks = async () => { 4 | const dockerNetworks = await filterAvailableNetworks(); 5 | dockerNetworks.forEach((network) => { 6 | console.log('->', network.Name); 7 | }); 8 | }; 9 | 10 | export default listCreatedDockerNetworks; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/StepContainer/StepContainer.tsx: -------------------------------------------------------------------------------- 1 | import './StepContainer.css'; 2 | 3 | const StepContainer = ({ title }: { title: string }) => { 4 | return ( 5 |
6 |

{title}

7 |
8 | ); 9 | }; 10 | 11 | export default StepContainer; -------------------------------------------------------------------------------- /server/cli/actions/listActiveContainers.ts: -------------------------------------------------------------------------------- 1 | import { filterAvailableContainers } from '@cli/utilities/docker'; 2 | 3 | const listActiveContainers = async () => { 4 | const activeContainers = await filterAvailableContainers(true); 5 | activeContainers.forEach((container) => { 6 | console.log('->', container.Names[0]); 7 | }); 8 | }; 9 | 10 | export default listActiveContainers; -------------------------------------------------------------------------------- /client/src/utilities/api/eventManager.js: -------------------------------------------------------------------------------- 1 | class EventManager{ 2 | constructor(){ 3 | this.events = {}; 4 | } 5 | 6 | on(event, callback){ 7 | this.events[event] = callback; 8 | } 9 | 10 | emit(event, ...args){ 11 | if(this.events[event]){ 12 | this.events[event](...args); 13 | } 14 | } 15 | } 16 | 17 | export default EventManager; -------------------------------------------------------------------------------- /server/cli/actions/listCreatedContainers.ts: -------------------------------------------------------------------------------- 1 | import { filterAvailableContainers } from '@cli/utilities/docker'; 2 | 3 | const listCreatedContainers = async () => { 4 | const availableContainers = await filterAvailableContainers(); 5 | availableContainers.forEach((container) => { 6 | console.log('->', container.Names[0]); 7 | }); 8 | }; 9 | 10 | export default listCreatedContainers; -------------------------------------------------------------------------------- /client/src/hooks/api/user/index.js: -------------------------------------------------------------------------------- 1 | export { default as useUserDockerImages } from './useUserDockerImages'; 2 | export { default as useUserDockerNetworks } from './useUserDockerNetworks'; 3 | export { default as useUserRepositories } from './useUserRepositories'; 4 | export { default as useUserDockerContainers } from './useUserDockerContainers'; 5 | export { default as useUserPortBinding } from './useUserPortBinding'; -------------------------------------------------------------------------------- /server/typings/models/docker/image.d.ts: -------------------------------------------------------------------------------- 1 | import mongoose, { Document } from 'mongoose'; 2 | 3 | export interface IDockerImage extends Document{ 4 | _id: mongoose.Schema.Types.ObjectId, 5 | user: mongoose.Schema.Types.ObjectId, 6 | containers: mongoose.Schema.Types.ObjectId[], 7 | name: string, 8 | tag: string, 9 | size?: number, 10 | createdAt: Date, 11 | updatedAt: Date 12 | } -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/StepsContainer/StepsContainer.css: -------------------------------------------------------------------------------- 1 | .Setup-Utility-Steps-Container{ 2 | display: flex; 3 | flex-direction: column; 4 | padding-left: 1rem; 5 | border-left: 1px solid #dadada; 6 | gap: .5rem; 7 | } 8 | 9 | @media screen and (max-width: 768px){ 10 | .Setup-Utility-Left-Container{ 11 | position: relative; 12 | top: 0; 13 | } 14 | } -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardModule/DashboardModuleBody/DashboardModuleBody.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './DashboardModuleBody.css'; 3 | 4 | const DashboardModuleBody = ({ RenderComponent }) => { 5 | 6 | return ( 7 |
8 | 9 |
10 | ); 11 | }; 12 | 13 | export default DashboardModuleBody; -------------------------------------------------------------------------------- /server/typings/models/portBinding.d.ts: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose'; 2 | import { IDockerContainer } from './docker/container'; 3 | 4 | export interface IPortBinding{ 5 | internalPort: number, 6 | protocol: string; 7 | _id: mongoose.Schema.Types.ObjectId, 8 | externalPort?: number; 9 | user: mongoose.Schema.Types.ObjectId, 10 | container: mongoose.Schema.Types.ObjectId | IDockerContainer 11 | } -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Button/Button.tsx: -------------------------------------------------------------------------------- 1 | import './Button.css'; 2 | 3 | interface ButtonProps { 4 | text: string; 5 | } 6 | 7 | const Button: React.FC = ({ text, ...props }) => { 8 | return ( 9 | 12 | ); 13 | }; 14 | 15 | export default Button; -------------------------------------------------------------------------------- /setup-utility/client/src/components/organisms/Layout.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ToastContainer from '@components/molecules/ToastContainer'; 3 | import { Outlet } from 'react-router-dom'; 4 | 5 | const Layout: React.FC = () => { 6 | 7 | return ( 8 | 9 | 10 | 11 | 12 | ); 13 | }; 14 | 15 | export default Layout; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | *.py[cod] 3 | *.log 4 | 5 | client/node_modules/ 6 | client/package-lock.json 7 | client/dist/ 8 | client/.env 9 | 10 | server/node_modules/ 11 | server/package-lock.json 12 | server/.env 13 | 14 | setup-utility/client/node_modules/ 15 | setup-utility/client/package-lock.json 16 | setup-utility/client/dist/ 17 | setup-utility/server/venv/ 18 | setup-utility/server/__pycache__/ 19 | setup-utility/server/.requirements_hash -------------------------------------------------------------------------------- /client/src/pages/protected/docker/container/index.js: -------------------------------------------------------------------------------- 1 | import CreateDockerContainer from './CreateDockerContainer'; 2 | import Shell from './Shell'; 3 | import EnvironmentVariables from './EnvironmentVariables'; 4 | import Storage from './Storage'; 5 | import Explorer from './Explorer'; 6 | 7 | const pages = { 8 | CreateDockerContainer, 9 | EnvironmentVariables, 10 | Explorer, 11 | Storage, 12 | Shell 13 | }; 14 | 15 | export default pages; -------------------------------------------------------------------------------- /client/src/utilities/common/fileUtils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Converts a file size in bytes to a human-readable format. 3 | * 4 | * @param {number} size - The size in bytes. 5 | * @returns {string} - A human-readable file size string. 6 | */ 7 | export const humanFileSize = (size) => { 8 | var i = size == 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024)); 9 | return +((size / Math.pow(1024, i)).toFixed(2)) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; 10 | } -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCard/DashboardCard.css: -------------------------------------------------------------------------------- 1 | .Dashboard-Card-Container{ 2 | display: flex; 3 | flex-direction: column; 4 | gap: 1.5rem; 5 | padding-bottom: 1rem; 6 | border-radius: .5rem; 7 | border: 1px solid #dfdfdf; 8 | background-color: rgba(255, 255, 255, 0.4); 9 | backdrop-filter: blur(1px); 10 | transition: .1s; 11 | } 12 | 13 | .Dashboard-Card-Container:hover{ 14 | border: 1px solid #0f62fe; 15 | } -------------------------------------------------------------------------------- /server/middlewares/rateLimiter.ts: -------------------------------------------------------------------------------- 1 | import rateLimit from 'express-rate-limit'; 2 | 3 | const authLimiter = rateLimit({ 4 | // 15 minutes 5 | windowMs: 15 * 60 * 1000, 6 | // 100 requests per ip 7 | max: 100, 8 | message: 'Core::RateLimiter', 9 | standardHeaders: true, 10 | legacyHeaders: false, 11 | keyGenerator: async (req): Promise => { 12 | return req.ip as string; 13 | } 14 | }); 15 | 16 | export default authLimiter; -------------------------------------------------------------------------------- /server/typings/models/docker/network.d.ts: -------------------------------------------------------------------------------- 1 | import mongoose, { Document } from 'mongoose'; 2 | import { IUser } from '../user'; 3 | 4 | export interface IDockerNetwork{ 5 | _id: mongoose.Schema.Types.ObjectId, 6 | user: mongoose.Schema.Types.ObjectId | IUser, 7 | containers: mongoose.Schema.Types.ObjectId[], 8 | name: string, 9 | subnet: string, 10 | driver: string, 11 | dockerNetworkName: string, 12 | createdAt: Date, 13 | updatedAt: Date 14 | } -------------------------------------------------------------------------------- /client/src/hooks/api/docker/useDeleteDockerImage.js: -------------------------------------------------------------------------------- 1 | import { useDispatch } from 'react-redux'; 2 | import { deleteDockerImage } from '@services/docker/image/operations'; 3 | 4 | const useDeleteDockerImage = (documentId) => { 5 | const dispatch = useDispatch(); 6 | 7 | const deleteDockerImageHandler = () => { 8 | dispatch(deleteDockerImage(documentId)); 9 | }; 10 | 11 | return deleteDockerImageHandler; 12 | }; 13 | 14 | export default useDeleteDockerImage; -------------------------------------------------------------------------------- /client/src/hooks/api/docker/useDeleteDockerNetwork.js: -------------------------------------------------------------------------------- 1 | import { useDispatch } from 'react-redux'; 2 | import { deleteDockerNetwork } from '@services/docker/network/operations'; 3 | 4 | const useDeleteDockerNetwork = (documentId) => { 5 | const dispatch = useDispatch(); 6 | 7 | const deleteDockerNetworkHandler = () => { 8 | dispatch(deleteDockerNetwork(documentId)); 9 | }; 10 | 11 | return deleteDockerNetworkHandler; 12 | }; 13 | 14 | export default useDeleteDockerNetwork; -------------------------------------------------------------------------------- /setup-utility/client/src/Application.tsx: -------------------------------------------------------------------------------- 1 | import { Routes, Route } from 'react-router-dom'; 2 | import pages from '@pages/index'; 3 | import Layout from '@components/organisms/Layout'; 4 | import '@styles/global.css'; 5 | 6 | const Application = () => { 7 | return ( 8 | 9 | }> 10 | } /> 11 | 12 | 13 | ); 14 | }; 15 | 16 | export default Application; -------------------------------------------------------------------------------- /setup-utility/client/src/services/store.ts: -------------------------------------------------------------------------------- 1 | import { configureStore } from '@reduxjs/toolkit'; 2 | import envReducer from '@services/env/slice'; 3 | import toastReducer from '@services/toast/slice'; 4 | 5 | export const store = configureStore({ 6 | reducer: { 7 | env: envReducer, 8 | toast: toastReducer 9 | } 10 | }); 11 | 12 | export type RootState = ReturnType; 13 | export type AppDispatch = typeof store.dispatch; 14 | 15 | export default store; 16 | -------------------------------------------------------------------------------- /client/src/hooks/api/docker/useDeleteDockerContainer.js: -------------------------------------------------------------------------------- 1 | import { useDispatch } from 'react-redux'; 2 | import { deleteDockerContainer } from '@services/docker/container/operations'; 3 | 4 | const useDeleteDockerImage = (documentId) => { 5 | const dispatch = useDispatch(); 6 | 7 | const deleteDockerContainerHandler = () => { 8 | dispatch(deleteDockerContainer(documentId)); 9 | }; 10 | 11 | return deleteDockerContainerHandler; 12 | }; 13 | 14 | export default useDeleteDockerImage; -------------------------------------------------------------------------------- /client/src/utilities/common/reduxUtils.js: -------------------------------------------------------------------------------- 1 | export const setState = (state, action) => { 2 | const { path, value } = action.payload; 3 | const keys = Array.isArray(path) ? path : path.split('.'); 4 | let current = state; 5 | 6 | for(let i = 0; i < keys.length - 1; i++){ 7 | const key = keys[i]; 8 | if(!current[key]){ 9 | current[key] = {}; 10 | } 11 | current = current[key]; 12 | } 13 | 14 | current[keys[keys.length - 1]] = value; 15 | }; 16 | -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Button/Button.css: -------------------------------------------------------------------------------- 1 | .Button-Message{ 2 | font-size: .85rem; 3 | text-transform: uppercase; 4 | } 5 | 6 | .Button-Container{ 7 | background: #1f1f1f; 8 | color: #FFF; 9 | cursor: pointer; 10 | padding: .5rem 1.5rem; 11 | width: fit-content; 12 | border-radius: .25rem; 13 | transition: .2s; 14 | } 15 | 16 | .Button-Container:hover{ 17 | opacity: .8; 18 | } 19 | 20 | .Button-Container:active{ 21 | transform: scale(.95); 22 | } 23 | -------------------------------------------------------------------------------- /setup-utility/server/main.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI 2 | from fastapi.middleware.cors import CORSMiddleware 3 | 4 | from api import env, host, websocket 5 | 6 | app = FastAPI() 7 | 8 | app.add_middleware( 9 | CORSMiddleware, 10 | allow_origins=['*'], 11 | allow_credentials=True, 12 | allow_methods=['*'], 13 | allow_headers=['*'], 14 | ) 15 | 16 | app.include_router(env.router, prefix="") 17 | app.include_router(host.router, prefix="") 18 | app.include_router(websocket.router, prefix="") 19 | -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCardHeader/DashboardCardHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './DashboardCardHeader.css'; 3 | 4 | const DashboardCardHeader = ({ options }) => { 5 | return ( 6 |
7 | {options.map((item, index) => ( 8 |

{item}

9 | ))} 10 |
11 | ); 12 | }; 13 | 14 | export default DashboardCardHeader; -------------------------------------------------------------------------------- /setup-utility/client/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react-swc'; 3 | 4 | export default defineConfig({ 5 | plugins: [react()], 6 | server: { 7 | host: '0.0.0.0', 8 | port: 3080 9 | }, 10 | resolve: { 11 | alias: { 12 | '@': '/src/', 13 | '@pages': '/src/pages', 14 | '@styles': '/src/assets/stylesheets', 15 | '@components': '/src/components', 16 | '@hooks': '/src/hooks', 17 | '@services': '/src/services' 18 | } 19 | } 20 | }) 21 | -------------------------------------------------------------------------------- /server/typings/services/oneClickDeploy.d.ts: -------------------------------------------------------------------------------- 1 | import { IDockerContainerVolume } from '@typings/models/docker/container'; 2 | 3 | export interface IOneClickDeployConfig{ 4 | name: string; 5 | husbands?: IOneClickDeployConfig[]; 6 | ports?: [{ 7 | protocol: string, 8 | internalPort: number 9 | }], 10 | command?: string, 11 | image: { 12 | name: string, 13 | tag: string 14 | }, 15 | volumes: IDockerContainerVolume[]; 16 | environment?: { 17 | [key: string]: string 18 | } 19 | } -------------------------------------------------------------------------------- /setup-utility/server/api/websocket.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter, WebSocket, WebSocketDisconnect 2 | from services.deploy import connected_clients 3 | 4 | router = APIRouter() 5 | 6 | @router.websocket('/ws') 7 | async def websocket_endpoint(websocket: WebSocket): 8 | await websocket.accept() 9 | connected_clients.append(websocket) 10 | try: 11 | while True: 12 | await websocket.receive_text() 13 | except WebSocketDisconnect: 14 | connected_clients.remove(websocket) 15 | await websocket.close() 16 | -------------------------------------------------------------------------------- /client/src/hooks/api/server/useServerIP.js: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { getServerIP } from '@services/core/operations'; 3 | import { useDispatch, useSelector } from 'react-redux'; 4 | 5 | const useServerIP = () => { 6 | const dispatch = useDispatch(); 7 | const { isServerIPLoading, serverIP } = useSelector((state) => state.core); 8 | 9 | useEffect(() => { 10 | if(serverIP) return; 11 | dispatch(getServerIP()); 12 | }, []); 13 | 14 | return { isServerIPLoading, serverIP }; 15 | }; 16 | 17 | export default useServerIP; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerNetwork/DockerNetworkHeader/DockerNetworkHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { DashboardCardHeader } from '@components/atoms/DashboardCard'; 3 | import './DockerNetworkHeader.css'; 4 | 5 | const DockerNetworkHeader = ({ network }) => { 6 | const options = [ 7 | 'Subnet: ' + network.subnet, 8 | 'Driver: ' + network.driver, 9 | 'Containers: ' + network.containers.length 10 | ]; 11 | 12 | return 13 | }; 14 | 15 | export default DockerNetworkHeader; -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/LoadingScreen/LoadingScreen.tsx: -------------------------------------------------------------------------------- 1 | import './LoadingScreen.css'; 2 | import Loader from '@components/atoms/Loader'; 3 | 4 | interface LoadingScreenProps{ 5 | message: string; 6 | } 7 | 8 | const LoadingScreen: React.FC = ({ message }) => { 9 | 10 | return ( 11 |
12 | 13 | {message &&

{message}

} 14 |
15 | ); 16 | }; 17 | 18 | export default LoadingScreen; -------------------------------------------------------------------------------- /client/src/hooks/api/portBinding/useDeletePortBinding.js: -------------------------------------------------------------------------------- 1 | import { useDispatch, useSelector } from 'react-redux'; 2 | import { deletePortBinding } from '@services/portBinding/operations'; 3 | 4 | const useDeletePortBinding = (documentId) => { 5 | const dispatch = useDispatch(); 6 | const { portBindings } = useSelector((state) => state.portBinding); 7 | 8 | const deletePortBindingHandler = () => { 9 | dispatch(deletePortBinding(documentId, portBindings)); 10 | }; 11 | 12 | return deletePortBindingHandler; 13 | }; 14 | 15 | export default useDeletePortBinding; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Input/Input.css: -------------------------------------------------------------------------------- 1 | .Input-Container:hover .Input{ 2 | border-color: #0f62fe; 3 | } 4 | 5 | .Input-Container{ 6 | display: flex; 7 | flex-direction: column; 8 | gap: .5rem; 9 | } 10 | 11 | .Input{ 12 | border: 1px solid #dadada; 13 | padding: 2px; 14 | border-radius: .5rem; 15 | } 16 | 17 | input{ 18 | outline: none; 19 | border: none; 20 | width: 100%; 21 | padding: .3rem 1rem; 22 | } 23 | 24 | .Input-Helper-Text{ 25 | opacity: .8; 26 | padding-left: 1.5rem; 27 | font-size: .8rem; 28 | } 29 | -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/LoadingScreen/LoadingScreen.css: -------------------------------------------------------------------------------- 1 | .Loading-Screen-Container{ 2 | position: fixed; 3 | top: 0; 4 | right: 0; 5 | height: 100vh; 6 | display: flex; 7 | z-index: 200; 8 | justify-content: center; 9 | align-items: center; 10 | width: 100%; 11 | gap: 2rem; 12 | flex-direction: column; 13 | backdrop-filter: blur(2px); 14 | background-color: rgba(255, 255, 255, 0.5); 15 | } 16 | 17 | .Loading-Screen-Message{ 18 | font-family: 'IBM Plex Sans', sans-serif !important; 19 | font-size: .9rem; 20 | } -------------------------------------------------------------------------------- /client/src/components/organisms/Layout/Layout.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ -------------------------------------------------------------------------------- /client/src/pages/guest/authentication/SignIn/SignIn.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | -------------------------------------------------------------------------------- /client/src/components/organisms/Repository/Repository.jsx: -------------------------------------------------------------------------------- 1 | import { 2 | RepositoryHeader, 3 | RepositoryBody, 4 | RepositoryFooter 5 | } from '@components/molecules/Repository'; 6 | import { DashboardCard } from '@components/atoms/DashboardCard'; 7 | 8 | const Repository = ({ repository }) => { 9 | 10 | return ( 11 | 12 | 13 | 14 | 15 | 16 | ); 17 | }; 18 | 19 | export default Repository; -------------------------------------------------------------------------------- /client/src/pages/protected/authentication/ChangePassword/ChangePassword.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ -------------------------------------------------------------------------------- /client/src/pages/protected/repository/SetupDeployment/SetupDeployment.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/ToastContainer/ToastContainer.css: -------------------------------------------------------------------------------- 1 | .Toast-Container{ 2 | position: fixed; 3 | top: 2rem; 4 | right: 2rem; 5 | z-index: 500; 6 | background-color: rgb(255 255 255 / 60%); 7 | border: 1px solid #f1f1f1; 8 | backdrop-filter: blur(2px); 9 | width: 350px; 10 | color: #1f1f1f; 11 | border-radius: .5rem; 12 | padding: .5rem 1rem; 13 | } 14 | 15 | @media screen and (max-width: 768px){ 16 | .Toast-Container{ 17 | top: unset; 18 | bottom: 2rem; 19 | width: 90%; 20 | right: 1rem; 21 | left: 1rem; 22 | } 23 | } -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerImage/DockerImageHeader/DockerImageHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { humanFileSize } from '@utilities/common/fileUtils'; 3 | import { DashboardCardHeader } from '@components/atoms/DashboardCard'; 4 | import './DockerImageHeader.css'; 5 | 6 | const DockerImageHeader = ({ image }) => { 7 | const options = [ 8 | 'Image: ' + image.name + ':' + image.tag, 9 | humanFileSize(image.size), 10 | 'Containers: ' + image.containers.length 11 | ] 12 | 13 | return 14 | }; 15 | 16 | export default DockerImageHeader; -------------------------------------------------------------------------------- /setup-utility/client/src/hooks/useServerIP.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from 'react-query'; 2 | import axios from 'axios'; 3 | 4 | interface ServerIPResponse { 5 | status: string; 6 | data: { 7 | ip: string; 8 | }; 9 | } 10 | 11 | const useServerIP = () => { 12 | const { data, isLoading, error } = useQuery('serverIP', async () => { 13 | const response = await axios.get(`${import.meta.env.VITE_SERVER}/host-ip`); 14 | return response.data; 15 | }); 16 | 17 | return { serverIP: data?.data.ip, isLoading, error }; 18 | }; 19 | 20 | export default useServerIP; 21 | -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerImage/DockerImage.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { DockerImageHeader, DockerImageBody, DockerImageFooter } from '@components/molecules/Docker/DockerImage'; 3 | import { DashboardCard } from '@components/atoms/DashboardCard'; 4 | import './DockerImage.css'; 5 | 6 | const DockerImage = ({ image }) => { 7 | 8 | return ( 9 | 10 | 11 | 12 | 13 | 14 | ); 15 | }; 16 | 17 | export default DockerImage; -------------------------------------------------------------------------------- /client/src/components/molecules/PortBinding/PortBindingHeader/PortBindingHeader.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { DashboardCardHeader } from '@components/atoms/DashboardCard'; 3 | import './PortBindingHeader.css'; 4 | 5 | const PortBindingHeader = ({ portBinding }) => { 6 | const options = [ 7 | `Protocol: ${portBinding.protocol.toUpperCase()}`, 8 | `Container: ${portBinding.container.name} (${portBinding.container.ipAddress})`, 9 | `Network: ${portBinding.container.network}` 10 | ]; 11 | 12 | return 13 | }; 14 | 15 | export default PortBindingHeader; -------------------------------------------------------------------------------- /setup-utility/client/src/services/env/api.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | export type EnvVariables = Record; 4 | 5 | export const fetchEnvironVariables = async (): Promise => { 6 | const { data } = await axios.get(`${import.meta.env.VITE_SERVER}/env`); 7 | return data; 8 | }; 9 | 10 | export const updateEnvVariables = async (variables: EnvVariables): Promise => { 11 | const { data } = await axios.post(`${import.meta.env.VITE_SERVER}/env`, variables, { 12 | headers: { 'Content-Type': 'application/json' } 13 | }); 14 | return data; 15 | }; 16 | -------------------------------------------------------------------------------- /client/src/components/atoms/Input/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Input from './Input'; 16 | 17 | export default Input; -------------------------------------------------------------------------------- /client/src/components/atoms/Waves/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Waves from './Waves'; 16 | 17 | export default Waves; -------------------------------------------------------------------------------- /client/src/components/organisms/Menu/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Menu from './Menu'; 16 | 17 | export default Menu; -------------------------------------------------------------------------------- /client/src/pages/everybody/legal/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | export { default as PrivacyPolicy } from './PrivacyPolicy'; -------------------------------------------------------------------------------- /client/src/components/atoms/Banner/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Banner from './Banner'; 16 | 17 | export default Banner; -------------------------------------------------------------------------------- /client/src/components/atoms/Button/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Button from './Button'; 16 | 17 | export default Button; -------------------------------------------------------------------------------- /client/src/pages/everybody/general/Home/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Home from './Home'; 16 | 17 | export default Home; -------------------------------------------------------------------------------- /client/src/services/deployment/slice.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | import * as reduxUtils from '@utilities/common/reduxUtils'; 3 | 4 | const initialState = { 5 | error: null, 6 | isLoading: true, 7 | isOperationLoading: false, 8 | isEnvironmentLoading: true, 9 | deployments: [], 10 | environment: {} 11 | }; 12 | 13 | const deploymentSlice = createSlice({ 14 | name: 'deployment', 15 | initialState, 16 | reducers: { 17 | setState: reduxUtils.setState, 18 | } 19 | }); 20 | 21 | export const { 22 | setState, 23 | } = deploymentSlice.actions; 24 | 25 | export default deploymentSlice.reducer; 26 | -------------------------------------------------------------------------------- /setup-utility/client/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 | "target": "ES2022", 5 | "lib": ["ES2023"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | "moduleResolution": "bundler", 9 | "allowImportingTsExtensions": true, 10 | "isolatedModules": true, 11 | "moduleDetection": "force", 12 | "noEmit": true, 13 | "strict": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "noFallthroughCasesInSwitch": true, 17 | "noUncheckedSideEffectImports": true 18 | }, 19 | "include": ["vite.config.ts"] 20 | } 21 | -------------------------------------------------------------------------------- /client/src/components/organisms/Header/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Header from './Header'; 16 | 17 | export default Header; -------------------------------------------------------------------------------- /client/src/components/organisms/Layout/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Layout from './Layout'; 16 | 17 | export default Layout; -------------------------------------------------------------------------------- /client/src/pages/protected/repository/Shell/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Shell from './Shell'; 16 | 17 | export default Shell; -------------------------------------------------------------------------------- /client/src/components/atoms/IconLink/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import IconLink from './IconLink'; 16 | 17 | export default IconLink; -------------------------------------------------------------------------------- /client/src/components/molecules/MenuItem/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import MenuItem from './MenuItem'; 16 | 17 | export default MenuItem; -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerNetwork/DockerNetwork.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { DockerNetworkHeader, DockerNetworkBody, DockerNetworkFooter } from '@components/molecules/Docker/DockerNetwork'; 3 | import { DashboardCard } from '@components/atoms/DashboardCard'; 4 | import './DockerNetwork.css'; 5 | 6 | const DockerNetwork = ({ network }) => { 7 | 8 | return ( 9 | 10 | 11 | 12 | 13 | 14 | ); 15 | }; 16 | 17 | export default DockerNetwork; -------------------------------------------------------------------------------- /client/src/hooks/common/useDocumentTitle.js: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react'; 2 | 3 | const useDocumentTitle = (title, retainOnUnmount = false) => { 4 | const defaultTitle = useRef(document.title); 5 | const suffix = 'Quantum Cloud'; 6 | 7 | useEffect(() => { 8 | const newTitle = `${title} - ${suffix}`; 9 | if(document.title !== newTitle) { 10 | document.title = newTitle; 11 | } 12 | return () => { 13 | if(!retainOnUnmount){ 14 | document.title = defaultTitle.current; 15 | } 16 | } 17 | }, [title, retainOnUnmount]); 18 | }; 19 | 20 | export default useDocumentTitle; -------------------------------------------------------------------------------- /client/src/pages/guest/authentication/SignIn/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import SignIn from './SignIn'; 16 | 17 | export default SignIn; -------------------------------------------------------------------------------- /client/src/pages/guest/authentication/SignUp/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import SignUp from './SignUp'; 16 | 17 | export default SignUp; -------------------------------------------------------------------------------- /client/src/components/atoms/ClickSpark/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ClickSpark from './ClickSpark'; 16 | 17 | export default ClickSpark; -------------------------------------------------------------------------------- /client/src/components/atoms/Loader/Loader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Loader.css'; 3 | 4 | const Loader = ({ scale }) => { 5 | const loaderItems = Array.from({ length: 12 }, (_, index) => index + 1); 6 | 7 | return ( 8 |
9 |
10 | {loaderItems.map((item) => ( 11 |
14 | ))} 15 |
16 |
17 | ); 18 | }; 19 | 20 | export default Loader; -------------------------------------------------------------------------------- /client/src/components/organisms/PortBinding/PortBinding.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { PortBindingBody, PortBindingHeader, PortBindingFooter } from '@components/molecules/PortBinding'; 3 | import { DashboardCard } from '@components/atoms/DashboardCard'; 4 | import './PortBinding.css'; 5 | 6 | const PortBinding = ({ portBinding }) => { 7 | 8 | return ( 9 | 10 | 11 | 12 | 13 | 14 | ); 15 | }; 16 | 17 | export default PortBinding; -------------------------------------------------------------------------------- /client/src/components/atoms/DashboardCard/DashboardCardHeader/DashboardCardHeader.css: -------------------------------------------------------------------------------- 1 | .Dashboard-Card-Header-Container{ 2 | display: flex; 3 | overflow-x: scroll; 4 | border-bottom: 1px solid #dfdfdf; 5 | } 6 | 7 | .Dashboard-Card-Header-Container::-webkit-scrollbar-thumb{ 8 | background-color: transparent; 9 | } 10 | 11 | .Dashboard-Card-Header-Container::-webkit-scrollbar-thumb:hover{ 12 | background-color: transparent; 13 | } 14 | 15 | .Dashboard-Card-Header-Item:not(:first-child){ 16 | border-left: 1px solid #dfdfdf; 17 | } 18 | 19 | .Dashboard-Card-Header-Item{ 20 | font-size: .9rem; 21 | padding: .2rem 1rem; 22 | min-width: fit-content; 23 | } 24 | -------------------------------------------------------------------------------- /client/src/components/atoms/HeaderBrand/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import HeaderBrand from './HeaderBrand'; 16 | 17 | export default HeaderBrand; -------------------------------------------------------------------------------- /client/src/components/organisms/CloudShell/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import CloudShell from './CloudShell'; 16 | 17 | export default CloudShell; -------------------------------------------------------------------------------- /client/src/pages/protected/authentication/Account/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Account from './Account'; 16 | 17 | export default Account; -------------------------------------------------------------------------------- /client/src/pages/protected/general/Dashboard/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Dashboard from './Dashboard'; 16 | 17 | export default Dashboard; -------------------------------------------------------------------------------- /client/src/components/molecules/Breadcrumbs/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Breadcrumbs from './Breadcrumbs'; 16 | 17 | export default Breadcrumbs; -------------------------------------------------------------------------------- /client/src/components/molecules/RelatedItem/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import RelatedItem from './RelatedItem'; 16 | 17 | export default RelatedItem; -------------------------------------------------------------------------------- /client/src/components/organisms/ContextMenu/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ContextMenu from './ContextMenu'; 16 | 17 | export default ContextMenu; -------------------------------------------------------------------------------- /client/src/components/organisms/MinimalForm/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import MinimalForm from './MinimalForm'; 16 | 17 | export default MinimalForm; -------------------------------------------------------------------------------- /client/src/components/atoms/HamburguerMenu/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import HamburguerMenu from './HamburguerMenu'; 16 | 17 | export default HamburguerMenu; -------------------------------------------------------------------------------- /client/src/components/atoms/HeaderNavItem/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import HeaderNavItem from './HeaderNavItem'; 16 | 17 | export default HeaderNavItem; -------------------------------------------------------------------------------- /client/src/components/molecules/FileExplorer/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import FileExplorer from './FileExplorer'; 16 | 17 | export default FileExplorer; -------------------------------------------------------------------------------- /client/src/components/molecules/Header/HeaderLinks/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import HeaderLinks from './HeaderLinks'; 16 | 17 | export default HeaderLinks; -------------------------------------------------------------------------------- /client/src/components/molecules/PolicyArticle/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import PolicyArticle from './PolicyArticle'; 16 | 17 | export default PolicyArticle; -------------------------------------------------------------------------------- /client/src/components/organisms/ConfirmModal/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ConfirmModal from './ConfirmModal'; 16 | 17 | export default ConfirmModal; -------------------------------------------------------------------------------- /client/src/components/organisms/DataRenderer/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import DataRenderer from './DataRenderer'; 16 | 17 | export default DataRenderer; -------------------------------------------------------------------------------- /client/src/components/organisms/RelatedItems/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import RelatedItems from './RelatedItems'; 16 | 17 | export default RelatedItems; -------------------------------------------------------------------------------- /client/src/pages/protected/github/Authenticate/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import Authenticate from './Authenticate'; 16 | 17 | export default Authenticate; -------------------------------------------------------------------------------- /setup-utility/client/src/services/env/slice.ts: -------------------------------------------------------------------------------- 1 | import { createSlice, PayloadAction } from '@reduxjs/toolkit'; 2 | import { EnvVariables } from '@services/env/api'; 3 | 4 | interface EnvState{ 5 | environVariables: EnvVariables; 6 | } 7 | 8 | const initialState: EnvState = { 9 | environVariables: {} 10 | }; 11 | 12 | const envSlice = createSlice({ 13 | name: 'env', 14 | initialState, 15 | reducers: { 16 | setEnvironVariables(state, action: PayloadAction) { 17 | state.environVariables = action.payload; 18 | } 19 | } 20 | }); 21 | 22 | export const { setEnvironVariables } = envSlice.actions; 23 | 24 | export default envSlice.reducer; 25 | -------------------------------------------------------------------------------- /client/src/components/atoms/DashedContainer/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import DashedContainer from './DashedContainer'; 16 | 17 | export default DashedContainer; -------------------------------------------------------------------------------- /client/src/components/molecules/WelcomeSection/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import WelcomeSection from './WelcomeSection'; 16 | 17 | export default WelcomeSection; -------------------------------------------------------------------------------- /client/src/components/organisms/DeploymentItem/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import DeploymentItem from './DeploymentItem'; 16 | 17 | export default DeploymentItem; -------------------------------------------------------------------------------- /client/src/components/organisms/ProtectedRoute/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ProtectedRoute from './ProtectedRoute'; 16 | 17 | export default ProtectedRoute; -------------------------------------------------------------------------------- /client/src/pages/everybody/general/ServiceStatus/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ServiceStatus from './ServiceStatus'; 16 | 17 | export default ServiceStatus; -------------------------------------------------------------------------------- /client/src/pages/everybody/legal/PrivacyPolicy/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import PrivacyPolicy from './PrivacyPolicy'; 16 | 17 | export default PrivacyPolicy; -------------------------------------------------------------------------------- /client/src/pages/guest/authentication/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | export { default as SignIn } from './SignIn'; 16 | export { default as SignUp } from './SignUp'; -------------------------------------------------------------------------------- /client/src/pages/guest/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import * as authentication from './authentication'; 16 | 17 | export default{ 18 | authentication 19 | }; -------------------------------------------------------------------------------- /server/config/ws.ts: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import { io } from '@config/express'; 16 | import wsController from '@controllers/wsController'; 17 | 18 | wsController(io); -------------------------------------------------------------------------------- /client/src/pages/everybody/general/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | export { default as Home } from './Home'; 16 | export { default as ServiceStatus } from './ServiceStatus'; -------------------------------------------------------------------------------- /client/src/components/atoms/ContextMenuOption/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ContextMenuOption from './ContextMenuOption'; 16 | 17 | export default ContextMenuOption; -------------------------------------------------------------------------------- /client/src/components/atoms/SquaredBackground/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import SquaredBackground from './SquaredBackground'; 16 | 17 | export default SquaredBackground; -------------------------------------------------------------------------------- /client/src/pages/protected/github/NeedAuthenticate/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import NeedAuthenticate from './NeedAuthenticate'; 16 | 17 | export default NeedAuthenticate; -------------------------------------------------------------------------------- /client/src/pages/protected/repository/SetupDeployment/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import SetupDeployment from './SetupDeloyment'; 16 | 17 | export default SetupDeployment; -------------------------------------------------------------------------------- /client/src/components/atoms/CircleContainedText/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import CircleContainedText from './CircleContainedText'; 16 | 17 | export default CircleContainedText; -------------------------------------------------------------------------------- /client/src/components/atoms/EnvironmentVariable/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import EnvironmentVariable from './EnvironmentVariable'; 16 | 17 | export default EnvironmentVariable; -------------------------------------------------------------------------------- /client/src/components/atoms/FileExplorerContent/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import FileExplorerContent from './FileExplorerContent'; 16 | 17 | export default FileExplorerContent; -------------------------------------------------------------------------------- /client/src/components/atoms/RepositoryBasicItem/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import RepositoryBasicItem from './RepositoryBasicItem'; 16 | 17 | export default RepositoryBasicItem; -------------------------------------------------------------------------------- /client/src/components/molecules/FileExplorerHeader/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import FileExplorerHeader from './FileExplorerHeader'; 16 | 17 | export default FileExplorerHeader; -------------------------------------------------------------------------------- /client/src/components/molecules/Header/HeaderNavigation/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import HeaderNavigation from './HeaderNavigation'; 16 | 17 | export default HeaderNavigation; -------------------------------------------------------------------------------- /client/src/pages/protected/authentication/ChangePassword/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ChangePassword from './ChangePassword'; 16 | 17 | export default ChangePassword; 18 | -------------------------------------------------------------------------------- /client/src/pages/protected/repository/CreateRepository/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import CreateRepository from './CreateRepository'; 16 | 17 | export default CreateRepository; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Input/Input.tsx: -------------------------------------------------------------------------------- 1 | import './Input.css'; 2 | 3 | interface InputProps{ 4 | value: string; 5 | type: string; 6 | onChange: (e: React.ChangeEvent) => void; 7 | placeholder?: string; 8 | helperText?: string; 9 | } 10 | 11 | const Input: React.FC = (props) => { 12 | return ( 13 |
14 |
15 | 16 |
17 | 18 | {props.helperText && ( 19 |

{props.helperText}

20 | )} 21 |
22 | ); 23 | }; 24 | 25 | export default Input; -------------------------------------------------------------------------------- /client/src/components/molecules/ConfirmModal/ConfirmModalBody/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ConfirmModalBody from './ConfirmModalBody'; 16 | 17 | export default ConfirmModalBody; -------------------------------------------------------------------------------- /client/src/components/organisms/WhenCreatingAccount/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import WhenCreatingAccount from './WhenCreatingAccount'; 16 | 17 | export default WhenCreatingAccount; -------------------------------------------------------------------------------- /client/src/pages/protected/authentication/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | export { default as Account } from './Account'; 16 | export { default as ChangePassword } from './ChangePassword'; -------------------------------------------------------------------------------- /setup-utility/server/api/env.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter, Request, HTTPException 2 | from services.env import get_env_values, update_env_variables 3 | from services.deploy import execute_deploy_script 4 | import asyncio 5 | 6 | router = APIRouter() 7 | 8 | @router.get('/env') 9 | async def get_env(): 10 | return get_env_values() 11 | 12 | @router.post('/env') 13 | async def set_env(request: Request): 14 | try: 15 | new_vars = await request.json() 16 | update_env_variables(new_vars) 17 | 18 | asyncio.create_task(execute_deploy_script()) 19 | 20 | return {'status': 'success'} 21 | except Exception as e: 22 | raise HTTPException(status_code=500, detail=str(e)) 23 | -------------------------------------------------------------------------------- /client/src/components/molecules/ConfirmModal/ConfirmModalHeader/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import ConfirmModalHeader from './ConfirmModalHeader'; 16 | 17 | export default ConfirmModalHeader; -------------------------------------------------------------------------------- /client/src/pages/protected/repository/EnvironmentVariables/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import EnvironmentVariables from './EnvironmentVariables'; 16 | 17 | export default EnvironmentVariables; -------------------------------------------------------------------------------- /client/src/components/atoms/EnvironmentMobileActions/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import EnvironmentMobileActions from './EnvironmentMobileActions'; 16 | 17 | export default EnvironmentMobileActions; -------------------------------------------------------------------------------- /client/src/pages/protected/github/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | export { default as Authenticate } from './Authenticate'; 16 | export { default as NeedAuthenticate } from './NeedAuthenticate'; 17 | -------------------------------------------------------------------------------- /client/src/pages/protected/repository/RepositoryDeployments/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import RepositoryDeployments from './RepositoryDeployments'; 16 | 17 | export default RepositoryDeployments; -------------------------------------------------------------------------------- /client/src/pages/everybody/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import * as general from './general'; 16 | import * as legal from './legal'; 17 | 18 | export default{ 19 | legal, 20 | general 21 | }; -------------------------------------------------------------------------------- /client/src/pages/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | export { default as everybody } from './everybody'; 16 | export { default as guest } from './guest'; 17 | export { default as protected } from './protected'; -------------------------------------------------------------------------------- /client/src/components/atoms/DashedContainer/DashedContainer.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | .Dashed-Container{ 16 | border: 1px dashed #000000; 17 | padding: .5rem 1rem; 18 | border-radius: 1rem; 19 | } -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerContainer/DockerContainer.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { 3 | DockerContainerHeader, 4 | DockerContainerBody, 5 | DockerContainerFooter, 6 | } from '@components/molecules/Docker/DockerContainer'; 7 | import { DashboardCard } from '@components/atoms/DashboardCard'; 8 | import './DockerContainer.css'; 9 | 10 | const DockerContainer = ({ container }) => { 11 | 12 | return ( 13 | 14 | 15 | 16 | 17 | 18 | ); 19 | }; 20 | 21 | export default DockerContainer; -------------------------------------------------------------------------------- /client/src/components/organisms/Docker/DockerNetwork/DockerNetwork.css: -------------------------------------------------------------------------------- 1 | .Docker-Network-Container{ 2 | display: flex; 3 | flex-direction: column; 4 | gap: .5rem; 5 | padding-bottom: 1rem; 6 | border-radius: .5rem; 7 | border: 1px solid #dfdfdf; 8 | } 9 | 10 | .Docker-Network-Header-Container{ 11 | display: flex; 12 | border-bottom: 1px solid #dfdfdf; 13 | } 14 | 15 | .Docker-Network-Header-Item:not(:first-child){ 16 | border-left: 1px solid #dfdfdf; 17 | } 18 | 19 | .Docker-Network-Header-Item{ 20 | font-size: .9rem; 21 | padding: .2rem 1rem; 22 | } 23 | 24 | .Docker-Network-Body-Container{ 25 | padding: 0 1rem 0 1rem; 26 | display: flex; 27 | gap: .5rem; 28 | flex-direction: column; 29 | } -------------------------------------------------------------------------------- /setup-utility/client/src/components/molecules/ToastContainer/ToastContainer.tsx: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux'; 2 | import { RootState } from '@services/store'; 3 | import Toast from '@components/atoms/Toast'; 4 | import './ToastContainer.css'; 5 | 6 | const ToastContainer: React.FC = () => { 7 | const toasts = useSelector((state: RootState) => state.toast.toasts); 8 | 9 | // TODO: do it better. 10 | const visibleToasts = toasts.slice(-1); 11 | 12 | return visibleToasts.length >= 1 && ( 13 |
14 | {visibleToasts.map((toast) => ( 15 | 16 | ))} 17 |
18 | ); 19 | }; 20 | 21 | export default ToastContainer; -------------------------------------------------------------------------------- /client/src/components/molecules/Repository/RepositoryHeader.jsx: -------------------------------------------------------------------------------- 1 | import { DashboardCardHeader } from '@components/atoms/DashboardCard'; 2 | 3 | const RepositoryHeader = ({ repository }) => { 4 | const options = [ 5 | repository.container.ipAddress ? `IPv4: ${repository.container.ipAddress}` : 'Unallocated Subnet IP', 6 | `Status: ${repository.activeDeployment.status}`, 7 | `${repository.container.portBindings.length} exposed ports`, 8 | `${repository.deployments.length} deployments`, 9 | `Branch: ${repository.branch}`, 10 | `Webhook: ${repository.webhookId}`, 11 | `ID: ${repository._id}`, 12 | ]; 13 | 14 | return 15 | }; 16 | 17 | export default RepositoryHeader; -------------------------------------------------------------------------------- /client/src/services/authentication/slice.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | import * as reduxUtils from '@utilities/common/reduxUtils'; 3 | 4 | const initialState = { 5 | user: {}, 6 | authStatus: { 7 | isAuthenticated: false, 8 | isCachedAuthLoading: true, 9 | isEliminatingAccount: false 10 | }, 11 | loadingStatus: { 12 | isLoading: false, 13 | isOperationLoading: false 14 | }, 15 | error: null 16 | }; 17 | 18 | const authSlice = createSlice({ 19 | name: 'auth', 20 | initialState, 21 | reducers: { 22 | setState: reduxUtils.setState 23 | } 24 | }); 25 | 26 | export const { 27 | setState 28 | } = authSlice.actions; 29 | 30 | export default authSlice.reducer; -------------------------------------------------------------------------------- /client/src/components/atoms/Waves/Waves.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | .Waves-Container{ 16 | background-color: #000000; 17 | height: 245px !important; 18 | } 19 | 20 | .Waves-Container canvas{ 21 | height: 245px !important; 22 | } -------------------------------------------------------------------------------- /client/src/components/organisms/AuthenticatedUserRelatedSections/AuthenticatedUserRelatedSections.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | #Authenticated-User-Related-Sections{ 16 | display: flex; 17 | flex-direction: column; 18 | gap: 1rem; 19 | } -------------------------------------------------------------------------------- /client/src/components/organisms/AuthenticatedUserRelatedSections/index.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import AuthenticaticatedUserRelatedSections from './AuthenticatedUserRelatedSections'; 16 | 17 | export default AuthenticaticatedUserRelatedSections; -------------------------------------------------------------------------------- /client/src/components/molecules/Docker/DockerContainer/DockerContainerHeader/DockerContainerHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { humanFileSize } from '@utilities/common/fileUtils'; 3 | import { DashboardCardHeader } from '@components/atoms/DashboardCard'; 4 | import './DockerContainerHeader.css'; 5 | 6 | const DockerContainerHeader = ({ container }) => { 7 | const options = [ 8 | container.ipAddress ? `IPv4: ${container.ipAddress}` : 'Unallocated Subnet IP', 9 | `${container.image.name}:${container.image.tag} ${humanFileSize(container.image.size)}`, 10 | `Status: ${container.status}`, 11 | `ID: ${container._id}`, 12 | ]; 13 | 14 | return 15 | }; 16 | 17 | export default DockerContainerHeader; -------------------------------------------------------------------------------- /setup-utility/client/src/components/atoms/Loader/Loader.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Loader.css'; 3 | 4 | interface LoaderProps { 5 | scale: number; 6 | } 7 | 8 | const Loader: React.FC = ({ scale }) => { 9 | const loaderItems = Array.from({ length: 12 }, (_, index) => index + 1); 10 | 11 | return ( 12 |
13 |
14 | {loaderItems.map((item) => ( 15 |
18 | ))} 19 |
20 |
21 | ); 22 | }; 23 | 24 | export default Loader; -------------------------------------------------------------------------------- /client/src/components/molecules/Breadcrumbs/Breadcrumbs.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | .Breadcrumbs-Container .MuiLink-root{ 16 | color: #515151; 17 | font-size: .8rem; 18 | font-family: 'Times New Roman', Times, serif; 19 | cursor: pointer; 20 | } -------------------------------------------------------------------------------- /client/src/components/molecules/PolicyArticle/PolicyArticle.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | .Privacy-Policy-Article{ 16 | font-size: .98rem; 17 | line-height: 1.5rem; 18 | } 19 | 20 | .Privacy-Policy-Article-Title{ 21 | margin-right: .5rem; 22 | } 23 | -------------------------------------------------------------------------------- /server/typings/models/deployment.d.ts: -------------------------------------------------------------------------------- 1 | import mongoose, { Document } from 'mongoose'; 2 | 3 | interface ICommit{ 4 | message?: string; 5 | author?: { 6 | name?: string; 7 | email?: string; 8 | }; 9 | date?: Date; 10 | } 11 | 12 | export interface IEnvironment{ 13 | variables: Map; 14 | } 15 | 16 | export interface IDeployment extends Document{ 17 | user: mongoose.Schema.Types.ObjectId; 18 | githubDeploymentId: string; 19 | repository: mongoose.Schema.Types.ObjectId; 20 | environment: IEnvironment; 21 | commit: ICommit; 22 | _id: string | mongoose.Types.ObjectId; 23 | status: 'pending' | 'success' | 'stopped' | 'failure' | 'queued'; 24 | url?: string; 25 | createdAt?: Date; 26 | getFormattedEnvironment: () => string; 27 | } 28 | -------------------------------------------------------------------------------- /client/src/hooks/ws/useWebSocket.js: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | import { io } from 'socket.io-client'; 3 | 4 | const useWebSocket = ({ query }) => { 5 | const [socket, setSocket] = useState(null); 6 | const [isConnected, setIsConnected] = useState(false); 7 | 8 | const onConnected = () => { 9 | setIsConnected(true); 10 | }; 11 | 12 | useEffect(() => { 13 | const newSocket = io(import.meta.env.VITE_SERVER, { 14 | transports: ['websocket'], 15 | query 16 | }); 17 | newSocket.on('connected', onConnected); 18 | setSocket(newSocket); 19 | return () => { 20 | newSocket.disconnect(); 21 | } 22 | }, []); 23 | 24 | return [socket, isConnected]; 25 | }; 26 | 27 | export default useWebSocket; -------------------------------------------------------------------------------- /client/src/pages/protected/github/Authenticate/Authenticate.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | #Github-Authenticate-Main{ 16 | display: flex; 17 | flex-direction: column; 18 | align-items: center; 19 | gap: 2rem; 20 | justify-content: center; 21 | height: 100%; 22 | } -------------------------------------------------------------------------------- /client/src/components/organisms/ProtectedRoute/ProtectedRoute.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | .Authentication-Loading-Main{ 16 | display: flex; 17 | flex-direction: column; 18 | text-align: center; 19 | width: 100%; 20 | justify-content: center; 21 | align-items: center; 22 | } -------------------------------------------------------------------------------- /server/routes/webhook.ts: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import express from 'express'; 16 | import * as webhookController from '@controllers/webhook'; 17 | 18 | const router = express.Router(); 19 | 20 | router.post('/:repositoryId/', webhookController.webhook); 21 | 22 | export default router; 23 | -------------------------------------------------------------------------------- /scripts/codelines.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 4 | # * 5 | # * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 6 | # * Licensed under the MIT license. See LICENSE file in the project root 7 | # * for full license information. 8 | # * 9 | # * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 10 | # * 11 | # * For related information - https://github.com/rodyherrera/Quantum/ 12 | # * 13 | # * All your applications, just in one place. 14 | # * 15 | # * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 16 | echo "@codelines.sh: counting lines of code..." 17 | 18 | cloc --exclude-list=scripts/.clocignore . 19 | 20 | echo "@codelines.sh: happy hacking." -------------------------------------------------------------------------------- /server/routes/server.ts: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import express from 'express'; 16 | import * as serverController from '@controllers/server'; 17 | 18 | const router = express.Router(); 19 | 20 | router.get('/health', serverController.health); 21 | router.get('/ip/', serverController.getServerIP) 22 | 23 | export default router; 24 | -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "module": "commonjs", 5 | "strict": true, 6 | "esModuleInterop": true, 7 | "skipLibCheck": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "resolveJsonModule": true, 10 | "outDir": "./dist", 11 | "paths": { 12 | "@typings/*": ["./typings/*"], 13 | "@tests/*": ["./tests/*"], 14 | "@models/*": ["./models/*"], 15 | "@utilities/*": ["./utilities/*"], 16 | "@routes/*": ["./routes/*"], 17 | "@config/*": ["./config/*"], 18 | "@controllers/*": ["./controllers/*"], 19 | "@cli/*": ["./cli/*"], 20 | "@middlewares/*": ["./middlewares/*"], 21 | "@services/*": ["./services/*"] 22 | } 23 | }, 24 | "include": ["."], 25 | "exclude": ["node_modules"] 26 | } 27 | -------------------------------------------------------------------------------- /server/utilities/encryption.ts: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | 3 | // TODO: use process.env.ENCRYPTION_KEY! 4 | // and process.env.ENCRYPTION_IV! 5 | const ENCRYPTION_KEY = Buffer.from(process.env.ENCRYPTION_KEY || '', 'hex'); 6 | const IV = Buffer.from(process.env.ENCRYPTION_IV || '', 'hex'); 7 | 8 | export const encrypt = (text: string): String => { 9 | const cipher = crypto.createCipheriv('aes-256-cbc', ENCRYPTION_KEY, IV); 10 | let encrypted = cipher.update(text, 'utf8', 'hex'); 11 | encrypted += cipher.final('hex'); 12 | return encrypted; 13 | }; 14 | 15 | export const decrypt = (encryptedText: string): String => { 16 | const decipher = crypto.createDecipheriv('aes-256-cbc', ENCRYPTION_KEY, IV); 17 | let decrypted = decipher.update(encryptedText, 'hex', 'utf8'); 18 | decrypted += decipher.final('utf8'); 19 | return decrypted; 20 | }; -------------------------------------------------------------------------------- /setup-utility/client/eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import globals from 'globals' 3 | import reactHooks from 'eslint-plugin-react-hooks' 4 | import reactRefresh from 'eslint-plugin-react-refresh' 5 | import tseslint from 'typescript-eslint' 6 | 7 | export default tseslint.config( 8 | { ignores: ['dist'] }, 9 | { 10 | extends: [js.configs.recommended, ...tseslint.configs.recommended], 11 | files: ['**/*.{ts,tsx}'], 12 | languageOptions: { 13 | ecmaVersion: 2020, 14 | globals: globals.browser, 15 | }, 16 | plugins: { 17 | 'react-hooks': reactHooks, 18 | 'react-refresh': reactRefresh, 19 | }, 20 | rules: { 21 | ...reactHooks.configs.recommended.rules, 22 | 'react-refresh/only-export-components': [ 23 | 'warn', 24 | { allowConstantExport: true }, 25 | ], 26 | }, 27 | }, 28 | ) 29 | -------------------------------------------------------------------------------- /setup-utility/client/src/hooks/useEnvironVariables.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from 'react-query'; 2 | import { useDispatch, useSelector } from 'react-redux'; 3 | import { setEnvironVariables } from '@services/env/slice'; 4 | import { fetchEnvironVariables, EnvVariables } from '@services/env/api'; 5 | import { RootState } from '@services/store'; 6 | 7 | const useEnvironVariables = () => { 8 | const dispatch = useDispatch(); 9 | const environVariables = useSelector((state: RootState) => state.env.environVariables); 10 | 11 | const { isLoading, error } = useQuery('env', fetchEnvironVariables, 12 | { 13 | onSuccess: (data) => { 14 | dispatch(setEnvironVariables(data)); 15 | } 16 | } 17 | ); 18 | 19 | return { environVariables, isLoading, error }; 20 | }; 21 | 22 | export default useEnvironVariables; 23 | -------------------------------------------------------------------------------- /client/src/components/atoms/ClickSpark/ClickSpark.jsx: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import React from 'react'; 16 | import './Spark'; 17 | 18 | const ClickSparkWrapper = () => { 19 | return ( 20 |
21 | 22 |
23 | ); 24 | }; 25 | 26 | export default ClickSparkWrapper; -------------------------------------------------------------------------------- /client/src/pages/guest/authentication/SignUp/SignUp.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | #Sign-Up-Right-Container-Component{ 16 | display: flex; 17 | flex-direction: column; 18 | gap: 1rem; 19 | } 20 | 21 | @media screen and (max-width: 768px){ 22 | #Sign-Up-Right-Container-Component{ 23 | flex-direction: column-reverse; 24 | } 25 | } -------------------------------------------------------------------------------- /client/src/components/atoms/IconLink/IconLink.css: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | .Icon-Link-Container{ 16 | display: flex; 17 | align-items: center; 18 | gap: .5rem; 19 | cursor: pointer; 20 | } 21 | 22 | .Icon-Link-Container:hover .Icon-Link-Title{ 23 | text-decoration: underline; 24 | } 25 | 26 | .Icon-Link-Title{ 27 | font-size: 1rem; 28 | } -------------------------------------------------------------------------------- /server/middlewares/common.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Request, Response } from 'express'; 2 | import { catchAsync } from '@utilities/helpers'; 3 | import { IUser } from '@typings/models/user'; 4 | import { Model } from 'mongoose'; 5 | import RuntimeError from '@utilities/runtimeError'; 6 | 7 | export const verifyOwnership = (model: Model) => { 8 | return catchAsync(async (req: Request, _: Response, next: NextFunction) => { 9 | const user = req.user as IUser; 10 | // If the user's role is administrator, we will not verify ownership. 11 | if(user.role === 'admin') return next(); 12 | const { id } = req.params; 13 | const document = await model.findOne({ _id: id, user: user._id }); 14 | if(!document){ 15 | throw new RuntimeError('Core::Middlewares::VerifyOwnership::RecordNotFound', 404); 16 | } 17 | next(); 18 | }); 19 | }; -------------------------------------------------------------------------------- /client/.env.example: -------------------------------------------------------------------------------- 1 | # * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 2 | # * 3 | # * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 4 | # * Licensed under the MIT license. See LICENSE file in the project root 5 | # * for full license information. 6 | # * 7 | # * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 8 | # * 9 | # * For related information - https://github.com/rodyherrera/Quantum/ 10 | # * 11 | # * All your applications, just in one place. 12 | # * 13 | # * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 14 | 15 | # VITE_SERVER: Address where the 16 | # Quantum backend is deployed. 17 | VITE_SERVER=http://0.0.0.0:80 18 | 19 | # VITE_API_SUFFIX: Suffix to make API 20 | # calls, you should not change /api/v1. 21 | VITE_API_SUFFIX=/api/v1 -------------------------------------------------------------------------------- /client/src/components/atoms/SquaredBackground/SquaredBackground.jsx: -------------------------------------------------------------------------------- 1 | /*** 2 | * Copyright (C) Rodolfo Herrera Hernandez. All rights reserved. 3 | * Licensed under the MIT license. See LICENSE file in the project root 4 | * for full license information. 5 | * 6 | * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 7 | * 8 | * For related information - https://github.com/rodyherrera/Quantum/ 9 | * 10 | * All your applications, just in one place. 11 | * 12 | * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 13 | ****/ 14 | 15 | import React from 'react'; 16 | import './SquaredBackground.css'; 17 | 18 | const SquaredBackground = ({ ...props }) => { 19 | 20 | return ( 21 |