diff options
| author | Erik Larkö <erik@mullvad.net> | 2018-01-22 15:08:34 +0100 |
|---|---|---|
| committer | Erik Larkö <erik@mullvad.net> | 2018-01-22 15:08:34 +0100 |
| commit | 40efbb790f5776fad7336c4ba19db384179511f4 (patch) | |
| tree | 6f224c8cae080d115409177c73e822a534b4d2d9 /app/lib | |
| parent | 8b66a953f244dbe04148f550dc7a8c8b4f50d2a0 (diff) | |
| parent | 430ea2955170aaf78900dd41ab72ddb101e80df3 (diff) | |
| download | mullvadvpn-40efbb790f5776fad7336c4ba19db384179511f4.tar.xz mullvadvpn-40efbb790f5776fad7336c4ba19db384179511f4.zip | |
Merge branch 'problem-report'
Diffstat (limited to 'app/lib')
| -rw-r--r-- | app/lib/problem-report.android.js | 12 | ||||
| -rw-r--r-- | app/lib/problem-report.js | 71 |
2 files changed, 83 insertions, 0 deletions
diff --git a/app/lib/problem-report.android.js b/app/lib/problem-report.android.js new file mode 100644 index 0000000000..63deb102e4 --- /dev/null +++ b/app/lib/problem-report.android.js @@ -0,0 +1,12 @@ +// @flow +import { MobileAppBridge } from 'NativeModules'; + +const collectProblemReport = (toRedact: string) => { + return MobileAppBridge.collectProblemReport(toRedact); +}; + +const sendProblemReport = (email: string, message: string, savedReport: string) => { + return MobileAppBridge.sendProblemReport(email, message, savedReport); +}; + +export { collectProblemReport, sendProblemReport };
\ No newline at end of file diff --git a/app/lib/problem-report.js b/app/lib/problem-report.js new file mode 100644 index 0000000000..17130fd05d --- /dev/null +++ b/app/lib/problem-report.js @@ -0,0 +1,71 @@ +// @flow +import { resolveBin } from './proc'; +import { execFile } from 'child_process'; +import { ipcRenderer } from 'electron'; +import { log } from './platform'; +import uuid from 'uuid'; + +const collectProblemReport = (toRedact: string) => { + const unAnsweredIpcCalls = new Map(); + function reapIpcCall(id) { + const promise = unAnsweredIpcCalls.get(id); + unAnsweredIpcCalls.delete(id); + + if (promise) { + promise.reject(new Error('Timed out')); + } + } + ipcRenderer.on('collect-logs-reply', (_event, id, err, reportId) => { + const promise = unAnsweredIpcCalls.get(id); + unAnsweredIpcCalls.delete(id); + if(promise) { + if(err) { + promise.reject(err); + } else { + promise.resolve(reportId); + } + } + }); + return new Promise((resolve, reject) => { + + const id = uuid.v4(); + unAnsweredIpcCalls.set(id, { resolve, reject }); + ipcRenderer.send('collect-logs', id, toRedact); + setTimeout(() => reapIpcCall(id), 1000); + }).catch((e) => { + const { err, stdout } = e; + log.error('Failed collecting problem report', err); + log.error(' stdout: ' + stdout); + + throw e; + }); +}; + +const sendProblemReport = (email: string, message: string, savedReport: string) => { + const args = ['send', + '--email', email, + '--message', message, + '--report', savedReport, + ]; + + const binPath = resolveBin('problem-report'); + + return new Promise((resolve, reject) => { + execFile(binPath, args, { windowsHide: true }, (err, stdout, stderr) => { + if (err) { + reject({ err, stdout, stderr }); + } else { + log.debug('Report sent'); + resolve(); + } + }); + }).catch((e) => { + const { err, stdout } = e; + log.error('Failed sending problem report', err); + log.error(' stdout: ' + stdout); + + throw e; + }); +}; + +export { collectProblemReport, sendProblemReport };
\ No newline at end of file |
