Migrate sessions table to BLOB column
Co-authored-by: Scott Nonnenberg <scott@signal.org>
This commit is contained in:
parent
a4d8ba4899
commit
091580825a
8 changed files with 582 additions and 275 deletions
|
@ -12,6 +12,185 @@ import { sessionRecordToProtobuf } from '../../util/sessionTranslation';
|
|||
|
||||
const getRecordCopy = (record: any): any => JSON.parse(JSON.stringify(record));
|
||||
|
||||
export const SESSION_V1_RECORD = {
|
||||
sessions: {
|
||||
'\u0005W¿\u0000lÈ\nyª\u000eümB0\u0017j.Û£³-s\u0016Ä(O_M': {
|
||||
registrationId: 4243,
|
||||
currentRatchet: {
|
||||
rootKey:
|
||||
'Ë\u00035/üÚg\u0003Xeûú\u0010\u0000ü\u0002¶»o5\u001c¥\u0004Ðÿ«',
|
||||
lastRemoteEphemeralKey:
|
||||
'\u0005\n7\u001cmT
b!è\u000eÍ\u0007\u0016m4g³\u0005üIYê\b\u0011ÏÎPs',
|
||||
previousCounter: 2,
|
||||
ephemeralKeyPair: {
|
||||
privKey: 'äãÅ«ªàøí)á\u0005Á"sJM.¨¡\u0012r(N\f9Ô\b',
|
||||
pubKey: '\u0005+\u00134«1\u0000\u0013l *ãKçnºÖó³íTS&{ù Í>1',
|
||||
},
|
||||
},
|
||||
indexInfo: {
|
||||
remoteIdentityKey: '\u0005¨¨©üÏäúoá©êO¢çúxr»Æ¿r²GùiT@',
|
||||
closed: -1,
|
||||
baseKey: '\u0005W¿\u0000lÈ\nyª\u000eümB0\u0017j.Û£³-s\u0016Ä(O_M',
|
||||
baseKeyType: 2,
|
||||
},
|
||||
oldRatchetList: [
|
||||
{
|
||||
added: 1605579954962,
|
||||
ephemeralKey:
|
||||
'\u00050»\n¨ÊAä\u0006¢Ç´d\u0002\u00129}%î}ΩTc}8¼\u0011n\\',
|
||||
},
|
||||
{
|
||||
added: 1605580408250,
|
||||
ephemeralKey:
|
||||
'\u0005^Ä\nòÀ¢\u0000\u000fA\\6+Ó\u001a÷&×$¸¬ÑÔ|<qSÖ\u001aÙh',
|
||||
},
|
||||
{
|
||||
added: 1605581155167,
|
||||
ephemeralKey: '\u0005<\u0017å)QàFîl29Ø\u001c Ý$·;udß\u0005I|f\u0006',
|
||||
},
|
||||
{
|
||||
added: 1605638524556,
|
||||
ephemeralKey: '\u0005¯jõ±ã0wÛPÐÂSÏ´;·&\u0011Â%º¯°ÝÙþêù8F',
|
||||
},
|
||||
{
|
||||
added: 1606761719753,
|
||||
ephemeralKey: '\u0005Î(ð>xÄÈ?þv~íkx â¬.ðoòDg\u001eß.\r',
|
||||
},
|
||||
{
|
||||
added: 1606766530935,
|
||||
ephemeralKey:
|
||||
'\u0005\u0014@½M,à\bóó
}¨`i¿\u0000©I\u0001ôG\u001f:Ù{ó\u0005 ',
|
||||
},
|
||||
{
|
||||
added: 1608326293655,
|
||||
ephemeralKey: '\u0005µÒ\u0014?È¢+ÑR÷ç?3Dº\\@0\u0004®+-\br\t',
|
||||
},
|
||||
{
|
||||
added: 1609871105317,
|
||||
ephemeralKey:
|
||||
'\u0005±@íN"Í\u0019HS{$ï\u0017[Ñ\\\u001a*;>P\u0000\u001f\u000eHNaù)',
|
||||
},
|
||||
{
|
||||
added: 1611707063523,
|
||||
ephemeralKey: '\u0005ÞgÅké\u0001\u0013¡ÿûNXÈ(9\u0006¤w®/عRiJI',
|
||||
},
|
||||
{
|
||||
added: 1612211156372,
|
||||
ephemeralKey: '\u0005:[ÛOpd¯ ÂÙç\u0010OÞw{}ý\bw9Àß=\u0014Z',
|
||||
},
|
||||
],
|
||||
'\u00050»\n¨ÊAä\u0006¢Ç´d\u0002\u00129}%î}ΩTc}8¼\u0011n\\': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 0,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005^Ä\nòÀ¢\u0000\u000fA\\6+Ó\u001a÷&×$¸¬ÑÔ|<qSÖ\u001aÙh': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 2,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005<\u0017å)QàFîl29Ø\u001c Ý$·;udß\u0005I|f\u0006': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 1,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005¯jõ±ã0wÛPÐÂSÏ´;·&\u0011Â%º¯°ÝÙþêù8F': {
|
||||
messageKeys: {
|
||||
'0': 'A/{´{×f(èaøy\\D¾\u0000ÃHÀÁâô$ã\u001d3Äö°Ù',
|
||||
'1': "̶FT}dw8Æýª7»ÚÓ\u000f*'Ô»7£\u0018\u0012ñDá",
|
||||
'2': 'Îï\u0013¨ÁÕÎk\u000eýèÈ÷,¼îû5%ÓU¤6_õ¢\u0019ä]',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 3,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005Î(ð>xÄÈ?þv~íkx â¬.ðoòDg\u001eß.\r': {
|
||||
messageKeys: {
|
||||
'4': '©}j¿¼\u0014q\t¥Áñ\u0003: ÷ÞrñûÔµ%Æ\u001a',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 6,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005\u0014@½M,à\bóó
}¨`i¿\u0000©I\u0001ôG\u001f:Ù{ó\u0005 ': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 0,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005µÒ\u0014?È¢+ÑR÷ç?3Dº\\@0\u0004®+-\br\t': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 2,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005±@íN"Í\u0019HS{$ï\u0017[Ñ\\\u001a*;>P\u0000\u001f\u000eHNaù)': {
|
||||
messageKeys: {
|
||||
'0': "1kÏ\u001cí+«<º\b'VÌ!×¼«PÃ[üáy;l'",
|
||||
'2': 'ö\u00047%L-
Wm)\u001d£ääíNô.Ô8
ÃÉ4r´ó^2',
|
||||
'3': '¨¿¦7T]\u001c\u001cà4:x\u0019¿\u0002YÉÀ\u001bâjr¸»¤¢0,*',
|
||||
'5': '¥\u0006·qgó4þ\u0011®U4F\u001cl©\bäô
»ÊÇÆ[',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 5,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005ÞgÅké\u0001\u0013¡ÿûNXÈ(9\u0006¤w®/عRiJI': {
|
||||
messageKeys: {
|
||||
'0': "]'8WÄ\u0007
nºÖ{ÿ7]ôäÄ!é\u000btA@°b¢)\u001ar",
|
||||
'2': 'ÄfGÇjÖxÅö:×RÔi)M\u0019©IE+¨`þKá;£Û½',
|
||||
'3': '¦Õhýø`ÖPéPs;\u001e\u000bE}¨¿õ\u0003uªøå\u00062(×G',
|
||||
'9': 'Ï^<ÕúÌ\u0001i´;ït¼\u001aÑ?ï\u0014lãàÆ¸\u001a8/m',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 11,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005:[ÛOpd¯ ÂÙç\u0010OÞw{}ý\bw9Àß=\u0014Z': {
|
||||
messageKeys: {
|
||||
'0': '!\u00115\\W~|¯oa2\u001e\u0004V8Ï¡d}\u001b\u001a8^QÖfvÕ"',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 1,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005\n7\u001cmT
b!è\u000eÍ\u0007\u0016m4g³\u0005üIYê\b\u0011ÏÎPs': {
|
||||
messageKeys: {
|
||||
'0': 'Îgó¯2àvñX_õ\u0014Ç\u0000öl\u001f4J>ÐÏ{`-Ü5¦',
|
||||
'4': 'c¿<µâ¼Xµ!Ù¯µ®[n<ìîúcoå©n\u0013"l]Ð',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 5,
|
||||
key: 'Z{òÙ8سAÝdSZk\nÃ\u001cô¡\u001b[YÒ¶\u0016a°\u0004<',
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005+\u00134«1\u0000\u0013l *ãKçnºÖó³íTS&{ù Í>1': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: -1,
|
||||
key: "èB?7\u000f¯\u001e\u0010¨\u0007}:?¹\u0010$\\ë~ª\u0000gM0Õ'£\u0005",
|
||||
},
|
||||
chainType: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
version: 'v1',
|
||||
} as any;
|
||||
|
||||
function protoToJSON(value: unknown): unknown {
|
||||
if (value == null) {
|
||||
return value;
|
||||
|
@ -169,186 +348,7 @@ describe('sessionTranslation', () => {
|
|||
});
|
||||
|
||||
it('Generates expected protobuf with many old receiver chains', () => {
|
||||
const record: any = {
|
||||
sessions: {
|
||||
'\u0005W¿\u0000lÈ\nyª\u000eümB0\u0017j.Û£³-s\u0016Ä(O_M': {
|
||||
registrationId: 4243,
|
||||
currentRatchet: {
|
||||
rootKey:
|
||||
'Ë\u00035/üÚg\u0003Xeûú\u0010\u0000ü\u0002¶»o5\u001c¥\u0004Ðÿ«',
|
||||
lastRemoteEphemeralKey:
|
||||
'\u0005\n7\u001cmT
b!è\u000eÍ\u0007\u0016m4g³\u0005üIYê\b\u0011ÏÎPs',
|
||||
previousCounter: 2,
|
||||
ephemeralKeyPair: {
|
||||
privKey: 'äãÅ«ªàøí)á\u0005Á"sJM.¨¡\u0012r(N\f9Ô\b',
|
||||
pubKey: '\u0005+\u00134«1\u0000\u0013l *ãKçnºÖó³íTS&{ù Í>1',
|
||||
},
|
||||
},
|
||||
indexInfo: {
|
||||
remoteIdentityKey: '\u0005¨¨©üÏäúoá©êO¢çúxr»Æ¿r²GùiT@',
|
||||
closed: -1,
|
||||
baseKey: '\u0005W¿\u0000lÈ\nyª\u000eümB0\u0017j.Û£³-s\u0016Ä(O_M',
|
||||
baseKeyType: 2,
|
||||
},
|
||||
oldRatchetList: [
|
||||
{
|
||||
added: 1605579954962,
|
||||
ephemeralKey:
|
||||
'\u00050»\n¨ÊAä\u0006¢Ç´d\u0002\u00129}%î}ΩTc}8¼\u0011n\\',
|
||||
},
|
||||
{
|
||||
added: 1605580408250,
|
||||
ephemeralKey:
|
||||
'\u0005^Ä\nòÀ¢\u0000\u000fA\\6+Ó\u001a÷&×$¸¬ÑÔ|<qSÖ\u001aÙh',
|
||||
},
|
||||
{
|
||||
added: 1605581155167,
|
||||
ephemeralKey:
|
||||
'\u0005<\u0017å)QàFîl29Ø\u001c Ý$·;udß\u0005I|f\u0006',
|
||||
},
|
||||
{
|
||||
added: 1605638524556,
|
||||
ephemeralKey: '\u0005¯jõ±ã0wÛPÐÂSÏ´;·&\u0011Â%º¯°ÝÙþêù8F',
|
||||
},
|
||||
{
|
||||
added: 1606761719753,
|
||||
ephemeralKey: '\u0005Î(ð>xÄÈ?þv~íkx â¬.ðoòDg\u001eß.\r',
|
||||
},
|
||||
{
|
||||
added: 1606766530935,
|
||||
ephemeralKey:
|
||||
'\u0005\u0014@½M,à\bóó
}¨`i¿\u0000©I\u0001ôG\u001f:Ù{ó\u0005 ',
|
||||
},
|
||||
{
|
||||
added: 1608326293655,
|
||||
ephemeralKey: '\u0005µÒ\u0014?È¢+ÑR÷ç?3Dº\\@0\u0004®+-\br\t',
|
||||
},
|
||||
{
|
||||
added: 1609871105317,
|
||||
ephemeralKey:
|
||||
'\u0005±@íN"Í\u0019HS{$ï\u0017[Ñ\\\u001a*;>P\u0000\u001f\u000eHNaù)',
|
||||
},
|
||||
{
|
||||
added: 1611707063523,
|
||||
ephemeralKey: '\u0005ÞgÅké\u0001\u0013¡ÿûNXÈ(9\u0006¤w®/عRiJI',
|
||||
},
|
||||
{
|
||||
added: 1612211156372,
|
||||
ephemeralKey: '\u0005:[ÛOpd¯ ÂÙç\u0010OÞw{}ý\bw9Àß=\u0014Z',
|
||||
},
|
||||
],
|
||||
'\u00050»\n¨ÊAä\u0006¢Ç´d\u0002\u00129}%î}ΩTc}8¼\u0011n\\': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 0,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005^Ä\nòÀ¢\u0000\u000fA\\6+Ó\u001a÷&×$¸¬ÑÔ|<qSÖ\u001aÙh': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 2,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005<\u0017å)QàFîl29Ø\u001c Ý$·;udß\u0005I|f\u0006': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 1,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005¯jõ±ã0wÛPÐÂSÏ´;·&\u0011Â%º¯°ÝÙþêù8F': {
|
||||
messageKeys: {
|
||||
'0': 'A/{´{×f(èaøy\\D¾\u0000ÃHÀÁâô$ã\u001d3Äö°Ù',
|
||||
'1': "̶FT}dw8Æýª7»ÚÓ\u000f*'Ô»7£\u0018\u0012ñDá",
|
||||
'2': 'Îï\u0013¨ÁÕÎk\u000eýèÈ÷,¼îû5%ÓU¤6_õ¢\u0019ä]',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 3,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005Î(ð>xÄÈ?þv~íkx â¬.ðoòDg\u001eß.\r': {
|
||||
messageKeys: {
|
||||
'4': '©}j¿¼\u0014q\t¥Áñ\u0003: ÷ÞrñûÔµ%Æ\u001a',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 6,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005\u0014@½M,à\bóó
}¨`i¿\u0000©I\u0001ôG\u001f:Ù{ó\u0005 ': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 0,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005µÒ\u0014?È¢+ÑR÷ç?3Dº\\@0\u0004®+-\br\t': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: 2,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005±@íN"Í\u0019HS{$ï\u0017[Ñ\\\u001a*;>P\u0000\u001f\u000eHNaù)':
|
||||
{
|
||||
messageKeys: {
|
||||
'0': "1kÏ\u001cí+«<º\b'VÌ!×¼«PÃ[üáy;l'",
|
||||
'2': 'ö\u00047%L-
Wm)\u001d£ääíNô.Ô8
ÃÉ4r´ó^2',
|
||||
'3': '¨¿¦7T]\u001c\u001cà4:x\u0019¿\u0002YÉÀ\u001bâjr¸»¤¢0,*',
|
||||
'5': '¥\u0006·qgó4þ\u0011®U4F\u001cl©\bäô
»ÊÇÆ[',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 5,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005ÞgÅké\u0001\u0013¡ÿûNXÈ(9\u0006¤w®/عRiJI': {
|
||||
messageKeys: {
|
||||
'0': "]'8WÄ\u0007
nºÖ{ÿ7]ôäÄ!é\u000btA@°b¢)\u001ar",
|
||||
'2': 'ÄfGÇjÖxÅö:×RÔi)M\u0019©IE+¨`þKá;£Û½',
|
||||
'3': '¦Õhýø`ÖPéPs;\u001e\u000bE}¨¿õ\u0003uªøå\u00062(×G',
|
||||
'9': 'Ï^<ÕúÌ\u0001i´;ït¼\u001aÑ?ï\u0014lãàÆ¸\u001a8/m',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 11,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005:[ÛOpd¯ ÂÙç\u0010OÞw{}ý\bw9Àß=\u0014Z': {
|
||||
messageKeys: {
|
||||
'0': '!\u00115\\W~|¯oa2\u001e\u0004V8Ï¡d}\u001b\u001a8^QÖfvÕ"',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 1,
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005\n7\u001cmT
b!è\u000eÍ\u0007\u0016m4g³\u0005üIYê\b\u0011ÏÎPs': {
|
||||
messageKeys: {
|
||||
'0': 'Îgó¯2àvñX_õ\u0014Ç\u0000öl\u001f4J>ÐÏ{`-Ü5¦',
|
||||
'4': 'c¿<µâ¼Xµ!Ù¯µ®[n<ìîúcoå©n\u0013"l]Ð',
|
||||
},
|
||||
chainKey: {
|
||||
counter: 5,
|
||||
key: 'Z{òÙ8سAÝdSZk\nÃ\u001cô¡\u001b[YÒ¶\u0016a°\u0004<',
|
||||
},
|
||||
chainType: 2,
|
||||
},
|
||||
'\u0005+\u00134«1\u0000\u0013l *ãKçnºÖó³íTS&{ù Í>1': {
|
||||
messageKeys: {},
|
||||
chainKey: {
|
||||
counter: -1,
|
||||
key: "èB?7\u000f¯\u001e\u0010¨\u0007}:?¹\u0010$\\ë~ª\u0000gM0Õ'£\u0005",
|
||||
},
|
||||
chainType: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
version: 'v1',
|
||||
};
|
||||
const record: any = SESSION_V1_RECORD;
|
||||
|
||||
const expected = {
|
||||
currentSession: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue