Module: Certman::Resource::S3

Included in:
Client
Defined in:
lib/certman/resource/s3.rb

Instance Method Summary collapse

Instance Method Details

#check_approval_mailObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/certman/resource/s3.rb', line 42

def check_approval_mail
  is_break = false
  30.times do
    sleep 60
    s3.list_objects(bucket: bucket_name).contents.map do |object|
      res = s3.get_object(bucket: bucket_name, key: object.key)
      res.body.read.match(%r{https://[^\s]*certificates\.amazon\.com/approvals[^\s]+}) do |md|
        cert_uri = md[0]
        handle = open(cert_uri)
        document = Oga.parse_html(handle)
        data = {}
        document.css('form input').each do |input|
          data[input.get('name')] = input.get('value')
        end
        post_uri = cert_uri.sub(/\?.*/, '')
        res = Net::HTTP.post_form(URI.parse(post_uri), data)
        raise 'Can not approve' unless res.body =~ /Success/
        # success
        is_break = true
        break
      end
    end
    break if is_break
    break if @do_rollback
    resend_validation_email
  end
  raise 'Can not approve' unless is_break
end

#create_bucketObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/certman/resource/s3.rb', line 4

def create_bucket
   = sts.get_caller_identity.
  bucket_policy = <<-"EOF"
{
      "Version": "2008-10-17",
    "Statement": [
  {
      "Sid": "GiveSESPermissionToWriteEmail",
      "Effect": "Allow",
      "Principal": {
          "Service": [
              "ses.amazonaws.com"
          ]
      },
      "Action": [
          "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::#{bucket_name}/*",
      "Condition": {
          "StringEquals": {
              "aws:Referer": "#{}"
          }
      }
  }
    ]
}
EOF
  s3.create_bucket(
    acl: 'private',
    bucket: bucket_name
  )
  s3.put_bucket_policy(
    bucket: bucket_name,
    policy: bucket_policy,
    use_accelerate_endpoint: false
  )
end

#delete_bucketObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/certman/resource/s3.rb', line 71

def delete_bucket
  objects = s3.list_objects(bucket: bucket_name).contents.map do |object|
    { key: object.key }
  end
  unless objects.empty?
    s3.delete_objects(
      bucket: bucket_name,
      delete: {
        objects: objects
      }
    )
  end
  s3.delete_bucket(bucket: bucket_name)
end

#s3Object



86
87
88
# File 'lib/certman/resource/s3.rb', line 86

def s3
  @s3 ||= Aws::S3::Client.new
end