Skip to content

Commit b679fa7

Browse files
committed
Send feedback to new api endpoint
Resolves #217
1 parent 39f0000 commit b679fa7

File tree

3 files changed

+78
-84
lines changed

3 files changed

+78
-84
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Bugfixes
66
* Logger should be able to serialize BigInt #229
77
* Do not use format.json() in logger #228
8+
* Send feedback to new api endpoint #217
89

910
### Changes
1011
* Upgrade to electron v7 #132

app/lib/config.js

+9
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,22 @@ module.exports = function() {
136136
}
137137
}
138138

139+
function has(key) {
140+
if(activeInstance) {
141+
return settings.has(key);
142+
} else {
143+
return !!memorySettings[key];
144+
}
145+
}
146+
139147
return {
140148
isActiveInstance: function() {
141149
return instance.getActiveInstance();
142150
},
143151
hadConfig: function() {
144152
return configExists;
145153
},
154+
has,
146155
getAll: function(include_secret) {
147156
if(activeInstance) {
148157
var conf = settings.getAll();

app/ui/feedback/controller.js

+68-84
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const os = require('os');
22
const fs = require('graceful-fs');
33
const path = require('path');
44
const extend = require('util')._extend;
5+
const PassThrough = require('stream').PassThrough;
56
const si = require('systeminformation');
67

78
const {app, ipcMain, BrowserWindow} = require('electron');
@@ -39,49 +40,77 @@ module.exports = function(env, clientConfig) {
3940
}
4041
}
4142

42-
function sendAutoReport() {
43-
logger.debug('sending auto report', {category: 'feedback'});
43+
function sendRequest(feedbackUrl, text, archive) {
44+
return new Promise((resolve, reject) => {
45+
if(!feedbackUrl) {
46+
var blnUrl = clientConfig.has('blnUrl') ? clientConfig.get('blnUrl') : env.blnUrl;
4447

45-
var reportName = [clientConfig.get('username'), Math.floor(new Date().getTime() / 1000)].join('_');
48+
if(!blnUrl) {
49+
logger.error('blnUrl is neither set in clientConfig nor in env, can\'t send feedback', {
50+
category: 'feedback',
51+
});
4652

47-
var url = env.autoReportPutUrl || 'https://support.gyselroth.net/balloon-auto-report';
53+
return reject();
54+
}
4855

49-
var reqOptions = {
50-
headers: {
51-
'X-Client': ['Balloon-Desktop-App', globalConfig.get('version'), os.hostname()].join('|'),
52-
'User-Agent': ['Balloon-Desktop-App', globalConfig.get('version'), os.hostname(), os.platform(), os.release()].join('|'),
56+
feedbackUrl = `${blnUrl}/api/v2/feedbacks`;
5357
}
54-
};
5558

56-
var req = request.put(url+'/' + reportName, reqOptions);
59+
var formData = {feedback: text};
5760

58-
req.on('error', function(err) {
59-
logger.error('sending auto report failed', {
60-
category: 'feedback',
61-
error: err
62-
});
63-
});
61+
if(archive) {
62+
var report = new PassThrough();
6463

65-
req.on('response', function(response) {
66-
if(response.statusCode === 200) {
67-
logger.info('auto report got response ', {
68-
category: 'feedback',
69-
response
70-
});
71-
} else {
72-
logger.error('auto report got response ', {
73-
category: 'feedback',
74-
response
75-
});
64+
formData.report = {
65+
value: report,
66+
options: {
67+
filename: [clientConfig.get('username'), Math.floor(new Date().getTime() / 1000)].join('_'),
68+
contentType: 'application/zip',
69+
// set length to NaN to avoid request setting content-length header: https://github.com/form-data/form-data/pull/397#issuecomment-471976669
70+
knownLength: NaN
71+
}
72+
}
73+
74+
archive.pipe(report);
7675
}
77-
});
7876

79-
req.on('aborted', function(err) {
80-
logger.error('auto report request has been aborted by the server', {
81-
category: 'feedback',
82-
error: err
77+
var reqOptions = {
78+
url: feedbackUrl,
79+
formData: formData,
80+
headers: {
81+
'X-Client': ['Balloon-Desktop-App', globalConfig.get('version'), os.hostname()].join('|'),
82+
'User-Agent': ['Balloon-Desktop-App', globalConfig.get('version'), os.hostname(), os.platform(), os.release()].join('|'),
83+
}
84+
}
85+
86+
var req = request.post(reqOptions);
87+
88+
req.on('error', function(err) {
89+
logger.error('sending feedback failed', {category: 'feedback', error: err});
90+
reject(err);
8391
});
84-
});
92+
93+
req.on('response', function(response) {
94+
if(response.statusCode === 200) {
95+
logger.info('got response ', {category: 'feedback', response});
96+
resolve();
97+
} else {
98+
logger.error('got response ', {category: 'feedback', response});
99+
reject();
100+
}
101+
});
102+
103+
req.on('aborted', function(err) {
104+
logger.error('request has been aborted by the server', {category: 'feedback', error: err});
105+
reject(err);
106+
});
107+
})
108+
}
109+
110+
function sendAutoReport() {
111+
logger.debug('sending auto report', {category: 'feedback'});
112+
113+
var text = `Autoreport ${clientConfig.get('username')}`;
85114

86115
var archive = archiver('zip', {zlib: { level: 9 }});
87116

@@ -92,11 +121,12 @@ module.exports = function(env, clientConfig) {
92121
});
93122
});
94123

95-
archive.pipe(req);
96-
97124
appendLogFilesToArchive(archive, false);
98125

99126
archive.finalize();
127+
128+
// TODO pixtron - iss-217 - document configuration change env.autoReportPutUrl -> env.autoReportUrl
129+
sendRequest(env.autoReportUrl, text, archive)
100130
}
101131

102132

@@ -106,53 +136,6 @@ module.exports = function(env, clientConfig) {
106136
});
107137

108138
return new Promise(function(resolve, reject) {
109-
var reportName = [clientConfig.get('username'), Math.floor(new Date().getTime() / 1000)].join('_');
110-
111-
var url = env.feedbackPutUrl || 'https://support.gyselroth.net/balloon';
112-
var reqOptions = {
113-
headers: {
114-
'X-Client': ['Balloon-Desktop-App', globalConfig.get('version'), os.hostname()].join('|'),
115-
'User-Agent': ['Balloon-Desktop-App', globalConfig.get('version'), os.hostname(), os.platform(), os.release()].join('|'),
116-
}
117-
};
118-
119-
var req = request.put(url+'/' + reportName+'?feedback='+encodeURIComponent(text), reqOptions);
120-
121-
req.on('error', function(err) {
122-
logger.error('sending feedback failed', {
123-
category: 'feedback',
124-
error: err
125-
});
126-
127-
reject(err);
128-
});
129-
130-
req.on('response', function(response) {
131-
if(response.statusCode === 200) {
132-
logger.info('got response ', {
133-
category: 'feedback',
134-
response
135-
});
136-
resolve(reportName);
137-
} else {
138-
logger.error('got response ', {
139-
category: 'feedback',
140-
response
141-
});
142-
143-
reject();
144-
}
145-
});
146-
147-
req.on('aborted', function(err) {
148-
logger.error('request has been aborted by the server', {
149-
category: 'feedback',
150-
error: err
151-
});
152-
153-
reject(err);
154-
});
155-
156139
if(file === true) {
157140
var archive = archiver('zip', {zlib: { level: 9 }});
158141

@@ -165,8 +148,6 @@ module.exports = function(env, clientConfig) {
165148
reject(err);
166149
});
167150

168-
archive.pipe(req);
169-
170151
async.parallel([
171152
async.reflect(async (cb) => {
172153
archive.glob('**/*', {
@@ -197,6 +178,9 @@ module.exports = function(env, clientConfig) {
197178
archive.finalize();
198179
});
199180
}
181+
182+
// TODO pixtron - iss-217 - document configuration change env.feedbackPutUrl -> env.feedbackUrl
183+
sendRequest(env.feedbackUrl, text, archive).then(resolve).catch(reject)
200184
});
201185
}
202186

0 commit comments

Comments
 (0)