diff --git a/backend/go-app/main.go b/backend/go-app/main.go index e44fba65..3cca96eb 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -158,6 +158,9 @@ type Environment struct { Name string `datastore:"name"` Type string `datastore:"type"` Registered bool `datastore:"registered"` + Default bool `datastore:"default" json:"default"` + Archived bool `datastore:"archived" json:"archived"` + Id string `datastore:"id" json:"id"` } type User struct { @@ -1053,16 +1056,29 @@ func handleSetEnvironments(resp http.ResponseWriter, request *http.Request) { return } - // Clear old data - for _, item := range environments { - err = DeleteKey(ctx, "Environments", item.Name) - if err != nil { - resp.WriteHeader(401) - resp.Write([]byte(`{"success": false, "reason": "Error cleaning up environment"}`)) - return + // Clear old data? Removed for archiving purpose. No straight deletion + //for _, item := range environments { + // err = DeleteKey(ctx, "Environments", item.Name) + // if err != nil { + // resp.WriteHeader(401) + // resp.Write([]byte(`{"success": false, "reason": "Error cleaning up environment"}`)) + // return + // } + //} + + openEnvironments := 0 + for _, item := range newEnvironments { + if !item.Archived { + openEnvironments += 1 } } + if openEnvironments < 1 { + resp.WriteHeader(401) + resp.Write([]byte(`{"success": false, "reason": "Can't archived all environments"}`)) + return + } + for _, item := range newEnvironments { err = setEnvironment(ctx, &item) if err != nil { @@ -1072,9 +1088,10 @@ func handleSetEnvironments(resp http.ResponseWriter, request *http.Request) { } } + //DeleteKey(ctx, entity string, value string) error { // FIXME - check which are in use - log.Printf("FIXME: Set new environments: %#v", newEnvironments) - log.Printf("DONT DELETE ONES THAT ARE IN USE") + //log.Printf("FIXME: Set new environments: %#v", newEnvironments) + //log.Printf("DONT DELETE ONES THAT ARE IN USE") resp.WriteHeader(200) resp.Write([]byte(`{"success": true}`)) diff --git a/frontend/src/views/Admin.jsx b/frontend/src/views/Admin.jsx index 03a53575..ae1756c3 100644 --- a/frontend/src/views/Admin.jsx +++ b/frontend/src/views/Admin.jsx @@ -47,6 +47,7 @@ const Admin = (props) => { const [selectedUserModalOpen, setSelectedUserModalOpen] = React.useState(false) const [selectedAuthentication, setSelectedAuthentication] = React.useState({}) const [selectedAuthenticationModalOpen, setSelectedAuthenticationModalOpen] = React.useState(false) + const [showArchived, setShowArchived] = React.useState(false) const alert = useAlert() @@ -170,7 +171,6 @@ const Admin = (props) => { } const submitUser = (data) => { - // FIXME - add some check here ROFL console.log("INPUT: ", data) // Just use this one? @@ -201,13 +201,21 @@ const Admin = (props) => { }); } - const deleteEnvironment = (name) => { + // Horrible frontend fix for environments + const setDefaultEnvironment = (name) => { // FIXME - add some check here ROFL - alert.info("Deleting environment " + name) + alert.info("Setting default env to " + name) var newEnv = [] for (var key in environments) { if (environments[key].Name == name) { - continue + if (environments[key].archived) { + alert.error("Can't set archived to default") + return + } + + environments[key].default = true + } else if (environments[key].default == true && environments[key].name !== name) { + environments[key].default = false } newEnv.push(environments[key]) @@ -227,6 +235,7 @@ const Admin = (props) => { response.json().then(responseJson => { if (responseJson["success"] === false) { alert.error(responseJson.reason) + getEnvironments() } else { setLoginInfo("") setModalOpen(false) @@ -234,14 +243,60 @@ const Admin = (props) => { } }), ) - //.catch(error => { - // console.log("Error in userdata: ", error) - //}); + .catch(error => { + console.log("Error in backend data: ", error) + }) + } + + const deleteEnvironment = (name) => { + // FIXME - add some check here ROFL + alert.info("Deleting environment " + name) + var newEnv = [] + for (var key in environments) { + if (environments[key].Name == name) { + if (environments[key].default) { + alert.info("Can't delete the default environment") + return + } + environments[key].archived = true + } + + newEnv.push(environments[key]) + } + + // Just use this one? + const url = globalUrl + '/api/v1/setenvironments'; + fetch(url, { + method: 'PUT', + credentials: "include", + body: JSON.stringify(newEnv), + headers: { + 'Content-Type': 'application/json', + }, + }) + .then(response => + response.json().then(responseJson => { + if (responseJson["success"] === false) { + alert.error(responseJson.reason) + getEnvironments() + } else { + setLoginInfo("") + setModalOpen(false) + getEnvironments() + } + }), + ) + .catch(error => { + console.log("Error when deleting: ", error) + }) } const submitEnvironment = (data) => { // FIXME - add some check here ROFL - environments.push({ "name": data.environment, "type": "onprem" }) + environments.push({ + "name": data.environment, + "type": "onprem", + }) // Just use this one? var baseurl = globalUrl @@ -258,6 +313,7 @@ const Admin = (props) => { response.json().then(responseJson => { if (responseJson["success"] === false) { setLoginInfo("Error in input: " + responseJson.reason) + getEnvironments() } else { setLoginInfo("") setModalOpen(false) @@ -343,7 +399,6 @@ const Admin = (props) => { return response.json() }) .then((responseJson) => { - console.log(responseJson) setEnvironments(responseJson) }) .catch(error => { @@ -935,6 +990,7 @@ const Admin = (props) => { : null + console.log("Environments: ", environments) const environmentView = curTab === 2 ?
@@ -968,12 +1024,29 @@ const Admin = (props) => { primary="Orborus running (TBD)" style={{minWidth: 200, maxWidth: 200}} /> + + {environments === undefined ? null : environments.map(environment => { + if (!showArchived && environment.archived) { + return null + } + + if (environment.archived === undefined) { + getEnvironments() + return null + } + return ( { primary={"TBD"} style={{minWidth: 200, maxWidth: 200, overflow: "hidden"}} /> - + + {environment.default ? + null + : + + } + + + ) })} diff --git a/install-guide.md b/install-guide.md index 4e5161f2..a7256128 100644 --- a/install-guide.md +++ b/install-guide.md @@ -7,7 +7,6 @@ The Docker setup is done with docker-compose and is a single command to get set **PS: if you're setting up Shuffle on Windows, go to the next step (Windows Docker setup)** 1. Make sure you have Docker and [docker-compose](https://docs.docker.com/compose/install/) installed. - 2. Run docker-compose. ``` git clone https://github.com/frikky/Shuffle