|
@@ -1,4 +1,5 @@
|
|
|
const parser = require('ua-parser-js');
|
|
|
+const { uniqueNamesGenerator, animals, colors } = require('unique-names-generator');
|
|
|
|
|
|
class SnapdropServer {
|
|
|
|
|
@@ -19,7 +20,13 @@ class SnapdropServer {
|
|
|
this._keepAlive(peer);
|
|
|
|
|
|
// send displayName
|
|
|
- this._send(peer, { type: 'display-name', message: peer.name.displayName });
|
|
|
+ this._send(peer, {
|
|
|
+ type: 'display-name',
|
|
|
+ message: {
|
|
|
+ displayName: peer.name.displayName,
|
|
|
+ deviceName: peer.name.deviceName
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
_onHeaders(headers, response) {
|
|
@@ -188,19 +195,28 @@ class Peer {
|
|
|
let ua = parser(req.headers['user-agent']);
|
|
|
|
|
|
|
|
|
- let displayName = ua.os.name.replace('Mac OS', 'Mac') + ' ';
|
|
|
+ let deviceName = ua.os.name.replace('Mac OS', 'Mac') + ' ';
|
|
|
if (ua.device.model) {
|
|
|
- displayName += ua.device.model;
|
|
|
+ deviceName += ua.device.model;
|
|
|
} else {
|
|
|
- displayName += ua.browser.name;
|
|
|
+ deviceName += ua.browser.name;
|
|
|
}
|
|
|
|
|
|
+ const displayName = uniqueNamesGenerator({
|
|
|
+ length: 2,
|
|
|
+ separator: ' ',
|
|
|
+ dictionaries: [colors, animals],
|
|
|
+ style: 'capital',
|
|
|
+ seed: this.id.hashCode()
|
|
|
+ })
|
|
|
+
|
|
|
this.name = {
|
|
|
model: ua.device.model,
|
|
|
os: ua.os.name,
|
|
|
browser: ua.browser.name,
|
|
|
type: ua.device.type,
|
|
|
- displayName: displayName
|
|
|
+ deviceName,
|
|
|
+ displayName
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -239,4 +255,16 @@ class Peer {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+Object.defineProperty(String.prototype, 'hashCode', {
|
|
|
+ value: function() {
|
|
|
+ var hash = 0, i, chr;
|
|
|
+ for (i = 0; i < this.length; i++) {
|
|
|
+ chr = this.charCodeAt(i);
|
|
|
+ hash = ((hash << 5) - hash) + chr;
|
|
|
+ hash |= 0; // Convert to 32bit integer
|
|
|
+ }
|
|
|
+ return hash;
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
const server = new SnapdropServer(process.env.PORT || 3000);
|