mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-21 23:46:21 +08:00
Merge pull request #1064 from Ducz0r/lm-sci-2264-fix
Fix Office Online editing of files [SCI-2264]
This commit is contained in:
commit
bccf9f1a5b
|
@ -35,9 +35,9 @@ class WopiController < ActionController::Base
|
||||||
when 'REFRESH_LOCK'
|
when 'REFRESH_LOCK'
|
||||||
refresh_lock
|
refresh_lock
|
||||||
when 'GET_SHARE_URL'
|
when 'GET_SHARE_URL'
|
||||||
render nothing: :true, status: 501 and return
|
render body: nil, status: 501 and return
|
||||||
else
|
else
|
||||||
render nothing: :true, status: 404 and return
|
render body: nil, status: 404 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -86,27 +86,27 @@ class WopiController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def put_relative
|
def put_relative
|
||||||
render nothing: :true, status: 501 and return
|
render body: nil, status: 501 and return
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock
|
def lock
|
||||||
lock = request.headers['X-WOPI-Lock']
|
lock = request.headers['X-WOPI-Lock']
|
||||||
logger.warn 'WOPI: lock; ' + lock.to_s
|
logger.warn 'WOPI: lock; ' + lock.to_s
|
||||||
render nothing: :true, status: 404 and return if lock.nil? || lock.blank?
|
render body: nil, status: 404 and return if lock.nil? || lock.blank?
|
||||||
@asset.with_lock do
|
@asset.with_lock do
|
||||||
if @asset.locked?
|
if @asset.locked?
|
||||||
if @asset.lock == lock
|
if @asset.lock == lock
|
||||||
@asset.refresh_lock
|
@asset.refresh_lock
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = @asset.lock
|
response.headers['X-WOPI-Lock'] = @asset.lock
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@asset.lock_asset(lock)
|
@asset.lock_asset(lock)
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -116,7 +116,7 @@ class WopiController < ActionController::Base
|
||||||
lock = request.headers['X-WOPI-Lock']
|
lock = request.headers['X-WOPI-Lock']
|
||||||
old_lock = request.headers['X-WOPI-OldLock']
|
old_lock = request.headers['X-WOPI-OldLock']
|
||||||
if lock.nil? || lock.blank? || old_lock.blank?
|
if lock.nil? || lock.blank? || old_lock.blank?
|
||||||
render nothing: :true, status: 400 and return
|
render body: nil, status: 400 and return
|
||||||
end
|
end
|
||||||
@asset.with_lock do
|
@asset.with_lock do
|
||||||
if @asset.locked?
|
if @asset.locked?
|
||||||
|
@ -124,21 +124,21 @@ class WopiController < ActionController::Base
|
||||||
@asset.unlock
|
@asset.unlock
|
||||||
@asset.lock_asset(lock)
|
@asset.lock_asset(lock)
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = @asset.lock
|
response.headers['X-WOPI-Lock'] = @asset.lock
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = ' '
|
response.headers['X-WOPI-Lock'] = ' '
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def unlock
|
def unlock
|
||||||
lock = request.headers['X-WOPI-Lock']
|
lock = request.headers['X-WOPI-Lock']
|
||||||
render nothing: :true, status: 400 and return if lock.nil? || lock.blank?
|
render body: nil, status: 400 and return if lock.nil? || lock.blank?
|
||||||
@asset.with_lock do
|
@asset.with_lock do
|
||||||
if @asset.locked?
|
if @asset.locked?
|
||||||
logger.warn "WOPI: current asset lock: #{@asset.lock},
|
logger.warn "WOPI: current asset lock: #{@asset.lock},
|
||||||
|
@ -149,36 +149,36 @@ class WopiController < ActionController::Base
|
||||||
create_wopi_file_activity(@user, false)
|
create_wopi_file_activity(@user, false)
|
||||||
|
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = @asset.lock
|
response.headers['X-WOPI-Lock'] = @asset.lock
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
logger.warn 'WOPI: tried to unlock non-locked file'
|
logger.warn 'WOPI: tried to unlock non-locked file'
|
||||||
response.headers['X-WOPI-Lock'] = ' '
|
response.headers['X-WOPI-Lock'] = ' '
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def refresh_lock
|
def refresh_lock
|
||||||
lock = request.headers['X-WOPI-Lock']
|
lock = request.headers['X-WOPI-Lock']
|
||||||
render nothing: :true, status: 400 and return if lock.nil? || lock.blank?
|
render body: nil, status: 400 and return if lock.nil? || lock.blank?
|
||||||
@asset.with_lock do
|
@asset.with_lock do
|
||||||
if @asset.locked?
|
if @asset.locked?
|
||||||
if @asset.lock == lock
|
if @asset.lock == lock
|
||||||
@asset.refresh_lock
|
@asset.refresh_lock
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = @asset.lock
|
response.headers['X-WOPI-Lock'] = @asset.lock
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = ' '
|
response.headers['X-WOPI-Lock'] = ' '
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -190,7 +190,7 @@ class WopiController < ActionController::Base
|
||||||
else
|
else
|
||||||
response.headers['X-WOPI-Lock'] = ' '
|
response.headers['X-WOPI-Lock'] = ' '
|
||||||
end
|
end
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -212,11 +212,11 @@ class WopiController < ActionController::Base
|
||||||
@protocol.update(updated_at: Time.now) if @protocol
|
@protocol.update(updated_at: Time.now) if @protocol
|
||||||
|
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
else
|
else
|
||||||
logger.warn 'WOPI: wrong lock used to try and modify file'
|
logger.warn 'WOPI: wrong lock used to try and modify file'
|
||||||
response.headers['X-WOPI-Lock'] = @asset.lock
|
response.headers['X-WOPI-Lock'] = @asset.lock
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
elsif !@asset.file_file_size.nil? && @asset.file_file_size.zero?
|
elsif !@asset.file_file_size.nil? && @asset.file_file_size.zero?
|
||||||
logger.warn 'WOPI: initializing empty file'
|
logger.warn 'WOPI: initializing empty file'
|
||||||
|
@ -228,11 +228,11 @@ class WopiController < ActionController::Base
|
||||||
@team.save
|
@team.save
|
||||||
|
|
||||||
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
response.headers['X-WOPI-ItemVersion'] = @asset.version
|
||||||
render nothing: :true, status: 200 and return
|
render body: nil, status: 200 and return
|
||||||
else
|
else
|
||||||
logger.warn 'WOPI: trying to modify unlocked file'
|
logger.warn 'WOPI: trying to modify unlocked file'
|
||||||
response.headers['X-WOPI-Lock'] = ' '
|
response.headers['X-WOPI-Lock'] = ' '
|
||||||
render nothing: :true, status: 409 and return
|
render body: nil, status: 409 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -240,7 +240,7 @@ class WopiController < ActionController::Base
|
||||||
def load_vars
|
def load_vars
|
||||||
@asset = Asset.find_by_id(params[:id])
|
@asset = Asset.find_by_id(params[:id])
|
||||||
if @asset.nil?
|
if @asset.nil?
|
||||||
render nothing: :true, status: 404 and return
|
render body: nil, status: 404 and return
|
||||||
else
|
else
|
||||||
logger.warn 'Found asset: ' + @asset.id.to_s
|
logger.warn 'Found asset: ' + @asset.id.to_s
|
||||||
step_assoc = @asset.step
|
step_assoc = @asset.step
|
||||||
|
@ -264,13 +264,13 @@ class WopiController < ActionController::Base
|
||||||
wopi_token = params[:access_token]
|
wopi_token = params[:access_token]
|
||||||
if wopi_token.nil?
|
if wopi_token.nil?
|
||||||
logger.warn 'WOPI: nil wopi token'
|
logger.warn 'WOPI: nil wopi token'
|
||||||
render nothing: :true, status: 401 and return
|
render body: nil, status: 401 and return
|
||||||
end
|
end
|
||||||
|
|
||||||
@user = User.find_by_valid_wopi_token(wopi_token)
|
@user = User.find_by_valid_wopi_token(wopi_token)
|
||||||
if @user.nil?
|
if @user.nil?
|
||||||
logger.warn 'WOPI: no user with this token found'
|
logger.warn 'WOPI: no user with this token found'
|
||||||
render nothing: :true, status: 401 and return
|
render body: nil, status: 401 and return
|
||||||
end
|
end
|
||||||
logger.warn 'WOPI: user found by token ' + wopi_token +
|
logger.warn 'WOPI: user found by token ' + wopi_token +
|
||||||
' ID: ' + @user.id.to_s
|
' ID: ' + @user.id.to_s
|
||||||
|
@ -320,7 +320,7 @@ class WopiController < ActionController::Base
|
||||||
@breadcrumb_folder_url = @close_url
|
@breadcrumb_folder_url = @close_url
|
||||||
end
|
end
|
||||||
|
|
||||||
render nothing: :true, status: 404 and return unless @can_read
|
render body: nil, status: 404 and return unless @can_read
|
||||||
end
|
end
|
||||||
|
|
||||||
def verify_proof!
|
def verify_proof!
|
||||||
|
@ -336,15 +336,15 @@ class WopiController < ActionController::Base
|
||||||
logger.warn 'WOPI: proof verification: successful'
|
logger.warn 'WOPI: proof verification: successful'
|
||||||
else
|
else
|
||||||
logger.warn 'WOPI: proof verification: not verified'
|
logger.warn 'WOPI: proof verification: not verified'
|
||||||
render nothing: :true, status: 500 and return
|
render body: nil, status: 500 and return
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
logger.warn 'WOPI: proof verification: timestamp too old; ' +
|
logger.warn 'WOPI: proof verification: timestamp too old; ' +
|
||||||
timestamp.to_s
|
timestamp.to_s
|
||||||
render nothing: :true, status: 500 and return
|
render body: nil, status: 500 and return
|
||||||
end
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
logger.warn 'WOPI: proof verification: failed; ' + e.message
|
logger.warn 'WOPI: proof verification: failed; ' + e.message
|
||||||
render nothing: :true, status: 500 and return
|
render body: nil, status: 500 and return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue