mirror of
https://github.com/Kong/insomnia.git
synced 2026-10-24 23:59:16 -04:00
Fix curl export
This commit is contained in:
1 parent
94bf3283fe
commit
7a7ef7c570
9 files changed
+57
-24
No files matched your search
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,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';
|
||||
}
|
||||
@@ -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
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user