activerecord-s3-bucket-name-validator 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +10 -3
- data/activerecord-s3-bucket-name-validator.gemspec +11 -11
- data/config/locales/de.yml +1 -0
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +1 -0
- data/config/locales/fr.yml +1 -0
- data/config/locales/it.yml +1 -0
- data/config/locales/ja.yml +1 -0
- data/config/locales/ko.yml +1 -0
- data/config/locales/nl.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/config/locales/zh-CN.yml +1 -0
- data/config/locales/zh-TW.yml +1 -0
- data/lib/activerecord/s3/bucket/name/validator/version.rb +1 -1
- data/lib/activerecord/s3/bucket/name/validator.rb +25 -3
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 12b96ad2afb8713382346c19e7c7589e41014735d7481754e26a9d03329d7c7f
|
|
4
|
+
data.tar.gz: a4a67ed0a9e5dc9b30bc69faafe9f82f74b77df66f60c0cac9076158165a595f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0e8698e66b8494c850a9618d7ba8fa2cc5088511195f96991817293e2269fe0fa1f20c66872a066265fbee592d51cab5ab18bf7c4cd27158707352c0413e0d20
|
|
7
|
+
data.tar.gz: 395899fab1991707c6cdbcb04b61dba595d23952229963fd9717598c9e5a2a87670d271b69673987aafb279e04933084ae367abae5f93feeca75825116e84567
|
data/README.md
CHANGED
|
@@ -4,6 +4,7 @@ ActiveModel validator for Amazon S3 bucket names. It implements the official AWS
|
|
|
4
4
|
- General purpose buckets (classic S3)
|
|
5
5
|
- Directory buckets (S3 Express One Zone)
|
|
6
6
|
- S3 Tables buckets
|
|
7
|
+
- S3 vector buckets
|
|
7
8
|
|
|
8
9
|
Works in any class using ActiveModel::Validations and in Rails/ActiveRecord models. Ships with i18n messages in multiple locales.
|
|
9
10
|
|
|
@@ -49,15 +50,18 @@ end
|
|
|
49
50
|
|
|
50
51
|
## Options
|
|
51
52
|
|
|
52
|
-
- `type` — `:general_purpose` (default), `:directory`, or `:
|
|
53
|
+
- `type` — `:general_purpose` (default), `:directory`, `:table`, or `:vector`
|
|
54
|
+
- `namespace` — `:account_regional` allows the official account-regional general-purpose bucket suffix (`-<account-id>-<region>-an`)
|
|
53
55
|
- `transfer_acceleration` — when `true`, periods are forbidden for general-purpose buckets
|
|
54
56
|
|
|
55
57
|
Examples:
|
|
56
58
|
|
|
57
59
|
```ruby
|
|
58
60
|
validates :bucket_name, s3_bucket_name: { transfer_acceleration: true }
|
|
61
|
+
validates :bucket_name, s3_bucket_name: { namespace: :account_regional }
|
|
59
62
|
validates :bucket_name, s3_bucket_name: { type: :directory }
|
|
60
63
|
validates :bucket_name, s3_bucket_name: { type: :table }
|
|
64
|
+
validates :bucket_name, s3_bucket_name: { type: :vector }
|
|
61
65
|
```
|
|
62
66
|
|
|
63
67
|
## i18n
|
|
@@ -67,6 +71,7 @@ Error keys provided:
|
|
|
67
71
|
- `activemodel.errors.messages.s3_bucket_name_invalid_transfer_acceleration`
|
|
68
72
|
- `activemodel.errors.messages.s3_bucket_name_invalid_directory`
|
|
69
73
|
- `activemodel.errors.messages.s3_bucket_name_invalid_table`
|
|
74
|
+
- `activemodel.errors.messages.s3_bucket_name_invalid_vector`
|
|
70
75
|
|
|
71
76
|
Locales shipped: en, es, it, fr, de, pt-BR, ja, ko, zh-CN, zh-TW, ru, nl.
|
|
72
77
|
|
|
@@ -76,12 +81,14 @@ Rails loads locales via a Railtie; plain ActiveModel loads them at require-time.
|
|
|
76
81
|
|
|
77
82
|
- Length 3–63, allowed characters, begin/end alphanumeric
|
|
78
83
|
- No adjacent periods; not IP-like (general purpose)
|
|
79
|
-
- Reserved prefixes/suffixes per AWS docs (for example `xn--`, `sthree-`, `amzn-s3-demo-`, `-s3alias`, `--ol-s3`, `.mrap`, `--x-s3`, `--table-s3`)
|
|
84
|
+
- Reserved prefixes/suffixes per AWS docs (for example `xn--`, `sthree-`, `amzn-s3-demo-`, `-s3alias`, `--ol-s3`, `.mrap`, `--x-s3`, `--table-s3`, `-an`)
|
|
85
|
+
- Account-regional general-purpose buckets must use `bucket-name-prefix-accountId-region-an` and require `namespace: :account_regional`
|
|
80
86
|
- Directory buckets must end with `--<zone-id>--x-s3`
|
|
81
87
|
- S3 Tables buckets disallow periods and underscores
|
|
88
|
+
- S3 vector buckets disallow periods and underscores
|
|
82
89
|
- Optional TA mode forbids periods
|
|
83
90
|
|
|
84
|
-
Note:
|
|
91
|
+
Note: namespace uniqueness and immutability are service-side constraints and not enforced locally.
|
|
85
92
|
|
|
86
93
|
## Examples
|
|
87
94
|
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
|
|
2
1
|
lib = File.expand_path("../lib", __FILE__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
3
|
require "activerecord/s3/bucket/name/validator/version"
|
|
5
4
|
|
|
6
5
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name
|
|
8
|
-
spec.version
|
|
9
|
-
spec.authors
|
|
10
|
-
spec.email
|
|
6
|
+
spec.name = "activerecord-s3-bucket-name-validator"
|
|
7
|
+
spec.version = Activerecord::S3::Bucket::Name::Validator::VERSION
|
|
8
|
+
spec.authors = ["Claudio Poli"]
|
|
9
|
+
spec.email = ["masterkain@gmail.com"]
|
|
11
10
|
|
|
12
|
-
spec.summary
|
|
13
|
-
spec.description
|
|
14
|
-
spec.homepage
|
|
15
|
-
spec.license
|
|
11
|
+
spec.summary = "ActiveModel/ActiveRecord validator for Amazon S3 bucket naming rules"
|
|
12
|
+
spec.description = "Validate S3 bucket names on your models against the official AWS rules (general purpose, directory buckets, S3 Tables, and S3 Vectors)."
|
|
13
|
+
spec.homepage = "https://github.com/icoretech/activerecord-s3-bucket-name-validator"
|
|
14
|
+
spec.license = "MIT"
|
|
16
15
|
|
|
17
16
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
18
17
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
@@ -37,8 +36,8 @@ Gem::Specification.new do |spec|
|
|
|
37
36
|
"LICENSE*",
|
|
38
37
|
"*.gemspec"
|
|
39
38
|
]
|
|
40
|
-
spec.bindir
|
|
41
|
-
spec.executables
|
|
39
|
+
spec.bindir = "exe"
|
|
40
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
42
41
|
spec.require_paths = ["lib"]
|
|
43
42
|
|
|
44
43
|
spec.required_ruby_version = ">= 3.1"
|
|
@@ -51,4 +50,5 @@ Gem::Specification.new do |spec|
|
|
|
51
50
|
spec.add_development_dependency "bundler", ">= 1.17"
|
|
52
51
|
spec.add_development_dependency "rake", ">= 10.0"
|
|
53
52
|
spec.add_development_dependency "minitest", ">= 5.0"
|
|
53
|
+
spec.add_development_dependency "simplecov", ">= 0.22"
|
|
54
54
|
end
|
data/config/locales/de.yml
CHANGED
|
@@ -6,4 +6,5 @@ de:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "darf keine Punkte enthalten, wenn S3 Transfer Acceleration verwendet wird"
|
|
7
7
|
s3_bucket_name_invalid_directory: "ist kein gültiger S3-Verzeichnis-Bucket-Name (3–63 Zeichen; Kleinbuchstaben, Ziffern oder Bindestriche; muss mit --<zone-id>--x-s3 enden; reservierte Präfixe/Suffixe nicht erlaubt)"
|
|
8
8
|
s3_bucket_name_invalid_table: "ist kein gültiger S3-Tables-Bucket-Name (3–63 Zeichen; Kleinbuchstaben, Ziffern oder Bindestriche; keine Punkte oder Unterstriche; keine reservierten Präfixe/Suffixe)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "ist kein gültiger S3-Vectors-Bucket-Name (3–63 Zeichen; Kleinbuchstaben, Ziffern oder Bindestriche; keine Punkte oder Unterstriche; beginnt/endet alphanumerisch)"
|
|
9
10
|
s3_bucket_name_invalid: "ist kein gültiger S3-Bucket-Name"
|
data/config/locales/en.yml
CHANGED
|
@@ -6,4 +6,5 @@ en:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "cannot contain periods when using S3 Transfer Acceleration"
|
|
7
7
|
s3_bucket_name_invalid_directory: "is not a valid S3 directory bucket name (3–63 chars; lowercase letters, numbers or hyphens; must end with --<zone-id>--x-s3; reserved prefixes/suffixes not allowed)"
|
|
8
8
|
s3_bucket_name_invalid_table: "is not a valid S3 Tables bucket name (3–63 chars; lowercase letters, numbers or hyphens; no periods or underscores; reserved prefixes/suffixes not allowed)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "is not a valid S3 Vectors bucket name (3–63 chars; lowercase letters, numbers or hyphens; no periods or underscores; start/end alphanumeric)"
|
|
9
10
|
s3_bucket_name_invalid: "is not a valid S3 bucket name"
|
data/config/locales/es.yml
CHANGED
|
@@ -6,4 +6,5 @@ es:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "no puede contener puntos cuando se usa S3 Transfer Acceleration"
|
|
7
7
|
s3_bucket_name_invalid_directory: "no es un nombre de bucket de directorio S3 válido (3–63 caracteres; letras minúsculas, números o guiones; debe terminar con --<zone-id>--x-s3; prefijos/sufijos reservados no permitidos)"
|
|
8
8
|
s3_bucket_name_invalid_table: "no es un nombre de bucket S3 Tables válido (3–63 caracteres; letras minúsculas, números o guiones; sin puntos ni guiones bajos; sin prefijos/sufijos reservados)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "no es un nombre de bucket S3 Vectors válido (3–63 caracteres; letras minúsculas, números o guiones; sin puntos ni guiones bajos; empieza y termina alfanumérico)"
|
|
9
10
|
s3_bucket_name_invalid: "no es un nombre de bucket S3 válido"
|
data/config/locales/fr.yml
CHANGED
|
@@ -6,4 +6,5 @@ fr:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "ne peut pas contenir de points avec S3 Transfer Acceleration"
|
|
7
7
|
s3_bucket_name_invalid_directory: "n’est pas un nom de bucket de répertoire S3 valide (3–63 caractères ; lettres minuscules, chiffres ou tirets ; doit se terminer par --<zone-id>--x-s3 ; préfixes/suffixes réservés interdits)"
|
|
8
8
|
s3_bucket_name_invalid_table: "n’est pas un nom de bucket S3 Tables valide (3–63 caractères ; lettres minuscules, chiffres ou tirets ; sans points ni underscores ; pas de préfixes/suffixes réservés)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "n’est pas un nom de bucket S3 Vectors valide (3–63 caractères ; lettres minuscules, chiffres ou tirets ; sans points ni underscores ; commence et se termine par un caractère alphanumérique)"
|
|
9
10
|
s3_bucket_name_invalid: "n’est pas un nom de bucket S3 valide"
|
data/config/locales/it.yml
CHANGED
|
@@ -6,4 +6,5 @@ it:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "non può contenere punti quando si usa S3 Transfer Acceleration"
|
|
7
7
|
s3_bucket_name_invalid_directory: "non è un nome bucket directory S3 valido (3–63 caratteri; lettere minuscole, numeri o trattini; deve terminare con --<zone-id>--x-s3; prefissi/suffissi riservati non consentiti)"
|
|
8
8
|
s3_bucket_name_invalid_table: "non è un nome bucket S3 Tables valido (3–63 caratteri; lettere minuscole, numeri o trattini; senza punti o underscore; senza prefissi/suffissi riservati)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "non è un nome bucket S3 Vectors valido (3–63 caratteri; lettere minuscole, numeri o trattini; senza punti o underscore; inizia/termina alfanumerico)"
|
|
9
10
|
s3_bucket_name_invalid: "non è un nome bucket S3 valido"
|
data/config/locales/ja.yml
CHANGED
|
@@ -6,4 +6,5 @@ ja:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "S3 Transfer Acceleration を使用する場合、ピリオドは使用できません"
|
|
7
7
|
s3_bucket_name_invalid_directory: "有効な S3 ディレクトリバケット名ではありません(3~63 文字、小文字の英字・数字・ハイフン、末尾に --<zone-id>--x-s3 必須、予約済みの接頭/接尾辞不可)"
|
|
8
8
|
s3_bucket_name_invalid_table: "有効な S3 Tables バケット名ではありません(3~63 文字、小文字の英字・数字・ハイフン、ピリオドおよびアンダースコア不可、予約済みの接頭/接尾辞不可)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "有効な S3 Vectors バケット名ではありません(3~63 文字、小文字の英字・数字・ハイフン、ピリオドおよびアンダースコア不可、先頭/末尾は英数字)"
|
|
9
10
|
s3_bucket_name_invalid: "有効な S3 バケット名ではありません"
|
data/config/locales/ko.yml
CHANGED
|
@@ -6,4 +6,5 @@ ko:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "S3 Transfer Acceleration 사용 시 점(.)을 포함할 수 없습니다"
|
|
7
7
|
s3_bucket_name_invalid_directory: "유효한 S3 디렉터리 버킷 이름이 아닙니다(3–63자; 소문자, 숫자 또는 하이픈; '--<zone-id>--x-s3'로 끝나야 함; 예약된 접두사/접미사 금지)"
|
|
8
8
|
s3_bucket_name_invalid_table: "유효한 S3 Tables 버킷 이름이 아닙니다(3–63자; 소문자, 숫자 또는 하이픈; 점/밑줄 금지; 예약된 접두사/접미사 금지)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "유효한 S3 Vectors 버킷 이름이 아닙니다(3–63자; 소문자, 숫자 또는 하이픈; 점/밑줄 금지; 시작/끝은 영숫자)"
|
|
9
10
|
s3_bucket_name_invalid: "유효한 S3 버킷 이름이 아닙니다"
|
data/config/locales/nl.yml
CHANGED
|
@@ -6,4 +6,5 @@ nl:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "mag geen punten bevatten wanneer S3 Transfer Acceleration wordt gebruikt"
|
|
7
7
|
s3_bucket_name_invalid_directory: "is geen geldige S3-directorybucketnaam (3–63 tekens; kleine letters, cijfers of koppeltekens; moet eindigen op --<zone-id>--x-s3; gereserveerde voor-/achtervoegsels niet toegestaan)"
|
|
8
8
|
s3_bucket_name_invalid_table: "is geen geldige S3 Tables-bucketnaam (3–63 tekens; kleine letters, cijfers of koppeltekens; geen punten of underscores; geen gereserveerde voor-/achtervoegsels)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "is geen geldige S3 Vectors-bucketnaam (3–63 tekens; kleine letters, cijfers of koppeltekens; geen punten of underscores; begint/eindigt alfanumerisch)"
|
|
9
10
|
s3_bucket_name_invalid: "is geen geldige S3-bucketnaam"
|
data/config/locales/pt-BR.yml
CHANGED
|
@@ -6,4 +6,5 @@ pt-BR:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "não pode conter pontos ao usar S3 Transfer Acceleration"
|
|
7
7
|
s3_bucket_name_invalid_directory: "não é um nome de bucket de diretório S3 válido (3–63 caracteres; letras minúsculas, números ou hífens; deve terminar com --<zone-id>--x-s3; prefixos/sufixos reservados não permitidos)"
|
|
8
8
|
s3_bucket_name_invalid_table: "não é um nome de bucket S3 Tables válido (3–63 caracteres; letras minúsculas, números ou hífens; sem pontos ou underscores; sem prefixos/sufixos reservados)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "não é um nome de bucket S3 Vectors válido (3–63 caracteres; letras minúsculas, números ou hífens; sem pontos ou underscores; começa/termina alfanumérico)"
|
|
9
10
|
s3_bucket_name_invalid: "não é um nome de bucket S3 válido"
|
data/config/locales/ru.yml
CHANGED
|
@@ -6,4 +6,5 @@ ru:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "нельзя использовать точки при S3 Transfer Acceleration"
|
|
7
7
|
s3_bucket_name_invalid_directory: "недопустимое имя каталожного S3 бакета (3–63 символа; строчные буквы, цифры или дефисы; должно заканчиваться на --<zone-id>--x-s3; зарезервированные префиксы/суффиксы запрещены)"
|
|
8
8
|
s3_bucket_name_invalid_table: "недопустимое имя бакета S3 Tables (3–63 символа; строчные буквы, цифры или дефисы; без точек и нижних подчёркиваний; зарезервированные префиксы/суффиксы запрещены)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "недопустимое имя бакета S3 Vectors (3–63 символа; строчные буквы, цифры или дефисы; без точек и нижних подчёркиваний; начинается/заканчивается буквенно-цифровым символом)"
|
|
9
10
|
s3_bucket_name_invalid: "недопустимое имя S3 бакета"
|
data/config/locales/zh-CN.yml
CHANGED
|
@@ -6,4 +6,5 @@ zh-CN:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "使用 S3 Transfer Acceleration 时,名称中不能包含点(.)"
|
|
7
7
|
s3_bucket_name_invalid_directory: "不是有效的 S3 目录存储桶名称(3–63 个字符;小写字母、数字或连字符;必须以 --<zone-id>--x-s3 结尾;不得使用保留的前缀/后缀)"
|
|
8
8
|
s3_bucket_name_invalid_table: "不是有效的 S3 Tables 存储桶名称(3–63 个字符;小写字母、数字或连字符;不允许点或下划线;不得使用保留的前缀/后缀)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "不是有效的 S3 Vectors 存储桶名称(3–63 个字符;小写字母、数字或连字符;不允许点或下划线;首尾必须为字母或数字)"
|
|
9
10
|
s3_bucket_name_invalid: "不是有效的 S3 存储桶名称"
|
data/config/locales/zh-TW.yml
CHANGED
|
@@ -6,4 +6,5 @@ zh-TW:
|
|
|
6
6
|
s3_bucket_name_invalid_transfer_acceleration: "使用 S3 Transfer Acceleration 時,名稱中不可包含點(.)"
|
|
7
7
|
s3_bucket_name_invalid_directory: "不是有效的 S3 目錄儲存貯體名稱(3–63 個字元;小寫字母、數字或連字號;必須以 --<zone-id>--x-s3 結尾;不得使用保留的前/後綴)"
|
|
8
8
|
s3_bucket_name_invalid_table: "不是有效的 S3 Tables 儲存貯體名稱(3–63 個字元;小寫字母、數字或連字號;不可有點或底線;不得使用保留的前/後綴)"
|
|
9
|
+
s3_bucket_name_invalid_vector: "不是有效的 S3 Vectors 儲存貯體名稱(3–63 個字元;小寫字母、數字或連字號;不可有點或底線;開頭與結尾必須為英數字)"
|
|
9
10
|
s3_bucket_name_invalid: "不是有效的 S3 儲存貯體名稱"
|
|
@@ -30,7 +30,8 @@ end
|
|
|
30
30
|
# Usage in a model:
|
|
31
31
|
# validates :bucket_name, s3_bucket_name: { type: :general_purpose }
|
|
32
32
|
# Options:
|
|
33
|
-
# :type => :general_purpose (default), :directory, or :
|
|
33
|
+
# :type => :general_purpose (default), :directory, :table, or :vector
|
|
34
|
+
# :namespace => :account_regional for general-purpose account regional bucket names
|
|
34
35
|
# :transfer_acceleration => true to forbid periods for TA buckets
|
|
35
36
|
class S3BucketNameValidator < ActiveModel::EachValidator
|
|
36
37
|
RESERVED_PREFIXES_GENERAL = %w[xn-- sthree- amzn-s3-demo-].freeze
|
|
@@ -44,9 +45,15 @@ class S3BucketNameValidator < ActiveModel::EachValidator
|
|
|
44
45
|
return if blank_ok?(value)
|
|
45
46
|
|
|
46
47
|
valid = case type
|
|
47
|
-
when :general_purpose
|
|
48
|
+
when :general_purpose
|
|
49
|
+
validate_general_purpose(
|
|
50
|
+
value,
|
|
51
|
+
transfer_acceleration: !!options[:transfer_acceleration],
|
|
52
|
+
namespace: options[:namespace]
|
|
53
|
+
)
|
|
48
54
|
when :directory then validate_directory_bucket(value)
|
|
49
55
|
when :table then validate_table_bucket(value)
|
|
56
|
+
when :vector then validate_vector_bucket(value)
|
|
50
57
|
else
|
|
51
58
|
record.errors.add(attribute, :invalid, message: "unknown bucket type: #{type}")
|
|
52
59
|
false
|
|
@@ -60,6 +67,7 @@ class S3BucketNameValidator < ActiveModel::EachValidator
|
|
|
60
67
|
when :general_purpose then :s3_bucket_name_invalid_general
|
|
61
68
|
when :directory then :s3_bucket_name_invalid_directory
|
|
62
69
|
when :table then :s3_bucket_name_invalid_table
|
|
70
|
+
when :vector then :s3_bucket_name_invalid_vector
|
|
63
71
|
else :s3_bucket_name_invalid
|
|
64
72
|
end
|
|
65
73
|
end
|
|
@@ -76,7 +84,7 @@ class S3BucketNameValidator < ActiveModel::EachValidator
|
|
|
76
84
|
end
|
|
77
85
|
|
|
78
86
|
# Based on AWS docs: General purpose bucket naming rules
|
|
79
|
-
def validate_general_purpose(name, transfer_acceleration: false)
|
|
87
|
+
def validate_general_purpose(name, transfer_acceleration: false, namespace: nil)
|
|
80
88
|
return false unless length_between?(name, 3, 63)
|
|
81
89
|
return false unless /\A[a-z0-9.-]+\z/.match?(name)
|
|
82
90
|
return false unless begins_and_ends_with_alnum?(name)
|
|
@@ -85,6 +93,8 @@ class S3BucketNameValidator < ActiveModel::EachValidator
|
|
|
85
93
|
return false unless RESERVED_PREFIXES_GENERAL.none? { |p| name.start_with?(p) }
|
|
86
94
|
return false unless RESERVED_SUFFIXES_GENERAL.none? { |s| name.end_with?(s) }
|
|
87
95
|
return false if transfer_acceleration && name.include?(".")
|
|
96
|
+
return false if name.end_with?("-an") && namespace != :account_regional
|
|
97
|
+
return false if namespace == :account_regional && !account_regional_name?(name)
|
|
88
98
|
true
|
|
89
99
|
end
|
|
90
100
|
|
|
@@ -111,6 +121,14 @@ class S3BucketNameValidator < ActiveModel::EachValidator
|
|
|
111
121
|
true
|
|
112
122
|
end
|
|
113
123
|
|
|
124
|
+
# Based on AWS docs: S3 vector bucket naming rules
|
|
125
|
+
def validate_vector_bucket(name)
|
|
126
|
+
return false unless length_between?(name, 3, 63)
|
|
127
|
+
return false unless /\A[a-z0-9-]+\z/.match?(name)
|
|
128
|
+
return false unless begins_and_ends_with_alnum?(name)
|
|
129
|
+
true
|
|
130
|
+
end
|
|
131
|
+
|
|
114
132
|
def length_between?(str, min, max)
|
|
115
133
|
str.length.between?(min, max)
|
|
116
134
|
end
|
|
@@ -122,4 +140,8 @@ class S3BucketNameValidator < ActiveModel::EachValidator
|
|
|
122
140
|
def ip_like?(str)
|
|
123
141
|
str =~ /\A(?:\d{1,3}\.){3}\d{1,3}\z/
|
|
124
142
|
end
|
|
143
|
+
|
|
144
|
+
def account_regional_name?(str)
|
|
145
|
+
/\A.+-\d{12}-[a-z0-9-]+-\d-an\z/.match?(str)
|
|
146
|
+
end
|
|
125
147
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activerecord-s3-bucket-name-validator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Claudio Poli
|
|
@@ -85,8 +85,22 @@ dependencies:
|
|
|
85
85
|
- - ">="
|
|
86
86
|
- !ruby/object:Gem::Version
|
|
87
87
|
version: '5.0'
|
|
88
|
+
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: simplecov
|
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0.22'
|
|
95
|
+
type: :development
|
|
96
|
+
prerelease: false
|
|
97
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
98
|
+
requirements:
|
|
99
|
+
- - ">="
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '0.22'
|
|
88
102
|
description: Validate S3 bucket names on your models against the official AWS rules
|
|
89
|
-
(general purpose, directory buckets, and S3
|
|
103
|
+
(general purpose, directory buckets, S3 Tables, and S3 Vectors).
|
|
90
104
|
email:
|
|
91
105
|
- masterkain@gmail.com
|
|
92
106
|
executables: []
|