├── mcs-s3-webhook-server-example ├── .gitignore ├── helpers.go ├── README.md ├── signatures.go ├── signatures_test.go └── hookserver.go ├── ruby ├── GettingStarted │ ├── examples │ │ ├── all_buckets_info.rb │ │ ├── create_bucket.rb │ │ ├── copyobject.rb │ │ └── s3client.rb │ └── README.md ├── README.md └── Credentials │ └── README.md ├── README.md ├── go ├── README.md ├── GettingStarted │ ├── examples │ │ ├── acl.go │ │ └── s3client.go │ └── README.md └── Credentials │ └── README.md ├── php ├── Credentials │ ├── examples │ │ ├── env_credentials.php │ │ ├── ini_credentials.php │ │ ├── provided_credentials.php │ │ └── hard_coded_credentials.php │ └── README.md ├── GettingStarted │ ├── examples │ │ ├── presigned_url.php │ │ ├── sdkclient.php │ │ └── s3client.php │ └── README.md ├── yii2-aws-s3.md └── README.md ├── js ├── GettingStarted │ ├── examples │ │ ├── presignv2.js │ │ └── s3client.js │ └── README.md ├── README.md └── Credentials │ └── README.md ├── authorization └── v4-query │ ├── _sort_query_params.md │ ├── _uri_encode.md │ ├── _get_canonical_and_signed_headers.md │ ├── SignatureCalculating.md │ └── README.md └── docs ├── partner_mcs_api.md └── prefix_keys.md /mcs-s3-webhook-server-example/.gitignore: -------------------------------------------------------------------------------- 1 | /mcs-s3-webhook-server-example 2 | -------------------------------------------------------------------------------- /mcs-s3-webhook-server-example/helpers.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | "net/http" 7 | ) 8 | 9 | func httpError(w http.ResponseWriter, code int, format string, args ...interface{}) { 10 | text := fmt.Sprintf(format, args...) 11 | log.Println(text) 12 | http.Error(w, text, code) 13 | } 14 | -------------------------------------------------------------------------------- /ruby/GettingStarted/examples/all_buckets_info.rb: -------------------------------------------------------------------------------- 1 | require 'aws-sdk' 2 | 3 | region = 'us-west-2' 4 | s3 = Aws::S3::Resource.new( 5 | region: 'ru-msk', 6 | access_key_id: 'AccessKeyEXAMPLE', 7 | secret_access_key: 'TheVeryLongLongLongSecretKeyEXAMPLE', 8 | endpoint: 'http://hb.bizmrg.com' 9 | ) 10 | puts "all buckets:\n" 11 | s3.buckets.limit(50).each do |b| 12 | puts "#{b.name}" 13 | end 14 | -------------------------------------------------------------------------------- /ruby/GettingStarted/examples/create_bucket.rb: -------------------------------------------------------------------------------- 1 | require 'aws-sdk' 2 | require 'json' 3 | 4 | s3 = Aws::S3::Client.new( 5 | profile: 'project1', 6 | region: 'ru-msk', 7 | endpoint: 'https://hb.bizmrg.com', 8 | ) 9 | bucketname = "newbucket" 10 | puts "create bucket \"bucketname\"" 11 | s3.create_bucket(bucket: bucketname) 12 | puts "all your buckets:" 13 | resp = s3.list_buckets 14 | resp.buckets.each do |bucket| 15 | puts bucket.name 16 | end 17 | -------------------------------------------------------------------------------- /mcs-s3-webhook-server-example/README.md: -------------------------------------------------------------------------------- 1 | # Example S3 webhook server for MCS 2 | 3 | ## Building 4 | ``` 5 | go build 6 | ``` 7 | 8 | You'll get the binary named `mcs-s3-webhook-server-example`. 9 | 10 | ## Running 11 | 12 | ``` 13 | ./mcs-s3-webhook-server-example 14 | ``` 15 | 16 | It will listen for HTTP requests on TCP port 33345. It assumes https forwarding from nginx. 17 | 18 | ## Testing 19 | 20 | To test signature correctness: 21 | ``` 22 | go test 23 | ``` 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWS SDK 2 | Данный раздел описывает библиотеки, необходимые, чтобы подключиться и использовать сервисы Hotbox/Icebox. 3 | Здесь вы найдете подробные инструкции: 4 | + Установке библиотек 5 | + Формированию учетных данных (необходимо для подписи запросов) 6 | + Использованию каждой отдельной библиотеки 7 | Также к каждой библиотеке прилогаются тесты иллюстрирующие возможные варианты использования. 8 | 9 | Для получения информации относительно методов, поддерживаемых сервисами Hotbox/Icebox:[hotbox-help](https://help.mail.ru/hotbox-help) 10 | 11 | При возникновении любых вопросов/сложностей вы можете написать нам и мы поможем вам решить их: 12 | ```hotbox@ml.corp.mail.ru``` 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /ruby/README.md: -------------------------------------------------------------------------------- 1 | # Установка 2 | Прежде чем установить AWS SDK Ruby, вам потребуется завести проект на hotbox/icebox и установить Ruby 1.9 или более поздней версии 3 | 4 | * Если ваш проект использует ```Bundler```, добавьте нижеприведенную команду в ваш ```Gemfile``` для того, чтобы добавить AWS SDK для Ruby в ваш проект: 5 | ``` 6 | gem 'aws-sdk' 7 | ``` 8 | * Если вы не используете ```Bundler```, самым простым способом установки SDK является использование ```RubyGems```. Чтобы установить последнюю версию SDK используйте следующую команду: 9 | ``` 10 | gem install aws-sdk 11 | ``` 12 | * Если предыдущая команда не работает в вашей системе на базе Unix, используйте sudo для установки SDK, как показано в следующей команде 13 | ``` 14 | sudo gem install aws-sdk 15 | ``` 16 | -------------------------------------------------------------------------------- /go/README.md: -------------------------------------------------------------------------------- 1 | # Установка 2 | Если вы используете Go 1.5 с флагом ```vendor``` GO15VENDOREXPERIMENT = 1 или Go 1.6 и версиями выше, вы можете использовать следующую команду для извлечения SDK. Зависимости SDK будут включены (исключая зависимости для тестирования) и будут в папке ```vendor```. 3 | ``` 4 | Go get -u github.com/aws/aws-sdk-go 5 | ``` 6 | 7 | Если вы хотите получить только SDK без каких-либо зависимостей, используйте следующую команду. 8 | ``` 9 | go get -d github.com/aws/aws-sdk-go/ 10 | ``` 11 | 12 | Этот процесс будут по-прежнему включать папку ```vendor```, и ее следует удалить, если она не будет использоваться вашей средой. 13 | ``` 14 | rm -rf $GOPATH/src/github.com/aws/aws-sdk-go/vendor 15 | ``` 16 | # Подключение SDK 17 | После того, как вы установили SDK, вы импортируете пакеты AWS в свои приложения Go для использования SDK, как показано в следующем примере: 18 | ``` 19 | import "github.com/aws/aws-sdk-go/service/s3" 20 | ``` -------------------------------------------------------------------------------- /ruby/GettingStarted/examples/copyobject.rb: -------------------------------------------------------------------------------- 1 | require 'aws-sdk' 2 | require 'pp' 3 | 4 | s3 = Aws::S3::Client.new(endpoint: "https://hb.bizmrg.com") 5 | 6 | bucket = "newbucket" 7 | object = "file" 8 | body = "original object" 9 | copy_object = "copy" 10 | 11 | puts "create bucket \"#{bucket}\"" 12 | s3.create_bucket(bucket: bucket) 13 | 14 | puts "put object \"#{object}\" in bucket \"#{bucket}\"" 15 | s3.put_object( 16 | bucket: bucket, 17 | key: object, 18 | body: body 19 | ) 20 | 21 | puts "copy object \"#{object}\" from bucket \"#{bucket}\" into object \"#{copy_object}\"" 22 | s3.copy_object( 23 | bucket: bucket, 24 | copy_source: "#{bucket}/#{object}", 25 | key: copy_object 26 | ) 27 | 28 | resp_orig = s3.get_object( 29 | bucket: bucket, 30 | key: object, 31 | ) 32 | puts "Etag of original file: " + resp_orig["etag"] + "\n" 33 | 34 | resp_copy = s3.get_object( 35 | bucket: bucket, 36 | key: copy_object, 37 | ) 38 | puts "Etag of copy: " + resp_copy["etag"] 39 | -------------------------------------------------------------------------------- /php/Credentials/examples/env_credentials.php: -------------------------------------------------------------------------------- 1 | 'latest', 15 | 'region' => 'us-east-1', 16 | 'endpoint' => 'http://hb.devmail.ru' 17 | ]); 18 | try { 19 | $result = $FirstS3Client->putObject([ 20 | 'Bucket' => $bucket, 21 | 'Key' => $key, 22 | 'Body' => $content 23 | ]); 24 | echo $result["@metadata"]["statusCode"] . "\n"; 25 | } catch (S3Exception $e) { 26 | echo $e->getMessage(); 27 | } catch (AwsException $e) { 28 | echo $e->getAwsRequestId() . "\n"; 29 | echo $e->getAwsErrorType() . "\n"; 30 | echo $e->getAwsErrorCode() . "\n"; 31 | } 32 | ?> 33 | -------------------------------------------------------------------------------- /ruby/GettingStarted/examples/s3client.rb: -------------------------------------------------------------------------------- 1 | require 'aws-sdk' 2 | require 'pp' 3 | 4 | # add access_key and secret_key 5 | Aws.config.update({ 6 | credentials: Aws::Credentials.new('AccessKeyEXAMPLE', 'TheVeryLongLongLongSecretKeyEXAMPLE') 7 | }) 8 | 9 | # add bucket_name, object_name and content 10 | bucket = 'example' 11 | key = 'ruby_file' 12 | content = "content of ruby file" 13 | 14 | 15 | s3Client = Aws::S3::Client.new( 16 | endpoint: 'http://hb.bizmrg.com' 17 | ) 18 | puts "create bucket \"bucket\"\n" 19 | s3Client.create_bucket(bucket: bucket) 20 | 21 | puts "try to upload file: \"#{key}\" from bucket: \"#{bucket}\" with content: \"#{content}\"\n" 22 | 23 | put_resp = s3Client.put_object(bucket: bucket, key: key, body: content) 24 | puts "Uploaded object with etag: "+ put_resp['etag']+"\n" 25 | 26 | puts "try to download file: \"#{key}\" from bucket: \"#{bucket}\" \n" 27 | puts "Content of downloaded file:" 28 | get_resp = s3Client.get_object(bucket: bucket, key: key) do |chunk| 29 | pp chunk 30 | end 31 | puts "Downloaded object with etag: "+ get_resp['etag'] 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /js/GettingStarted/examples/presignv2.js: -------------------------------------------------------------------------------- 1 | AWS = require('aws-sdk'); 2 | request = require('request'); 3 | md5hex = require('md5hex'); 4 | string = require('string'); 5 | 6 | AWS.config.update({ 7 | region: 'ru-msk', 8 | endpoint: 'http://hitbox.local', 9 | }); 10 | 11 | var s3 = new AWS.S3({ 12 | signatureVersion: 'v2' 13 | }); 14 | 15 | var params = {Bucket: 'marabu', Key: 'excalibur/items/stark.jpg', Expires: 300}; 16 | var url = s3.getSignedUrl('putObject', params); 17 | console.log(url); 18 | 19 | var options = { 20 | method: "OPTIONS", 21 | url: url, 22 | headers: { 23 | 'origin': 'mail.ru', 24 | 'access-control-request-method':"PUT", 25 | } 26 | }; 27 | 28 | request(options, function (error, response, body) { 29 | console.log(response.statusCode) // 200 30 | console.log(response.headers['content-type']) // 'image/png' 31 | }); 32 | 33 | var content = "content"; 34 | var put = { 35 | method: "PUT", 36 | url: url, 37 | body: content, 38 | }; 39 | 40 | request(put, function (error, response, body) { 41 | console.log(response.statusCode) // 200 42 | console.log(response.headers['content-type']) // 'image/png' 43 | }); 44 | 45 | -------------------------------------------------------------------------------- /authorization/v4-query/_sort_query_params.md: -------------------------------------------------------------------------------- 1 | #### Данная функция 2 | - принимает 3 | ``` 4 | строку 5 | ``` 6 | - отдает 7 | ``` 8 | строку 9 | ``` 10 | #### Данная функция выполняет 11 | ``` 12 | X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=EncodedCredentialString&X-Amz-Date=timeStamp&X-Amz-Expires=Expires&X-Amz-SignedHeaders=EncodedSignedHeaders 13 | ``` 14 | - делит строку на массив из отдельных элементов query параметров 15 | ``` 16 | array: 17 | - X-Amz-Algorithm=AWS4-HMAC-SHA256 18 | - X-Amz-Credential=EncodedCredentialString 19 | - X-Amz-Date=timeStamp 20 | - X-Amz-Expires=Expires 21 | - X-Amz-SignedHeaders=EncodedSignedHeaders 22 | ``` 23 | - делит каждый элемент массива на ключ и значение 24 | - анескейпит и эскейпит каждый ключ и значение 25 | - заменяет все плюсы на пробелы 26 | 27 | - собирается обратно в строку 28 | ``` 29 | X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=EncodedCredentialString&X-Amz-Date=timeStamp&X-Amz-Expires=Expires&X-Amz-SignedHeaders=EncodedSignedHeaders 30 | ``` 31 | 32 | #### Пример функции на perl 33 | 34 | ``` 35 | sub _sort_query_string { 36 | return '' unless length $_[0]; 37 | my @params; 38 | for my $param (split /&/, $_[0] ) { 39 | my ( $key, $value ) = 40 | map { tr/+/ /; uri_escape( uri_unescape( $_ ) ) } 41 | split /=/, $param; 42 | push @params, join '=', $key, $value; 43 | } 44 | return join '&', sort @params; 45 | } 46 | 47 | ``` 48 | -------------------------------------------------------------------------------- /ruby/GettingStarted/README.md: -------------------------------------------------------------------------------- 1 | # Начало Работы 2 | ### Шаг 1: Установить AWS SDK для Ruby 3 | Наиболее популярным способом установки является использование ```RubyGems```: 4 | ``` 5 | gem install aws-sdk 6 | ``` 7 | Более подробную инструкцию по установке вы можете найти в [установка aws sdk](https://github.com/mailru/hit-doc/blob/master/ruby/README.md) 8 | ### Шаг 2: Сконфигурировать учетные данные 9 | Создайте файл, содержащий credentials (учетные данные). 10 | Для Unix подобных систем ( Linux и тд): 11 | ``` 12 | ~/.aws/credentials 13 | ``` 14 | Для Windows: 15 | ``` 16 | %HOMEPATH%\.aws\credentials 17 | ``` 18 | Содержание файла: 19 | ``` 20 | [default] 21 | aws_access_key_id = your_access_key_id 22 | aws_secret_access_key = your_secret_access_key 23 | ``` 24 | Более подробную инструкцию вы можете найти в [конфигурирование учетных данных](https://github.com/mailru/hit-doc/tree/master/ruby/Credentials) 25 | ### Шаг 3: Создайте клиента 26 | ``` 27 | require 'aws-sdk' 28 | 29 | s3 = Aws::S3::Client.new(endpoint: "https://hb.bizmrg.com") 30 | ``` 31 | ### Шаг 4: Выполните операции 32 | ``` 33 | require 'aws-sdk' 34 | require 'pp' 35 | 36 | s3 = Aws::S3::Client.new(endpoint: "https://hb.bizmrg.com") 37 | 38 | s3.put_object( 39 | bucket: "bucketname", 40 | key: "objectname", 41 | body: "content" 42 | ) 43 | 44 | resp = s3.get_object( 45 | bucket: "bucketname", 46 | key: "objectname", 47 | ) 48 | puts "Etag of downloaded file: " + resp["etag"] + "\n" 49 | ``` 50 | -------------------------------------------------------------------------------- /js/README.md: -------------------------------------------------------------------------------- 1 | # Установка 2 | ### В браузере 3 | Чтобы использовать SDK в браузере, просто добавьте следующий тег скрипта в свои HTML-страницы: 4 | ``` 5 |