1
- from flask import abort , request , jsonify , g
1
+ from flask import abort , request , jsonify , g , Blueprint
2
2
from werkzeug .exceptions import HTTPException
3
3
from ..web import app
4
4
from .. import crypto , config , db , http , utils
12
12
# an endpoint (via onion request) that doesn't start with a `/` -- we prepend `/legacy/` and submit
13
13
# it as an internal request to land here.
14
14
15
+ legacy = Blueprint ('legacy' , __name__ , url_prefix = '/legacy' )
16
+
15
17
16
18
def get_pubkey_from_token (token ):
17
19
if not token :
@@ -90,7 +92,7 @@ def legacy_check_user_room(
90
92
return (user , room )
91
93
92
94
93
- @app .get ("/legacy /rooms" )
95
+ @legacy .get ("/rooms" )
94
96
def get_rooms ():
95
97
"""serve public room list for user"""
96
98
@@ -103,7 +105,7 @@ def get_rooms():
103
105
)
104
106
105
107
106
- @app .get ("/legacy /rooms/<Room:room>" )
108
+ @legacy .get ("/rooms/<Room:room>" )
107
109
def get_room_info (room ):
108
110
"""serve room metadata"""
109
111
# This really should be authenticated but legacy Session just doesn't pass along auth info.
@@ -112,7 +114,7 @@ def get_room_info(room):
112
114
return jsonify ({'room' : room_info , 'status_code' : http .OK })
113
115
114
116
115
- @app .get ("/legacy /rooms/<Room:room>/image" )
117
+ @legacy .get ("/rooms/<Room:room>/image" )
116
118
def legacy_serve_room_image (room ):
117
119
"""serve room icon"""
118
120
# This really should be authenticated but legacy Session just doesn't pass along auth info.
@@ -124,20 +126,20 @@ def legacy_serve_room_image(room):
124
126
return jsonify ({"status_code" : http .OK , "result" : room .image .read_base64 ()})
125
127
126
128
127
- @app .get ("/legacy /member_count" )
129
+ @legacy .get ("/member_count" )
128
130
def legacy_member_count ():
129
131
user , room = legacy_check_user_room (read = True )
130
132
131
133
return jsonify ({"status_code" : http .OK , "member_count" : room .active_users ()})
132
134
133
135
134
- @app .post ("/legacy /claim_auth_token" )
136
+ @legacy .post ("/claim_auth_token" )
135
137
def legacy_claim_auth ():
136
138
"""this does nothing but needs to exist for backwards compat"""
137
139
return jsonify ({'status_code' : http .OK })
138
140
139
141
140
- @app .get ("/legacy /auth_token_challenge" )
142
+ @legacy .get ("/auth_token_challenge" )
141
143
def legacy_auth_token_challenge ():
142
144
"""
143
145
legacy endpoint to give back an encrypted auth token bundle for the client to use to
@@ -170,7 +172,7 @@ def legacy_transform_message(m):
170
172
}
171
173
172
174
173
- @app .post ("/legacy /messages" )
175
+ @legacy .post ("/messages" )
174
176
def handle_post_legacy_message ():
175
177
176
178
user , room = legacy_check_user_room (write = True )
@@ -187,7 +189,7 @@ def handle_post_legacy_message():
187
189
)
188
190
189
191
190
- @app .get ("/legacy /messages" )
192
+ @legacy .get ("/messages" )
191
193
def handle_legacy_get_messages ():
192
194
from_id = request .args .get ('from_server_id' )
193
195
limit = utils .get_int_param ('limit' , 256 , min = 1 , max = 256 , truncate = True )
@@ -205,7 +207,7 @@ def handle_legacy_get_messages():
205
207
)
206
208
207
209
208
- @app .post ("/legacy /compact_poll" )
210
+ @legacy .post ("/compact_poll" )
209
211
def handle_comapct_poll ():
210
212
req_list = request .json
211
213
result = list ()
@@ -272,22 +274,22 @@ def process_legacy_file_upload_for_room(
272
274
return room .upload_file (file_content , user , filename = filename , lifetime = lifetime )
273
275
274
276
275
- @app .post ("/legacy /files" )
277
+ @legacy .post ("/files" )
276
278
def handle_legacy_store_file ():
277
279
user , room = legacy_check_user_room (write = True , upload = True )
278
280
file_id = process_legacy_file_upload_for_room (user , room )
279
281
return jsonify ({'status_code' : http .OK , 'result' : file_id })
280
282
281
283
282
- @app .post ("/legacy /rooms/<Room:room>/image" )
284
+ @legacy .post ("/rooms/<Room:room>/image" )
283
285
def handle_legacy_upload_room_image (room ):
284
286
user , room = legacy_check_user_room (write = True , upload = True , moderator = True )
285
287
file_id = process_legacy_file_upload_for_room (user , room , lifetime = None )
286
288
room .image = file_id
287
289
return jsonify ({'status_code' : http .OK , 'result' : file_id })
288
290
289
291
290
- @app .get ("/legacy /files/<int:file_id>" )
292
+ @legacy .get ("/files/<int:file_id>" )
291
293
def handle_legacy_get_file (file_id ):
292
294
user , room = legacy_check_user_room (read = True )
293
295
@@ -300,7 +302,7 @@ def handle_legacy_get_file(file_id):
300
302
return jsonify_with_base64 ({'status_code' : http .OK , 'result' : file_content })
301
303
302
304
303
- @app .post ("/legacy /delete_messages" )
305
+ @legacy .post ("/delete_messages" )
304
306
def handle_legacy_delete_messages (ids = None ):
305
307
user , room = legacy_check_user_room (read = True )
306
308
@@ -315,12 +317,12 @@ def handle_legacy_delete_messages(ids=None):
315
317
return jsonify ({'status_code' : http .OK })
316
318
317
319
318
- @app .delete ("/legacy /messages/<int:msgid>" )
320
+ @legacy .delete ("/messages/<int:msgid>" )
319
321
def handle_legacy_single_delete (msgid ):
320
322
return handle_legacy_delete_messages (ids = [msgid ])
321
323
322
324
323
- @app .post ("/legacy /block_list" )
325
+ @legacy .post ("/block_list" )
324
326
def handle_legacy_ban ():
325
327
user , room = legacy_check_user_room (moderator = True )
326
328
ban = User (session_id = request .json ['public_key' ], autovivify = True )
@@ -330,7 +332,7 @@ def handle_legacy_ban():
330
332
return jsonify ({"status_code" : http .OK })
331
333
332
334
333
- @app .post ("/legacy /ban_and_delete_all" )
335
+ @legacy .post ("/ban_and_delete_all" )
334
336
def handle_legacy_banhammer ():
335
337
mod , room = legacy_check_user_room (moderator = True )
336
338
ban = User (session_id = request .json ['public_key' ], autovivify = True )
@@ -342,7 +344,7 @@ def handle_legacy_banhammer():
342
344
return jsonify ({"status_code" : http .OK })
343
345
344
346
345
- @app .delete ("/legacy /block_list/<SessionID:session_id>" )
347
+ @legacy .delete ("/block_list/<SessionID:session_id>" )
346
348
def handle_legacy_unban (session_id ):
347
349
user , room = legacy_check_user_room (moderator = True )
348
350
to_unban = User (session_id = session_id , autovivify = False )
@@ -352,7 +354,7 @@ def handle_legacy_unban(session_id):
352
354
abort (http .NOT_FOUND )
353
355
354
356
355
- @app .get ("/legacy /block_list" )
357
+ @legacy .get ("/block_list" )
356
358
def handle_legacy_banlist ():
357
359
# Bypass permission checks here because we want to continue even if we are banned:
358
360
user , room = legacy_check_user_room (no_perms = True )
@@ -369,7 +371,7 @@ def handle_legacy_banlist():
369
371
return jsonify ({"status_code" : http .OK , "banned_members" : bans })
370
372
371
373
372
- @app .get ("/legacy /moderators" )
374
+ @legacy .get ("/moderators" )
373
375
def handle_legacy_get_mods ():
374
376
user , room = legacy_check_user_room (read = True )
375
377
@@ -379,7 +381,7 @@ def handle_legacy_get_mods():
379
381
380
382
# Posting here adds an admin and requires admin access. Legacy Session doesn't understand the
381
383
# moderator/admin distinction so we don't support moderator adjustment at all here.
382
- @app .post ("/legacy /moderators" )
384
+ @legacy .post ("/moderators" )
383
385
def handle_legacy_add_admin ():
384
386
user , room = legacy_check_user_room (admin = True )
385
387
@@ -396,7 +398,7 @@ def handle_legacy_add_admin():
396
398
# DELETE here removes an admin or moderator and requires admin access. (Legacy Session doesn't
397
399
# understand the moderator/admin distinction so we don't distinguish between them and just remove
398
400
# both powers, if present).
399
- @app .delete ("/legacy /moderators/<SessionID:session_id>" )
401
+ @legacy .delete ("/moderators/<SessionID:session_id>" )
400
402
def handle_legacy_remove_admin (session_id ):
401
403
user , room = legacy_check_user_room (admin = True )
402
404
0 commit comments