Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions config/modporter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
common: &common
secret: secret

development:
<<: *common

staging:
<<: *common

production:
<<: *common
13 changes: 12 additions & 1 deletion lib/mod_porter.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
require 'strscan'
require 'yaml'
require 'active_support'

module ModPorter
class InvalidSignature < StandardError
Expand Down Expand Up @@ -37,6 +39,11 @@ def self.included(base)
base.before_filter :normalize_mod_porters
base.extend ModPorter::ClassMethods
end

def load_config
modporter_conf = YAML.load_file(File.join(RAILS_ROOT, 'config', 'modporter.yml'))
@modporter_conf = modporter_conf[RAILS_ENV].symbolize_keys
end

def normalize_mod_porters
x_uploads_header = request.headers["X-Uploads"] || request.headers["HTTP_X_UPLOADS"]
Expand Down Expand Up @@ -88,7 +95,11 @@ def normalize_mod_porters
end

def check_signature!(options)
expected_digest = Digest::SHA1.digest("#{options[:path]}#{self.class.mod_porter_secret}")

# Load the secret from config/modporter.yml file
load_config

expected_digest = Digest::SHA1.digest("#{options[:path]}#{@modporter_conf[:secret]}")
base64_encoded_digest = ActiveSupport::Base64.encode64(expected_digest).chomp

if options[:signature] != base64_encoded_digest
Expand Down