class Services::RsAuthsController < Services::BaseController before_action :authenticate_user! before_action :require_service_enabled before_action :require_service_available before_action :find_rs_auth, only: [:destroy, :launch_app] def index @rs_auth_groups = current_user.remote_storage_authorizations .includes(:web_app) .group_by { |auth| [auth.client_id, auth.device_name] } .values .map { |auths| auths.sort_by(&:created_at).reverse } .sort_by { |auths| app_name_for(auths.first).downcase } end def destroy @auth.destroy! respond_to do |format| format.html do redirect_to apps_services_storage_url, flash: { success: 'App authorization revoked' } end format.json { head :no_content } end end def launch_app user_address = if Rails.env.development? "#{current_user.cn}@#{request.host_with_port}" else current_user.address end # Storage-first bearer token issuance (remoteStorage spec ยง11): the app # receives the address and runs the application-first flow itself. launch_url = "#{@auth.launch_url}#remotestorage=#{user_address}" redirect_to launch_url, allow_other_host: true end private def app_name_for(auth) auth.web_app&.name.presence || auth.app_name.presence || auth.client_id end def require_service_enabled unless current_user.service_enabled?(:remotestorage) http_status :forbidden end end def require_service_available http_status :not_found unless Setting.remotestorage_enabled? end def find_rs_auth @auth = current_user.remote_storage_authorizations.find(params[:id]) http_status :not_found unless @auth.present? end end