From ccff68ad1807ee8e9f661d1d804f136a1558fa05 Mon Sep 17 00:00:00 2001 From: Jacob Anavisca Date: Sat, 15 Feb 2020 17:36:38 -0500 Subject: [PATCH 1/4] Postman collection parsing --- .../collections/importExportCollections.vue | 134 +++++++++++++++++- lang/en-US.js | 1 + 2 files changed, 132 insertions(+), 3 deletions(-) diff --git a/components/collections/importExportCollections.vue b/components/collections/importExportCollections.vue index 8df70d36d..6d79fb21e 100644 --- a/components/collections/importExportCollections.vue +++ b/components/collections/importExportCollections.vue @@ -120,20 +120,40 @@ export default { reader.onload = event => { let content = event.target.result; let collections = JSON.parse(content); - this.$store.commit("postwoman/replaceCollections", collections); + if (collections[0]) { + let [ name, folders, requests ] = Object.keys(collections[0]) + if (name === 'name' && folders === 'folders' && requests === 'requests') { + // Do nothing + } + } else if (collections.info && collections.info.schema.includes('v2.1.0')) { + collections = this.parsePostmanCollection(collections) + } else { + return this.failedImport(); + } + this.$store.commit("postwoman/importCollections", collections); + this.fileImported(); }; reader.readAsText(this.$refs.inputChooseFileToReplaceWith.files[0]); - this.fileImported(); }, importFromJSON() { let reader = new FileReader(); reader.onload = event => { let content = event.target.result; let collections = JSON.parse(content); + if (collections[0]) { + let [ name, folders, requests ] = Object.keys(collections[0]) + if (name === 'name' && folders === 'folders' && requests === 'requests') { + // Do nothing + } + } else if (collections.info && collections.info.schema.includes('v2.1.0')) { + collections = this.parsePostmanCollection(collections); + } else { + return this.failedImport(); + } this.$store.commit("postwoman/importCollections", collections); + this.fileImported(); }; reader.readAsText(this.$refs.inputChooseFileToImportFrom.files[0]); - this.fileImported(); }, exportJSON() { let text = this.collectionJson; @@ -161,6 +181,114 @@ export default { this.$toast.info(this.$t("file_imported"), { icon: "folder_shared" }); + }, + failedImport() { + this.$toast.error(this.$t("import_failed"), { + icon: "error" + }); + }, + parsePostmanCollection(collection, folders = true) { + let postwomanCollection = folders ? [{ + "name": "", + "folders": [], + "requests": [] + }] + : { + "name": "", + "requests": [] + }; + for(let collectionItem of collection.item) { + if (collectionItem.request) { + if (postwomanCollection[0]) { + postwomanCollection[0].name = collection.info ? collection.info.name : ""; + postwomanCollection[0].requests.push(this.parsePostmanRequest(collectionItem)); + } else { + postwomanCollection.name = collection.name ? collection.name + : ""; + postwomanCollection.requests.push(this.parsePostmanRequest(collectionItem)); + } + } else if (collectionItem.item) { + if (collectionItem.item[0]) { + postwomanCollection[0].folders.push(this.parsePostmanCollection(collectionItem, false)); + } + } + } + return postwomanCollection; + }, + parsePostmanRequest(requestObject) { + let pwRequest = { + "url": "", + "path": "", + "method": "", + "auth": "", + "httpUser": "", + "httpPassword": "", + "passwordFieldType": "password", + "bearerToken": "", + "headers": [], + "params": [], + "bodyParams": [], + "rawParams": "", + "rawInput": false, + "contentType": "", + "requestType": "", + "name": "", + }; + + pwRequest.name = requestObject.name; + let requestObjectUrl = requestObject.request.url.raw.match(/^(.+:\/\/[^\/]+|{[^\/]+})(\/[^\?]+|).*$/); + pwRequest.url = requestObjectUrl[1]; + pwRequest.path = requestObjectUrl[2] ? requestObjectUrl[2] : ""; + pwRequest.method = requestObject.request.method; + let itemAuth = requestObject.request.auth ? requestObject.request.auth + : ""; + let authType = itemAuth ? itemAuth.type + : ""; + if (authType === "basic") { + pwRequest.auth = "Basic Auth"; + pwRequest.httpUser = itemAuth.basic[0].key === "username" + ? itemAuth.basic[0].value + : itemAuth.basic[1].value; + pwRequest.httpPassword = itemAuth.basic[0].key === "password" + ? itemAuth.basic[0].value + : itemAuth.basic[1].value; + } else if (authType === "oauth2") { + pwRequest.auth = "OAuth 2.0"; + pwRequest.bearerToken = itemAuth.oauth2[0].key === "accessToken" + ? itemAuth.oauth2[0].value + : itemAuth.oauth2[1].value; + } else if (authType === "bearer") { + pwRequest.auth = "Bearer Token"; + pwRequest.bearerToken = itemAuth.bearer[0].value; + } + let requestObjectHeaders = requestObject.request.header; + if (requestObjectHeaders) { + pwRequest.headers = requestObjectHeaders; + for (let header of pwRequest.headers) { + delete header.name; + delete header.type; + } + } + let requestObjectParams = requestObject.request.url.query; + if (requestObjectParams) { + pwRequest.params = requestObjectParams; + for (let param of pwRequest.params) { + delete param.disabled; + } + } + if (requestObject.request.body) { + if (requestObject.request.body.mode === "urlencoded") { + let params = requestObject.request.body.urlencoded; + pwRequest.bodyParams = params ? params : []; + for(let param of pwRequest.bodyParams) { + delete param.type; + } + } else if (requestObject.request.body.mode === "raw") { + pwRequest.rawInput = true; + pwRequest.rawParams = requestObject.request.body.raw; + } + } + return pwRequest; } } }; diff --git a/lang/en-US.js b/lang/en-US.js index 9191cec5f..63b786060 100644 --- a/lang/en-US.js +++ b/lang/en-US.js @@ -222,6 +222,7 @@ export default { payload: "Payload", choose_file: "Choose a file", file_imported: "File imported", + import_failed: "Import failed", f12_details: "(F12 for details)", we_use_cookies: "We use cookies", copied_to_clipboard: "Copied to clipboard", From ae6d33febdb467cb6c08aa9e76b7eaf2e5bb79b8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2020 01:05:27 +0000 Subject: [PATCH 2/4] chore(deps): bump vue-virtual-scroll-list from 1.4.4 to 1.4.5 Bumps [vue-virtual-scroll-list](https://github.com/tangbc/vue-virtual-scroll-list) from 1.4.4 to 1.4.5. - [Release notes](https://github.com/tangbc/vue-virtual-scroll-list/releases) - [Commits](https://github.com/tangbc/vue-virtual-scroll-list/compare/v1.4.4...v1.4.5) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d3bf154b4..61b7548a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12087,9 +12087,9 @@ "integrity": "sha512-GVbwInwnqkVxQ4GU/XYeQt1e0dAXL8sF5Hr1H/coCBbYUan5xP0G2mEz/HRDf1lt73rFQAN/bJcLTOKkqiM6tg==" }, "vue-virtual-scroll-list": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.4.4.tgz", - "integrity": "sha512-wU7FDpd9Xy4f62pf8SBg/ak21jMI/pdx4s4JPah+z/zuhmeAafQgp8BjtZvvt+b0BZOsOS1FJuCfUH7azTkivQ==" + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.4.5.tgz", + "integrity": "sha512-9Rdq5acfwHcOmtIJC9LeLdfaXnXuJW6DwyGxXEgIT3aMyXbluP4eEMnKC3uNQ/kiZ0Eno7G95xYfWvopEMQpmA==" }, "vuefire": { "version": "2.2.1", diff --git a/package.json b/package.json index 6311d60db..a29a78d72 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "nuxt": "^2.11.0", "nuxt-i18n": "^6.5.0", "v-tooltip": "^2.0.3", - "vue-virtual-scroll-list": "^1.4.4", + "vue-virtual-scroll-list": "^1.4.5", "vuefire": "^2.2.1", "vuejs-auto-complete": "^0.9.0", "vuex-persist": "^2.2.0", From 8629eda6d47c6d36fb934d390da2a9c3c13cb736 Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Tue, 18 Feb 2020 22:10:53 +0530 Subject: [PATCH 3/4] :iphone: Working on responsive design --- pages/index.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/pages/index.vue b/pages/index.vue index e74fd46ea..ac6338f28 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -247,7 +247,6 @@ {{ $t("raw_input") }} - {{ rawInput ? $t("enabled") : $t("disabled") }}
From 0b6671d538221b27c46aa36c32c9bcea152d4026 Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Tue, 18 Feb 2020 23:56:22 +0530 Subject: [PATCH 4/4] :art: Improving structure / format of the code --- components/modal.vue | 2 +- pages/index.vue | 6 ++++-- pages/settings.vue | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/components/modal.vue b/components/modal.vue index c80b24be9..4b12fa291 100644 --- a/components/modal.vue +++ b/components/modal.vue @@ -25,7 +25,7 @@ left: 0; width: 100%; height: 100%; - background-color: rgba(0, 0, 0, 0.87); + background-color: rgba(0, 0, 0, 0.32); display: flex; align-items: center; justify-content: center; diff --git a/pages/index.vue b/pages/index.vue index ac6338f28..4b53a3057 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -458,7 +458,8 @@ :disabled="!isValidURL" v-tooltip.bottom="$t('copy_request_link')" > - file_copy + share + file_copy