From 7a7ef7c570d1ed0bc34b8c48c44ef828fbbc65fc Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Thu, 21 Jul 2016 14:55:03 -0700 Subject: [PATCH] Fix curl export --- app/components/CurlExportModal.js | 1 - app/components/base/DropdownHint.js | 14 ++++++++ app/containers/RequestActionsDropdown.js | 2 ++ app/containers/RequestGroupActionsDropdown.js | 15 +++++---- app/containers/WorkspaceDropdown.js | 3 ++ app/css/components/dropdown.scss | 7 ++++ app/lib/appInfo.js | 4 +++ app/lib/constants.js | 2 ++ app/lib/export/curl.js | 33 +++++++++---------- 9 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 app/components/base/DropdownHint.js diff --git a/app/components/CurlExportModal.js b/app/components/CurlExportModal.js index 061a7a5290..0466df2498 100644 --- a/app/components/CurlExportModal.js +++ b/app/components/CurlExportModal.js @@ -6,7 +6,6 @@ import Modal from './base/Modal'; import ModalBody from './base/ModalBody'; import ModalHeader from './base/ModalHeader'; import ModalFooter from './base/ModalFooter'; -import {MODAL_CURL_EXPORT} from '../lib/constants'; import {exportCurl} from '../lib/export/curl'; class CurlExportModal extends ModalComponent { diff --git a/app/components/base/DropdownHint.js b/app/components/base/DropdownHint.js new file mode 100644 index 0000000000..9635de8155 --- /dev/null +++ b/app/components/base/DropdownHint.js @@ -0,0 +1,14 @@ +import React, {PropTypes} from 'react'; +import {MOD_SYM} from '../../lib/constants'; + +const DropdownHint = ({char}) => ( +
+ {MOD_SYM}{char} +
+); + +DropdownHint.propTypes = { + char: PropTypes.string.isRequired +}; + +export default DropdownHint; diff --git a/app/containers/RequestActionsDropdown.js b/app/containers/RequestActionsDropdown.js index d4aabf6f25..778e6decfb 100644 --- a/app/containers/RequestActionsDropdown.js +++ b/app/containers/RequestActionsDropdown.js @@ -1,6 +1,7 @@ import React, {Component, PropTypes} from 'react'; import {connect} from 'react-redux' import Dropdown from '../components/base/Dropdown'; +import DropdownHint from '../components/base/DropdownHint'; import CurlExportModal from '../components/CurlExportModal'; import PromptModal from '../components/PromptModal'; import * as db from '../database'; @@ -31,6 +32,7 @@ class RequestActionsDropdown extends Component {
  • diff --git a/app/containers/RequestGroupActionsDropdown.js b/app/containers/RequestGroupActionsDropdown.js index 9ca60894b9..2ed2ba20f8 100644 --- a/app/containers/RequestGroupActionsDropdown.js +++ b/app/containers/RequestGroupActionsDropdown.js @@ -1,6 +1,7 @@ import React, {Component, PropTypes} from 'react'; import {connect} from 'react-redux' import Dropdown from '../components/base/Dropdown'; +import DropdownHint from '../components/base/DropdownHint'; import EnvironmentEditModal from '../components/EnvironmentEditModal'; import PromptModal from '../components/PromptModal'; import * as db from '../database'; @@ -44,9 +45,16 @@ class RequestGroupActionsDropdown extends Component { diff --git a/app/containers/WorkspaceDropdown.js b/app/containers/WorkspaceDropdown.js index 41f3d99960..62d8280d6e 100644 --- a/app/containers/WorkspaceDropdown.js +++ b/app/containers/WorkspaceDropdown.js @@ -5,6 +5,7 @@ import {connect} from 'react-redux' import Dropdown from '../components/base/Dropdown'; import DropdownDivider from '../components/base/DropdownDivider'; +import DropdownHint from '../components/base/DropdownHint'; import PromptModal from '../components/PromptModal'; import AlertModal from '../components/AlertModal'; import SettingsModal from '../components/SettingsModal'; @@ -112,6 +113,7 @@ class WorkspaceDropdown extends Component {
  • @@ -158,6 +160,7 @@ class WorkspaceDropdown extends Component {
  • diff --git a/app/css/components/dropdown.scss b/app/css/components/dropdown.scss index fdef5f95c9..0312edc97d 100644 --- a/app/css/components/dropdown.scss +++ b/app/css/components/dropdown.scss @@ -1,5 +1,6 @@ @import '../constants/colors'; @import '../constants/dimensions'; +@import '../constants/fonts'; .dropdown { position: relative; @@ -58,6 +59,12 @@ width: 2em; text-align: center; } + + .dropdown__hint { + font-family: $font-monospace; + color: $hl; + float: right; + } } } } diff --git a/app/lib/appInfo.js b/app/lib/appInfo.js index d9e32884e7..8e0b28c06d 100644 --- a/app/lib/appInfo.js +++ b/app/lib/appInfo.js @@ -4,6 +4,10 @@ export function getVersion () { return appJson.version; } +export function isMac () { + return process.platform === 'darwin'; +} + export function isDevelopment () { return process.env.NODE_ENV === 'development'; } diff --git a/app/lib/constants.js b/app/lib/constants.js index b7eb2e35e8..a0ba1726b2 100644 --- a/app/lib/constants.js +++ b/app/lib/constants.js @@ -1,4 +1,5 @@ import {isDevelopment} from './appInfo'; +import {isMac} from './appInfo'; // Global Stuff export const LOCALSTORAGE_KEY = 'insomnia.state'; @@ -10,6 +11,7 @@ export const CHANGELOG_URL = isDevelopment() ? 'http://localhost:5000/changelog.json' : 'http://changelog.insomnia.rest/changelog.json'; export const STATUS_CODE_PEBKAC = -333; +export const MOD_SYM = isMac() ? '⌘' : 'ctrl+'; // UI Stuff export const MAX_SIDEBAR_REMS = 35; diff --git a/app/lib/export/curl.js b/app/lib/export/curl.js index feeeb06e11..498e2a385b 100644 --- a/app/lib/export/curl.js +++ b/app/lib/export/curl.js @@ -4,6 +4,7 @@ import render from '../render'; import * as querystring from '../querystring'; import * as db from '../../database'; import {DEBOUNCE_MILLIS, METHOD_GET} from '../constants'; +import {getRenderedRequest} from '../render'; const FLAGS = [ 'cacert', 'capath', 'E', 'cert', 'cert-type', 'ciphers', 'K', 'config', @@ -150,52 +151,50 @@ export function exportCurl (requestId) { // First, lets wait for all debounces to finish setTimeout(() => { - db.requestGetById(requestId).then(request => { - db.requestGroupGetById(request.parentId).then(requestGroup => { - const renderCtx = requestGroup ? requestGroup.environment : {}; + db.requestGetById(requestId).then(r => { + getRenderedRequest(r).then(renderedRequest => { // Build the querystring - const paramsString = JSON.stringify(request.parameters); - const parameters = JSON.parse(render(paramsString, renderCtx)); + const {parameters} = renderedRequest; const qs = querystring.buildFromParams(parameters); // Build the Url - const url = querystring.joinURL(request.url, qs); - const IS_GET_REQUEST = request.method.toUpperCase() === METHOD_GET.toUpperCase(); + const url = querystring.joinURL(renderedRequest.url, qs); + const IS_GET_REQUEST = renderedRequest.method.toUpperCase() === METHOD_GET.toUpperCase(); let cmd = 'curl'; // HTTP method if (!IS_GET_REQUEST) { - cmd += ` -X ${request.method.toUpperCase()}`; + cmd += ` -X ${renderedRequest.method.toUpperCase()}`; } // Url cmd += ` '${url.replace(`'`, `'"'"'`)}'`; // Payload - if (request.body) { - cmd += ` \\\n -d '${request.body.replace(`'`, `'"'"'`)}'`; + if (renderedRequest.body) { + cmd += ` \\\n -d '${renderedRequest.body.replace(`'`, `'"'"'`)}'`; } // Basic auth - const {username, password} = request.authentication; + const {username, password} = renderedRequest.authentication; if (username || password) { cmd += ` \\\n -u ${username}:${password}`; } // Headers - const hasContentTypeHeader = !!request.headers.find(h => h.name.toUpperCase() === 'CONTENT-TYPE'); + const hasContentTypeHeader = !!renderedRequest.headers.find(h => h.name.toUpperCase() === 'CONTENT-TYPE'); if (!hasContentTypeHeader && !IS_GET_REQUEST) { - const value = request.contentType; + const value = renderedRequest.contentType; const name = 'Content-Type'; - request.headers.push({name, value}) + renderedRequest.headers.push({name, value}) } - for (let i = 0; i < request.headers.length; i++) { - const {name, value} = request.headers[i]; + for (let i = 0; i < renderedRequest.headers.length; i++) { + const {name, value} = renderedRequest.headers[i]; if (!name) { // Don't add headers with no name @@ -205,7 +204,7 @@ export function exportCurl (requestId) { cmd += ` \\\n -H '${name}: ${value}'`; } - resolve(render(cmd, renderCtx)); + resolve(cmd); }); }); }, DEBOUNCE_MILLIS);