Skip to content

Commit 36e0a35

Browse files
committed
Merge branch 'develop' into alpha
2 parents f8541e5 + 7ffc4fc commit 36e0a35

26 files changed

+1326
-1151
lines changed

.travis.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,5 @@ env:
3535
- secure: rBRZZG8d933qFaCaakId+GMrZFHVPHr1hJtpy/2UN8wvqvnbo9ChHGer79cfhohc23Ligx+OhdSLSVl+bC4uesVX1kUssiFUFFDcYciEsJHplO1CtvPkApsEUJL3cndrvYrA52HPOmhtpuh74Npxdn8LrPyiNnLCTdNSt86dp/w8ve2N2ZI3CSEO9nG9L+rMqEkGC5fLQxXNsD4bJoDomg9tntXQYO2anyLnHa767SkbsbfHmrrF5BRPcX8i6/ZPtqG1hOnD72rHJwN0mpLJVsL7htbs9iyMkMciQn5j+BTfV00o51Id3rR0AxrAJUPfb+62i3s7vwJh9cyOTSJ7tBQSxe5EGa0gUlikHJ3elhDFylZXQM/Tmch5yJ0btNWQTsJI7ZwWe+RImDmPtWcNijxU144VdLq8nPz7rBuV4ouIgnnLA1QUT9IjS9vR09xa0DBH2Amjoea2bj7wHj86gfb/ECMkTfRysLrs+DVysC0pqAOONuvz6mBF7OLvK7uN08w6LG3VwwHJ28K52cudiHNv1NXv9hwWxPzizg3VG6WhTlA8y/wSoNDf3Q0UROfPouwx+AM+ojpM5gYVApAwHZvAjsn/Nu+lMQVT3xfnnr+SehTJprK+9Yv1HAFMJNFKbN71w7pdUx05B/YWxMxElg6Pp8s6mlntrsFbCNJ6lCo=
3636
- secure: os+mH9yyl753fv3ro3mat5wzmw6BpHIOva4JFF3BtCUqZ6wIZgUyS9TwglEwpVuS1DGzzEBqwMF83azvJ63cdlLrSAkfVPtqfWxnhHQeCEN9vy1n0PBFaYOkteeng1ltHdiwSq9wNNNeiYT3cHPWhUwZM/kGelGm/AAGlQn6ZQXJp3c0g9xjnynaMpVpvRXOiBwKW4iWvIhSPDNLVJRzyGB2laZAwQFkiyA6+d3yrsMz4iJmqpicedBg1JrSe7ssIOjZ11Ypa8D875BN6hQQFCEuFr/vtEhrnettvEkmVBD83eVA9hTj5CyqlYf3nwY10kQ5VoiFuDIv67AFI+7Ty7+OSKU9TjItdXfyoGjLF+9k1NEFCDR+MvGUWLx9VV2QEw8WJ8N3ngmchk0vCqgQ/bSB1K9qCTlDiQfvGtjmnMWdG2LxewIRQlQWueYhMOvDvDEECmAYlvn32TY/w9ay3wp/uxZkJZuIDv+plE6GK+QMr3EuR/0p6RpQnpNljDbXOYHxBQ9kwbsanUoecgXjPypZkulpAPSwICMQ7SO07rJEdGZqaGquraeiERT91t+7j/2+c3I3h5YTj2IYj4EdD+0a9Dt8cO3skfw3Y4r/ThYKtK/TLpShtCQWGPGpOpGgjhTRIDb8wr612Fsc45pD+VgrtH1ZA4pr7NyApXpvJQE=
3737
before_install:
38-
- openssl aes-256-cbc -K $encrypted_cb8606543db7_key -iv $encrypted_cb8606543db7_iv
39-
-in certs.tar.enc -out certs.tar -d
38+
- openssl aes-256-cbc -K $encrypted_cb8606543db7_key -iv $encrypted_cb8606543db7_iv -in certs.tar.enc -out certs.tar -d
4039
- tar xvf certs.tar

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Find an installer for your platform under "Assets" section.
1212

1313
![Assets section for a release](.gitbook/assets/image%20%2843%29.png)
1414

