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
# 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://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
        res = Net::HTTP.post_form(URI.parse('https://certificates.amazon.com/approvals'), 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 = "{\n      \"Version\": \"2008-10-17\",\n    \"Statement\": [\n  {\n      \"Sid\": \"GiveSESPermissionToWriteEmail\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n          \"Service\": [\n              \"ses.amazonaws.com\"\n          ]\n      },\n      \"Action\": [\n          \"s3:PutObject\"\n      ],\n      \"Resource\": \"arn:aws:s3:::\#{bucket_name}/*\",\n      \"Condition\": {\n          \"StringEquals\": {\n              \"aws:Referer\": \"\#{account_id}\"\n          }\n      }\n  }\n    ]\n}\n"
  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



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

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



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

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