Fix curl export

This commit is contained in:
Gregory Schier committed 2016-07-21 14:55:03 -07:00
1 parent 94bf3283fe
commit 7a7ef7c570
9 files changed
+57 -24

No files matched your search

-1
View File
@@ -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 {
+14
View File
@@ -0,0 +1,14 @@
import React, {PropTypes} from 'react';
import {MOD_SYM} from '../../lib/constants';
const DropdownHint = ({char}) => (
<div className="dropdown__hint">
<span>{MOD_SYM}{char}</span>
</div>
);
DropdownHint.propTypes = {
char: PropTypes.string.isRequired
};
export default DropdownHint;
+2
View File
@@ -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 {
<li>
<button onClick={e => db.requestCopy(request)}>
<i className="fa fa-copy"></i> Duplicate
<DropdownHint char="D"></DropdownHint>
</button>
</li>
<li>
@@ -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 {
<i className="fa fa-caret-down"></i>
</button>
<ul>
<li>
<button onClick={e => this._requestCreate()}>
<i className="fa fa-plus-circle"></i> New Request
<DropdownHint char="N"></DropdownHint>
</button>
</li>
<li>
<button onClick={e => EnvironmentEditModal.show()}>
<i className="fa fa-code"></i> Environment
<DropdownHint char="E"></DropdownHint>
</button>
</li>
<li>
@@ -54,11 +62,6 @@ class RequestGroupActionsDropdown extends Component {
<i className="fa fa-edit"></i> Rename
</button>
</li>
<li>
<button onClick={e => this._requestCreate()}>
<i className="fa fa-plus-circle"></i> New Request
</button>
</li>
{/*<li>*/}
{/*<button onClick={e => db.requestGroupCreate({parentId: requestGroup._id})}>*/}
{/*<i className="fa fa-folder"></i> New Folder*/}
@@ -66,7 +69,7 @@ class RequestGroupActionsDropdown extends Component {
{/*</li>*/}
<li>
<button onClick={e => db.requestGroupRemove(requestGroup)}>
<i className="fa fa-trash-o"></i> Delete Group
<i className="fa fa-trash-o"></i> Delete
</button>
</li>
</ul>
+3
View File
@@ -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 {
<button
onClick={e => db.requestCreateAndActivate(workspace, {parentId: workspace._id})}>
<i className="fa fa-plus-circle"></i> New Request
<DropdownHint char="N"></DropdownHint>
</button>
</li>
@@ -158,6 +160,7 @@ class WorkspaceDropdown extends Component {
<li>
<button onClick={e => SettingsModal.show()}>
<i className="fa fa-cog"></i> Settings
<DropdownHint char=","></DropdownHint>
</button>
</li>
<li>
+7
View File
@@ -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;
}
}
}
}
+4
View File
@@ -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';
}
+2
View File
@@ -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;
+16 -17
View File
@@ -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);