diff --git a/go.mod b/go.mod new file mode 100644 index 0000000000..594bd0f004 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/layer5io/meshery/schemas + +go 1.21 diff --git a/schemas/configuration.go b/schemas/configuration.go new file mode 100644 index 0000000000..2bed36564d --- /dev/null +++ b/schemas/configuration.go @@ -0,0 +1,6 @@ +package schemas + +import "embed" + +//go:embed external +var Schemas embed.FS diff --git a/schemas/external/ui/catalog/designImport.json b/schemas/external/ui/catalog/designImport.json index 96449defe4..37871acc64 100644 --- a/schemas/external/ui/catalog/designImport.json +++ b/schemas/external/ui/catalog/designImport.json @@ -1,68 +1,130 @@ { - "title": "Upload Design File", + "//playground": "https://rjsf-team.github.io/react-jsonschema-form/#eyJmb3JtRGF0YSI6eyJuYW1lIjoiVW50aXRsZWQgRGVzaWduIiwiZGVzaWduVHlwZSI6Ikt1YmVybmV0ZXMgTWFuaWZlc3QiLCJ1cGxvYWRUeXBlIjoiVVJMIEltcG9ydCIsImZpcnN0TmFtZSI6IkNodWNrIiwibGFzdE5hbWUiOiJOb3JyaXMiLCJhZ2UiOjc1LCJiaW8iOiJSb3VuZGhvdXNlIGtpY2tpbmcgYXNzZXMgc2luY2UgMTk0MCIsInBhc3N3b3JkIjoibm9uZWVkIiwidGVsZXBob25lIjoiMS04MDAtS0lDS0FTUyJ9LCJzY2hlbWEiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJ0eXBlIjoic3RyaW5nIiwidGl0bGUiOiJEZXNpZ24gZmlsZSBuYW1lIiwiZGVmYXVsdCI6IlVudGl0bGVkIERlc2lnbiIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiIsImRlc2NyaXB0aW9uIjoiUHJvdmlkZSBhIG5hbWUgZm9yIHlvdXIgZGVzaWduIGZpbGUuIFRoaXMgbmFtZSB3aWxsIGhlbHAgeW91IGlkZW50aWZ5IHRoZSBmaWxlIG1vcmUgZWFzaWx5LiBZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBuYW1lIG9mIHlvdXIgZGVzaWduIGFmdGVyIGltcG9ydGluZyBpdC4ifSwiZGVzaWduVHlwZSI6eyJ0aXRsZSI6IlNlbGVjdCB0aGUgZGVzaWduIHR5cGUiLCJlbnVtIjpbIkhlbG0gQ2hhcnQiLCJLdWJlcm5ldGVzIE1hbmlmZXN0IiwiRG9ja2VyIENvbXBvc2UiLCJNZXNoZXJ5IERlc2lnbiJdLCJkZWZhdWx0IjoiTWVzaGVyeSBEZXNpZ24iLCJ4LXJqc2YtZ3JpZC1hcmVhIjoiMTIiLCJkZXNjcmlwdGlvbiI6IlNlbGVjdCB0aGUgdHlwZSBvZiBkZXNpZ24geW91IGFyZSB1cGxvYWRpbmcuIFRoZSAnRGVzaWduIFR5cGUnIGRldGVybWluZXMgdGhlIGZvcm1hdCwgc3RydWN0dXJlLCBhbmQgY29udGVudCBvZiB0aGUgZmlsZSB5b3UgYXJlIHVwbG9hZGluZy4gQ2hvb3NlIHRoZSBhcHByb3ByaWF0ZSBkZXNpZ24gdHlwZSB0aGF0IG1hdGNoZXMgdGhlIG5hdHVyZSBvZiB5b3VyIGZpbGUuIENoZWNrb3V0IGh0dHBzOi8vZG9jcy5tZXNoZXJ5LmlvL2d1aWRlcy9tZXNoZXJ5LWRlc2lnbiB0byBsZWFybiBtb3JlIGFib3V0IGRlc2lnbnMifX0sImFsbE9mIjpbeyJpZiI6eyJwcm9wZXJ0aWVzIjp7ImRlc2lnblR5cGUiOnsibm90Ijp7ImNvbnN0IjoiSGVsbSBDaGFydCJ9fX19LCJ0aGVuIjp7InByb3BlcnRpZXMiOnsidXBsb2FkVHlwZSI6eyJ0aXRsZSI6IlNlbGVjdCB0aGUgdXBsb2FkIG1ldGhvZCIsImVudW0iOlsiRmlsZSBVcGxvYWQiLCJVUkwgSW1wb3J0Il0sImRlZmF1bHQiOiJGaWxlIFVwbG9hZCIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiIsImRlc2NyaXB0aW9uIjoiQ2hvb3NlIHRoZSBtZXRob2QgeW91IHByZWZlciB0byB1cGxvYWQgeW91ciBkZXNpZ24gZmlsZS4gU2VsZWN0ICdGaWxlIFVwbG9hZCcgaWYgeW91IGhhdmUgdGhlIGZpbGUgb24geW91ciBsb2NhbCBzeXN0ZW0sIG9yICdVUkwgSW1wb3J0JyBpZiB5b3UgaGF2ZSB0aGUgZmlsZSBob3N0ZWQgb25saW5lLiJ9fSwiYWxsT2YiOlt7ImlmIjp7InByb3BlcnRpZXMiOnsidXBsb2FkVHlwZSI6eyJjb25zdCI6IkZpbGUgVXBsb2FkIn19fSwidGhlbiI6eyJwcm9wZXJ0aWVzIjp7ImZpbGUiOnsidHlwZSI6InN0cmluZyIsImZvcm1hdCI6ImZpbGUiLCJkZXNjcmlwdGlvbiI6IkJyb3dzZSB0aGUgZGVzaWduIGZpbGUgZnJvbSB5b3VyIGZpbGUgc3lzdGVtIiwieC1yanNmLWdyaWQtYXJlYSI6IjEyIn19LCJyZXF1aXJlZCI6WyJmaWxlIl19fSx7ImlmIjp7InByb3BlcnRpZXMiOnsidXBsb2FkVHlwZSI6eyJjb25zdCI6IlVSTCBJbXBvcnQifX19LCJ0aGVuIjp7InByb3BlcnRpZXMiOnsidXJsIjp7InR5cGUiOiJzdHJpbmciLCJmb3JtYXQiOiJ1cmkiLCJ0aXRsZSI6IlVSTCIsImRlc2NyaXB0aW9uIjoiUHJvdmlkZSB0aGUgVVJMIG9mIHRoZSBkZXNpZ24gZmlsZSB5b3Ugd2FudCB0byBpbXBvcnQuIFRoaXMgc2hvdWxkIGJlIGEgZGlyZWN0IFVSTCB0byB0aGUgZmlsZSwgZm9yIGV4YW1wbGU6IGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20veW91ci1kZXNpZ24tZmlsZS55YW1sIiwieC1yanNmLWdyaWQtYXJlYSI6IjEyIn19LCJyZXF1aXJlZCI6WyJ1cmwiXX19XSwicmVxdWlyZWQiOlsidXBsb2FkVHlwZSJdfX0seyJpZiI6eyJwcm9wZXJ0aWVzIjp7ImRlc2lnblR5cGUiOnsiY29uc3QiOiJIZWxtIENoYXJ0In19fSwidGhlbiI6eyJwcm9wZXJ0aWVzIjp7InVybCI6eyJ0eXBlIjoic3RyaW5nIiwiZm9ybWF0IjoidXJpIiwidGl0bGUiOiJVUkwiLCJkZXNjcmlwdGlvbiI6IlByb3ZpZGUgdGhlIFVSTCBvZiB0aGUgZGVzaWduIGZpbGUgeW91IHdhbnQgdG8gaW1wb3J0LiBUaGlzIHNob3VsZCBiZSBhIGRpcmVjdCBVUkwgdG8gdGhlIGZpbGUsIGZvciBleGFtcGxlOiBodHRwczovL3Jhdy5naXRodWIuY29tL3lvdXItZGVzaWduLWZpbGUueWFtbCIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiJ9fSwicmVxdWlyZWQiOlsidXJsIl19fSx7InJlcXVpcmVkIjpbImRlc2lnblR5cGUiXX1dfSwidWlTY2hlbWEiOnsidXBsb2FkVHlwZSI6eyJ1aTp3aWRnZXQiOiJyYWRpbyJ9LCJ1aTpvcmRlciI6WyJkZXNpZ25UeXBlIiwidXBsb2FkVHlwZSIsIm5hbWUiLCJmaWxlIiwidXJsIl19LCJ0aGVtZSI6ImRlZmF1bHQiLCJsaXZlU2V0dGluZ3MiOnsic2hvd0Vycm9yTGlzdCI6InRvcCIsInZhbGlkYXRlIjpmYWxzZSwiZGlzYWJsZWQiOmZhbHNlLCJub0h0bWw1VmFsaWRhdGUiOmZhbHNlLCJyZWFkb25seSI6ZmFsc2UsIm9taXRFeHRyYURhdGEiOmZhbHNlLCJsaXZlT21pdCI6ZmFsc2UsImV4cGVyaW1lbnRhbF9kZWZhdWx0Rm9ybVN0YXRlQmVoYXZpb3IiOnsiYXJyYXlNaW5JdGVtcyI6InBvcHVsYXRlIiwiZW1wdHlPYmplY3RGaWVsZHMiOiJwb3B1bGF0ZUFsbERlZmF1bHRzIn19fQ==", + "type": "object", "properties": { "name": { "type": "string", - "title": "Give your design file a name", + "title": "Design file name", "default": "Untitled Design", - "x-rjsf-grid-area" : "12" + "x-rjsf-grid-area": "12", + "description": "Provide a name for your design file. This name will help you identify the file more easily. You can also change the name of your design after importing it." }, - "uploadType": { - "title": "Select the Upload Method", + "designType": { + "title": "Select the design type", "enum": [ - "File Upload", - "URL Upload" + "Helm Chart", + "Kubernetes Manifest", + "Docker Compose", + "Meshery Design" ], - "default": "File Upload", - "x-rjsf-grid-area" : "12" + "default": "Meshery Design", + "x-rjsf-grid-area": "12", + "description": "Select the type of design you are uploading. The 'Design Type' determines the format, structure, and content of the file you are uploading. Choose the appropriate design type that matches the nature of your file. Checkout https://docs.meshery.io/guides/meshery-design to learn more about designs" } }, "allOf": [ { "if": { "properties": { - "uploadType": { - "const": "File Upload" + "designType": { + "not": { + "const": "Helm Chart" + } } } }, "then": { - "title": "via URL", "properties": { - "file": { - "type": "string", - "format": "file", - "description": "Browse the design file from your file system", - "x-rjsf-grid-area" : "12" + "uploadType": { + "title": "Select the upload method", + "enum": [ + "File Upload", + "URL Import" + ], + "default": "URL Import", + "x-rjsf-grid-area": "12", + "description": "Choose the method you prefer to upload your design file. Select 'File Upload' if you have the file on your local system, or 'URL Import' if you have the file hosted online." } }, + "allOf": [ + { + "if": { + "properties": { + "uploadType": { + "const": "File Upload" + } + } + }, + "then": { + "properties": { + "file": { + "type": "string", + "format": "file", + "description": "Browse the design file from your file system", + "x-rjsf-grid-area": "12" + } + }, + "required": [ + "file" + ] + } + }, + { + "if": { + "properties": { + "uploadType": { + "const": "URL Import" + } + } + }, + "then": { + "properties": { + "url": { + "type": "string", + "format": "uri", + "title": "URL", + "description": "Provide the URL of the design file you want to import. This should be a direct URL to the file, for example: https://raw.github.com/your-design-file.yaml", + "x-rjsf-grid-area": "12" + } + }, + "required": [ + "url" + ] + } + } + ], "required": [ - "file" + "uploadType" ] } }, { "if": { "properties": { - "uploadType": { - "const": "URL Upload" + "designType": { + "const": "Helm Chart" } } }, "then": { - "title": "via URL", "properties": { "url": { "type": "string", + "format": "uri", "title": "URL", - "description": "raw url of the design file, example: https://raw.github.com/...", - "x-rjsf-grid-area" : "12" + "description": "Provide the URL of the design file you want to import. This should be a direct URL to the file, for example: https://raw.github.com/your-design-file.yaml", + "x-rjsf-grid-area": "12" } }, "required": [ "url" ] } + }, + { + "required": [ + "designType" + ] } ] } \ No newline at end of file diff --git a/schemas/external/ui/catalog/uiSchemaDesignImport.json b/schemas/external/ui/catalog/uiSchemaDesignImport.json index f7480cdf4b..80e36919d3 100644 --- a/schemas/external/ui/catalog/uiSchemaDesignImport.json +++ b/schemas/external/ui/catalog/uiSchemaDesignImport.json @@ -2,5 +2,5 @@ "uploadType": { "ui:widget": "radio" }, - "ui:order" : ["name", "uploadType", "file", "url"] + "ui:order" : ["designType", "uploadType", "name", "file", "url"] } \ No newline at end of file diff --git a/schemas/external/ui/catalog/uiSchemaEnvironment.json b/schemas/external/ui/catalog/uiSchemaEnvironment.json new file mode 100644 index 0000000000..e48114ccee --- /dev/null +++ b/schemas/external/ui/catalog/uiSchemaEnvironment.json @@ -0,0 +1,11 @@ +{ + "organization": { + "ui:disabled": false, + "ui:widget": "select" + }, + "ui:order": [ + "organization", + "name", + "description" + ] +} \ No newline at end of file diff --git a/schemas/external/ui/catalog/uiSchemaWorkspace.json b/schemas/external/ui/catalog/uiSchemaWorkspace.json new file mode 100644 index 0000000000..e48114ccee --- /dev/null +++ b/schemas/external/ui/catalog/uiSchemaWorkspace.json @@ -0,0 +1,11 @@ +{ + "organization": { + "ui:disabled": false, + "ui:widget": "select" + }, + "ui:order": [ + "organization", + "name", + "description" + ] +} \ No newline at end of file diff --git a/schemas/external/ui/catalog/workspace.json b/schemas/external/ui/catalog/workspace.json new file mode 100644 index 0000000000..45dda20a06 --- /dev/null +++ b/schemas/external/ui/catalog/workspace.json @@ -0,0 +1,31 @@ +{ + "//playground": "https://rjsf-team.github.io/react-jsonschema-form/#eyJmb3JtRGF0YSI6e30sInNjaGVtYSI6eyJ0aXRsZSI6IkVudmlyb25tZW50IiwicHJvcGVydGllcyI6eyJkZXNjcmlwdGlvbiI6eyJkZXNjcmlwdGlvbiI6IkRlc2NyaXB0aW9uIG9mIHRoZSBFbnZpcm9ubWVudCIsImZvcm1hdCI6InRleHRhcmVhIiwidGl0bGUiOiJEZXNjcmlwdGlvbiIsInR5cGUiOiJzdHJpbmciLCJ4LXJqc2YtZ3JpZC1hcmVhIjoiMTIifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBuYW1lIG9mIEVudmlyb25tZW50IiwidGl0bGUiOiJOYW1lIiwidHlwZSI6InN0cmluZyIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiJ9LCJvcmdhbml6YXRpb24iOnsidHlwZSI6InN0cmluZyIsInRpdGxlIjoiT3JnYW5pemF0aW9uIiwiZW51bSI6WyIxMTExMjIiXSwiZW51bU5hbWVzIjpbXSwieC1yanNmLWdyaWQtYXJlYSI6IjEyIn19LCJ0eXBlIjoib2JqZWN0IiwicmVxdWlyZWQiOlsibmFtZSIsIm9yZ2FuaXphdGlvbiJdfSwidWlTY2hlbWEiOnsib3JnYW5pemF0aW9uIjp7InVpOmRpc2FibGVkIjpmYWxzZSwidWk6d2lkZ2V0Ijoic2VsZWN0In0sInVpOm9yZGVyIjpbIm9yZ2FuaXphdGlvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiJdfSwidGhlbWUiOiJkZWZhdWx0IiwibGl2ZVNldHRpbmdzIjp7InNob3dFcnJvckxpc3QiOiJ0b3AiLCJ2YWxpZGF0ZSI6ZmFsc2UsImRpc2FibGVkIjpmYWxzZSwibm9IdG1sNVZhbGlkYXRlIjpmYWxzZSwicmVhZG9ubHkiOmZhbHNlLCJvbWl0RXh0cmFEYXRhIjpmYWxzZSwibGl2ZU9taXQiOmZhbHNlLCJleHBlcmltZW50YWxfZGVmYXVsdEZvcm1TdGF0ZUJlaGF2aW9yIjp7ImFycmF5TWluSXRlbXMiOiJwb3B1bGF0ZSIsImVtcHR5T2JqZWN0RmllbGRzIjoicG9wdWxhdGVBbGxEZWZhdWx0cyJ9fX0=", + "title": "Workspace", + "properties": { + "description": { + "description": "Description of the Workspace", + "format": "textarea", + "title": "Description", + "type": "string", + "x-rjsf-grid-area": "12" + }, + "name": { + "description": "The name of Workspace", + "title": "Name", + "type": "string", + "x-rjsf-grid-area": "12" + }, + "organization": { + "type": "string", + "title": "Organization", + "enum": [], + "enumNames": [], + "x-rjsf-grid-area": "12" + } + }, + "type": "object", + "required": [ + "name", + "organization" + ] +} diff --git a/schemas/external/ui/connections/helmConnection/helmRepoConnection.json b/schemas/external/ui/connections/helmConnection/helmRepoConnection.json new file mode 100644 index 0000000000..6164595c2f --- /dev/null +++ b/schemas/external/ui/connections/helmConnection/helmRepoConnection.json @@ -0,0 +1,31 @@ +{ + "//playground": "https://rjsf-team.github.io/react-jsonschema-form/#eyJmb3JtRGF0YSI6eyJmaXJzdE5hbWUiOiJDaHVjIiwibGFzdE5hbWUiOiJOb3JyaXMiLCJhZ2UiOjc1LCJiaW8iOiJSb3VuZGhvdXNlIGtpY2tpbmcgYXNzZXMgc2luY2UgMTk0MCIsInBhc3N3b3JkIjoibm9uZWVkIiwidGVsZXBob25lIjoiMS04MDAtS0lDS0FTUyJ9LCJzY2hlbWEiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJ0eXBlIjoic3RyaW5nIiwidGl0bGUiOiJOYW1lIiwibWluTGVuZ3RoIjoxLCJkZXNjcmlwdGlvbiI6Ik5hbWUgb2YgdGhlIG5ldyBIZWxtIHJlcG8gY29ubmVjdGlvbiJ9LCJkZXNjcmlwdGlvbiI6eyJ0eXBlIjoic3RyaW5nIiwidGl0bGUiOiJEZXNjcmlwdGlvbiIsImZvcm1hdCI6InRleHRhcmVhIiwiZGVzY3JpcHRpb24iOiJEZXNjcmlwdGlvbiBvZiB0aGlzIEhlbG0gcmVwbyBjb25uZWN0aW9uLiJ9LCJ1cmwiOnsidHlwZSI6InN0cmluZyIsInRpdGxlIjoiVVJMIiwiZm9ybWF0IjoidXJpIiwiZGVzY3JpcHRpb24iOiJUaGUgVVJMIG9mIHRoZSBIZWxtIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGNoYXJ0cyBhcmUgaG9zdGVkLiJ9fSwicmVxdWlyZWQiOlsibmFtZSIsInVybCJdfSwidWlTY2hlbWEiOnsibmFtZSI6eyJ1aTpwbGFjZWhvbGRlciI6IkVudGVyIGEgbmFtZSJ9LCJkZXNjcmlwdGlvbiI6eyJ1aTp3aWRnZXQiOiJ0ZXh0YXJlYSIsInVpOnBsYWNlaG9sZGVyIjoiRW50ZXIgYSBkZXNjcmlwdGlvbiJ9LCJ1cmwiOnsidWk6cGxhY2Vob2xkZXIiOiJFbnRlciBhIFVSTCJ9fSwidGhlbWUiOiJkZWZhdWx0IiwibGl2ZVNldHRpbmdzIjp7InNob3dFcnJvckxpc3QiOiJ0b3AiLCJ2YWxpZGF0ZSI6ZmFsc2UsImRpc2FibGVkIjpmYWxzZSwibm9IdG1sNVZhbGlkYXRlIjpmYWxzZSwicmVhZG9ubHkiOmZhbHNlLCJvbWl0RXh0cmFEYXRhIjpmYWxzZSwibGl2ZU9taXQiOmZhbHNlLCJleHBlcmltZW50YWxfZGVmYXVsdEZvcm1TdGF0ZUJlaGF2aW9yIjp7ImFycmF5TWluSXRlbXMiOiJwb3B1bGF0ZSIsImVtcHR5T2JqZWN0RmllbGRzIjoicG9wdWxhdGVBbGxEZWZhdWx0cyJ9fX0=", + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name", + "minLength": 1, + "description": "A short, memorable name of the Helm repository connection.", + "x-rjsf-grid-area" : "12" + }, + "description": { + "type": "string", + "title": "Description", + "format": "textarea", + "description": "An explanation as to the purpose and/or use of this Helm repository.", + "x-rjsf-grid-area" : "12" + }, + "url": { + "type": "string", + "title": "URL", + "format": "uri", + "description": "The URL (must be http/s) of the Helm repository in which one or more Helm charts are hosted.", + "x-rjsf-grid-area" : "12" + } + }, + "required": [ + "name", + "url" + ] +} \ No newline at end of file diff --git a/schemas/external/ui/connections/helmConnection/uiHelmRepoConnection.json b/schemas/external/ui/connections/helmConnection/uiHelmRepoConnection.json new file mode 100644 index 0000000000..ecc93959d9 --- /dev/null +++ b/schemas/external/ui/connections/helmConnection/uiHelmRepoConnection.json @@ -0,0 +1,3 @@ +{ + "ui:order" : ["name", "description", "url"] +} \ No newline at end of file diff --git a/schemas/external/ui/environment/environment.json b/schemas/external/ui/environment/environment.json index d5d99a2d69..26128f2296 100644 --- a/schemas/external/ui/environment/environment.json +++ b/schemas/external/ui/environment/environment.json @@ -1,5 +1,5 @@ { - "//playground": "https://rjsf-team.github.io/react-jsonschema-form/#eyJmb3JtRGF0YSI6eyJhcHBsaWNhdGlvblR5cGUiOiJIZWxtIENoYXJ0In0sInNjaGVtYSI6eyJ0aXRsZSI6IlVwbG9hZCBBcHBsaWNhdGlvbiBGaWxlIiwicHJvcGVydGllcyI6eyJuYW1lIjp7InR5cGUiOiJzdHJpbmciLCJ0aXRsZSI6IkdpdmUgeW91ciBhcHBsaWNhdGlvbiBmaWxlIGEgbmFtZSIsIngtcmpzZi1ncmlkLWFyZWEiOiI2In0sImFwcGxpY2F0aW9uVHlwZSI6eyJ0aXRsZSI6IlNlbGVjdCBhcHBsaWNhdGlvbiB0eXBlIiwiZW51bSI6WyJIZWxtIENoYXJ0IiwiS3ViZXJuZXRlcyBNYW5pZmVzdCIsIkRvY2tlciBDb21wb3NlIl0sImRlZmF1bHQiOiJIZWxtIENoYXJ0IiwieC1yanNmLWdyaWQtYXJlYSI6IjYifX0sImRlcGVuZGVuY2llcyI6eyJhcHBsaWNhdGlvblR5cGUiOnsib25lT2YiOlt7InByb3BlcnRpZXMiOnsiYXBwbGljYXRpb25UeXBlIjp7ImNvbnN0IjoiSGVsbSBDaGFydCJ9LCJ1cmwiOnsidHlwZSI6InN0cmluZyIsImZvcm1hdCI6InVyaSIsInRpdGxlIjoiVVJMIiwiZGVzY3JpcHRpb24iOiJyYXcgVVJMIG9mIHRoZSBhcHBsaWNhdGlvbiBmaWxlLCBleGFtcGxlOiBodHRwczovL3Jhdy5naXRodWIuY29tLy4uLiIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiJ9fSwicmVxdWlyZWQiOlsidXJsIl19LHsicHJvcGVydGllcyI6eyJhcHBsaWNhdGlvblR5cGUiOnsiY29uc3QiOiJLdWJlcm5ldGVzIE1hbmlmZXN0In19LCJvbmVPZiI6W3sidGl0bGUiOiJVUkwgVXBsb2FkIiwicHJvcGVydGllcyI6eyJ1cmwiOnsidHlwZSI6InN0cmluZyIsImZvcm1hdCI6InVyaSIsInRpdGxlIjoiVVJMIiwiZGVzY3JpcHRpb24iOiJyYXcgVVJMIG9mIHRoZSBhcHBsaWNhdGlvbiBmaWxlLCBleGFtcGxlOiBodHRwczovL3Jhdy5naXRodWIuY29tLy4uLiIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiJ9fSwicmVxdWlyZWQiOlsidXJsIl19LHsidGl0bGUiOiJGaWxlIFVwbG9hZCIsInByb3BlcnRpZXMiOnsiZmlsZSI6eyJ0eXBlIjoic3RyaW5nIiwiZm9ybWF0IjoiZGF0YS11cmwiLCJ0aXRsZSI6IkZpbGUgVXBsb2FkIiwiZGVzY3JpcHRpb24iOiJCcm93c2UgdGhlIGFwcGxpY2F0aW9uIGZpbGUgZnJvbSB5b3VyIGZpbGUgc3lzdGVtIiwieC1yanNmLWdyaWQtYXJlYSI6IjEyIn19LCJyZXF1aXJlZCI6WyJmaWxlIl19XX0seyJwcm9wZXJ0aWVzIjp7ImFwcGxpY2F0aW9uVHlwZSI6eyJjb25zdCI6IkRvY2tlciBDb21wb3NlIn19LCJvbmVPZiI6W3sicHJvcGVydGllcyI6eyJ1cmwiOnsidHlwZSI6InN0cmluZyIsImZvcm1hdCI6InVyaSIsInRpdGxlIjoiVVJMIiwiZGVzY3JpcHRpb24iOiJyYXcgVVJMIG9mIHRoZSBhcHBsaWNhdGlvbiBmaWxlLCBleGFtcGxlOiBodHRwczovL3Jhdy5naXRodWIuY29tLy4uLiIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiJ9fSwicmVxdWlyZWQiOlsidXJsIl19LHsicHJvcGVydGllcyI6eyJmaWxlIjp7InR5cGUiOiJzdHJpbmciLCJmb3JtYXQiOiJkYXRhLXVybCIsInRpdGxlIjoiRmlsZSBVcGxvYWQiLCJkZXNjcmlwdGlvbiI6IkJyb3dzZSB0aGUgYXBwbGljYXRpb24gZmlsZSBmcm9tIHlvdXIgZmlsZSBzeXN0ZW0iLCJ4LXJqc2YtZ3JpZC1hcmVhIjoiMTIifX0sInJlcXVpcmVkIjpbImZpbGUiXX1dfV19fX0sInVpU2NoZW1hIjp7ImFwcGxpY2F0aW9uVHlwZSI6eyJ1aTp3aWRnZXQiOiJyYWRpbyJ9fSwidGhlbWUiOiJtYXRlcmlhbC11aS01IiwibGl2ZVNldHRpbmdzIjp7fX0=", + "//playground": "https://rjsf-team.github.io/react-jsonschema-form/#eyJmb3JtRGF0YSI6e30sInNjaGVtYSI6eyJ0aXRsZSI6IkVudmlyb25tZW50IiwicHJvcGVydGllcyI6eyJkZXNjcmlwdGlvbiI6eyJkZXNjcmlwdGlvbiI6IkRlc2NyaXB0aW9uIG9mIHRoZSBFbnZpcm9ubWVudCIsImZvcm1hdCI6InRleHRhcmVhIiwidGl0bGUiOiJEZXNjcmlwdGlvbiIsInR5cGUiOiJzdHJpbmciLCJ4LXJqc2YtZ3JpZC1hcmVhIjoiMTIifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBuYW1lIG9mIEVudmlyb25tZW50IiwidGl0bGUiOiJOYW1lIiwidHlwZSI6InN0cmluZyIsIngtcmpzZi1ncmlkLWFyZWEiOiIxMiJ9LCJvcmdhbml6YXRpb24iOnsidHlwZSI6InN0cmluZyIsInRpdGxlIjoiT3JnYW5pemF0aW9uIiwiZW51bSI6WyIxMTExMjIiXSwiZW51bU5hbWVzIjpbXSwieC1yanNmLWdyaWQtYXJlYSI6IjEyIn19LCJ0eXBlIjoib2JqZWN0IiwicmVxdWlyZWQiOlsibmFtZSIsIm9yZ2FuaXphdGlvbiJdfSwidWlTY2hlbWEiOnsib3JnYW5pemF0aW9uIjp7InVpOmRpc2FibGVkIjpmYWxzZSwidWk6d2lkZ2V0Ijoic2VsZWN0In0sInVpOm9yZGVyIjpbIm9yZ2FuaXphdGlvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiJdfSwidGhlbWUiOiJkZWZhdWx0IiwibGl2ZVNldHRpbmdzIjp7InNob3dFcnJvckxpc3QiOiJ0b3AiLCJ2YWxpZGF0ZSI6ZmFsc2UsImRpc2FibGVkIjpmYWxzZSwibm9IdG1sNVZhbGlkYXRlIjpmYWxzZSwicmVhZG9ubHkiOmZhbHNlLCJvbWl0RXh0cmFEYXRhIjpmYWxzZSwibGl2ZU9taXQiOmZhbHNlLCJleHBlcmltZW50YWxfZGVmYXVsdEZvcm1TdGF0ZUJlaGF2aW9yIjp7ImFycmF5TWluSXRlbXMiOiJwb3B1bGF0ZSIsImVtcHR5T2JqZWN0RmllbGRzIjoicG9wdWxhdGVBbGxEZWZhdWx0cyJ9fX0=", "title": "Environment", "properties": { "description": { @@ -23,5 +23,9 @@ "x-rjsf-grid-area": "12" } }, - "type": "object" + "type": "object", + "required": [ + "name", + "organization" + ] } \ No newline at end of file diff --git a/schemas/schemaProvider.go b/schemas/schemaProvider.go new file mode 100644 index 0000000000..172589dd85 --- /dev/null +++ b/schemas/schemaProvider.go @@ -0,0 +1,55 @@ +package schemas + +import ( + "fmt" +) + +func getSchemaMap() map[string]string { + return map[string]string{ + "application": "external/ui/catalog/applicationImport.json", + "filter": "external/ui/catalog/filterImport.json", + "design": "external/ui/catalog/designImport.json", + "publish": "external/ui/catalog/publishCatalogItem.json", + "helmRepo": "external/ui/connections/helmConnection/helmRepoConnection.json", + "environment": "external/ui/environment/environment.json", + "workspace": "external/ui/catalog/workspace.json", + } +} + +func getUiSchemaMap() map[string]string { + return map[string]string{ + "application": "external/ui/catalog/uiSchemaApplication.json", + "design": "external/ui/catalog/uiSchemaDesignImport.json", + "filter": "external/ui/catalog/uiSchemaFilter.json", + "publish": "external/ui/catalog/uiSchemaPublishCatalogItem.json", + "helmRepo": "external/ui/connections/helmConnection/uiHelmRepoConnection.json", + "environment": "external/ui/catalog/uiSchemaEnvironment.json", + "workspace": "external/ui/catalog/uiSchemaWorkspace.json", + } +} + +// ServeJSonFile serves the content of the JSON schema along with the uiSchema if any is present +func ServeJSonFile(resourceName string) ([]byte, []byte, error) { + schemaLocation := getSchemaMap()[resourceName] + if schemaLocation == "" { + return nil, nil, fmt.Errorf("requested resource's (%s) schema is not found", resourceName) + } + + jsonContent, err := Schemas.ReadFile(schemaLocation) + + if err != nil { + return nil, nil, fmt.Errorf("error reading json file: %s", err) + } + + uiSchemaLocation := getUiSchemaMap()[resourceName] + if uiSchemaLocation == "" { + return jsonContent, nil, nil + } + + uiSchemaJsonContent, err := Schemas.ReadFile(uiSchemaLocation) + if err != nil { + return jsonContent, nil, nil + } + + return jsonContent, uiSchemaJsonContent, nil +}