chore(core)!: dropped pre-v3 string sessions

This commit is contained in:
alina 🌸 2024-12-14 20:00:23 +03:00
parent b13d23326a
commit cc4cf35611
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
2 changed files with 11 additions and 172 deletions

View file

@ -5,28 +5,6 @@ import { defaultProductionDc } from '../../utils/dcs.js'
import { readStringSession, writeStringSession } from './string-session.js'
const stubAuthKey = new Uint8Array(32)
const stubDcs = {
main: {
...defaultProductionDc.main,
ipv6: false,
mediaOnly: false,
},
media: {
...defaultProductionDc.media,
ipv6: false,
mediaOnly: true,
},
}
const stubDcsTest = {
main: {
...stubDcs.main,
testMode: true,
},
media: {
...stubDcs.media,
testMode: true,
},
}
const stubDcsBasic = {
main: {
id: 2,
@ -55,10 +33,6 @@ const stubDcsBasicTest = {
testMode: true,
},
}
const stubDcsSameMedia = {
main: stubDcs.main,
media: stubDcs.main,
}
const stubDcsBasicSameMedia = {
main: stubDcsBasic.main,
media: stubDcsBasic.main,
@ -189,89 +163,4 @@ describe('readStringSession', () => {
})
})
})
describe('v2', () => {
it('should read production string session without user', () => {
expect(
readStringSession(
'AgQAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
),
).toEqual({
version: 2,
primaryDcs: stubDcs,
authKey: stubAuthKey,
self: null,
})
})
it('should read production string session without user with same dc for media', () => {
expect(
readStringSession(
'AgAAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
),
).toEqual({
version: 2,
primaryDcs: stubDcsSameMedia,
authKey: stubAuthKey,
self: null,
})
})
it('should read production string session with user', () => {
expect(
readStringSession(
'AgUAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
),
).toEqual({
version: 2,
primaryDcs: stubDcs,
authKey: stubAuthKey,
self: {
userId: 12345,
isBot: false,
isPremium: false,
usernames: [],
},
})
})
it('should read test dc string session with user', () => {
expect(
readStringSession(
'AgcAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
),
).toEqual({
version: 2,
primaryDcs: stubDcsTest,
authKey: stubAuthKey,
self: {
userId: 12345,
isBot: false,
isPremium: false,
usernames: [],
},
})
})
})
describe('v1', () => {
it('should read string session with user', () => {
expect(
readStringSession(
'AQEAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAADkwAAAAAAAAN5d5vCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
),
).toEqual({
version: 1,
// v1 didn't have separate media dc
primaryDcs: stubDcsSameMedia,
authKey: stubAuthKey,
self: {
userId: 12345,
isBot: false,
isPremium: false,
usernames: [],
},
})
})
})
})

View file

@ -1,4 +1,4 @@
import type { BasicDcOption, DcOptions } from '../../utils/dcs.js'
import type { DcOptions } from '../../utils/dcs.js'
import type { CurrentUserInfo } from '../storage/service/current-user.js'
import { base64 } from '@fuman/utils'
@ -20,31 +20,6 @@ export interface StringSessionData {
authKey: Uint8Array
}
function readTlDcOption(reader: TlBinaryReader): BasicDcOption {
const ctorId = reader.uint()
if (ctorId !== 414687501) {
throw new MtArgumentError(`Invalid dcOption constructor id: ${ctorId}`)
}
const flags = reader.uint()
const id = reader.int()
const ipAddress = reader.string()
const port = reader.int()
if (flags & 1024) {
reader.bytes() // skip secret
}
return {
id,
ipAddress,
port,
ipv6: Boolean(flags & 1),
mediaOnly: Boolean(flags & 2),
}
}
export function writeStringSession(data: StringSessionData): string {
const writer = TlBinaryWriter.manual(512)
@ -63,14 +38,14 @@ export function writeStringSession(data: StringSessionData): string {
writer.uint8View[0] = version
writer.pos += 1
if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {
if (data.primaryDcs.media !== data.primaryDcs.main) {
flags |= 4
}
writer.int(flags)
writer.bytes(serializeBasicDcOption(data.primaryDcs.main))
if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {
if (data.primaryDcs.media !== data.primaryDcs.main) {
writer.bytes(serializeBasicDcOption(data.primaryDcs.media))
}
@ -98,19 +73,10 @@ export function readStringSession(data: string | InputStringSessionData): String
const version = buf[0]
if (version !== 1 && version !== 2 && version !== 3) {
if (version !== 3) {
throw new Error(`Invalid session string (version = ${version})`)
}
if (version < 3) {
console.warn(
`You are using a deprecated session string (${data.slice(
0,
10,
)}...). Please update your session string, as it will stop working in the future.`,
)
}
const reader = TlBinaryReader.manual(buf, 1)
const flags = reader.int()
@ -118,32 +84,16 @@ export function readStringSession(data: string | InputStringSessionData): String
const testModeOld = Boolean(flags & 2)
const hasMedia = version >= 2 && Boolean(flags & 4)
let primaryDc: BasicDcOption
let primaryMediaDc: BasicDcOption
const primaryDc = parseBasicDcOption(reader.bytes())
if (version <= 2) {
const primaryDc_ = readTlDcOption(reader)
const primaryMediaDc_ = hasMedia ? readTlDcOption(reader) : primaryDc_
if (primaryDc === null) {
throw new MtArgumentError('Invalid session string (failed to parse primaryDc)')
}
primaryDc = primaryDc_
primaryMediaDc = primaryMediaDc_
} else if (version === 3) {
const primaryDc_ = parseBasicDcOption(reader.bytes())
const primaryMediaDc = hasMedia ? parseBasicDcOption(reader.bytes()) : primaryDc
if (primaryDc_ === null) {
throw new MtArgumentError('Invalid session string (failed to parse primaryDc)')
}
const primaryMediaDc_ = hasMedia ? parseBasicDcOption(reader.bytes()) : primaryDc_
if (primaryMediaDc_ === null) {
throw new MtArgumentError('Invalid session string (failed to parse primaryMediaDc)')
}
primaryDc = primaryDc_
primaryMediaDc = primaryMediaDc_
} else {
throw new Error('unreachable')
if (primaryMediaDc === null) {
throw new MtArgumentError('Invalid session string (failed to parse primaryMediaDc)')
}
if (testModeOld) {