diff --git a/changelog.md b/changelog.md index b56600a..99eb3c8 100644 --- a/changelog.md +++ b/changelog.md @@ -1,13 +1,15 @@ ## Version 0.5.0 - Add Terminal to containers - - Add Create Container + - Add "Create ServApp" - Add support for importing Docker Compose + - Improved icon fetching + - Change Home background and style (especially fixing the awckward light theme) - Fixed 2 bugs with the smart shield, that made it too strict - Fixed issues that prevented from login in with different hostnames - - Added more infoon the shield when blocking someone - - Fixed home background image + - Added more info on the shield when blocking someone - Fixed issue where the UI would have missing icon images - - Improved icon fetching for apps by following redirections + - Fixed Homepage showing stopped containers + - Fixed bug where you can't save changes on the URLs Screen ## Version 0.4.3 - Fix for exposing routes from the details page diff --git a/client/src/assets/images/wallpaper.jpg b/client/src/assets/images/wallpaper.jpg deleted file mode 100644 index 887fee1..0000000 Binary files a/client/src/assets/images/wallpaper.jpg and /dev/null differ diff --git a/client/src/assets/images/wallpaper2.jpg b/client/src/assets/images/wallpaper2.jpg new file mode 100644 index 0000000..00bd464 Binary files /dev/null and b/client/src/assets/images/wallpaper2.jpg differ diff --git a/client/src/assets/images/wallpaper2_light.jpg b/client/src/assets/images/wallpaper2_light.jpg new file mode 100644 index 0000000..6e7982d Binary files /dev/null and b/client/src/assets/images/wallpaper2_light.jpg differ diff --git a/client/src/pages/config/routeConfigPage.jsx b/client/src/pages/config/routeConfigPage.jsx index 63f3f8c..075731d 100644 --- a/client/src/pages/config/routeConfigPage.jsx +++ b/client/src/pages/config/routeConfigPage.jsx @@ -61,10 +61,6 @@ const RouteConfigPage = () => { routeConfig={currentRoute} /> }, - { - title: 'Permissions', - children:
WIP
- }, ]}/>} {!config &&
diff --git a/client/src/pages/config/users/proxyman.jsx b/client/src/pages/config/users/proxyman.jsx index 0f4ec6e..1a195f0 100644 --- a/client/src/pages/config/users/proxyman.jsx +++ b/client/src/pages/config/users/proxyman.jsx @@ -215,20 +215,6 @@ const ProxyManagement = () => { disableElevation fullWidth onClick={() => { - if(routes.some((route, key) => { - let errors = ValidateRoute(route, config); - if (errors && errors.length > 0) { - errors = errors.map((err) => { - return `${route.Name}: ${err}`; - }); - setSubmitErrors(errors); - return true; - } - })) { - return; - } else { - setSubmitErrors([]); - } API.config.set(cleanRoutes(updateRoutes(routes))).then(() => { setNeedSave(false); setOpenModal(true); diff --git a/client/src/pages/home/index.jsx b/client/src/pages/home/index.jsx index cc836e0..fcd5320 100644 --- a/client/src/pages/home/index.jsx +++ b/client/src/pages/home/index.jsx @@ -3,7 +3,8 @@ import Back from "../../components/back"; import { Alert, Box, CircularProgress, Grid, Stack, useTheme } from "@mui/material"; import { useEffect, useState } from "react"; import * as API from "../../api"; -import wallpaper from '../../assets/images/wallpaper.jpg'; +import wallpaper from '../../assets/images/wallpaper2.jpg'; +import wallpaperLight from '../../assets/images/wallpaper2_light.jpg'; import Grid2 from "@mui/material/Unstable_Grid2/Grid2"; import { getFaviconURL } from "../../utils/routes"; import { Link } from "react-router-dom"; @@ -13,28 +14,48 @@ import IsLoggedIn from "../../isLoggedIn"; const HomeBackground = () => { const theme = useTheme(); + const isDark = theme.palette.mode === 'dark'; return ( - - Cosmos + + Cosmos ); }; -const blockStyle = { - margin: 0, - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', - maxWidth: '78%', - verticalAlign: 'middle', -} - const HomePage = () => { const { routeName } = useParams(); const [serveApps, setServeApps] = useState([]); const [config, setConfig] = useState(null); const [coStatus, setCoStatus] = useState(null); const [containers, setContainers] = useState(null); + const theme = useTheme(); + const isDark = theme.palette.mode === 'dark'; + + const blockStyle = { + margin: 0, + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + maxWidth: '78%', + verticalAlign: 'middle', + } + + const appColor = isDark ? { + color: 'white', + background: 'rgba(0,0,0,0.35)', + } : { + color: 'black', + background: 'rgba(255,255,255,0.35)', + } + + const backColor = isDark ? '0,0,0' : '255,255,255'; + const textColor = isDark ? 'white' : 'dark'; + const refreshStatus = () => { API.getStatus().then((res) => { @@ -64,18 +85,19 @@ const HomePage = () => { @@ -144,8 +172,8 @@ const HomePage = () => { } } return !skip && - - + + @@ -162,7 +190,7 @@ const HomePage = () => { {config && config.HTTPConfig.ProxyConfig.Routes.length === 0 && ( - +

No Apps

diff --git a/client/src/pages/servapps/containers/newService.jsx b/client/src/pages/servapps/containers/newService.jsx index 3ce1e94..65c9b55 100644 --- a/client/src/pages/servapps/containers/newService.jsx +++ b/client/src/pages/servapps/containers/newService.jsx @@ -19,6 +19,7 @@ import VolumeContainerSetup from './volumes'; import DockerTerminal from './terminal'; import { Link } from 'react-router-dom'; import { smartDockerLogConcat, tryParseProgressLog } from '../../../utils/docker'; +import { LoadingButton } from '@mui/lab'; const preStyle = { backgroundColor: '#000', @@ -64,7 +65,9 @@ const NewDockerService = ({service, refresh}) => { }, []); const create = () => { - setLog([]) + setLog([ + 'Creating Service... ', + ]) API.docker.createService(service, (newlog) => { setLog((old) => smartDockerLogConcat(old, newlog)); preRef.current.scrollTop = preRef.current.scrollHeight; @@ -75,7 +78,7 @@ const NewDockerService = ({service, refresh}) => { }); } - const needsRestart = service && service.service && service.service.some((c) => { + const needsRestart = service && service.services && Object.values(service.services).some((c) => { return c.routes && c.routes.length > 0; }); @@ -83,13 +86,14 @@ const NewDockerService = ({service, refresh}) => { - {!isDone && } + >Create} {isDone && Service Created! {needsRestart && Cosmos needs to be restarted to apply changes to the URLs} diff --git a/client/src/pages/servapps/containers/newServiceForm.jsx b/client/src/pages/servapps/containers/newServiceForm.jsx index 8587ebd..1f15a04 100644 --- a/client/src/pages/servapps/containers/newServiceForm.jsx +++ b/client/src/pages/servapps/containers/newServiceForm.jsx @@ -1,7 +1,7 @@ import * as React from 'react'; import MainCard from '../../../components/MainCard'; import RestartModal from '../../config/users/restart'; -import { Alert, Button, Chip, Divider, Stack, useMediaQuery } from '@mui/material'; +import { Alert, Button, Checkbox, Chip, Divider, Stack, useMediaQuery } from '@mui/material'; import HostChip from '../../../components/hostChip'; import { RouteMode, RouteSecurity } from '../../../components/routeComponents'; import { getFaviconURL } from '../../../utils/routes'; @@ -56,7 +56,7 @@ const NewDockerServiceForm = () => { }); let service = { - Services: { + services: { container_name : { container_name: containerInfo.Name, image: containerInfo.Config.Image, @@ -72,7 +72,7 @@ const NewDockerServiceForm = () => { acc[cur] = {}; return acc; }, {}), - Routes: [containerInfo.Route] + routes: containerInfo.CreateRoute ? [containerInfo.Route] : [], } }, } @@ -164,40 +164,53 @@ const NewDockerServiceForm = () => { { title: 'URL', disabled: maxTab < 1, - children: { - const newValues = { - ...containerInfo, - Route: newRoute, - } - setContainerInfo(newValues); - }} - up={() => {}} - down={() => {}} - deleteRoute={() => {}} - noControls - lockTarget - />{nav()} + children: + + { + const newValues = { + ...containerInfo, + CreateRoute: e.target.checked, + } + setContainerInfo(newValues); + }} + />Create a URL to access this ServApp + + {containerInfo.CreateRoute && { + const newValues = { + ...containerInfo, + Route: newRoute, + } + setContainerInfo(newValues); + }} + up={() => {}} + down={() => {}} + deleteRoute={() => {}} + noControls + lockTarget + />}{nav()} }, { title: 'Network', diff --git a/client/src/pages/servapps/containers/overview.jsx b/client/src/pages/servapps/containers/overview.jsx index 34998fd..9822372 100644 --- a/client/src/pages/servapps/containers/overview.jsx +++ b/client/src/pages/servapps/containers/overview.jsx @@ -123,7 +123,7 @@ const ContainerOverview = ({ containerInfo, config, refresh }) => { disabled={isUpdating} onChange={(e) => { setIsUpdating(true); - API.docker.secure(Name, e.target.checked).then(() => { + API.docker.secure(Name.replace('/', ''), e.target.checked).then(() => { setTimeout(() => { refreshAll(); }, 3000); @@ -137,7 +137,7 @@ const ContainerOverview = ({ containerInfo, config, refresh }) => { disabled={isUpdating} onChange={(e) => { setIsUpdating(true); - API.docker.autoUpdate(Name, e.target.checked).then(() => { + API.docker.autoUpdate(Name.replace('/', ''), e.target.checked).then(() => { setTimeout(() => { refreshAll(); }, 3000); diff --git a/client/src/pages/servapps/servapps.jsx b/client/src/pages/servapps/servapps.jsx index e1623b7..79e33b4 100644 --- a/client/src/pages/servapps/servapps.jsx +++ b/client/src/pages/servapps/servapps.jsx @@ -226,7 +226,7 @@ const ServeApps = () => { })} - {isUpdating[app.Id] ?
+ {isUpdating[app.Names[0].replace('/', '')] ?
: @@ -239,14 +239,15 @@ const ServeApps = () => { checked={app.Labels['cosmos-force-network-secured'] === 'true'} disabled={app.State !== 'running'} onChange={(e) => { - setIsUpdatingId(app.Id, true); - API.docker.secure(app.Id, e.target.checked).then(() => { + const name = app.Names[0].replace('/', ''); + setIsUpdatingId(name, true); + API.docker.secure(name, e.target.checked).then(() => { setTimeout(() => { - setIsUpdatingId(app.Id, false); + setIsUpdatingId(name, false); refreshServeApps(); }, 3000); }).catch(() => { - setIsUpdatingId(app.Id, false); + setIsUpdatingId(name, false); refreshServeApps(); }) }} @@ -257,14 +258,15 @@ const ServeApps = () => { checked={app.Labels['cosmos-auto-update'] === 'true'} disabled={app.State !== 'running'} onChange={(e) => { - setIsUpdatingId(app.Id, true); - API.docker.autoUpdate(app.Id, e.target.checked).then(() => { + const name = app.Names[0].replace('/', ''); + setIsUpdatingId(name, true); + API.docker.autoUpdate(name, e.target.checked).then(() => { setTimeout(() => { - setIsUpdatingId(app.Id, false); + setIsUpdatingId(name, false); refreshServeApps(); }, 3000); }).catch(() => { - setIsUpdatingId(app.Id, false); + setIsUpdatingId(name, false); refreshServeApps(); }) }} diff --git a/package.json b/package.json index f1eef0a..9b30817 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cosmos-server", - "version": "0.5.0-unstable24", + "version": "0.5.0-unstable25", "description": "", "main": "test-server.js", "bugs": {