-
Notifications
You must be signed in to change notification settings - Fork 457
Expand file tree
/
Copy pathtus_active_upload_session.rb
More file actions
47 lines (37 loc) 路 1.27 KB
/
Copy pathtus_active_upload_session.rb
File metadata and controls
47 lines (37 loc) 路 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# frozen_string_literal: true
# Tracks in-flight TUS uploads per session so file push create/update can wait for completion.
# Uses upload IDs (not a simple counter) so abandoned or failed uploads can be released via
# DELETE /uploads/:id without leaving a stale positive count.
module TusActiveUploadSession
extend ActiveSupport::Concern
MAX_TRACKED_SESSION_UPLOADS = 5
private
def tus_upload_id_list
session[:tus_active_upload_ids] ||= []
session.delete(:tus_upload_count) if session.key?(:tus_upload_count)
session[:tus_active_upload_ids]
end
def register_tus_upload_in_session!(id)
list = tus_upload_id_list
return if list.include?(id)
# Defense in depth: create also rejects when the session is full (409 before register).
return if list.size >= MAX_TRACKED_SESSION_UPLOADS
list << id
session[:tus_active_upload_ids] = list
end
def release_tus_upload_from_session!(id)
list = tus_upload_id_list
list.delete(id)
session[:tus_active_upload_ids] = list
end
def tus_uploads_in_progress?
tus_upload_id_list.any?
end
def reset_tus_upload_session!
session.delete(:tus_upload_count)
session[:tus_active_upload_ids] = []
end
def tus_upload_session_tracked?(id)
tus_upload_id_list.include?(id)
end
end