aboutsummaryrefslogtreecommitdiff
path: root/cdn/video_s3/video_s3.admin.inc
blob: ea038a4b88a39bab5f6373a286af7af05cdd415f (plain)
1
2
3
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
41
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
// $Id$
/**
 * @file
 * Provides admin functions for the s3 amazon webservices.
 */

function video_s3_admin_settings() {
  $form = array();
  $form['amazon_s3'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable Amazon S3.'),
    '#default_value' => variable_get('amazon_s3', FALSE),
    '#description' => t('If you would like to use Amazon S3 to store and serve up your video files enable this and fill out your access keys.'),
  );
  $form['amazon_s3_ssl'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable SSL?'),
    '#default_value' => variable_get('amazon_s3_ssl', FALSE),
    '#description' => t('If you would like to use ssl when transfering your files enable this option.'),
  );
  $form['amazon_s3_access_key'] = array(
    '#type' => 'textfield',
    '#title' => t('Access Key ID'),
    '#default_value' => variable_get('amazon_s3_access_key', ''),
    '#size' => 50,
  );
  $form['amazon_s3_secret_access_key'] = array(
    '#type' => 'password',
    '#title' => t('Secret Access Key'),
    '#default_value' => variable_get('amazon_s3_secret_access_key', ''),
    '#description' => t('Once saved, you do not need to re-enter your secret key.  If you need to update your key, then fill this out to update it.'),
    '#size' => 50,
  );
  //@todo Maybe move this to the admin settings page instead of global?
  $form['amazon_s3_bucket'] = array(
    '#type' => 'textfield',
    '#title' => t('Bucket'),
    '#description' => t('Enter the bucket you wish to store your videos in.  If the bucket doesn\'t exist the system will attempt to create it.'),
    '#default_value' => variable_get('amazon_s3_bucket', ''),
    '#size' => 50,
  );
  $form['#validate'] = array('video_s3_admin_settings_validate');
  
  //lets show our buckets in table format with a delete link.
  if(variable_get('amazon_s3', FALSE)) { //@todo add permissions
    //were enabled, that means they have successfully connected and created a bucket.
    module_load_include('inc', 'video_s3', '/includes/amazon_s3');
    $s3 = new video_amazon_s3;
    $s3->connect();
    $buckets = $s3->s3->listBuckets();
    // Setup our header.
    $header = array(t('Bucket Name'), t('Total Objects'), t('Actions'));
    $rows = array();
    foreach($buckets as $bucket) {
      $objects = count($s3->s3->getBucket($bucket));
      $actions = l(t('Delete'), 'admin/settings/video/amazon_s3/bucket/'. $bucket .'/delete');
      $rows[] = array($bucket, $objects, $actions);
    }
    $form['amazon_info'] = array(
      '#type' => 'fieldset',
      '#title' => t('Amazon S3 Information'),
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    $form['amazon_info']['buckets'] = array(
      '#type' => 'markup',
      '#value' => theme('table', $header, $rows),
    );
  }
  return system_settings_form($form);
}

function video_s3_admin_settings_validate(&$form, &$form_state) {
  // Check for CURL
  if (!extension_loaded('curl') && !@dl(PHP_SHLIB_SUFFIX == 'so' ? 'curl.so' : 'php_curl.dll')) {
    form_set_error('amazon_s3', t('The CURL extension is not loaded.'));
  } else {
    $bucket = $form_state['values']['amazon_s3_bucket'];
    // S3 buckets must contain only lower case alphanumeric characters, dots and dashes.
    if(!preg_match("/^[a-z.-]+$/", $bucket)) {
      form_set_error('amazon_s3_bucket', t('S3 buckets must contain only lower case alphanumeric characters, dots and dashes.'));
    }
    else {
      $access_key = $form_state['values']['amazon_s3_access_key'];
      // check our secret key.
      if(!empty($form_state['values']['amazon_s3_secret_access_key'])) {
        $secret_key = $form_state['values']['amazon_s3_secret_access_key'];
      }
      else {
        // Add our secret key back in to persist its value.
        $form_state['values']['amazon_s3_secret_access_key'] = variable_get('amazon_s3_secret_access_key','');
        $secret_key = variable_get('amazon_s3_secret_access_key','');
      }
      $ssl = isset($form_state['values']['amazon_s3_ssl']) && $form_state['values']['amazon_s3_ssl'] ? TRUE : FALSE;
      // Lets verify our credentials and verify our bucket exists, if not attempt to create it.
      module_load_include('inc', 'video_s3', '/includes/amazon_s3');
      $s3 = new video_amazon_s3;
      $s3->connect($access_key, $secret_key, $ssl);
      $buckets = $s3->s3->listBuckets();
      if ( !$buckets || !(in_array( $bucket, $buckets ))) {
        // Create a bucket with public read access
        if ($s3->s3->putBucket($bucket, S3::ACL_PUBLIC_READ)) {
          drupal_set_message(t('Successfully created the bucket %bucket.', array('%bucket' => $bucket)));
        }
        else {
          form_set_error('amazon_s3_bucket', t('Could not verify or create the bucket %bucket.', array('%bucket' => $bucket)));
        }
      }
    }
  }
}

/*
 * Deletes a bucket from your Amazon S3 server.
 */
function video_s3_bucket_delete($bucket) {
  module_load_include('inc', 'video_s3', '/includes/amazon_s3');
  $s3 = new video_amazon_s3;
  $s3->connect();
  $buckets = $s3->s3->listBuckets();
  if(is_array($buckets) && in_array($bucket, $buckets)) {
    if($s3->s3->deleteBucket($bucket)) {
      drupal_set_message(t('Successfully deleted the bucket %bucket', array('%bucket' => $bucket)));
    }
    else {
      drupal_set_message(t('Could not delete the bucket %bucket', array('%bucket' => $bucket)), 'error');
    }
  }
  else {
    drupal_set_message(t('The bucket %bucket does not exist for deletion.', array('%bucket' => $bucket)), 'error');
  }
  drupal_goto('admin/settings/video/amazon_s3');
}