Browse Source

save group_key encrypted media_key

feature/dockerfile-arm
Evan Feenstra 5 years ago
parent
commit
6d00fd7966
  1. 3
      api/controllers/media.ts
  2. 14
      api/network/modify.ts
  3. 4
      api/network/receive.ts
  4. 3
      dist/api/controllers/media.js
  5. 2
      dist/api/controllers/media.js.map
  6. 15
      dist/api/network/modify.js
  7. 2
      dist/api/network/modify.js.map
  8. 2
      dist/api/network/receive.js
  9. 2
      dist/api/network/receive.js.map
  10. 14
      package-lock.json
  11. 1
      package.json

3
api/controllers/media.ts

@ -139,9 +139,10 @@ function saveMediaKeys(muid, mediaKeyMap, chatId, messageId){
date.setMilliseconds(0) date.setMilliseconds(0)
for (let [contactId, key] of Object.entries(mediaKeyMap)) { for (let [contactId, key] of Object.entries(mediaKeyMap)) {
if(parseInt(contactId)!==1) { if(parseInt(contactId)!==1) {
const receiverID = parseInt(contactId) || 0 // 0 is for a tribe
models.MediaKey.create({ models.MediaKey.create({
muid, chatId, key, messageId, muid, chatId, key, messageId,
receiver: parseInt(contactId), receiver: receiverID,
createdAt: date, createdAt: date,
}) })
} }

14
api/network/modify.ts

@ -6,11 +6,12 @@ import * as rsa from '../crypto/rsa'
import * as crypto from 'crypto' import * as crypto from 'crypto'
import * as meme from '../utils/meme' import * as meme from '../utils/meme'
import * as FormData from 'form-data' import * as FormData from 'form-data'
import { models } from '../models'
const constants = require(path.join(__dirname,'../../config/constants.json')) const constants = require(path.join(__dirname,'../../config/constants.json'))
const msgtypes = constants.message_types const msgtypes = constants.message_types
export async function modifyPayload(payload, chat) { export async function modifyPayloadAndSaveMediaKey(payload, chat) {
if(payload.type===msgtypes.attachment) { if(payload.type===msgtypes.attachment) {
const mt = payload.message && payload.message.mediaToken const mt = payload.message && payload.message.mediaToken
@ -67,6 +68,17 @@ export async function modifyPayload(payload, chat) {
const encKey = rsa.encrypt(chat.groupKey, newKey) const encKey = rsa.encrypt(chat.groupKey, newKey)
var date = new Date();
date.setMilliseconds(0)
models.MediaKey.create({
muid:json.muid,
chatId:chat.id,
key:encKey,
messageId: (payload.message&&payload.message.id)||0,
receiver: 0,
createdAt: date,
})
return fillmsg(payload, {mediaTerms,mediaKey:encKey}) // key is re-encrypted later return fillmsg(payload, {mediaTerms,mediaKey:encKey}) // key is re-encrypted later
} catch(e) { } catch(e) {
console.log("[modify] error", e) console.log("[modify] error", e)

4
api/network/receive.ts

@ -6,7 +6,7 @@ import * as tribes from '../utils/tribes'
import {SPHINX_CUSTOM_RECORD_KEY, verifyAscii} from '../utils/lightning' import {SPHINX_CUSTOM_RECORD_KEY, verifyAscii} from '../utils/lightning'
import { models } from '../models' import { models } from '../models'
import {sendMessage} from './send' import {sendMessage} from './send'
import {modifyPayload} from './modify' import {modifyPayloadAndSaveMediaKey} from './modify'
import {decryptMessage,encryptTribeBroadcast} from '../utils/msg' import {decryptMessage,encryptTribeBroadcast} from '../utils/msg'
const constants = require(path.join(__dirname,'../../config/constants.json')) const constants = require(path.join(__dirname,'../../config/constants.json'))
@ -82,7 +82,7 @@ async function forwardMessageToTribe(ogpayload){
let payload let payload
if(typesToModify.includes(ogpayload.type)){ if(typesToModify.includes(ogpayload.type)){
payload = await modifyPayload(ogpayload, chat) payload = await modifyPayloadAndSaveMediaKey(ogpayload, chat)
} else { } else {
payload = ogpayload payload = ogpayload
} }

3
dist/api/controllers/media.js

@ -127,9 +127,10 @@ function saveMediaKeys(muid, mediaKeyMap, chatId, messageId) {
date.setMilliseconds(0); date.setMilliseconds(0);
for (let [contactId, key] of Object.entries(mediaKeyMap)) { for (let [contactId, key] of Object.entries(mediaKeyMap)) {
if (parseInt(contactId) !== 1) { if (parseInt(contactId) !== 1) {
const receiverID = parseInt(contactId) || 0; // 0 is for a tribe
models_1.models.MediaKey.create({ models_1.models.MediaKey.create({
muid, chatId, key, messageId, muid, chatId, key, messageId,
receiver: parseInt(contactId), receiver: receiverID,
createdAt: date, createdAt: date,
}); });
} }

2
dist/api/controllers/media.js.map

File diff suppressed because one or more lines are too long

15
dist/api/network/modify.js

@ -17,9 +17,10 @@ const rsa = require("../crypto/rsa");
const crypto = require("crypto"); const crypto = require("crypto");
const meme = require("../utils/meme"); const meme = require("../utils/meme");
const FormData = require("form-data"); const FormData = require("form-data");
const models_1 = require("../models");
const constants = require(path.join(__dirname, '../../config/constants.json')); const constants = require(path.join(__dirname, '../../config/constants.json'));
const msgtypes = constants.message_types; const msgtypes = constants.message_types;
function modifyPayload(payload, chat) { function modifyPayloadAndSaveMediaKey(payload, chat) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (payload.type === msgtypes.attachment) { if (payload.type === msgtypes.attachment) {
const mt = payload.message && payload.message.mediaToken; const mt = payload.message && payload.message.mediaToken;
@ -64,6 +65,16 @@ function modifyPayload(payload, chat) {
skipSigning: amt ? true : false // only sign if its free skipSigning: amt ? true : false // only sign if its free
}; };
const encKey = rsa.encrypt(chat.groupKey, newKey); const encKey = rsa.encrypt(chat.groupKey, newKey);
var date = new Date();
date.setMilliseconds(0);
models_1.models.MediaKey.create({
muid: json.muid,
chatId: chat.id,
key: encKey,
messageId: (payload.message && payload.message.id) || 0,
receiver: 0,
createdAt: date,
});
return fillmsg(payload, { mediaTerms, mediaKey: encKey }); // key is re-encrypted later return fillmsg(payload, { mediaTerms, mediaKey: encKey }); // key is re-encrypted later
} }
catch (e) { catch (e) {
@ -77,7 +88,7 @@ function modifyPayload(payload, chat) {
} }
}); });
} }
exports.modifyPayload = modifyPayload; exports.modifyPayloadAndSaveMediaKey = modifyPayloadAndSaveMediaKey;
function fillmsg(full, props) { function fillmsg(full, props) {
return Object.assign(Object.assign({}, full), { message: Object.assign(Object.assign({}, full.message), props) }); return Object.assign(Object.assign({}, full), { message: Object.assign(Object.assign({}, full.message), props) });
} }

2
dist/api/network/modify.js.map

@ -1 +1 @@
{"version":3,"file":"modify.js","sourceRoot":"","sources":["../../../api/network/modify.ts"],"names":[],"mappings":"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"} {"version":3,"file":"modify.js","sourceRoot":"","sources":["../../../api/network/modify.ts"],"names":[],"mappings":"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"}

2
dist/api/network/receive.js

@ -101,7 +101,7 @@ function forwardMessageToTribe(ogpayload) {
const chat = yield models_1.models.Chat.findOne({ where: { uuid: ogpayload.chat.uuid } }); const chat = yield models_1.models.Chat.findOne({ where: { uuid: ogpayload.chat.uuid } });
let payload; let payload;
if (typesToModify.includes(ogpayload.type)) { if (typesToModify.includes(ogpayload.type)) {
payload = yield modify_1.modifyPayload(ogpayload, chat); payload = yield modify_1.modifyPayloadAndSaveMediaKey(ogpayload, chat);
} }
else { else {
payload = ogpayload; payload = ogpayload;

2
dist/api/network/receive.js.map

File diff suppressed because one or more lines are too long

14
package-lock.json

@ -1321,6 +1321,11 @@
"color-convert": "^1.9.0" "color-convert": "^1.9.0"
} }
}, },
"any-base": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
"integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
},
"any-promise": { "any-promise": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
@ -9860,6 +9865,15 @@
"resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
"integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
}, },
"short-uuid": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/short-uuid/-/short-uuid-3.1.1.tgz",
"integrity": "sha512-7dI69xtJYpTIbg44R6JSgrbDtZFuZ9vAwwmnF/L0PinykbFrhQ7V8omKsQcVw1TP0nYJ7uQp1PN6/aVMkzQFGQ==",
"requires": {
"any-base": "^1.1.0",
"uuid": "^3.3.2"
}
},
"sigmund": { "sigmund": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",

1
package.json

@ -72,6 +72,7 @@
"sequelize": "^5.19.3", "sequelize": "^5.19.3",
"sequelize-cli": "^5.5.1", "sequelize-cli": "^5.5.1",
"sequelize-typescript": "^1.1.0", "sequelize-typescript": "^1.1.0",
"short-uuid": "^3.1.1",
"sjcl": "^1.0.8", "sjcl": "^1.0.8",
"tail": "^2.0.3", "tail": "^2.0.3",
"ts-node": "^8.5.4", "ts-node": "^8.5.4",

Loading…
Cancel
Save