#216: App and workflow downloads can now be organization-wide controlled

This commit is contained in:
frikky
2020-12-18 04:02:45 +01:00
parent be9fef6a85
commit 79784d3226
4 changed files with 74 additions and 7 deletions
+67
View File
@@ -1727,6 +1727,14 @@ func handleInfo(resp http.ResponseWriter, request *http.Request) {
} }
} }
// FIXME: Remove this dependency by updating users' orgs when org itself is updated
org, err := getOrg(ctx, userInfo.ActiveOrg.Id)
if err == nil {
userInfo.ActiveOrg = *org
userInfo.ActiveOrg.Users = []User{}
}
log.Printf("Org: %#v", userInfo.ActiveOrg.Defaults)
currentOrg, err := json.Marshal(userInfo.ActiveOrg) currentOrg, err := json.Marshal(userInfo.ActiveOrg)
if err != nil { if err != nil {
currentOrg = []byte("{}") currentOrg = []byte("{}")
@@ -2604,6 +2612,10 @@ func setOrg(ctx context.Context, org Org, id string) error {
return err return err
} }
// FIXME: Make this update every user to have the correct org data.
//org = fixOrgUser(ctx, &org)
//_ = org
return nil return nil
} }
@@ -2711,6 +2723,61 @@ func setEnvironment(ctx context.Context, data *Environment) error {
return nil return nil
} }
func fixOrgUser(ctx context.Context, org *Org) *Org {
//found := false
//for _, id := range user.Orgs {
// if user.ActiveOrg.Id == id {
// found = true
// break
// }
//}
//if !found {
// user.Orgs = append(user.Orgs, user.ActiveOrg.Id)
//}
//// Might be vulnerable to timing attacks.
//for _, orgId := range user.Orgs {
// if len(orgId) == 0 {
// continue
// }
// org, err := getOrg(ctx, orgId)
// if err != nil {
// log.Printf("Error getting org %s", orgId)
// continue
// }
// orgIndex := 0
// userFound := false
// for index, orgUser := range org.Users {
// if orgUser.Id == user.Id {
// orgIndex = index
// userFound = true
// break
// }
// }
// if userFound {
// user.PrivateApps = []WorkflowApp{}
// user.Executions = ExecutionInfo{}
// user.Limits = UserLimits{}
// user.Authentication = []UserAuth{}
// org.Users[orgIndex] = *user
// } else {
// org.Users = append(org.Users, *user)
// }
// err = setOrg(ctx, *org, orgId)
// if err != nil {
// log.Printf("Failed setting org %s", orgId)
// }
//}
return org
}
func fixUserOrg(ctx context.Context, user *User) *User { func fixUserOrg(ctx context.Context, user *User) *User {
found := false found := false
for _, id := range user.Orgs { for _, id := range user.Orgs {
+1 -1
View File
@@ -142,7 +142,7 @@ const App = (message, props) => {
<Route exact path="/apps/new" render={props => <AppCreator isLoaded={isLoaded} isLoggedIn={isLoggedIn} globalUrl={globalUrl} {...props} />} /> <Route exact path="/apps/new" render={props => <AppCreator isLoaded={isLoaded} isLoggedIn={isLoggedIn} globalUrl={globalUrl} {...props} />} />
<Route exact path="/apps/edit/:appid" render={props => <AppCreator isLoaded={isLoaded} isLoggedIn={isLoggedIn} globalUrl={globalUrl} {...props} />} /> <Route exact path="/apps/edit/:appid" render={props => <AppCreator isLoaded={isLoaded} isLoggedIn={isLoggedIn} globalUrl={globalUrl} {...props} />} />
<Route exact path="/schedules/:key" render={props => <EditSchedule globalUrl={globalUrl} {...props} />} /> <Route exact path="/schedules/:key" render={props => <EditSchedule globalUrl={globalUrl} {...props} />} />
<Route exact path="/workflows" render={props => <Workflows cookies={cookies} removeCookie={removeCookie} isLoaded={isLoaded} isLoggedIn={isLoggedIn} globalUrl={globalUrl} cookies={cookies} {...props} />} /> <Route exact path="/workflows" render={props => <Workflows cookies={cookies} removeCookie={removeCookie} isLoaded={isLoaded} isLoggedIn={isLoggedIn} globalUrl={globalUrl} cookies={cookies} userdata={userdata} {...props} />} />
<Route exact path="/workflows/:key" render={props => <AngularWorkflow userdata={userdata} globalUrl={globalUrl} isLoaded={isLoaded} isLoggedIn={isLoggedIn} {...props} />} /> <Route exact path="/workflows/:key" render={props => <AngularWorkflow userdata={userdata} globalUrl={globalUrl} isLoaded={isLoaded} isLoggedIn={isLoggedIn} {...props} />} />
<Route exact path="/docs/:key" render={props => <Docs isLoaded={isLoaded} globalUrl={globalUrl} {...props} />} /> <Route exact path="/docs/:key" render={props => <Docs isLoaded={isLoaded} globalUrl={globalUrl} {...props} />} />
<Route exact path="/docs" render={props => { window.location.pathname = "/docs/about" }} /> <Route exact path="/docs" render={props => { window.location.pathname = "/docs/about" }} />
+3 -3
View File
@@ -106,7 +106,7 @@ export const GetParsedPaths = (inputdata, basekey) => {
const Apps = (props) => { const Apps = (props) => {
const { globalUrl, isLoggedIn, isLoaded } = props; const { globalUrl, isLoggedIn, isLoaded, userdata } = props;
//const [workflows, setWorkflows] = React.useState([]); //const [workflows, setWorkflows] = React.useState([]);
const baseRepository = "https://github.com/frikky/shuffle-apps" const baseRepository = "https://github.com/frikky/shuffle-apps"
@@ -1316,7 +1316,7 @@ const Apps = (props) => {
style={{backgroundColor: inputColor}} style={{backgroundColor: inputColor}}
variant="outlined" variant="outlined"
margin="normal" margin="normal"
defaultValue="https://github.com/frikky/shuffle-apps" defaultValue={userdata.active_org.defaults.app_download_repo !== undefined && userdata.active_org.defaults.app_download_repo.length > 0 ? userdata.active_org.defaults.app_download_repo : "https://github.com/frikky/shuffle-apps"}
InputProps={{ InputProps={{
style:{ style:{
color: "white", color: "white",
@@ -1334,7 +1334,7 @@ const Apps = (props) => {
style={{backgroundColor: inputColor}} style={{backgroundColor: inputColor}}
variant="outlined" variant="outlined"
margin="normal" margin="normal"
value={downloadBranch} defaultValue={userdata.active_org.defaults.app_download_branch !== undefined && userdata.active_org.defaults.app_download_branch.length > 0 ? userdata.active_org.defaults.app_download_branch : downloadBranch}
InputProps={{ InputProps={{
style:{ style:{
color: "white", color: "white",
+3 -3
View File
@@ -44,7 +44,7 @@ const inputColor = "#383B40"
const surfaceColor = "#27292D" const surfaceColor = "#27292D"
const Workflows = (props) => { const Workflows = (props) => {
const { globalUrl, isLoggedIn, isLoaded, removeCookie, cookies} = props; const { globalUrl, isLoggedIn, isLoaded, removeCookie, cookies, userdata} = props;
document.title = "Shuffle - Workflows" document.title = "Shuffle - Workflows"
const alert = useAlert() const alert = useAlert()
@@ -1348,7 +1348,7 @@ const Workflows = (props) => {
style={{backgroundColor: inputColor}} style={{backgroundColor: inputColor}}
variant="outlined" variant="outlined"
margin="normal" margin="normal"
value={downloadUrl} defaultValue={userdata.active_org.defaults.workflow_download_repo !== undefined && userdata.active_org.defaults.workflow_download_repo.length > 0 ? userdata.active_org.defaults.workflow_download_repo : downloadUrl}
InputProps={{ InputProps={{
style:{ style:{
color: "white", color: "white",
@@ -1367,7 +1367,7 @@ const Workflows = (props) => {
style={{backgroundColor: inputColor}} style={{backgroundColor: inputColor}}
variant="outlined" variant="outlined"
margin="normal" margin="normal"
value={downloadBranch} defaultValue={userdata.active_org.defaults.workflow_download_branch !== undefined && userdata.active_org.defaults.workflow_download_branch.length > 0 ? userdata.active_org.defaults.workflow_download_branch : downloadBranch}
InputProps={{ InputProps={{
style:{ style:{
color: "white", color: "white",