Skip to content

Commit 5a76bad

Browse files
committed
fix: reduce token lengths
1 parent c1e4eee commit 5a76bad

File tree

2 files changed

+74
-16
lines changed

2 files changed

+74
-16
lines changed

packages/backend/src/services/auth/AuthService.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ class AuthService extends BaseService {
3939
this.svc_session = await this.services.get('session');
4040

4141
this.sessions = {};
42+
43+
const svc_token = await this.services.get('token');
44+
this.modules.jwt = {
45+
sign: (payload, _, options) => svc_token.sign('auth', payload, options),
46+
verify: (token, _) => svc_token.verify('auth', token),
47+
};
4248
}
4349

4450
async authenticate_from_token (token) {
@@ -229,7 +235,7 @@ class AuthService extends BaseService {
229235
type: 'session',
230236
version: '0.0.0',
231237
uuid: session.uuid,
232-
meta: session.meta,
238+
// meta: session.meta,
233239
user_uid: user.uuid,
234240
}, this.global_config.jwt_secret);
235241

packages/backend/src/services/auth/TokenService.js

+67-15
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,38 @@ defv = o => {
2525
};
2626
};
2727

28+
const uuid_compression = {
29+
encode: v => {
30+
const undecorated = v.replace(/-/g, "");
31+
const base64 = Buffer
32+
.from(undecorated, 'hex')
33+
.toString('base64');
34+
return base64;
35+
},
36+
decode: v => {
37+
// if already a uuid, return that
38+
if ( v.includes('-') ) return v;
39+
40+
const undecorated = Buffer
41+
.from(v, 'base64')
42+
.toString('hex');
43+
return [
44+
undecorated.slice(0, 8),
45+
undecorated.slice(8, 12),
46+
undecorated.slice(12, 16),
47+
undecorated.slice(16, 20),
48+
undecorated.slice(20),
49+
].join('-');
50+
}
51+
};
52+
2853
const compression = {
2954
auth: def({
30-
uuid: 'u',
55+
uuid: {
56+
short: 'u',
57+
...uuid_compression,
58+
},
59+
version: 'v',
3160
type: {
3261
short: 't',
3362
values: defv({
@@ -36,8 +65,14 @@ const compression = {
3665
'app-under-user': 'au',
3766
}),
3867
},
39-
user_uid: 'uu',
40-
app_uid: 'au',
68+
user_uid: {
69+
short: 'uu',
70+
...uuid_compression,
71+
},
72+
app_uid: {
73+
short: 'au',
74+
...uuid_compression,
75+
},
4176
}),
4277
};
4378

@@ -76,6 +111,8 @@ class TokenService extends BaseService {
76111
const context = this.compression[scope];
77112
const payload = jwt.verify(token, secret);
78113

114+
console.log('payloda', payload)
115+
79116
return this._decompress_payload(context, payload);
80117
}
81118

@@ -96,6 +133,8 @@ class TokenService extends BaseService {
96133
if ( compress_info.short ) k = compress_info.short;
97134
if ( compress_info.values && compress_info.values.to_short[v] ) {
98135
v = compress_info.values.to_short[v];
136+
} else if ( compress_info.encode ) {
137+
v = compress_info.encode(v);
99138
}
100139

101140
compressed[k] = v;
@@ -124,6 +163,8 @@ class TokenService extends BaseService {
124163
if ( compress_info.short ) k = fullkey;
125164
if ( compress_info.values && compress_info.values.to_long[v] ) {
126165
v = compress_info.values.to_long[v];
166+
} else if ( compress_info.decode ) {
167+
v = compress_info.decode(v);
127168
}
128169

129170
decompressed[k] = v;
@@ -133,38 +174,49 @@ class TokenService extends BaseService {
133174
}
134175

135176
_test ({ assert }) {
177+
const U1 = '843f1d83-3c30-48c7-8964-62aff1a912d0';
178+
const U2 = '42e9c36b-8a53-4c3e-8e18-fe549b10a44d';
179+
const U3 = 'c22ef816-edb6-47c5-8c41-31c6520fa9e6';
136180
// Test compression
137181
{
138182
const context = this.compression.auth;
139183
const payload = {
140-
uuid: '123',
184+
uuid: U1,
141185
type: 'session',
142-
user_uid: '456',
143-
app_uid: '789',
186+
user_uid: U2,
187+
app_uid: U3,
144188
};
145189

146190
const compressed = this._compress_payload(context, payload);
147-
assert(() => compressed.u === '123');
191+
assert(() => compressed.u === uuid_compression.encode(U1));
148192
assert(() => compressed.t === 's');
149-
assert(() => compressed.uu === '456');
150-
assert(() => compressed.au === '789');
193+
assert(() => compressed.uu === uuid_compression.encode(U2));
194+
assert(() => compressed.au === uuid_compression.encode(U3));
151195
}
152196

153197
// Test decompression
154198
{
155199
const context = this.compression.auth;
156200
const payload = {
157-
u: '123',
201+
u: uuid_compression.encode(U1),
158202
t: 's',
159-
uu: '456',
160-
au: '789',
203+
uu: uuid_compression.encode(U2),
204+
au: uuid_compression.encode(U3),
161205
};
162206

163207
const decompressed = this._decompress_payload(context, payload);
164-
assert(() => decompressed.uuid === '123');
208+
assert(() => decompressed.uuid === U1);
165209
assert(() => decompressed.type === 'session');
166-
assert(() => decompressed.user_uid === '456');
167-
assert(() => decompressed.app_uid === '789');
210+
assert(() => decompressed.user_uid === U2);
211+
assert(() => decompressed.app_uid === U3);
212+
}
213+
214+
// Test UUID preservation
215+
{
216+
const payload = { uuid: U1 };
217+
const compressed = this._compress_payload(this.compression.auth, payload);
218+
const decompressed = this._decompress_payload(this.compression.auth, compressed);
219+
assert(() => decompressed.uuid === U1);
168220
}
169221
}
170222
}

0 commit comments

Comments
 (0)