15-
For example, for Windows you would download `arc-setup.exe`. For MacOS download `arc-13.0.7.dmg`.
15+
For example, for Windows you would download [`arc-setup.exe`](https://github.com/advanced-rest-client/arc-electron/releases/latest/download/arc-setup.exe). For MacOS download `arc-13.0.7.dmg`.
1616

1717
{% hint style="info" %}
1818
Version number may be different to the one in the screen shoot. For normal use, please, download latest stable version.

app.js

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class ArcInit {
9898
ipc.on('popup-app-menu-opened', this._popupMenuOpened.bind(this));
9999
ipc.on('popup-app-menu-closed', this._popupMenuClosed.bind(this));
100100
ipc.on('system-theme-changed', this._systemThemeChangeHandler.bind(this));
101+
document.body.addEventListener('settings-changed', this._settingsHandler.bind(this));
101102
}
102103
/**
103104
* Requests initial state information from the main process for current
@@ -125,29 +126,34 @@ class ArcInit {
125126
}
126127
this.initConfig = initConfig;
127128
window.ArcConfig.initConfig = initConfig;
128-
await this.initApp();
129-
await this.upgradeApp();
129+
130+
let cnf;
131+
try {
132+
cnf = await this.prefProxy.load();
133+
await this._createApp(cnf);
134+
} catch (e) {
135+
this.reportFatalError(e);
136+
throw e;
137+
}
138+
if (typeof cnf.ignoreSessionCookies === 'boolean') {
139+
this.cookieBridge.ignoreSessionCookies = cnf.ignoreSessionCookies;
140+
}
141+
await this.initApp(cnf);
142+
await this.upgradeApp(cnf);
130143
await this.processInitialPath();
131144
await this.removeLoader();
132145
console.log('Application window is now ready.');
133146
}
134147
/**
135148
* Initialized the application when window is ready.
136149
*
150+
* @param {Object} cnf Current qapplication configuration
137151
* @return {Promise}
138152
*/
139-
async initApp() {
153+
async initApp(cnf) {
140154
// console.info('Initializing renderer window...');
141155
this.workspaceManager = new WorkspaceManager(this.initConfig.workspaceFile);
142156
this.workspaceManager.observe();
143-
let cnf;
144-
try {
145-
cnf = await this.prefProxy.load();
146-
await this._createApp(cnf);
147-
} catch (e) {
148-
this.reportFatalError(e);
149-
throw e;
150-
}
151157
if (this.initConfig.darkMode) {
152158
cnf.theme = '@advanced-rest-client/arc-electron-dark-theme';
153159
}
@@ -431,8 +437,7 @@ class ArcInit {
431437
}, 150);
432438
}
433439

434-
async upgradeApp() {
435-
const cnf = await this.prefProxy.load();
440+
async upgradeApp(cnf) {
436441
const inst = new UpgradeHelper(cnf.upgrades);
437442
const upgrades = inst.getUpgrades();
438443
if (!upgrades || upgrades.length === 0) {
@@ -530,6 +535,21 @@ class ArcInit {
530535
console.error(e);
531536
}
532537
}
538+
539+
/**
540+
* A handler for settings change event.
541+
* Performs actions that are important when a confic object has changed.
542+
*
543+
* @param {CustomEvent} e An event dispatched by preferences proxy.
544+
*/
545+
_settingsHandler(e) {
546+
const { name, value } = e.detail;
547+
switch (name) {
548+
case 'ignoreSessionCookies':
549+
this.cookieBridge.ignoreSessionCookies = value;
550+
break;
551+
}
552+
}
533553
}
534554

535555
const initScript = new ArcInit();

certs.tar.enc

10.5 KB
Binary file not shown.

dev-api/api-es.js

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import express from 'express';
22
import session from 'express-session';
3+
import fs from 'fs';
4+
import path from 'path';
5+
import http from 'http';
6+
import https from 'https';
37
import apiRouter from './routes.js';
4-
58
/* eslint-disable no-console */
69

710
const app = express();
@@ -21,17 +24,25 @@ const sessionConfig = {
2124
app.use(session(sessionConfig));
2225
app.use('/v1', apiRouter);
2326

24-
const portStr = process.argv.slice(2).find((arg) => arg.indexOf('--PORT') === 0);
25-
let port;
26-
if (!isNaN(portStr)) {
27-
port = Number(portStr);
28-
} else {
29-
port = 8080;
30-
}
27+
const findOpt = (name) => process.argv.slice(2).find((arg) => arg.indexOf(`--${name}`) === 0);
28+
const findPortValue = (name, defaultValue) => {
29+
const str = findOpt(name);
30+
if (isNaN(str)) {
31+
return defaultValue;
32+
}
33+
return Number(str);
34+
};
35+
36+
const port = findPortValue('PORT', 3080);
37+
const portSsl = findPortValue('SSLPORT', 3443);
38+
3139

3240
// Basic 404 handler
3341
app.use((req, res) => {
34-
res.status(404).send('Not Found');
42+
res.status(404).send({
43+
error: true,
44+
message: `Route ${req.url} not found`
45+
});
3546
});
3647

3748
// Basic error handler
@@ -43,7 +54,17 @@ app.use((err, req, res) => {
4354
});
4455
});
4556

46-
const server = app.listen(port, () => {
47-
const port = server.address().port;
48-
console.info(`App listening on port ${port}`);
57+
const options = {
58+
key: fs.readFileSync(path.join(__dirname, 'cc', 'server_key.pem')),
59+
cert: fs.readFileSync(path.join(__dirname, 'cc', 'server_cert.pem')),
60+
requestCert: true,
61+
rejectUnauthorized: false,
62+
ca: [fs.readFileSync(path.join(__dirname, 'cc', 'server_cert.pem'))],
63+
};
64+
65+
http.createServer(app).listen(port, () => {
66+
console.info(`HTTP listening on port ${port}`);
67+
});
68+
https.createServer(options, app).listen(portSsl, () => {
69+
console.info(`HTTPS listening on port ${portSsl}`);
4970
});

dev-api/auth-basic.route.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { BaseApi } from './base-api.js';
44
const router = express.Router();
55
export default router;
66

7-
class AuthBaiscRoute extends BaseApi {
7+
class AuthBasicRoute extends BaseApi {
88
sendUnauthorized(res) {
99
res.status(401);
1010
res.set('WWW-Authenticate', 'Basic realm="This resource is protected"');
@@ -35,7 +35,7 @@ class AuthBaiscRoute extends BaseApi {
3535
}
3636
}
3737

38-
const api = new AuthBaiscRoute();
38+
const api = new AuthBasicRoute();
3939
api.setCors(router);
4040
api.wrapApi(router, [
4141
['/:username/:password', 'requireAuthorized'],

dev-api/auth-cc.route.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import express from 'express';
2+
import { BaseApi } from './base-api.js';
3+
4+
const router = express.Router();
5+
export default router;
6+
7+
class AuthCcRoute extends BaseApi {
8+
sendUnauthorized(res) {
9+
res.status(401);
10+
res.set('WWW-Authenticate', 'Basic realm="This resource is protected"');
11+
res.send('Auth required');
12+
}
13+
14+
requireAuthorized(req, res) {
15+
if (typeof req.socket.getPeerCertificate !== 'function') {
16+
this.sendError(res, 'SSL connection is required.');
17+
return;
18+
}
19+
const cert = req.socket.getPeerCertificate();
20+
let status;
21+
let message;
22+
if (req.client.authorized) {
23+
status = 200;
24+
message = {
25+
authenticated: true,
26+
name: cert.subject.CN,
27+
issuer: cert.issuer.CN,
28+
};
29+
} else if (cert.subject) {
30+
status = 403;
31+
message = {
32+
authenticated: false,
33+
name: cert.subject.CN,
34+
issuer: cert.issuer.CN,
35+
};
36+
} else {
37+
status = 401;
38+
message = {
39+
authenticated: false,
40+
name: 'Unknown',
41+
issuer: 'Unknown',
42+
};
43+
}
44+
res.writeHead(status, {
45+
'Content-Type': 'application/json; charset=UTF-8',
46+
});
47+
res.end(JSON.stringify(message));
48+
}
49+
}
50+
51+
const api = new AuthCcRoute();
52+
api.setCors(router);
53+
api.wrapApi(router, [
54+
['/', 'requireAuthorized'],
55+
]);

dev-api/cc/bob.p12

3.85 KB
Binary file not shown.

dev-api/cc/bob_cert.pem

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEmDCCAoACCQDQPRzVnOSbujANBgkqhkiG9w0BAQUFADAOMQwwCgYDVQQDDANC
3+
b2IwHhcNMjAwMTMwMjIxNDE4WhcNMzAwMTI3MjIxNDE4WjAOMQwwCgYDVQQDDANC
4+
b2IwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDhVwZJi8R2LfQhvP7q
5+
TXNl76Y8aaMagBpgYoVwOhkIcZYlsr5Yq5tkUSOh9VB+TXNwG44mjpv3bUZHGTJ9
6+
R2aB5rFj/m+bkVWDwnl1eStbXEoKx4va004KWML9vAO76RxlhZu64tWfSgROrB5K
7+
jCKMuNwUUNPJOOAoQB91i0SE3LunDVKN6U01PPkyIAy4X63ImWDrQzXd8D9NN1Qq
8+
9ZmM4ovMqTwndZV1YkY3ZiZf4HFmGZzq8LwkpgObYqGLUeFXM0nueNulSs6TzN/o
9+
bmV7LiZ8sWsRHozzeaVfNIlAg4V1A5RY/K0H+HT2ySqRVUbHpns6aVbmRk+v646y
10+
95zJKIeeeWB4zjyD6wp2l8bO4GZe4knF9UFlHHrCDHrjIlzvtHpZlHXPOIo/y7zs
11+
AJLzmwduHFbid2rzQj5ObqSH5QrEvhvx2i2PAgHGhPWVyu+ESNFa5RnXYTkYN0OS
12+
cBCnr3qaiHHUnZZECwU/m+b7djyqmfFGmHTj/a7M6E500xlhFR9X468FXU/6cIn1
13+
9kIxkbHf4QsOaviH79Axxw5fQvx8PCx+qMQahhCk+vrDYZzCrCPyJhE2vkKPdEIH
14+
4YhvGyiwc1cR1XPCjeuQsQMhjRa2kBlz20TEUnhcZPQ2/5TX+rSy0IpeuG2ZknnH
15+
ruP8viYHWn2dPK2cZVjXITpeQQIDAQABMA0GCSqGSIb3DQEBBQUAA4ICAQAytQcL
16+
BcZvujS18/0s1p6mhlhdpSCqMmeFie8aFTvWsdPiC4RCgtEefGuKqg6VRkSPxTSW
17+
nkBZ3haSkYBhSUqhGGYUgmftLBb10QUb3FEX4FDZipj8g3qkZ/JBMMDtJaqVpMqN
18+
mFjkFgVW41nJmeVd1J+XLn+BygfW9cdlBF1E0QlgS1W0apKwzR57jw5rRJnasAdZ
19+
hWA/4K9sMkGThvakDFOcSMiUGsJyiNy9kXHnreqOSUzGbyYiryKWv8Mc9oGSysyH
20+
eA37/cVJKrzou2Tpq42AGQZVZFkc+kcYf4WbX5VnyAUUyZzkwZDFvHSOdt7d2quh
21+
zEnxJjPSms1DxMOVFCeJD2rcFnAtt2iDXjJT47x1zsN6rI2GAgSfS0G1vWIuc/A1
22+
FgbQQwS+AgD1YJmRIw41gq0rcVMtwZ4xZEGPRrvypuKcudY6aWvEnANHQfPnWfCC
23+
acPnPZ3mstzIsdCXKboRmppUQCFfVcst/JxPQO0luPRncujds5pEJhQBsw0WXApJ
24+
ITNg/cK/HSCg2uKGp1Z5OBkyiH8t0QEpLoB11KxSXaCJRbKquDabFTNvkTHZ8/Q6
25+
5NOhx9ioIPhRtwe5Hppq+BDZQk4dLE5Z++iehCDCzBhc7vUWH+T8LLWa3UrrI/9z
26+
QAmhJhQOHauxMLW2iW4GdWZ/AvK2ZiZKcAKkKA==
27+
-----END CERTIFICATE-----

dev-api/cc/bob_csr.pem

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
-----BEGIN CERTIFICATE REQUEST-----
2+
MIIEUzCCAjsCAQAwDjEMMAoGA1UEAwwDQm9iMIICIjANBgkqhkiG9w0BAQEFAAOC
3+
Ag8AMIICCgKCAgEA4VcGSYvEdi30Ibz+6k1zZe+mPGmjGoAaYGKFcDoZCHGWJbK+
4+
WKubZFEjofVQfk1zcBuOJo6b921GRxkyfUdmgeaxY/5vm5FVg8J5dXkrW1xKCseL
5+
2tNOCljC/bwDu+kcZYWbuuLVn0oETqweSowijLjcFFDTyTjgKEAfdYtEhNy7pw1S
6+
jelNNTz5MiAMuF+tyJlg60M13fA/TTdUKvWZjOKLzKk8J3WVdWJGN2YmX+BxZhmc
7+
6vC8JKYDm2Khi1HhVzNJ7njbpUrOk8zf6G5ley4mfLFrER6M83mlXzSJQIOFdQOU
8+
WPytB/h09skqkVVGx6Z7OmlW5kZPr+uOsvecySiHnnlgeM48g+sKdpfGzuBmXuJJ
9+
xfVBZRx6wgx64yJc77R6WZR1zziKP8u87ACS85sHbhxW4ndq80I+Tm6kh+UKxL4b
10+
8dotjwIBxoT1lcrvhEjRWuUZ12E5GDdDknAQp696mohx1J2WRAsFP5vm+3Y8qpnx
11+
Rph04/2uzOhOdNMZYRUfV+OvBV1P+nCJ9fZCMZGx3+ELDmr4h+/QMccOX0L8fDws
12+
fqjEGoYQpPr6w2Gcwqwj8iYRNr5Cj3RCB+GIbxsosHNXEdVzwo3rkLEDIY0WtpAZ
13+
c9tExFJ4XGT0Nv+U1/q0stCKXrhtmZJ5x67j/L4mB1p9nTytnGVY1yE6XkECAwEA
14+
AaAAMA0GCSqGSIb3DQEBCwUAA4ICAQCQunBCVTlO7OaQmO+Nv8rRuKHDRJwEx7dv
15+
UC+YKViW85fo3+/vE6OKUEnc2Z2ol3pRSQxTVLlQO/SxLEB/bCa8+ghd11clHH3X
16+
n3aBD31eTBF9TUBBp6ng72NQDHno5KrQd0aW/rDbejy7RGqK2uKimvf9MhqXCcUk
17+
WUCTe2LM4tpkn2rxC27WaIVTUNYFrqNxXoII/rcWXxlYDHdUsxYC1iNy/9YNeKut
18+
mHYH7AzEI7PKEYGdlOhOSCT/HmeJ+4Kdy6ZPbSELdTZAy2QJcwT1VU2bap7WsDPC
19+
QlJnSkJo6B+lSd4LnwMFKSuTWKKhw27QJlRPDsjqlyHsbigK6SftzdToBjnYMSET
20+
RRIHyc1Caqo6CQrPRzD6qzFXgTyi/hLiMml2/ArQj7vtkP5Rj4ZUt63bD1lySUiu
21+
AfySW8amy6UU224Htir4lHX76R/uB2bdh8g1z2lo8dS0Mzn8a64CH/8xKWFnc6ey
22+
qBOI5sucInOYjUZpIIs4UxrRz9LQhuARMSGO4GOF3WeqsHbxU3qnWDA5Bt6epbnb
23+
BxGg9GS8XLT+rDFKY1ZZ0l3EzPQKClTc5OGYROvRYbZDpx/kI/66InNn/me+IGnC
24+
02P+/dxblgnTDj+T0X6scGqvptw6ze2u58t4q/LjN2lCGvNsqWY44dVAAnBC0MRc
25+
E7GjggNetA==
26+
-----END CERTIFICATE REQUEST-----

0 commit comments

Comments
 (0)