diff --git a/client/src/pages/config/users/usermanagement.jsx b/client/src/pages/config/users/usermanagement.jsx
index a275161..7a8bb08 100644
--- a/client/src/pages/config/users/usermanagement.jsx
+++ b/client/src/pages/config/users/usermanagement.jsx
@@ -139,6 +139,7 @@ const UserManagement = () => {
}).then(() => {
setOpenCreateForm(false);
refresh();
+ sendlink(document.getElementById('c-nickname').value, 'create');
});
}}>Create
diff --git a/client/src/pages/servapps/servapps.jsx b/client/src/pages/servapps/servapps.jsx
index be8b779..bd82d4e 100644
--- a/client/src/pages/servapps/servapps.jsx
+++ b/client/src/pages/servapps/servapps.jsx
@@ -59,12 +59,12 @@ const ServeApps = () => {
}
const getContainersRoutes = (containerName) => {
- return config && config.HTTPConfig && config.HTTPConfig.ProxyConfig.Routes.filter((route) => {
+ return (config && config.HTTPConfig && config.HTTPConfig.ProxyConfig.Routes.filter((route) => {
return route.Mode == "SERVAPP" && (
route.Target.startsWith(containerName) ||
route.Target.split('://')[1].startsWith(containerName)
)
- })
+ })) || [];
}
useEffect(() => {
diff --git a/package.json b/package.json
index 3fea4f3..4276018 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cosmos-server",
- "version": "0.1.0",
+ "version": "0.1.1",
"description": "",
"main": "test-server.js",
"bugs": {
@@ -55,7 +55,7 @@
"build": " sh build.sh",
"dev": "npm run build && npm run start",
"dockerdevbuild": "sh build.sh && npm run client-build && docker build --tag cosmos-dev .",
- "dockerdevrun": "docker stop cosmos-dev; docker rm cosmos-dev; docker run -d -p 80:80 -p 443:443 -e DOCKER_HOST=tcp://host.docker.internal:2375 -e COSMOS_HOSTNAME=localhost -e COSMOS_MONGODB=$MONGODB -e COSMOS_LOG_LEVEL=DEBUG --name cosmos-dev cosmos-dev",
+ "dockerdevrun": "docker stop cosmos-dev; docker rm cosmos-dev; docker run -d -p 80:80 -p 443:443 -e DOCKER_HOST=tcp://host.docker.internal:2375 -e COSMOS_HOSTNAME=localhost -e COSMOS_MONGODB=$MONGODB -e COSMOS_LOG_LEVEL=DEBUG --restart=unless-stopped --name cosmos-dev cosmos-dev",
"dockerdev": "npm run dockerdevbuild && npm run dockerdevrun"
},
"eslintConfig": {
diff --git a/readme.md b/readme.md
index 8860590..548f6c8 100644
--- a/readme.md
+++ b/readme.md
@@ -1,9 +1,14 @@
-![banner](./banner.png)
+
+
+
+
+Cosmos-Server
+Secure and Easy Self-Hosted Platform.
+
+---
[![DiscordLink](https://img.shields.io/discord/1083875833824944188?label=Discord&logo=Discord&style=flat-square)](https://discord.gg/PwMWwsrwHA) ![CircleCI](https://img.shields.io/circleci/build/github/azukaar/Cosmos-Server?token=6efd010d0f82f97175f04a6acf2dae2bbcc4063c&style=flat-square)
-# Cosmos Server
-
Cosmos is a self-hosted platform for running server applications securely and with built-in privacy features. It acts as a secure gateway to your application, as well as a server manager. It aims to solve the increasingly worrying problem of vulnerable self-hosted applications and personnal servers.
![screenshot1](./screenshot1.png)
diff --git a/screenshot1.png b/screenshot1.png
index 826b390..b9e2e7a 100644
Binary files a/screenshot1.png and b/screenshot1.png differ
diff --git a/src/docker/docker.go b/src/docker/docker.go
index 0284d50..1c12f57 100644
--- a/src/docker/docker.go
+++ b/src/docker/docker.go
@@ -202,7 +202,5 @@ func Test() error {
// fmt.Println(jellyfin.NetworkSettings)
-
-
return nil
}
\ No newline at end of file
diff --git a/src/docker/network.go b/src/docker/network.go
index 69d98d8..ed78d4b 100644
--- a/src/docker/network.go
+++ b/src/docker/network.go
@@ -45,6 +45,7 @@ func CreateCosmosNetwork() (string, error) {
}
//if running in Docker, connect to main network
+ utils.Debug("HOSTNAME: " + os.Getenv("HOSTNAME"))
if os.Getenv("HOSTNAME") != "" {
err := DockerClient.NetworkConnect(DockerContext, newNeworkName, os.Getenv("HOSTNAME"), &network.EndpointSettings{})
@@ -146,6 +147,14 @@ func IsConnectedToASecureCosmosNetwork(containerConfig types.ContainerJSON) (boo
for name, _ := range containerConfig.NetworkSettings.Networks {
if name == GetLabel(containerConfig, "cosmos-network-name") {
+ if os.Getenv("HOSTNAME") != "" {
+ // TODO: Check if connected to network first
+ DockerClient.NetworkConnect(DockerContext, name, os.Getenv("HOSTNAME"), &network.EndpointSettings{})
+ // if err != nil {
+ // utils.Error("Docker Network Connect EXISTING ", err)
+ // return false, err
+ // }
+ }
return true, nil
}
}
diff --git a/src/docker/run.go b/src/docker/run.go
index 150dcd2..a681ad0 100644
--- a/src/docker/run.go
+++ b/src/docker/run.go
@@ -7,12 +7,19 @@ import (
// "github.com/docker/docker/client"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types"
+ "github.com/docker/docker/api/types/mount"
)
+type VolumeMount struct {
+ Destination string
+ Volume *types.Volume
+}
+
func NewDB() (string, error) {
+ id := utils.GenerateRandomString(3)
mongoUser := "cosmos-" + utils.GenerateRandomString(5)
mongoPass := utils.GenerateRandomString(24)
- monHost := "cosmos-mongo-" + utils.GenerateRandomString(3)
+ monHost := "cosmos-mongo-" + id
err := RunContainer(
"mongo:latest",
@@ -21,6 +28,20 @@ func NewDB() (string, error) {
"MONGO_INITDB_ROOT_USERNAME=" + mongoUser,
"MONGO_INITDB_ROOT_PASSWORD=" + mongoPass,
},
+ []VolumeMount{
+ {
+ Destination: "/data/db",
+ Volume: &types.Volume{
+ Name: "cosmos-mongo-data-" + id,
+ },
+ },
+ {
+ Destination: "/data/configdb",
+ Volume: &types.Volume{
+ Name: "cosmos-mongo-config-" + id,
+ },
+ },
+ },
)
if err != nil {
@@ -30,7 +51,7 @@ func NewDB() (string, error) {
return "mongodb://"+mongoUser+":"+mongoPass+"@"+monHost+":27017", nil
}
-func RunContainer(imagename string, containername string, inputEnv []string) error {
+func RunContainer(imagename string, containername string, inputEnv []string, volumes []VolumeMount) error {
errD := Connect()
if errD != nil {
utils.Error("Docker Connect", errD)
@@ -44,6 +65,16 @@ func RunContainer(imagename string, containername string, inputEnv []string) err
}
io.Copy(os.Stdout, pull)
+ var mounts []mount.Mount
+
+ for _, volume := range volumes {
+ mount := mount.Mount{
+ Type: mount.TypeVolume,
+ Source: volume.Volume.Name,
+ Target: volume.Destination,
+ }
+ mounts = append(mounts, mount)
+ }
// Define a PORT opening
// newport, err := natting.NewPort("tcp", port)
@@ -63,6 +94,7 @@ func RunContainer(imagename string, containername string, inputEnv []string) err
// },
// },
// },
+ Mounts : mounts,
RestartPolicy: container.RestartPolicy{
Name: "always",
},
diff --git a/src/newInstall.go b/src/newInstall.go
index 7abeb81..ee32e16 100644
--- a/src/newInstall.go
+++ b/src/newInstall.go
@@ -28,10 +28,10 @@ type NewInstallJSON struct {
TLSKey string `json:"tlsKey"`
Nickname string `json:"nickname"`
Password string `json:"password"`
- Email string `json:"email"`
+ Email string `json:"omitempty,email"`
Hostname string `json:"hostname"`
Step string `json:"step"`
- SSLEmail string `json:"sslEmail",validate:"if=HTTPSCertificateMode==LetsEncrypt,email"`
+ SSLEmail string `json:"sslEmail",validate:"omitempty,email"`
}
type AdminJSON struct {
diff --git a/src/user/create.go b/src/user/create.go
index cfde478..9e6b38b 100644
--- a/src/user/create.go
+++ b/src/user/create.go
@@ -14,7 +14,7 @@ import (
type CreateRequestJSON struct {
Nickname string `validate:"required,min=3,max=32,alphanum"`
- Email string `validate:"email"`
+ Email string `validate:"omitempty,email"`
}
func UserCreate(w http.ResponseWriter, req *http.Request) {
diff --git a/src/utils/utils.go b/src/utils/utils.go
index 122bd25..f08ec4e 100644
--- a/src/utils/utils.go
+++ b/src/utils/utils.go
@@ -22,7 +22,7 @@ var DefaultConfig = Config{
GenerateMissingAuthCert: true,
HTTPPort: "80",
HTTPSPort: "443",
- Hostname: "0.0.0.0",
+ Hostname: "localhost",
ProxyConfig: ProxyConfig{
Routes: []ProxyRouteConfig{},
},