#57: Added optiona SSL verification if no URL is specified when creating app
This commit is contained in:
+202
-3
@@ -300,6 +300,23 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet
|
|||||||
urlInline = "{url}"
|
urlInline = "{url}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Specific check for SSL verification
|
||||||
|
// This is critical for onprem stuff.
|
||||||
|
verifyParam := ""
|
||||||
|
verifyWrapper := ""
|
||||||
|
verifyAddin := ""
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
verifyParam = ", verify=True"
|
||||||
|
verifyWrapper = `if type(ssl_verify) == str: ssl_verify = False if ssl_verify.lower() == "false" or ssl_verify == "0" else True`
|
||||||
|
verifyAddin = ", verify=ssl_verify"
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
verifyParam = ", ssl_verify=True"
|
||||||
|
verifyWrapper = `if type(ssl_verify) == str: ssl_verify = False if ssl_verify.lower() == "false" or ssl_verify == "0" else True`
|
||||||
|
verifyAddin = ", verify=ssl_verify"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(parameters) > 0 {
|
if len(parameters) > 0 {
|
||||||
parameterData = fmt.Sprintf(", %s", strings.Join(parameters, ", "))
|
parameterData = fmt.Sprintf(", %s", strings.Join(parameters, ", "))
|
||||||
}
|
}
|
||||||
@@ -334,13 +351,14 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet
|
|||||||
|
|
||||||
// Extra param for url if it's changeable
|
// Extra param for url if it's changeable
|
||||||
// Extra param for authentication scheme(s)
|
// Extra param for authentication scheme(s)
|
||||||
data := fmt.Sprintf(` async def %s(self%s%s%s%s%s):
|
data := fmt.Sprintf(` async def %s(self%s%s%s%s%s%s):
|
||||||
headers={}
|
headers={}
|
||||||
url=f"%s%s"
|
url=f"%s%s"
|
||||||
%s
|
%s
|
||||||
|
%s
|
||||||
%s
|
%s
|
||||||
%s
|
%s
|
||||||
return requests.%s(url, headers=headers%s%s).text
|
return requests.%s(url, headers=headers%s%s%s).text
|
||||||
`,
|
`,
|
||||||
functionname,
|
functionname,
|
||||||
authenticationParameter,
|
authenticationParameter,
|
||||||
@@ -348,16 +366,21 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet
|
|||||||
parameterData,
|
parameterData,
|
||||||
queryString,
|
queryString,
|
||||||
bodyParameter,
|
bodyParameter,
|
||||||
|
verifyParam,
|
||||||
urlInline,
|
urlInline,
|
||||||
url,
|
url,
|
||||||
|
verifyWrapper,
|
||||||
authenticationSetup,
|
authenticationSetup,
|
||||||
queryData,
|
queryData,
|
||||||
bodyFormatter,
|
bodyFormatter,
|
||||||
method,
|
method,
|
||||||
authenticationAddin,
|
authenticationAddin,
|
||||||
bodyAddin,
|
bodyAddin,
|
||||||
|
verifyAddin,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
log.Printf("CODE: %s", data)
|
||||||
|
|
||||||
//log.Println(data)
|
//log.Println(data)
|
||||||
//log.Println(functionname)
|
//log.Println(functionname)
|
||||||
return functionname, data
|
return functionname, data
|
||||||
@@ -761,6 +784,32 @@ func handleConnect(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [
|
|||||||
optionalQueries := []string{}
|
optionalQueries := []string{}
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(path.Connect.Parameters) > 0 {
|
if len(path.Connect.Parameters) > 0 {
|
||||||
for _, param := range path.Connect.Parameters {
|
for _, param := range path.Connect.Parameters {
|
||||||
if param.Value.Schema == nil || param.Value.In == "header" {
|
if param.Value.Schema == nil || param.Value.In == "header" {
|
||||||
@@ -867,8 +916,33 @@ func handleGet(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor
|
|||||||
|
|
||||||
// FIXME - remove this when authentication is properly introduced
|
// FIXME - remove this when authentication is properly introduced
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
|
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify the SSL certificate request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "False - default=True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(path.Get.Parameters) > 0 {
|
if len(path.Get.Parameters) > 0 {
|
||||||
for _, param := range path.Get.Parameters {
|
for _, param := range path.Get.Parameters {
|
||||||
if param.Value.Schema == nil || param.Value.In == "header" {
|
if param.Value.Schema == nil || param.Value.In == "header" {
|
||||||
@@ -976,6 +1050,31 @@ func handleHead(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo
|
|||||||
optionalQueries := []string{}
|
optionalQueries := []string{}
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
if len(path.Head.Parameters) > 0 {
|
if len(path.Head.Parameters) > 0 {
|
||||||
for _, param := range path.Head.Parameters {
|
for _, param := range path.Head.Parameters {
|
||||||
if param.Value.Schema == nil || param.Value.In == "header" {
|
if param.Value.Schema == nil || param.Value.In == "header" {
|
||||||
@@ -1081,6 +1180,31 @@ func handleDelete(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []
|
|||||||
optionalQueries := []string{}
|
optionalQueries := []string{}
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
if len(path.Delete.Parameters) > 0 {
|
if len(path.Delete.Parameters) > 0 {
|
||||||
for _, param := range path.Delete.Parameters {
|
for _, param := range path.Delete.Parameters {
|
||||||
if param.Value.Schema == nil || param.Value.In == "header" {
|
if param.Value.Schema == nil || param.Value.In == "header" {
|
||||||
@@ -1189,6 +1313,31 @@ func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo
|
|||||||
optionalQueries := []string{}
|
optionalQueries := []string{}
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(path.Post.Parameters) > 0 {
|
if len(path.Post.Parameters) > 0 {
|
||||||
for _, param := range path.Post.Parameters {
|
for _, param := range path.Post.Parameters {
|
||||||
@@ -1296,6 +1445,31 @@ func handlePatch(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []W
|
|||||||
optionalQueries := []string{}
|
optionalQueries := []string{}
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
if len(path.Patch.Parameters) > 0 {
|
if len(path.Patch.Parameters) > 0 {
|
||||||
for _, param := range path.Patch.Parameters {
|
for _, param := range path.Patch.Parameters {
|
||||||
if param.Value.Schema == nil || param.Value.In == "header" {
|
if param.Value.Schema == nil || param.Value.In == "header" {
|
||||||
@@ -1401,6 +1575,31 @@ func handlePut(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor
|
|||||||
optionalQueries := []string{}
|
optionalQueries := []string{}
|
||||||
parameters := []string{}
|
parameters := []string{}
|
||||||
optionalParameters := []WorkflowAppActionParameter{}
|
optionalParameters := []WorkflowAppActionParameter{}
|
||||||
|
if len(swagger.Servers) == 0 {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if swagger.Servers[0].URL == "" {
|
||||||
|
optionalParameters = append(optionalParameters, WorkflowAppActionParameter{
|
||||||
|
Name: "ssl_verify",
|
||||||
|
Description: "Check if you want to verify request",
|
||||||
|
Multiline: false,
|
||||||
|
Required: false,
|
||||||
|
Example: "True",
|
||||||
|
Schema: SchemaDefinition{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(path.Put.Parameters) > 0 {
|
if len(path.Put.Parameters) > 0 {
|
||||||
for _, param := range path.Put.Parameters {
|
for _, param := range path.Put.Parameters {
|
||||||
|
|||||||
@@ -1475,7 +1475,6 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("NewActions: %#v", newActions)
|
|
||||||
workflow.Actions = newActions
|
workflow.Actions = newActions
|
||||||
workflow.IsValid = true
|
workflow.IsValid = true
|
||||||
|
|
||||||
|
|||||||
+12
-12
@@ -13,18 +13,6 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
- backend
|
||||||
database:
|
|
||||||
#build: ./backend/database
|
|
||||||
image: frikky/shuffle:database
|
|
||||||
container_name: shuffle-database
|
|
||||||
hostname: shuffle-database
|
|
||||||
ports:
|
|
||||||
- "8000:8000"
|
|
||||||
networks:
|
|
||||||
- shuffle
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- ${DB_LOCATION}:/etc/shuffle
|
|
||||||
backend:
|
backend:
|
||||||
#build: ./backend
|
#build: ./backend
|
||||||
image: frikky/shuffle:backend
|
image: frikky/shuffle:backend
|
||||||
@@ -59,6 +47,18 @@ services:
|
|||||||
- BASE_URL=http://${OUTER_HOSTNAME}:${BACKEND_PORT}
|
- BASE_URL=http://${OUTER_HOSTNAME}:${BACKEND_PORT}
|
||||||
- DOCKER_API_VERSION=1.40
|
- DOCKER_API_VERSION=1.40
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
database:
|
||||||
|
#build: ./backend/database
|
||||||
|
image: frikky/shuffle:database
|
||||||
|
container_name: shuffle-database
|
||||||
|
hostname: shuffle-database
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
networks:
|
||||||
|
- shuffle
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ${DB_LOCATION}:/etc/shuffle
|
||||||
networks:
|
networks:
|
||||||
shuffle:
|
shuffle:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
@@ -1401,7 +1401,6 @@ const AngularWorkflow = (props) => {
|
|||||||
display: "flex",
|
display: "flex",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const paperVariableStyle = {
|
const paperVariableStyle = {
|
||||||
minHeight: "50px",
|
minHeight: "50px",
|
||||||
maxHeight: "50px",
|
maxHeight: "50px",
|
||||||
|
|||||||
+10
-10
@@ -67,7 +67,7 @@ const useStyles = makeStyles({
|
|||||||
|
|
||||||
const rewrite = (args) => {
|
const rewrite = (args) => {
|
||||||
return args.reduce(function(args, a){
|
return args.reduce(function(args, a){
|
||||||
if (0 == a.indexOf('-X')) {
|
if (0 === a.indexOf('-X')) {
|
||||||
args.push('-X')
|
args.push('-X')
|
||||||
args.push(a.slice(2))
|
args.push(a.slice(2))
|
||||||
} else {
|
} else {
|
||||||
@@ -105,35 +105,35 @@ const parseCurl = (s) => {
|
|||||||
out.url = arg
|
out.url = arg
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-A' || arg == '--user-agent':
|
case arg === '-A' || arg === '--user-agent':
|
||||||
state = 'user-agent'
|
state = 'user-agent'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-H' || arg == '--header':
|
case arg === '-H' || arg === '--header':
|
||||||
state = 'header'
|
state = 'header'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-d' || arg == '--data' || arg == '--data-ascii':
|
case arg === '-d' || arg === '--data' || arg === '--data-ascii':
|
||||||
state = 'data'
|
state = 'data'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-u' || arg == '--user':
|
case arg === '-u' || arg === '--user':
|
||||||
state = 'user'
|
state = 'user'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-I' || arg == '--head':
|
case arg === '-I' || arg === '--head':
|
||||||
out.method = 'HEAD'
|
out.method = 'HEAD'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-X' || arg == '--request':
|
case arg === '-X' || arg === '--request':
|
||||||
state = 'method'
|
state = 'method'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '-b' || arg =='--cookie':
|
case arg === '-b' || arg === '--cookie':
|
||||||
state = 'cookie'
|
state = 'cookie'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case arg == '--compressed':
|
case arg === '--compressed':
|
||||||
out.header['Accept-Encoding'] = out.header['Accept-Encoding'] || 'deflate, gzip'
|
out.header['Accept-Encoding'] = out.header['Accept-Encoding'] || 'deflate, gzip'
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ const parseCurl = (s) => {
|
|||||||
state = ''
|
state = ''
|
||||||
break;
|
break;
|
||||||
case 'data':
|
case 'data':
|
||||||
if (out.method == 'GET' || out.method == 'HEAD') out.method = 'POST'
|
if (out.method === 'GET' || out.method === 'HEAD') out.method = 'POST'
|
||||||
out.header['Content-Type'] = out.header['Content-Type'] || 'application/x-www-form-urlencoded'
|
out.header['Content-Type'] = out.header['Content-Type'] || 'application/x-www-form-urlencoded'
|
||||||
out.body = out.body
|
out.body = out.body
|
||||||
? out.body + '&' + arg
|
? out.body + '&' + arg
|
||||||
|
|||||||
@@ -512,9 +512,9 @@ const Apps = (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appView = isLoggedIn ?
|
const appView = isLoggedIn ?
|
||||||
<div style={{maxWidth: 1366, margin: "auto",}}>
|
<div style={{maxWidth: window.innerWidth > 1366 ? 1366 : 1200, margin: "auto",}}>
|
||||||
<div style={appViewStyle}>
|
<div style={appViewStyle}>
|
||||||
<div>
|
<div style={{flex: 1}}>
|
||||||
<Breadcrumbs aria-label="breadcrumb" separator="›" style={{color: "white",}}>
|
<Breadcrumbs aria-label="breadcrumb" separator="›" style={{color: "white",}}>
|
||||||
<Link to="/apps" style={{textDecoration: "none", color: "inherit",}}>
|
<Link to="/apps" style={{textDecoration: "none", color: "inherit",}}>
|
||||||
<h2 style={{color: "rgba(255,255,255,0.5)"}}>
|
<h2 style={{color: "rgba(255,255,255,0.5)"}}>
|
||||||
@@ -532,10 +532,10 @@ const Apps = (props) => {
|
|||||||
</Breadcrumbs>
|
</Breadcrumbs>
|
||||||
<UploadView/>
|
<UploadView/>
|
||||||
</div>
|
</div>
|
||||||
<Divider style={{marginBottom: "10px", marginTop: "10px", height: "100%", width: "1px", backgroundColor: dividerColor}}/>
|
<Divider style={{marginBottom: 10, marginTop: 10, height: "100%", width: 1, backgroundColor: dividerColor}}/>
|
||||||
<div style={{flex: 1, marginLeft: 10, marginRight: 10}}>
|
<div style={{flex: 1, marginLeft: 10, marginRight: 10}}>
|
||||||
<div style={{display: "flex"}}>
|
<div style={{display: "flex"}}>
|
||||||
<div style={{flex: 10}}>
|
<div style={{flex: 1}}>
|
||||||
<h2>Available integrations</h2>
|
<h2>Available integrations</h2>
|
||||||
</div>
|
</div>
|
||||||
{isLoading ? <CircularProgress style={{marginTop: 13, marginRight: 15}} /> : null}
|
{isLoading ? <CircularProgress style={{marginTop: 13, marginRight: 15}} /> : null}
|
||||||
|
|||||||
Reference in New Issue
Block a user