@@ -2,6 +2,7 @@ const os = require('os');
2
2
const fs = require ( 'graceful-fs' ) ;
3
3
const path = require ( 'path' ) ;
4
4
const extend = require ( 'util' ) . _extend ;
5
+ const PassThrough = require ( 'stream' ) . PassThrough ;
5
6
const si = require ( 'systeminformation' ) ;
6
7
7
8
const { app, ipcMain, BrowserWindow} = require ( 'electron' ) ;
@@ -39,49 +40,77 @@ module.exports = function(env, clientConfig) {
39
40
}
40
41
}
41
42
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 ;
44
47
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
+ } ) ;
46
52
47
- var url = env . autoReportPutUrl || 'https://support.gyselroth.net/balloon-auto-report' ;
53
+ return reject ( ) ;
54
+ }
48
55
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` ;
53
57
}
54
- } ;
55
58
56
- var req = request . put ( url + '/' + reportName , reqOptions ) ;
59
+ var formData = { feedback : text } ;
57
60
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 ( ) ;
64
63
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 ) ;
76
75
}
77
- } ) ;
78
76
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 ) ;
83
91
} ) ;
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' ) } ` ;
85
114
86
115
var archive = archiver ( 'zip' , { zlib : { level : 9 } } ) ;
87
116
@@ -92,11 +121,12 @@ module.exports = function(env, clientConfig) {
92
121
} ) ;
93
122
} ) ;
94
123
95
- archive . pipe ( req ) ;
96
-
97
124
appendLogFilesToArchive ( archive , false ) ;
98
125
99
126
archive . finalize ( ) ;
127
+
128
+ // TODO pixtron - iss-217 - document configuration change env.autoReportPutUrl -> env.autoReportUrl
129
+ sendRequest ( env . autoReportUrl , text , archive )
100
130
}
101
131
102
132
@@ -106,53 +136,6 @@ module.exports = function(env, clientConfig) {
106
136
} ) ;
107
137
108
138
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
-
156
139
if ( file === true ) {
157
140
var archive = archiver ( 'zip' , { zlib : { level : 9 } } ) ;
158
141
@@ -165,8 +148,6 @@ module.exports = function(env, clientConfig) {
165
148
reject ( err ) ;
166
149
} ) ;
167
150
168
- archive . pipe ( req ) ;
169
-
170
151
async . parallel ( [
171
152
async . reflect ( async ( cb ) => {
172
153
archive . glob ( '**/*' , {
@@ -197,6 +178,9 @@ module.exports = function(env, clientConfig) {
197
178
archive . finalize ( ) ;
198
179
} ) ;
199
180
}
181
+
182
+ // TODO pixtron - iss-217 - document configuration change env.feedbackPutUrl -> env.feedbackUrl
183
+ sendRequest ( env . feedbackUrl , text , archive ) . then ( resolve ) . catch ( reject )
200
184
} ) ;
201
185
}
202
186
0 commit comments