module Slugforge::Helper::Fog

Public Instance Methods

autoscaling() click to toggle source
# File lib/slugforge/helper/fog.rb, line 13
def autoscaling
  @autoscaling ||= ::Fog::AWS::AutoScaling.new(aws_credentials)
end
aws_bucket() click to toggle source
# File lib/slugforge/helper/fog.rb, line 31
def aws_bucket
  config.slug_bucket || raise(error_class, "You must specify a slug bucket in your configuration")
end
aws_credentials() click to toggle source
# File lib/slugforge/helper/fog.rb, line 23
def aws_credentials
  {
    :aws_access_key_id     => verify_aws_config(config.aws_access_key, 'access key'),
    :aws_secret_access_key => verify_aws_config(config.aws_secret_key, 'secret key'),
    :aws_session_token     => config.aws_session_token
  }.reject{ |_,v| v.nil? }
end
aws_session(duration = 30) click to toggle source

Create a temporary AWS session @return [Hash] hash containing :access_key_id, :secret_access_key, :session_token

# File lib/slugforge/helper/fog.rb, line 42
def aws_session(duration = 30)
  @aws_session ||= begin
    sts = ::Fog::AWS::STS.new(aws_credentials)

    # Request a token for the user that has permissions masked to a single S3 bucket and only lasts a short time
    token = sts.get_federation_token( username, bucket_policy, duration * 60 ) # session duration in minutes

    {
      aws_access_key_id:     token.body['AccessKeyId'],
      aws_secret_access_key: token.body['SecretAccessKey'],
      aws_session_token:     token.body['SessionToken'],
      aws_region:            config.aws_region
    }
  end
end
compute() click to toggle source
# File lib/slugforge/helper/fog.rb, line 6
def compute
  @compute ||= ::Fog::Compute.new(aws_credentials.merge({
    :region   => config.aws_region,
    :provider => 'AWS'
  }))
end
expiring_url(file, expiration=nil) click to toggle source
# File lib/slugforge/helper/fog.rb, line 35
def expiring_url(file, expiration=nil)
  expiration ||= Time.now + 60*60
  file.url(expiration)
end
s3() click to toggle source
# File lib/slugforge/helper/fog.rb, line 17
def s3
  @s3 ||= ::Fog::Storage.new(aws_credentials.merge({
    :provider => 'AWS'
  }))
end

Private Instance Methods

bucket_policy(bucket = aws_bucket) click to toggle source
# File lib/slugforge/helper/fog.rb, line 68
def bucket_policy(bucket = aws_bucket)
  {
    "Version"   => "2012-10-17",
    "Statement" => [
      {
        "Action"   => ["s3:*"],
        "Effect"   => "Allow",
        "Resource" => ["arn:aws:s3:::#{bucket}/*"]
      },
      {
        "Action"   => [
          "s3:ListBucket"
        ],
        "Effect"   => "Allow",
        "Resource" => [ "arn:aws:s3:::#{bucket}" ]
      }
    ]
  }
end
username() click to toggle source
# File lib/slugforge/helper/fog.rb, line 59
def username
  `whoami`.chomp
end
verify_aws_config(variable, message) click to toggle source
# File lib/slugforge/helper/fog.rb, line 63
def verify_aws_config(variable, message)
  raise error_class, "AWS #{message} is required to access AWS" unless variable
  variable
end