#216: App and workflow downloads can now be organization-wide controlled
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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" }} />
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user