From bd82295bd0b6d443e7faef40166bc6698915ace6 Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Sun, 24 Jan 2021 19:37:02 +0530 Subject: [PATCH 01/10] added 2 new rules and other minor changes in db, ingress and deployments --- .../ingress-routing/IngressRoutingModal.jsx | 1 + .../configure-rule/ConfigureRule.jsx | 155 ++++++++++++++++-- .../graph-editor/GraphEditor.jsx | 2 +- .../graph-editor/generateGraph.js | 2 +- src/pages/database/browse/DBBrowse.jsx | 11 +- .../overview/DeploymentsOverview.jsx | 4 +- 6 files changed, 157 insertions(+), 18 deletions(-) diff --git a/src/components/ingress-routing/IngressRoutingModal.jsx b/src/components/ingress-routing/IngressRoutingModal.jsx index db0e5c7b..810fd54f 100644 --- a/src/components/ingress-routing/IngressRoutingModal.jsx +++ b/src/components/ingress-routing/IngressRoutingModal.jsx @@ -88,6 +88,7 @@ const IngressRoutingModal = props => { form.validateFields().then(values => { values = Object.assign({}, formInitialValues, values) try { + values.url = values.url.trim() if (!values.allowSpecificHosts) values.allowedHosts = ["*"] if (!values.allowSpecificMethods) values.allowedMethods = ["*"] if (!values.performRewrite) values.rewrite = undefined diff --git a/src/components/security-rules/configure-rule/ConfigureRule.jsx b/src/components/security-rules/configure-rule/ConfigureRule.jsx index a2974b73..b1e5fff9 100644 --- a/src/components/security-rules/configure-rule/ConfigureRule.jsx +++ b/src/components/security-rules/configure-rule/ConfigureRule.jsx @@ -144,18 +144,11 @@ const parseNumber = (value) => { return !isNaN(value) ? Number(value) : value } -const parseArray = (value, type) => { - if (!value.includes(",")) { - return value - } - return value.split(",").map(value => value.trim()).map(value => parseValue(value, type)) -} - const isTypeOfFieldsString = (fields) => { return typeof fields === "string" } -const rules = ['allow', 'deny', 'authenticated', 'match', 'and', 'or', 'query', 'webhook', 'force', 'remove', 'encrypt', 'decrypt', 'hash']; +const rules = ['allow', 'deny', 'authenticated', 'match', 'and', 'or', 'query', 'webhook', 'force', 'remove', 'encrypt', 'decrypt', 'hash', 'graphql', 'transform']; const ConfigureRule = (props) => { // form @@ -181,7 +174,8 @@ const ConfigureRule = (props) => { switch (values.rule) { case "match": if (values.eval === 'in' || values.eval === 'notIn') { - values.f2 = parseArray(values.f2, values.type) + values.f2 = values.multipleInputFields + delete values["multipleInputFields"] } else { values.f1 = parseValue(values.f1, values.type) values.f2 = parseValue(values.f2, values.type) @@ -213,6 +207,15 @@ const ConfigureRule = (props) => { values.template = "go" } + delete values["applyTransformations"] + break; + case "graphql": + break; + case "transform": + if (values["applyTransformations"]) { + values.template = "go" + } + delete values["applyTransformations"] break; } @@ -223,7 +226,7 @@ const ConfigureRule = (props) => { if (!props.selectedRule.clauses) values.clauses = []; else values.clauses = props.selectedRule.clauses } - if (values.rule === "query" || values.rule === "webhook" || values.rule === "force" || values.rule === "remove" || values.rule === "encrypt" || values.rule === "decrypt" || values.rule === "hash") { + if (values.rule === "query" || values.rule === "webhook" || values.rule === "force" || values.rule === "remove" || values.rule === "encrypt" || values.rule === "decrypt" || values.rule === "hash" || values.rule === "graphql" || values.rule === "transform") { values.clause = props.selectedRule.clause values.fields = values.loadVar ? values.singleInputFields : values.multipleInputFields delete values["loadVar"] @@ -393,9 +396,64 @@ const ConfigureRule = (props) => { () => { const type = form.getFieldValue("type") return ( - - - + <> + form.getFieldValue('eval') !== 'in' && form.getFieldValue('eval') !== 'notIn'} + > + + + + + form.getFieldValue('eval') === 'in' || form.getFieldValue('eval') === 'notIn'} + > + + {(fields, { add, remove }) => { + return ( + <> + {fields.map((field, index) => ( + + + + + + + + { + remove(field.name); + }} + /> + + + ))} + + + + + ); + }} + + + ) } } @@ -685,6 +743,77 @@ const ConfigureRule = (props) => { + form.getFieldValue('rule') === 'graphql'} + > + + + + + + + + + + + + + + form.getFieldValue('rule') === "transform"} > + + + + + + + + Transform the request body using templates + + + form.getFieldValue('applyTransformations') === true} + > + } + type='info' + showIcon + style={{ marginBottom: 21 }} + /> + + + + + + + + + + + + + + diff --git a/src/components/security-rules/graph-editor/GraphEditor.jsx b/src/components/security-rules/graph-editor/GraphEditor.jsx index f0bc2e0d..205c4648 100644 --- a/src/components/security-rules/graph-editor/GraphEditor.jsx +++ b/src/components/security-rules/graph-editor/GraphEditor.jsx @@ -152,7 +152,7 @@ function GraphEditor({ rule, setRule, ruleName, ruleMetaData, isCachingEnabled } } return } - if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash") { + if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash" || selectedRuleObj.rule === "graphql") { if (strippedKey === "root") { setRule(dotProp.set(rule, "clause", copiedRule)) } else { diff --git a/src/components/security-rules/graph-editor/generateGraph.js b/src/components/security-rules/graph-editor/generateGraph.js index a48772a9..08c69714 100644 --- a/src/components/security-rules/graph-editor/generateGraph.js +++ b/src/components/security-rules/graph-editor/generateGraph.js @@ -33,7 +33,7 @@ const convertRuleToGraph = (rule, id, parentId) => { graph.nodes.push({ id: `${id}.clauses.${len}`, label: "+ Add clause", group: "add_rule" }) graph.edges.push({ from: id, to: `${id}.clauses.${len}` }) } - if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash") { + if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash" || rule.rule === "graphql") { if (rule.clause && rule.clause.rule) { graph = mergeGraph(graph, convertRuleToGraph(rule.clause, `${id}.clause`, id)) } else { diff --git a/src/pages/database/browse/DBBrowse.jsx b/src/pages/database/browse/DBBrowse.jsx index 97cfc414..005cc2cc 100644 --- a/src/pages/database/browse/DBBrowse.jsx +++ b/src/pages/database/browse/DBBrowse.jsx @@ -14,7 +14,7 @@ import InfiniteScrollingTable from "../../../components/utils/infinite-scrolling import { notify, incrementPendingRequests, decrementPendingRequests } from '../../../utils'; import { generateSchemaAST } from "../../../graphql"; import { Button, Select, Popconfirm } from "antd"; -import { FilterOutlined, PlusOutlined } from "@ant-design/icons"; +import { FilterOutlined, PlusOutlined, ReloadOutlined } from "@ant-design/icons"; import { API, cond } from "space-api"; import { spaceCloudClusterOrigin, projectModules } from "../../../constants" import { getCollectionSchema, getDbType, getTrackedCollections } from '../../../operations/database'; @@ -337,6 +337,14 @@ const Browse = () => { }) } + const refreshTableData = () => { + if (selectedCol) { + getTableData(); + } else { + notify("error", "Error", "No column selected"); + } + } + const tableColumns = getColumnNames(colSchemaFields, tableData) return ( @@ -365,6 +373,7 @@ const Browse = () => { > {collections.map(col => {col})} + {colSchemaFields && ( <> diff --git a/src/pages/deployments/overview/DeploymentsOverview.jsx b/src/pages/deployments/overview/DeploymentsOverview.jsx index 7ca7633d..c8ed6ea3 100644 --- a/src/pages/deployments/overview/DeploymentsOverview.jsx +++ b/src/pages/deployments/overview/DeploymentsOverview.jsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import { useParams, useHistory } from "react-router-dom"; import { useSelector, useDispatch } from "react-redux"; -import { Button, Table, Popconfirm, Tag, Input, Empty } from "antd"; +import { Button, Table, Popconfirm, Tag, Input, Empty, Typography } from "antd"; import Sidenav from "../../../components/sidenav/Sidenav"; import Topbar from "../../../components/topbar/Topbar"; import DeploymentTabs from "../../../components/deployments/deployment-tabs/DeploymentTabs"; @@ -177,7 +177,7 @@ const DeploymentsOverview = () => { { title: "Private URL", key: "url", - render: (_, record) => `${record.id}.${projectID}.svc.cluster.local` + render: (_, record) => {`${record.id}.${projectID}.svc.cluster.local`} }, { title: "Status", From a6d00de49b1b2407cfa55076d606e55b8794b50d Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Wed, 27 Jan 2021 13:43:49 +0530 Subject: [PATCH 02/10] removed clause from graphql --- src/components/security-rules/graph-editor/GraphEditor.jsx | 2 +- src/components/security-rules/graph-editor/generateGraph.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/security-rules/graph-editor/GraphEditor.jsx b/src/components/security-rules/graph-editor/GraphEditor.jsx index 205c4648..f0bc2e0d 100644 --- a/src/components/security-rules/graph-editor/GraphEditor.jsx +++ b/src/components/security-rules/graph-editor/GraphEditor.jsx @@ -152,7 +152,7 @@ function GraphEditor({ rule, setRule, ruleName, ruleMetaData, isCachingEnabled } } return } - if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash" || selectedRuleObj.rule === "graphql") { + if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash") { if (strippedKey === "root") { setRule(dotProp.set(rule, "clause", copiedRule)) } else { diff --git a/src/components/security-rules/graph-editor/generateGraph.js b/src/components/security-rules/graph-editor/generateGraph.js index 08c69714..a48772a9 100644 --- a/src/components/security-rules/graph-editor/generateGraph.js +++ b/src/components/security-rules/graph-editor/generateGraph.js @@ -33,7 +33,7 @@ const convertRuleToGraph = (rule, id, parentId) => { graph.nodes.push({ id: `${id}.clauses.${len}`, label: "+ Add clause", group: "add_rule" }) graph.edges.push({ from: id, to: `${id}.clauses.${len}` }) } - if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash" || rule.rule === "graphql") { + if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash") { if (rule.clause && rule.clause.rule) { graph = mergeGraph(graph, convertRuleToGraph(rule.clause, `${id}.clause`, id)) } else { From 754e105335244600f121e29a176aad24a2fdc4ed Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Wed, 27 Jan 2021 16:31:56 +0530 Subject: [PATCH 03/10] load variable for "in" and "notIn" type in rule match --- .../configure-rule/ConfigureRule.jsx | 110 +++++++++++------- 1 file changed, 65 insertions(+), 45 deletions(-) diff --git a/src/components/security-rules/configure-rule/ConfigureRule.jsx b/src/components/security-rules/configure-rule/ConfigureRule.jsx index b1e5fff9..5182dc55 100644 --- a/src/components/security-rules/configure-rule/ConfigureRule.jsx +++ b/src/components/security-rules/configure-rule/ConfigureRule.jsx @@ -158,7 +158,8 @@ const ConfigureRule = (props) => { const [col, setCol] = useState(''); // Derived properties - const { rule, type, f1, f2, error, fields, field, value, url, store, outputFormat, claims, requestTemplate, db, cache } = props.selectedRule; + const { rule, type, f1, f2, error, field, value, url, store, outputFormat, claims, requestTemplate, db, cache } = props.selectedRule; + let { fields } = props.selectedRule; const dbConfigs = useSelector(state => getDbConfigs(state)) const dbList = Object.keys(dbConfigs) const [selectedDb, setSelectedDb] = useState(db); @@ -174,7 +175,9 @@ const ConfigureRule = (props) => { switch (values.rule) { case "match": if (values.eval === 'in' || values.eval === 'notIn') { - values.f2 = values.multipleInputFields + values.f2 = values.loadVar ? values.singleInputFields : values.multipleInputFields + delete values["loadVar"] + delete values["singleInputFields"] delete values["multipleInputFields"] } else { values.f1 = parseValue(values.f1, values.type) @@ -290,6 +293,7 @@ const ConfigureRule = (props) => { } const inheritedDataType = getTypeFromValue(value) + fields = rule === "match" ? f2 : fields const formInitialValues = { rule, type: (rule === "force") ? inheritedDataType : type, @@ -409,49 +413,65 @@ const ConfigureRule = (props) => { dependency='eval' condition={() => form.getFieldValue('eval') === 'in' || form.getFieldValue('eval') === 'notIn'} > - - {(fields, { add, remove }) => { - return ( - <> - {fields.map((field, index) => ( - - - - - - - - { - remove(field.name); - }} - /> - - - ))} - - - - - ); - }} - + + + Load fields from a variable + + + form.getFieldValue('loadVar')}> + + + + + + + + + !form.getFieldValue('loadVar')}> + + {(fields, { add, remove }) => { + return ( + <> + {fields.map((field, index) => ( + + + + + + + + { + remove(field.name); + }} + /> + + + ))} + + + + + ); + }} + + ) From 852a941642ed177f42a2d661fad88bcd27f7db8a Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Wed, 27 Jan 2021 23:48:01 +0530 Subject: [PATCH 04/10] initial values for graphql rule --- .../security-rules/configure-rule/ConfigureRule.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/security-rules/configure-rule/ConfigureRule.jsx b/src/components/security-rules/configure-rule/ConfigureRule.jsx index 5182dc55..b426ee91 100644 --- a/src/components/security-rules/configure-rule/ConfigureRule.jsx +++ b/src/components/security-rules/configure-rule/ConfigureRule.jsx @@ -158,7 +158,7 @@ const ConfigureRule = (props) => { const [col, setCol] = useState(''); // Derived properties - const { rule, type, f1, f2, error, field, value, url, store, outputFormat, claims, requestTemplate, db, cache } = props.selectedRule; + const { rule, type, f1, f2, error, field, value, url, store, outputFormat, claims, requestTemplate, db, cache, graphqlQuery, graphqlVariables } = props.selectedRule; let { fields } = props.selectedRule; const dbConfigs = useSelector(state => getDbConfigs(state)) const dbList = Object.keys(dbConfigs) @@ -319,7 +319,9 @@ const ConfigureRule = (props) => { error, cacheResponse: cache ? true : false, cacheTTL: cache && cache.ttl !== undefined && cache.ttl !== null ? cache.ttl : undefined, - cacheInstantInvalidate: cache && cache.instantInvalidate !== undefined && cache.instantInvalidate !== null ? cache.instantInvalidate : undefined + cacheInstantInvalidate: cache && cache.instantInvalidate !== undefined && cache.instantInvalidate !== null ? cache.instantInvalidate : undefined, + graphqlQuery, + graphqlVariables } if (formInitialValues.type === "object") { From 4941b7bedde86a0df2acbfffe16544457380c71f Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Fri, 29 Jan 2021 12:48:28 +0530 Subject: [PATCH 05/10] removed new datatypes --- src/graphql.js | 26 +--------- src/graphql.test.js | 116 +------------------------------------------- 2 files changed, 2 insertions(+), 140 deletions(-) diff --git a/src/graphql.js b/src/graphql.js index 43cc36ab..60f16227 100644 --- a/src/graphql.js +++ b/src/graphql.js @@ -7,7 +7,7 @@ import dotprop from "dot-prop-immutable"; const lorem = new LoremIpsum(); -const primitiveTypes = ["ID", "String", "Float", "Integer", "Boolean", "Date", "Time", "DateTime", "JSON", "SmallInteger", "BigInteger", "Decimal", "Char", "Varchar", "DateTimeWithZone"] +const primitiveTypes = ["ID", "String", "Float", "Integer", "Boolean", "Date", "Time", "DateTime", "JSON"] const getDefType = (type, isArray, required) => { isArray = isArray ? true : type.kind === "ListType"; required = required ? true : type.kind === "NonNullType"; @@ -183,18 +183,6 @@ const generateRandomValue = (type) => { return "2017-11-13T03:15:45.108Z" case "JSON": return { foo: "bar" } - case "SmallInteger": - return 12 - case "BigInteger": - return 4323 - case "Decimal": - return 23.84 - case "Char": - return "F919mV2W1ifQy9wlNyYnoOoqUM1" - case "Varchar": - return "7mr8VjGnCCerZUyzC9YDCn8Oxku" - case "DateTimeWithZone": - return "2021-11-22T03:15:45.108" default: return type } @@ -218,18 +206,6 @@ const generateRandomValue = (type) => { return new Date().toISOString() case "JSON": return { foo: "bar" } - case "SmallInteger": - return Math.ceil(Math.random() * 100) - case "BigInteger": - return Math.ceil(Math.random() * 10000) - case "Decimal": - return Number((Math.random() * 100).toFixed(2)) - case "Char": - return generateId(6) - case "Varchar": - return generateId(6) - case "DateTimeWithZone": - return new Date().toISOString() default: return type } diff --git a/src/graphql.test.js b/src/graphql.test.js index 4dd0f4e8..849be911 100644 --- a/src/graphql.test.js +++ b/src/graphql.test.js @@ -25,12 +25,6 @@ describe("generateSchemaAST method", () => { f19: String @link(table: mytype4, from: id, to: somefield, field: goodfield) f20: mytype5 @link(table: mytype5, from: id, to: nicefield) f21: [mytype6]! @link(table: mytype6, from: id, to: goodfield) - f22: SmallInteger - f23: BigInteger - f24: Decimal - f25: Char - f26: Varchar - f27: DateTimeWithZone } ` const expectedSchemaAST = { @@ -330,84 +324,6 @@ describe("generateSchemaAST method", () => { hasCreatedAtDirective: false, hasUpdatedAtDirective: false, hasNestedFields: true - }, - { - name: "f22", - type: "SmallInteger", - isRequired: false, - isPrimary: false, - hasUniqueConstraint: false, - hasForeignConstraint: false, - isLink: false, - isArray: false, - hasCreatedAtDirective: false, - hasUpdatedAtDirective: false, - hasNestedFields: false - }, - { - name: "f23", - type: "BigInteger", - isRequired: false, - isPrimary: false, - hasUniqueConstraint: false, - hasForeignConstraint: false, - isLink: false, - isArray: false, - hasCreatedAtDirective: false, - hasUpdatedAtDirective: false, - hasNestedFields: false - }, - { - name: "f24", - type: "Decimal", - isRequired: false, - isPrimary: false, - hasUniqueConstraint: false, - hasForeignConstraint: false, - isLink: false, - isArray: false, - hasCreatedAtDirective: false, - hasUpdatedAtDirective: false, - hasNestedFields: false - }, - { - name: "f25", - type: "Char", - isRequired: false, - isPrimary: false, - hasUniqueConstraint: false, - hasForeignConstraint: false, - isLink: false, - isArray: false, - hasCreatedAtDirective: false, - hasUpdatedAtDirective: false, - hasNestedFields: false - }, - { - name: "f26", - type: "Varchar", - isRequired: false, - isPrimary: false, - hasUniqueConstraint: false, - hasForeignConstraint: false, - isLink: false, - isArray: false, - hasCreatedAtDirective: false, - hasUpdatedAtDirective: false, - hasNestedFields: false - }, - { - name: "f27", - type: "DateTimeWithZone", - isRequired: false, - isPrimary: false, - hasUniqueConstraint: false, - hasForeignConstraint: false, - isLink: false, - isArray: false, - hasCreatedAtDirective: false, - hasUpdatedAtDirective: false, - hasNestedFields: false } ] } @@ -549,30 +465,6 @@ describe("generateRandomFieldValues method", () => { { name: "k9", type: "JSON" - }, - { - name: "k10", - type: "SmallInteger" - }, - { - name: "k11", - type: "BigInteger" - }, - { - name: "k12", - type: "Decimal" - }, - { - name: "k13", - type: "Char" - }, - { - name: "k14", - type: "Varchar" - }, - { - name: "k15", - type: "DateTimeWithZone" } ] const result = { @@ -586,13 +478,7 @@ describe("generateRandomFieldValues method", () => { k8: "2017-11-13T03:15:45.108Z", k9: { foo: "bar" - }, - k10: 12, - k11: 4323, - k12: 23.84, - k13: "F919mV2W1ifQy9wlNyYnoOoqUM1", - k14: "7mr8VjGnCCerZUyzC9YDCn8Oxku", - k15: "2021-11-22T03:15:45.108" + } } expect(generateRandomFieldValues(fields)).toEqual(result) }) From 1d482b27bd4f76733658e4aa85c65517f45c4b2a Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Sat, 30 Jan 2021 23:18:04 +0530 Subject: [PATCH 06/10] removed jwt claims template from transform and added claims in graphql rule --- .../configure-rule/ConfigureRule.jsx | 98 +++++++++---------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/src/components/security-rules/configure-rule/ConfigureRule.jsx b/src/components/security-rules/configure-rule/ConfigureRule.jsx index b426ee91..a4146828 100644 --- a/src/components/security-rules/configure-rule/ConfigureRule.jsx +++ b/src/components/security-rules/configure-rule/ConfigureRule.jsx @@ -213,13 +213,19 @@ const ConfigureRule = (props) => { delete values["applyTransformations"] break; case "graphql": + try { + values.graphqlVariables = JSON.parse(values.graphqlVariables); + if (values.generateToken) { + values.claims = JSON.parse(values.claims) + } + delete values["generateToken"] + } catch (ex) { + notify("error", "Error", ex.toString()) + return; + } break; case "transform": - if (values["applyTransformations"]) { values.template = "go" - } - - delete values["applyTransformations"] break; } @@ -229,7 +235,7 @@ const ConfigureRule = (props) => { if (!props.selectedRule.clauses) values.clauses = []; else values.clauses = props.selectedRule.clauses } - if (values.rule === "query" || values.rule === "webhook" || values.rule === "force" || values.rule === "remove" || values.rule === "encrypt" || values.rule === "decrypt" || values.rule === "hash" || values.rule === "graphql" || values.rule === "transform") { + if (values.rule === "query" || values.rule === "webhook" || values.rule === "force" || values.rule === "remove" || values.rule === "encrypt" || values.rule === "decrypt" || values.rule === "hash" || values.rule === "transform") { values.clause = props.selectedRule.clause values.fields = values.loadVar ? values.singleInputFields : values.multipleInputFields delete values["loadVar"] @@ -781,6 +787,20 @@ const ConfigureRule = (props) => { + + + Generate token + + + form.getFieldValue('generateToken') === true} + > + + + + + { - - - - Transform the request body using templates - + } + type='info' + showIcon + style={{ marginBottom: 21 }} + /> + + + + + + + - form.getFieldValue('applyTransformations') === true} - > - } - type='info' - showIcon - style={{ marginBottom: 21 }} - /> - - - - - - - - - - - - - From 31736ed3268a10f52089b6aa128e1477055e57f3 Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Thu, 4 Feb 2021 00:34:30 +0530 Subject: [PATCH 07/10] added clause for graphql and transform --- src/components/security-rules/configure-rule/ConfigureRule.jsx | 2 +- src/components/security-rules/graph-editor/GraphEditor.jsx | 2 +- src/components/security-rules/graph-editor/generateGraph.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/security-rules/configure-rule/ConfigureRule.jsx b/src/components/security-rules/configure-rule/ConfigureRule.jsx index a4146828..133106cb 100644 --- a/src/components/security-rules/configure-rule/ConfigureRule.jsx +++ b/src/components/security-rules/configure-rule/ConfigureRule.jsx @@ -327,7 +327,7 @@ const ConfigureRule = (props) => { cacheTTL: cache && cache.ttl !== undefined && cache.ttl !== null ? cache.ttl : undefined, cacheInstantInvalidate: cache && cache.instantInvalidate !== undefined && cache.instantInvalidate !== null ? cache.instantInvalidate : undefined, graphqlQuery, - graphqlVariables + graphqlVariables : JSON.stringify(graphqlVariables, null, 2) } if (formInitialValues.type === "object") { diff --git a/src/components/security-rules/graph-editor/GraphEditor.jsx b/src/components/security-rules/graph-editor/GraphEditor.jsx index f0bc2e0d..5553d1eb 100644 --- a/src/components/security-rules/graph-editor/GraphEditor.jsx +++ b/src/components/security-rules/graph-editor/GraphEditor.jsx @@ -152,7 +152,7 @@ function GraphEditor({ rule, setRule, ruleName, ruleMetaData, isCachingEnabled } } return } - if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash") { + if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash" || selectedRuleObj.rule === "graphql" || selectedRuleObj.rule === "transform") { if (strippedKey === "root") { setRule(dotProp.set(rule, "clause", copiedRule)) } else { diff --git a/src/components/security-rules/graph-editor/generateGraph.js b/src/components/security-rules/graph-editor/generateGraph.js index a48772a9..5a7399d5 100644 --- a/src/components/security-rules/graph-editor/generateGraph.js +++ b/src/components/security-rules/graph-editor/generateGraph.js @@ -33,7 +33,7 @@ const convertRuleToGraph = (rule, id, parentId) => { graph.nodes.push({ id: `${id}.clauses.${len}`, label: "+ Add clause", group: "add_rule" }) graph.edges.push({ from: id, to: `${id}.clauses.${len}` }) } - if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash") { + if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash" || rule.rule === "graphql" || rule.rule === "transform") { if (rule.clause && rule.clause.rule) { graph = mergeGraph(graph, convertRuleToGraph(rule.clause, `${id}.clause`, id)) } else { From 53c3a5f88b7eaa84775e8ccf6920955e01ea1cb3 Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Thu, 4 Feb 2021 17:36:28 +0530 Subject: [PATCH 08/10] removed clause from graphql and transform --- src/components/security-rules/graph-editor/GraphEditor.jsx | 2 +- src/components/security-rules/graph-editor/generateGraph.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/security-rules/graph-editor/GraphEditor.jsx b/src/components/security-rules/graph-editor/GraphEditor.jsx index 5553d1eb..f0bc2e0d 100644 --- a/src/components/security-rules/graph-editor/GraphEditor.jsx +++ b/src/components/security-rules/graph-editor/GraphEditor.jsx @@ -152,7 +152,7 @@ function GraphEditor({ rule, setRule, ruleName, ruleMetaData, isCachingEnabled } } return } - if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash" || selectedRuleObj.rule === "graphql" || selectedRuleObj.rule === "transform") { + if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash") { if (strippedKey === "root") { setRule(dotProp.set(rule, "clause", copiedRule)) } else { diff --git a/src/components/security-rules/graph-editor/generateGraph.js b/src/components/security-rules/graph-editor/generateGraph.js index 5a7399d5..a48772a9 100644 --- a/src/components/security-rules/graph-editor/generateGraph.js +++ b/src/components/security-rules/graph-editor/generateGraph.js @@ -33,7 +33,7 @@ const convertRuleToGraph = (rule, id, parentId) => { graph.nodes.push({ id: `${id}.clauses.${len}`, label: "+ Add clause", group: "add_rule" }) graph.edges.push({ from: id, to: `${id}.clauses.${len}` }) } - if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash" || rule.rule === "graphql" || rule.rule === "transform") { + if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash") { if (rule.clause && rule.clause.rule) { graph = mergeGraph(graph, convertRuleToGraph(rule.clause, `${id}.clause`, id)) } else { From f97b060f34a0915bb4228a3fb12b7b841e008769 Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Thu, 4 Feb 2021 19:11:26 +0530 Subject: [PATCH 09/10] clause for transform --- src/components/security-rules/graph-editor/GraphEditor.jsx | 2 +- src/components/security-rules/graph-editor/generateGraph.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/security-rules/graph-editor/GraphEditor.jsx b/src/components/security-rules/graph-editor/GraphEditor.jsx index f0bc2e0d..5cc93073 100644 --- a/src/components/security-rules/graph-editor/GraphEditor.jsx +++ b/src/components/security-rules/graph-editor/GraphEditor.jsx @@ -152,7 +152,7 @@ function GraphEditor({ rule, setRule, ruleName, ruleMetaData, isCachingEnabled } } return } - if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash") { + if (selectedRuleObj.rule === "query" || selectedRuleObj.rule === "force" || selectedRuleObj.rule === "remove" || selectedRuleObj.rule === "encrypt" || selectedRuleObj.rule === "decrypt" || selectedRuleObj.rule === "hash" || selectedRuleObj.rule === "transform") { if (strippedKey === "root") { setRule(dotProp.set(rule, "clause", copiedRule)) } else { diff --git a/src/components/security-rules/graph-editor/generateGraph.js b/src/components/security-rules/graph-editor/generateGraph.js index a48772a9..f9c14977 100644 --- a/src/components/security-rules/graph-editor/generateGraph.js +++ b/src/components/security-rules/graph-editor/generateGraph.js @@ -33,7 +33,7 @@ const convertRuleToGraph = (rule, id, parentId) => { graph.nodes.push({ id: `${id}.clauses.${len}`, label: "+ Add clause", group: "add_rule" }) graph.edges.push({ from: id, to: `${id}.clauses.${len}` }) } - if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash") { + if (rule.rule === "query" || rule.rule === "force" || rule.rule === "remove" || rule.rule === "encrypt" || rule.rule === "decrypt" || rule.rule === "hash" || rule.rule === "transform") { if (rule.clause && rule.clause.rule) { graph = mergeGraph(graph, convertRuleToGraph(rule.clause, `${id}.clause`, id)) } else { From a20b8954b5eecb174c70b5a23da8adbb86ad6a6d Mon Sep 17 00:00:00 2001 From: shubham4443 Date: Fri, 26 Feb 2021 20:21:37 +0530 Subject: [PATCH 10/10] fixed the above issues --- .../configure-rule/ConfigureRule.jsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/security-rules/configure-rule/ConfigureRule.jsx b/src/components/security-rules/configure-rule/ConfigureRule.jsx index 133106cb..641c95cf 100644 --- a/src/components/security-rules/configure-rule/ConfigureRule.jsx +++ b/src/components/security-rules/configure-rule/ConfigureRule.jsx @@ -214,9 +214,8 @@ const ConfigureRule = (props) => { break; case "graphql": try { - values.graphqlVariables = JSON.parse(values.graphqlVariables); - if (values.generateToken) { - values.claims = JSON.parse(values.claims) + if (values.graphqlVariables) { + values.graphqlVariables = JSON.parse(values.graphqlVariables); } delete values["generateToken"] } catch (ex) { @@ -430,7 +429,7 @@ const ConfigureRule = (props) => { - + @@ -779,8 +778,8 @@ const ConfigureRule = (props) => { - - + + @@ -822,8 +821,8 @@ const ConfigureRule = (props) => { - - + +