Added default environments
This commit is contained in:
+26
-9
@@ -158,6 +158,9 @@ type Environment struct {
|
|||||||
Name string `datastore:"name"`
|
Name string `datastore:"name"`
|
||||||
Type string `datastore:"type"`
|
Type string `datastore:"type"`
|
||||||
Registered bool `datastore:"registered"`
|
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 {
|
type User struct {
|
||||||
@@ -1053,16 +1056,29 @@ func handleSetEnvironments(resp http.ResponseWriter, request *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear old data
|
// Clear old data? Removed for archiving purpose. No straight deletion
|
||||||
for _, item := range environments {
|
//for _, item := range environments {
|
||||||
err = DeleteKey(ctx, "Environments", item.Name)
|
// err = DeleteKey(ctx, "Environments", item.Name)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
resp.WriteHeader(401)
|
// resp.WriteHeader(401)
|
||||||
resp.Write([]byte(`{"success": false, "reason": "Error cleaning up environment"}`))
|
// resp.Write([]byte(`{"success": false, "reason": "Error cleaning up environment"}`))
|
||||||
return
|
// 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 {
|
for _, item := range newEnvironments {
|
||||||
err = setEnvironment(ctx, &item)
|
err = setEnvironment(ctx, &item)
|
||||||
if err != nil {
|
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
|
// FIXME - check which are in use
|
||||||
log.Printf("FIXME: Set new environments: %#v", newEnvironments)
|
//log.Printf("FIXME: Set new environments: %#v", newEnvironments)
|
||||||
log.Printf("DONT DELETE ONES THAT ARE IN USE")
|
//log.Printf("DONT DELETE ONES THAT ARE IN USE")
|
||||||
|
|
||||||
resp.WriteHeader(200)
|
resp.WriteHeader(200)
|
||||||
resp.Write([]byte(`{"success": true}`))
|
resp.Write([]byte(`{"success": true}`))
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ const Admin = (props) => {
|
|||||||
const [selectedUserModalOpen, setSelectedUserModalOpen] = React.useState(false)
|
const [selectedUserModalOpen, setSelectedUserModalOpen] = React.useState(false)
|
||||||
const [selectedAuthentication, setSelectedAuthentication] = React.useState({})
|
const [selectedAuthentication, setSelectedAuthentication] = React.useState({})
|
||||||
const [selectedAuthenticationModalOpen, setSelectedAuthenticationModalOpen] = React.useState(false)
|
const [selectedAuthenticationModalOpen, setSelectedAuthenticationModalOpen] = React.useState(false)
|
||||||
|
const [showArchived, setShowArchived] = React.useState(false)
|
||||||
|
|
||||||
const alert = useAlert()
|
const alert = useAlert()
|
||||||
|
|
||||||
@@ -170,7 +171,6 @@ const Admin = (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const submitUser = (data) => {
|
const submitUser = (data) => {
|
||||||
// FIXME - add some check here ROFL
|
|
||||||
console.log("INPUT: ", data)
|
console.log("INPUT: ", data)
|
||||||
|
|
||||||
// Just use this one?
|
// 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
|
// FIXME - add some check here ROFL
|
||||||
alert.info("Deleting environment " + name)
|
alert.info("Setting default env to " + name)
|
||||||
var newEnv = []
|
var newEnv = []
|
||||||
for (var key in environments) {
|
for (var key in environments) {
|
||||||
if (environments[key].Name == name) {
|
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])
|
newEnv.push(environments[key])
|
||||||
@@ -227,6 +235,7 @@ const Admin = (props) => {
|
|||||||
response.json().then(responseJson => {
|
response.json().then(responseJson => {
|
||||||
if (responseJson["success"] === false) {
|
if (responseJson["success"] === false) {
|
||||||
alert.error(responseJson.reason)
|
alert.error(responseJson.reason)
|
||||||
|
getEnvironments()
|
||||||
} else {
|
} else {
|
||||||
setLoginInfo("")
|
setLoginInfo("")
|
||||||
setModalOpen(false)
|
setModalOpen(false)
|
||||||
@@ -234,14 +243,60 @@ const Admin = (props) => {
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
//.catch(error => {
|
.catch(error => {
|
||||||
// console.log("Error in userdata: ", 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) => {
|
const submitEnvironment = (data) => {
|
||||||
// FIXME - add some check here ROFL
|
// FIXME - add some check here ROFL
|
||||||
environments.push({ "name": data.environment, "type": "onprem" })
|
environments.push({
|
||||||
|
"name": data.environment,
|
||||||
|
"type": "onprem",
|
||||||
|
})
|
||||||
|
|
||||||
// Just use this one?
|
// Just use this one?
|
||||||
var baseurl = globalUrl
|
var baseurl = globalUrl
|
||||||
@@ -258,6 +313,7 @@ const Admin = (props) => {
|
|||||||
response.json().then(responseJson => {
|
response.json().then(responseJson => {
|
||||||
if (responseJson["success"] === false) {
|
if (responseJson["success"] === false) {
|
||||||
setLoginInfo("Error in input: " + responseJson.reason)
|
setLoginInfo("Error in input: " + responseJson.reason)
|
||||||
|
getEnvironments()
|
||||||
} else {
|
} else {
|
||||||
setLoginInfo("")
|
setLoginInfo("")
|
||||||
setModalOpen(false)
|
setModalOpen(false)
|
||||||
@@ -343,7 +399,6 @@ const Admin = (props) => {
|
|||||||
return response.json()
|
return response.json()
|
||||||
})
|
})
|
||||||
.then((responseJson) => {
|
.then((responseJson) => {
|
||||||
console.log(responseJson)
|
|
||||||
setEnvironments(responseJson)
|
setEnvironments(responseJson)
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
@@ -935,6 +990,7 @@ const Admin = (props) => {
|
|||||||
</div>
|
</div>
|
||||||
: null
|
: null
|
||||||
|
|
||||||
|
console.log("Environments: ", environments)
|
||||||
const environmentView = curTab === 2 ?
|
const environmentView = curTab === 2 ?
|
||||||
<div>
|
<div>
|
||||||
<div style={{marginTop: 20, marginBottom: 20,}}>
|
<div style={{marginTop: 20, marginBottom: 20,}}>
|
||||||
@@ -968,12 +1024,29 @@ const Admin = (props) => {
|
|||||||
primary="Orborus running (TBD)"
|
primary="Orborus running (TBD)"
|
||||||
style={{minWidth: 200, maxWidth: 200}}
|
style={{minWidth: 200, maxWidth: 200}}
|
||||||
/>
|
/>
|
||||||
|
<ListItemText
|
||||||
|
primary="Default"
|
||||||
|
style={{minWidth: 150, maxWidth: 150}}
|
||||||
|
/>
|
||||||
<ListItemText
|
<ListItemText
|
||||||
primary="Actions"
|
primary="Actions"
|
||||||
style={{minWidth: 150, maxWidth: 150}}
|
style={{minWidth: 150, maxWidth: 150}}
|
||||||
/>
|
/>
|
||||||
|
<ListItemText
|
||||||
|
primary="Archived"
|
||||||
|
style={{minWidth: 150, maxWidth: 150}}
|
||||||
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
{environments === undefined ? null : environments.map(environment => {
|
{environments === undefined ? null : environments.map(environment => {
|
||||||
|
if (!showArchived && environment.archived) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (environment.archived === undefined) {
|
||||||
|
getEnvironments()
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<ListItemText
|
<ListItemText
|
||||||
@@ -984,9 +1057,25 @@ const Admin = (props) => {
|
|||||||
primary={"TBD"}
|
primary={"TBD"}
|
||||||
style={{minWidth: 200, maxWidth: 200, overflow: "hidden"}}
|
style={{minWidth: 200, maxWidth: 200, overflow: "hidden"}}
|
||||||
/>
|
/>
|
||||||
<ListItemText>
|
<ListItemText
|
||||||
|
style={{minWidth: 150, maxWidth: 150, overflow: "hidden"}}
|
||||||
|
primary={environment.default ? "true" : null}
|
||||||
|
>
|
||||||
|
{environment.default ?
|
||||||
|
null
|
||||||
|
:
|
||||||
|
<Button variant="outlined" style={{borderRadius: "0px"}} onClick={() => setDefaultEnvironment(environment.Name)} color="primary">Set default</Button>
|
||||||
|
}
|
||||||
|
</ListItemText>
|
||||||
|
<ListItemText
|
||||||
|
style={{minWidth: 150, maxWidth: 150, overflow: "hidden"}}
|
||||||
|
>
|
||||||
<Button variant="outlined" style={{borderRadius: "0px"}} onClick={() => deleteEnvironment(environment.Name)} color="primary">Delete</Button>
|
<Button variant="outlined" style={{borderRadius: "0px"}} onClick={() => deleteEnvironment(environment.Name)} color="primary">Delete</Button>
|
||||||
</ListItemText>
|
</ListItemText>
|
||||||
|
<ListItemText
|
||||||
|
style={{minWidth: 150, maxWidth: 150, overflow: "hidden"}}
|
||||||
|
primary={environment.archived.toString()}
|
||||||
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -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)**
|
**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.
|
1. Make sure you have Docker and [docker-compose](https://docs.docker.com/compose/install/) installed.
|
||||||
|
|
||||||
2. Run docker-compose.
|
2. Run docker-compose.
|
||||||
```
|
```
|
||||||
git clone https://github.com/frikky/Shuffle
|
git clone https://github.com/frikky/Shuffle
|
||||||
|
|||||||
Reference in New Issue
Block a user