From 6f3b688b844ac4f0e53e72afef56f7b5d87c9b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Kar=C3=A9kinian?= Date: Wed, 23 Sep 2015 18:09:47 +0200 Subject: [PATCH] Reload token when it was read from file more than 1 hour ago --- lib/remote_storage/swift.rb | 25 +++++++++++++++++++++---- liquor-cabinet.rb | 17 ++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/lib/remote_storage/swift.rb b/lib/remote_storage/swift.rb index 6fad337..30226ec 100644 --- a/lib/remote_storage/swift.rb +++ b/lib/remote_storage/swift.rb @@ -4,7 +4,7 @@ require "cgi" require "active_support/core_ext/time/conversions" require "active_support/core_ext/numeric/time" require "redis" -require 'digest/md5' +require "digest/md5" module RemoteStorage class Swift @@ -12,8 +12,8 @@ module RemoteStorage attr_accessor :settings, :server def initialize(settings, server) - self.settings = settings - self.server = server + @settings = settings + @server = server end def authorize_request(user, directory, token, listing=false) @@ -313,7 +313,7 @@ module RemoteStorage end def default_headers - @default_headers ||= {"x-auth-token" => settings.swift["token"]} + {"x-auth-token" => swift_token} end def do_put_request(url, data, content_type) @@ -350,5 +350,22 @@ module RemoteStorage Digest::MD5.hexdigest objects.map { |o| o["hash"] }.join end end + + def reload_swift_token + server.logger.debug "Reloading swift token. Old token: #{settings.swift_token}" + settings.swift_token = File.read(swift_token_path) + settings.swift_token_loaded_at = Time.now + server.logger.debug "Reloaded swift token. New token: #{settings.swift_token}" + end + + def swift_token_path + "tmp/swift_token.txt" + end + + def swift_token + reload_swift_token if Time.now - settings.swift_token_loaded_at > 3600 + + settings.swift_token + end end end diff --git a/liquor-cabinet.rb b/liquor-cabinet.rb index 247648e..6796d2a 100644 --- a/liquor-cabinet.rb +++ b/liquor-cabinet.rb @@ -20,16 +20,24 @@ class LiquorCabinet < Sinatra::Base register Sinatra::ConfigFile set :environments, %w{development test production staging} config_file 'config.yml' + if settings.respond_to? :swift + set :swift_token, File.read("tmp/swift_token.txt") + set :swift_token_loaded_at, Time.now + end end configure :development do register Sinatra::Reloader also_reload "lib/remote_storage/*.rb" - enable :logging + set :logging, Logger::DEBUG + end + + configure :production do + # Disable logging + require "rack/common_logger" end configure :production, :staging do - require "rack/common_logger" if ENV['SENTRY_DSN'] require "raven" @@ -43,6 +51,10 @@ class LiquorCabinet < Sinatra::Base end end + configure :staging do + set :logging, Logger::DEBUG + end + # # Cabinet doors # @@ -120,7 +132,6 @@ class LiquorCabinet < Sinatra::Base if settings.respond_to? :riak RemoteStorage::Riak.new(settings, self) elsif settings.respond_to? :swift - settings.swift["token"] = File.read("tmp/swift_token.txt") RemoteStorage::Swift.new(settings, self) else puts <<-EOF