Merge branch 'image-extraction' into develop

This commit is contained in:
2021-03-21 03:40:37 +00:00
20 changed files with 1481 additions and 957 deletions

1
.gitignore vendored
View File

@@ -25,6 +25,7 @@ pnpm-debug.log*
# Custom
src/assets/deck_of_cards
src/assets/avatars
.image-extraction/images
# terraform
*.terraform

140
.image-extraction/.gitignore vendored Normal file
View File

@@ -0,0 +1,140 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

View File

View File

@@ -0,0 +1,41 @@
# Adding new Shikigami
Remove all current images:
`fd -e png -x rm {}**`
After convert, copy to the character folder in assets:
`fd -e png hououka -x mv {} /Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/src/assets/cards/hououka`
Print all cards (excluding char and avatar):
`fd -E '*char*' -E '*avatar*'`
Blank JSON template:
- Paste template in
- Fill in with new char name
- Fill in filenames
- Copy `cards`
- Select all items in `cards`
- New line and paste to duplicate
- Update GUID
```json
{
"name": "Hououka",
"character_card": "hououka/hououka-char.png",
"cards": [
{ "id": "d6fc26b2", "name": "", "url": "" },
{ "id": "1217f957", "name": "", "url": "" },
{ "id": "a507638d", "name": "", "url": "" },
{ "id": "a3e876ec", "name": "", "url": "" },
{ "id": "8fa65d84", "name": "", "url": "" },
{ "id": "914c6cbb", "name": "", "url": "" },
{ "id": "f1f8ce7d", "name": "", "url": "" },
{ "id": "1d30d350", "name": "", "url": "" },
],
"avatar": "hououka/hououka-avatar.png"
}
```

View File

@@ -0,0 +1,52 @@
import glob
import extract_combat
import extract_spell
import extract_form
SHIKIGAMI_NAME = "umibozu"
def main(shikigami_name: str):
# combat cards
for image in glob.glob(
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/combat/*.*"
):
print(image)
extract_combat.extract_image(
image,
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/combat/out",
shikigami_name,
)
# spell cards
for image in glob.glob(
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/spells/*.*"
):
print(image)
extract_spell.extract_image(
image,
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/spells/out",
shikigami_name,
)
# form cards
for image in glob.glob(
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/forms/*.*"
):
print(image)
extract_form.extract_image(
image,
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/forms/out",
shikigami_name,
)
if __name__ == "__main__":
main(SHIKIGAMI_NAME)

View File

@@ -0,0 +1,85 @@
import glob
import numpy
from PIL import Image, ImageDraw
def extract_image(filename: str, output_path: str) -> None:
"""
Extract a character card from a screenshot from a device. Screenshot for each card
taken from the Shikigami page. Image will be resized and the card extracted.
Args:
filename (str): Full path to the input image.
output_path (str): Full path to the directory where the image should be saved.
"""
# Open the image, add alpha channel for transparency
initial_image = Image.open(filename).convert("RGBA")
# Check for size
if initial_image.size[0] != 1304:
basewidth = 1304
wpercent = basewidth / float(initial_image.size[0])
hsize = int((float(initial_image.size[1]) * float(wpercent)))
initial_image = initial_image.resize((basewidth, hsize), Image.ANTIALIAS)
# initial_image.save(f"{output_path}/{filename.split('/')[-1]}")
# raise SystemExit
# Convert to numpy array
initial_image_array = numpy.asarray(initial_image)
# Create mask polygon using points of the card border
mask_polygon = [
(768, 97),
(768, 512),
(534, 512),
(534, 97),
(559, 79),
(580, 70),
(604, 63),
(631, 58),
(651, 58),
(652, 58),
(671, 58),
(698, 63),
(722, 70),
(745, 79),
]
# Create the mask
mask_image = Image.new(
"L", (initial_image_array.shape[1], initial_image_array.shape[0]), 0
)
ImageDraw.Draw(mask_image).polygon(mask_polygon, outline=1, fill=1)
mask = numpy.array(mask_image)
# create a new empty image
extracted_image_array = numpy.empty(initial_image_array.shape, dtype="uint8")
# copy the colours from the first 3 columns
extracted_image_array[:, :, :3] = initial_image_array[:, :, :3]
# apply transparency to the alpha channel (4th column)
extracted_image_array[:, :, 3] = mask * 255
# convert back to an image
extracted_image = Image.fromarray(extracted_image_array, "RGBA")
# crop
extracted_image = extracted_image.crop((533, 57, 769, 512))
# save the image
extracted_image.save(f"{output_path}/{filename.split('/')[-1].split('.')[-2]}.png")
if __name__ == "__main__":
for image in glob.glob(
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/characters/*.*"
):
print(image)
extract_image(
image,
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/characters/out",
)

View File

@@ -0,0 +1,70 @@
import numpy
from PIL import Image, ImageDraw
def extract_image(filename: str, output_path: str, shikigami_name: str) -> None:
"""
Extract a combat card from a screenshot from a device. Screenshot for each card
taken from the Hyakabun scrollery. Image will be resized and the card extracted.
Args:
filename (str): Full path to the input image.
output_path (str): Full path to the directory where the image should be saved.
"""
# Open the image, add alpha channel for transparency
initial_image = Image.open(filename).convert("RGBA")
# Check for size
if initial_image.size[0] != 1304:
basewidth = 1304
wpercent = basewidth / float(initial_image.size[0])
hsize = int((float(initial_image.size[1]) * float(wpercent)))
initial_image = initial_image.resize((basewidth, hsize), Image.ANTIALIAS)
# Convert to numpy array
initial_image_array = numpy.asarray(initial_image)
# Create mask polygon using points of the card border
mask_polygon = [
(788, 90),
(788, 567),
(515, 567),
(515, 130),
(496, 110),
(496, 89),
(513, 76),
(523, 76),
(528, 76),
(536, 81),
(651, 39),
(652, 39),
]
# Create the mask
mask_image = Image.new(
"L", (initial_image_array.shape[1], initial_image_array.shape[0]), 0
)
ImageDraw.Draw(mask_image).polygon(mask_polygon, outline=1, fill=1)
mask = numpy.array(mask_image)
# create a new empty image
extracted_image_array = numpy.empty(initial_image_array.shape, dtype="uint8")
# copy the colours from the first 3 columns
extracted_image_array[:, :, :3] = initial_image_array[:, :, :3]
# apply transparency to the alpha channel (4th column)
extracted_image_array[:, :, 3] = mask * 255
# convert back to an image
extracted_image = Image.fromarray(extracted_image_array, "RGBA")
print(extracted_image.size)
# crop
extracted_image = extracted_image.crop((495, 38, 788, 567))
# save the image
extracted_image.save(
f"{output_path}/{shikigami_name}-"
f"{filename.split('/')[-1].split('.')[-2]}.png"
)

View File

@@ -0,0 +1,101 @@
import glob
import numpy
from PIL import Image, ImageDraw
def extract_image(filename: str, output_path: str) -> None:
"""
Extract a field card from a screenshot from a device. Screenshot for each card
taken from the Hyakabun scrollery. Image will be resized and the card extracted.
Args:
filename (str): Full path to the input image.
output_path (str): Full path to the directory where the image should be saved.
"""
# Open the image, add alpha channel for transparency
initial_image = Image.open(filename).convert("RGBA")
# Check for size
if initial_image.size[0] != 1304:
basewidth = 1304
wpercent = basewidth / float(initial_image.size[0])
hsize = int((float(initial_image.size[1]) * float(wpercent)))
initial_image = initial_image.resize((basewidth, hsize), Image.ANTIALIAS)
# initial_image.save(f"{output_path}/{filename.split('/')[-1]}")
# raise SystemExit
# Convert to numpy array
initial_image_array = numpy.asarray(initial_image)
# Create mask polygon using points of the card border
mask_polygon = [
(788, 68),
(788, 568),
(515, 568),
(515, 130),
(495, 112),
(491, 104),
(491, 96),
(495, 88),
(515, 72),
(515, 68),
(500, 46),
(499, 46),
(499, 43),
(502, 43),
(512, 47),
(523, 49),
(534, 51),
(550, 52),
(567, 52),
(584, 53),
(719, 53),
(736, 52),
(753, 52),
(769, 51),
(774, 50),
(779, 49),
(785, 48),
(790, 47),
(794, 46),
(803, 43),
]
# Create the mask
mask_image = Image.new(
"L", (initial_image_array.shape[1], initial_image_array.shape[0]), 0
)
ImageDraw.Draw(mask_image).polygon(mask_polygon, outline=1, fill=1)
mask = numpy.array(mask_image)
# create a new empty image
extracted_image_array = numpy.empty(initial_image_array.shape, dtype="uint8")
# copy the colours from the first 3 columns
extracted_image_array[:, :, :3] = initial_image_array[:, :, :3]
# apply transparency to the alpha channel (4th column)
extracted_image_array[:, :, 3] = mask * 255
# convert back to an image
extracted_image = Image.fromarray(extracted_image_array, "RGBA")
# crop
extracted_image = extracted_image.crop((490, 42, 803, 568))
# save the image
extracted_image.save(f"{output_path}/{filename.split('/')[-1].split('.')[-2]}.png")
if __name__ == "__main__":
for image in glob.glob(
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/fields/*.*"
):
print(image)
extract_image(
image,
"/Users/dtomlinson/git-repos/web-dev/onmyoji-deck-builder/."
"image-extraction/images/fields/out",
)

View File

@@ -0,0 +1,73 @@
import numpy
from PIL import Image, ImageDraw
def extract_image(filename: str, output_path: str, shikigami_name: str) -> None:
"""
Extract a form card from a screenshot from a device. Screenshot for each card
taken from the Hyakabun scrollery. Image will be resized and the card extracted.
Args:
filename (str): Full path to the input image.
output_path (str): Full path to the directory where the image should be saved.
"""
# Open the image, add alpha channel for transparency
initial_image = Image.open(filename).convert("RGBA")
# Check for size
if initial_image.size[0] != 1304:
basewidth = 1304
wpercent = basewidth / float(initial_image.size[0])
hsize = int((float(initial_image.size[1]) * float(wpercent)))
initial_image = initial_image.resize((basewidth, hsize), Image.ANTIALIAS)
# Convert to numpy array
initial_image_array = numpy.asarray(initial_image)
# Create mask polygon using points of the card border
mask_polygon = [
(788, 85),
(788, 567),
(515, 567),
(515, 130),
(496, 110),
(496, 89),
(513, 76),
(523, 76),
(528, 76),
(539, 66),
(581, 49),
(624, 40),
(679, 40),
(722, 49),
(764, 66),
(775, 74),
]
# Create the mask
mask_image = Image.new(
"L", (initial_image_array.shape[1], initial_image_array.shape[0]), 0
)
ImageDraw.Draw(mask_image).polygon(mask_polygon, outline=1, fill=1)
mask = numpy.array(mask_image)
# create a new empty image
extracted_image_array = numpy.empty(initial_image_array.shape, dtype="uint8")
# copy the colours from the first 3 columns
extracted_image_array[:, :, :3] = initial_image_array[:, :, :3]
# apply transparency to the alpha channel (4th column)
extracted_image_array[:, :, 3] = mask * 255
# convert back to an image
extracted_image = Image.fromarray(extracted_image_array, "RGBA")
# crop
extracted_image = extracted_image.crop((495, 39, 789, 567))
# save the image
extracted_image.save(
f"{output_path}/{shikigami_name}-"
f"{filename.split('/')[-1].split('.')[-2]}.png"
)

View File

@@ -0,0 +1,67 @@
import numpy
from PIL import Image, ImageDraw
def extract_image(filename: str, output_path: str, shikigami_name: str) -> None:
"""
Extract a spell card from a screenshot from a device. Mask is valid for 1304x603
screenshot from an iPhone 12 Pro.
Args:
filename (str): Full path to the input image.
output_path (str): Full path where the image should be saved.
"""
# Open the image, add alpha channel for transparency
initial_image = Image.open(filename).convert("RGBA")
# Check for size
if initial_image.size[0] != 1304:
basewidth = 1304
wpercent = basewidth / float(initial_image.size[0])
hsize = int((float(initial_image.size[1]) * float(wpercent)))
initial_image = initial_image.resize((basewidth, hsize), Image.ANTIALIAS)
# Convert to numpy array
initial_image_array = numpy.asarray(initial_image)
# Create mask polygon using points of the card border (iPhone 12 Pro screenshot)
mask_polygon = [
(535, 60),
(768, 60),
(788, 85),
(788, 567),
(515, 567),
(515, 130),
(496, 110),
(496, 91),
(513, 73),
(523, 73),
]
# Create the mask
mask_image = Image.new(
"L", (initial_image_array.shape[1], initial_image_array.shape[0]), 0
)
ImageDraw.Draw(mask_image).polygon(mask_polygon, outline=1, fill=1)
mask = numpy.array(mask_image)
# create a new empty image
extracted_image_array = numpy.empty(initial_image_array.shape, dtype="uint8")
# copy the colours from the first 3 columns
extracted_image_array[:, :, :3] = initial_image_array[:, :, :3]
# apply transparency to the alpha channel (4th column)
extracted_image_array[:, :, 3] = mask * 255
# convert back to an image
extracted_image = Image.fromarray(extracted_image_array, "RGBA")
# crop
extracted_image = extracted_image.crop((496, 59, 788, 567))
# save the image
extracted_image.save(
f"{output_path}/{shikigami_name}-"
f"{filename.split('/')[-1].split('.')[-2]}.png"
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

View File

@@ -1,27 +0,0 @@
import cv2
import numpy as np
image = cv2.imread('./img.jpeg')
original = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3, 3), 0)
canny = cv2.Canny(blurred, 120, 255, 1)
kernel = np.ones((5,5),np.uint8)
dilate = cv2.dilate(canny, kernel, iterations=1)
# Find contours
cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
# Iterate thorugh contours and filter for ROI
image_number = 0
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
ROI = original[y:y+h, x:x+w]
cv2.imwrite("ROI_{}.png".format(image_number), ROI)
image_number += 1
cv2.imshow('canny', canny)
cv2.imshow('image', image)
cv2.waitKey(0)

View File

@@ -1,5 +1,5 @@
# ENV="prod"
ENV="prod"
ENV="dev"
REGION="eu-west-1"
PROJECT="onmyojideckbuilder"
AWS_PROFILE="admin"

View File

@@ -1,155 +1,755 @@
{
"version": 4,
"terraform_version": "0.13.5",
"serial": 31,
"serial": 49,
"lineage": "9232bec8-e306-d87e-d0ff-5f5901d34c76",
"outputs": {},
"outputs": {
"cf_arn": {
"value": "arn:aws:cloudfront::745437999005:distribution/E26NAB6HJPHQMZ",
"type": "string"
},
"cf_domain_name": {
"value": "d1dkwcezyo6np1.cloudfront.net",
"type": "string"
},
"cf_etag": {
"value": "ECAIV649D3TA1",
"type": "string"
},
"cf_hosted_zone_id": {
"value": "Z2FDTNDATAQYW2",
"type": "string"
},
"cf_id": {
"value": "E26NAB6HJPHQMZ",
"type": "string"
},
"cf_status": {
"value": "Deployed",
"type": "string"
},
"s3_bucket": {
"value": "dev-onmyojideckbuilder-origin",
"type": "string"
},
"s3_bucket_domain_name": {
"value": "dev-onmyojideckbuilder-origin.s3-website.eu-west-1.amazonaws.com",
"type": "string"
}
},
"resources": [
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "archive_file",
"name": "lambda_main",
"provider": "provider[\"registry.terraform.io/hashicorp/archive\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"excludes": null,
"id": "320d4868dd37d1674e98bd790b8a54b006838d04",
"output_base64sha256": "5EVmwQDkgGfYMpMXNaWHUz3cmb/dSssoWl8mM8o3aMs=",
"output_md5": "611fc9e8b494e4b399217f632b8e35ed",
"output_path": "./lambda/main.js.zip",
"output_sha": "320d4868dd37d1674e98bd790b8a54b006838d04",
"output_size": 601,
"source": [],
"source_content": null,
"source_content_filename": null,
"source_dir": null,
"source_file": "./lambda/main.js",
"type": "zip"
}
}
]
},
{
"mode": "managed",
"type": "aws_iam_policy",
"name": "lambda_logging",
"type": "aws_iam_policy_document",
"name": "origin",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:iam::745437999005:policy/dev-onmyojideckbuilder-lambda_logging",
"description": "",
"id": "arn:aws:iam::745437999005:policy/dev-onmyojideckbuilder-lambda_logging",
"name": "dev-onmyojideckbuilder-lambda_logging",
"name_prefix": null,
"path": "/",
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\"\n ],\n \"Resource\": \"arn:aws:logs:*:*:*\",\n \"Effect\": \"Allow\"\n }\n ]\n}\n"
"id": "1888516152",
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}${origin_path}*\",\n \"Principal\": {\n \"AWS\": \"${cloudfront_origin_access_identity_iam_arn}\"\n }\n },\n {\n \"Sid\": \"S3ListBucketForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:ListBucket\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}\",\n \"Principal\": {\n \"AWS\": \"${cloudfront_origin_access_identity_iam_arn}\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"override_json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\":\"PublicRead\",\n \"Effect\":\"Allow\",\n \"Principal\":\"*\",\n \"Action\":[\"s3:GetObject\"],\n \"Resource\":\"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\"\n }\n ]\n}\n",
"policy_id": null,
"source_json": null,
"statement": [
{
"actions": [
"s3:GetObject"
],
"condition": [],
"effect": "Allow",
"not_actions": [],
"not_principals": [],
"not_resources": [],
"principals": [
{
"identifiers": [
"${cloudfront_origin_access_identity_iam_arn}"
],
"type": "AWS"
}
],
"resources": [
"arn:aws:s3:::${bucket_name}${origin_path}*"
],
"sid": "S3GetObjectForCloudFront"
},
"private": "bnVsbA=="
{
"actions": [
"s3:ListBucket"
],
"condition": [],
"effect": "Allow",
"not_actions": [],
"not_principals": [],
"not_resources": [],
"principals": [
{
"identifiers": [
"${cloudfront_origin_access_identity_iam_arn}"
],
"type": "AWS"
}
],
"resources": [
"arn:aws:s3:::${bucket_name}"
],
"sid": "S3ListBucketForCloudFront"
}
],
"version": "2012-10-17"
}
}
]
},
{
"mode": "managed",
"type": "aws_iam_role",
"name": "lambda_role",
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "aws_iam_policy_document",
"name": "origin_website",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:iam::745437999005:role/dev-onmyojideckbuilder-lambda",
"assume_role_policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"lambda.amazonaws.com\",\"edgelambda.amazonaws.com\"]},\"Action\":\"sts:AssumeRole\"}]}",
"create_date": "2021-03-19T03:02:49Z",
"description": "",
"force_detach_policies": false,
"id": "dev-onmyojideckbuilder-lambda",
"max_session_duration": 3600,
"name": "dev-onmyojideckbuilder-lambda",
"name_prefix": null,
"path": "/",
"permissions_boundary": null,
"id": "1923286579",
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}${origin_path}*\",\n \"Principal\": {\n \"AWS\": \"*\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"override_json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\":\"PublicRead\",\n \"Effect\":\"Allow\",\n \"Principal\":\"*\",\n \"Action\":[\"s3:GetObject\"],\n \"Resource\":\"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\"\n }\n ]\n}\n",
"policy_id": null,
"source_json": null,
"statement": [
{
"actions": [
"s3:GetObject"
],
"condition": [],
"effect": "Allow",
"not_actions": [],
"not_principals": [],
"not_resources": [],
"principals": [
{
"identifiers": [
"*"
],
"type": "AWS"
}
],
"resources": [
"arn:aws:s3:::${bucket_name}${origin_path}*"
],
"sid": "S3GetObjectForCloudFront"
}
],
"version": "2012-10-17"
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "aws_s3_bucket",
"name": "selected",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:s3:::dev-onmyojideckbuilder-origin",
"bucket": "dev-onmyojideckbuilder-origin",
"bucket_domain_name": "dev-onmyojideckbuilder-origin.s3.amazonaws.com",
"bucket_regional_domain_name": "dev-onmyojideckbuilder-origin.s3.eu-west-1.amazonaws.com",
"hosted_zone_id": "Z1BKCTXD74EZPE",
"id": "dev-onmyojideckbuilder-origin",
"region": "eu-west-1",
"website_domain": "s3-website-eu-west-1.amazonaws.com",
"website_endpoint": "dev-onmyojideckbuilder-origin.s3-website-eu-west-1.amazonaws.com"
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "template_file",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/template\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"filename": null,
"id": "8de579f1267cb043b75ce0d0ec7c7438cfe63eb53e5f5526712c645342ab2104",
"rendered": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": {\n \"AWS\": \"*\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"template": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}${origin_path}*\",\n \"Principal\": {\n \"AWS\": \"*\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"vars": {
"bucket_name": "dev-onmyojideckbuilder-origin",
"cloudfront_origin_access_identity_iam_arn": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1N6NEL2NFYLEC",
"origin_path": "/"
}
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_cloudfront_distribution",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 1,
"attributes": {
"active_trusted_signers": {
"enabled": "false",
"items.#": "0"
},
"aliases": [
"dev.onmyojideckbuilder.com"
],
"arn": "arn:aws:cloudfront::745437999005:distribution/E26NAB6HJPHQMZ",
"cache_behavior": [],
"caller_reference": "terraform-20210319043915752700000002",
"comment": "Managed by Terraform",
"custom_error_response": [],
"default_cache_behavior": [
{
"allowed_methods": [
"DELETE",
"GET",
"HEAD",
"OPTIONS",
"PATCH",
"POST",
"PUT"
],
"cached_methods": [
"GET",
"HEAD"
],
"compress": true,
"default_ttl": 60,
"field_level_encryption_id": "",
"forwarded_values": [
{
"cookies": [
{
"forward": "none",
"whitelisted_names": null
}
],
"headers": [
"Access-Control-Request-Headers",
"Access-Control-Request-Method",
"Origin"
],
"query_string": false,
"query_string_cache_keys": null
}
],
"lambda_function_association": [],
"max_ttl": 31536000,
"min_ttl": 0,
"smooth_streaming": false,
"target_origin_id": "dev-onmyojideckbuilder",
"trusted_signers": [],
"viewer_protocol_policy": "redirect-to-https"
}
],
"default_root_object": "index.html",
"domain_name": "d1dkwcezyo6np1.cloudfront.net",
"enabled": true,
"etag": "ECAIV649D3TA1",
"hosted_zone_id": "Z2FDTNDATAQYW2",
"http_version": "http2",
"id": "E26NAB6HJPHQMZ",
"in_progress_validation_batches": 0,
"is_ipv6_enabled": true,
"last_modified_time": "2021-03-19 04:39:18.131 +0000 UTC",
"logging_config": [
{
"bucket": "dev-onmyojideckbuilder-logs.s3.amazonaws.com",
"include_cookies": false,
"prefix": ""
}
],
"ordered_cache_behavior": [],
"origin": [
{
"custom_header": [],
"custom_origin_config": [
{
"http_port": 80,
"https_port": 443,
"origin_keepalive_timeout": 5,
"origin_protocol_policy": "http-only",
"origin_read_timeout": 30,
"origin_ssl_protocols": [
"TLSv1",
"TLSv1.1",
"TLSv1.2"
]
}
],
"domain_name": "dev-onmyojideckbuilder-origin.s3-website.eu-west-1.amazonaws.com",
"origin_id": "dev-onmyojideckbuilder",
"origin_path": "",
"s3_origin_config": []
}
],
"origin_group": [],
"price_class": "PriceClass_100",
"restrictions": [
{
"geo_restriction": [
{
"locations": null,
"restriction_type": "none"
}
]
}
],
"retain_on_delete": false,
"status": "Deployed",
"tags": {
"Description": "website to build and share onmyoji decks",
"Project": "onmyoji-deck-builder"
"Name": "dev-onmyojideckbuilder",
"Project": "onmyoji-deck-builder",
"Stage": "dev"
},
"unique_id": "AROA23D4RF6O5CZILWBI3"
"viewer_certificate": [
{
"acm_certificate_arn": "arn:aws:acm:us-east-1:745437999005:certificate/11502ff4-7851-426f-92ac-27db7c44825f",
"cloudfront_default_certificate": false,
"iam_certificate_id": "",
"minimum_protocol_version": "TLSv1",
"ssl_support_method": "sni-only"
}
],
"wait_for_deployment": true,
"web_acl_id": ""
},
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
"dependencies": [
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_s3_bucket.selected",
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_cloudfront_origin_access_identity",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"caller_reference": "terraform-20210319043839499500000001",
"cloudfront_access_identity_path": "origin-access-identity/cloudfront/E1N6NEL2NFYLEC",
"comment": "dev-onmyojideckbuilder",
"etag": "E1DPF7M9GL23MB",
"iam_arn": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1N6NEL2NFYLEC",
"id": "E1N6NEL2NFYLEC",
"s3_canonical_user_id": "501de5fa8b08f19123f2333f616fcfe27d5308a3a2e9bba045758f8d911f3561d3d036204c5b518255cff676cd72a45b"
},
"private": "bnVsbA=="
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_iam_role_policy_attachment",
"name": "lambda_logging",
"type": "aws_s3_bucket",
"name": "origin",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"id": "dev-onmyojideckbuilder-lambda-20210319030251359100000002",
"policy_arn": "arn:aws:iam::745437999005:policy/dev-onmyojideckbuilder-lambda_logging",
"role": "dev-onmyojideckbuilder-lambda"
"acceleration_status": "",
"acl": "private",
"arn": "arn:aws:s3:::dev-onmyojideckbuilder-origin",
"bucket": "dev-onmyojideckbuilder-origin",
"bucket_domain_name": "dev-onmyojideckbuilder-origin.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "dev-onmyojideckbuilder-origin.s3.eu-west-1.amazonaws.com",
"cors_rule": [
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET",
"HEAD",
"PUT",
"POST"
],
"allowed_origins": [
"*.onmyojideckbuilder.com"
],
"expose_headers": [
"ETag"
],
"max_age_seconds": 3600
},
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET",
"HEAD",
"PUT",
"POST"
],
"allowed_origins": [
"dev.onmyojideckbuilder.com"
],
"expose_headers": [
"ETag"
],
"max_age_seconds": 3600
}
],
"force_destroy": true,
"grant": [],
"hosted_zone_id": "Z1BKCTXD74EZPE",
"id": "dev-onmyojideckbuilder-origin",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"policy": null,
"region": "eu-west-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
]
}
]
}
],
"tags": {
"Attributes": "origin",
"Description": "website to build and share onmyoji decks",
"Name": "dev-onmyojideckbuilder-origin",
"Project": "onmyoji-deck-builder",
"Stage": "dev"
},
"versioning": [
{
"enabled": true,
"mfa_delete": false
}
],
"website": [
{
"error_document": "index.html",
"index_document": "index.html",
"redirect_all_requests_to": "",
"routing_rules": ""
}
],
"website_domain": "s3-website-eu-west-1.amazonaws.com",
"website_endpoint": "dev-onmyojideckbuilder-origin.s3-website-eu-west-1.amazonaws.com"
},
"private": "bnVsbA=="
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_s3_bucket_policy",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"bucket": "dev-onmyojideckbuilder-origin",
"id": "dev-onmyojideckbuilder-origin",
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": {\n \"AWS\": \"*\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}"
},
"private": "bnVsbA==",
"dependencies": [
"aws_iam_policy.lambda_logging",
"aws_iam_role.lambda_role"
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_iam_policy_document.origin",
"module.cloudfront_s3_cdn.data.aws_iam_policy_document.origin_website",
"module.cloudfront_s3_cdn.data.template_file.default"
]
}
]
},
{
"mode": "managed",
"type": "aws_lambda_function",
"name": "directory_indexes",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"].us_east_1",
"module": "module.cloudfront_s3_cdn.module.dns",
"mode": "data",
"type": "aws_route53_zone",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"arn": "arn:aws:lambda:us-east-1:745437999005:function:dev-onmyojideckbuilder-directory_indexes",
"dead_letter_config": [],
"description": "",
"environment": [],
"file_system_config": [],
"filename": "./lambda/main.js.zip",
"function_name": "dev-onmyojideckbuilder-directory_indexes",
"handler": "main.handler",
"id": "dev-onmyojideckbuilder-directory_indexes",
"invoke_arn": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:745437999005:function:dev-onmyojideckbuilder-directory_indexes/invocations",
"kms_key_arn": "",
"last_modified": "2021-03-19T03:02:57.785+0000",
"layers": [],
"memory_size": 128,
"publish": true,
"qualified_arn": "arn:aws:lambda:us-east-1:745437999005:function:dev-onmyojideckbuilder-directory_indexes:1",
"reserved_concurrent_executions": -1,
"role": "arn:aws:iam::745437999005:role/dev-onmyojideckbuilder-lambda",
"runtime": "nodejs12.x",
"s3_bucket": null,
"s3_key": null,
"s3_object_version": null,
"source_code_hash": "5EVmwQDkgGfYMpMXNaWHUz3cmb/dSssoWl8mM8o3aMs=",
"source_code_size": 601,
"tags": {
"Description": "website to build and share onmyoji decks",
"Project": "onmyoji-deck-builder"
"caller_reference": "481ca519-c2ac-4885-b585-8283334987f7",
"comment": "",
"id": "Z0511918V1SF3MCG22JU",
"linked_service_description": null,
"linked_service_principal": null,
"name": "onmyojideckbuilder.com.",
"name_servers": [
"ns-1501.awsdns-59.org",
"ns-1652.awsdns-14.co.uk",
"ns-176.awsdns-22.com",
"ns-530.awsdns-02.net"
],
"private_zone": false,
"resource_record_set_count": 5,
"tags": {},
"vpc_id": null,
"zone_id": "Z0511918V1SF3MCG22JU"
}
}
]
},
"timeout": 3,
"timeouts": null,
"tracing_config": [
{
"mode": "PassThrough"
"module": "module.cloudfront_s3_cdn.module.dns",
"mode": "managed",
"type": "aws_route53_record",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 2,
"attributes": {
"alias": [
{
"evaluate_target_health": false,
"name": "d1dkwcezyo6np1.cloudfront.net",
"zone_id": "Z2FDTNDATAQYW2"
}
],
"version": "1",
"vpc_config": []
"allow_overwrite": false,
"failover_routing_policy": [],
"fqdn": "dev.onmyojideckbuilder.com",
"geolocation_routing_policy": [],
"health_check_id": null,
"id": "Z0511918V1SF3MCG22JU_dev.onmyojideckbuilder.com_A",
"latency_routing_policy": [],
"multivalue_answer_routing_policy": null,
"name": "dev.onmyojideckbuilder.com",
"records": null,
"set_identifier": null,
"ttl": null,
"type": "A",
"weighted_routing_policy": [],
"zone_id": "Z0511918V1SF3MCG22JU"
},
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjIifQ==",
"dependencies": [
"module.cloudfront_s3_cdn.aws_cloudfront_distribution.default",
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_s3_bucket.selected",
"module.cloudfront_s3_cdn.module.dns.data.aws_route53_zone.default",
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.dns",
"mode": "managed",
"type": "aws_route53_record",
"name": "ipv6",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 2,
"attributes": {
"alias": [
{
"evaluate_target_health": false,
"name": "d1dkwcezyo6np1.cloudfront.net",
"zone_id": "Z2FDTNDATAQYW2"
}
],
"allow_overwrite": false,
"failover_routing_policy": [],
"fqdn": "dev.onmyojideckbuilder.com",
"geolocation_routing_policy": [],
"health_check_id": null,
"id": "Z0511918V1SF3MCG22JU_dev.onmyojideckbuilder.com_AAAA",
"latency_routing_policy": [],
"multivalue_answer_routing_policy": null,
"name": "dev.onmyojideckbuilder.com",
"records": null,
"set_identifier": null,
"ttl": null,
"type": "AAAA",
"weighted_routing_policy": [],
"zone_id": "Z0511918V1SF3MCG22JU"
},
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjIifQ==",
"dependencies": [
"module.cloudfront_s3_cdn.aws_cloudfront_distribution.default",
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_s3_bucket.selected",
"module.cloudfront_s3_cdn.module.dns.data.aws_route53_zone.default",
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.logs",
"mode": "managed",
"type": "aws_s3_bucket",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": "log-delivery-write",
"arn": "arn:aws:s3:::dev-onmyojideckbuilder-logs",
"bucket": "dev-onmyojideckbuilder-logs",
"bucket_domain_name": "dev-onmyojideckbuilder-logs.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "dev-onmyojideckbuilder-logs.s3.eu-west-1.amazonaws.com",
"cors_rule": [],
"force_destroy": true,
"grant": [],
"hosted_zone_id": "Z1BKCTXD74EZPE",
"id": "dev-onmyojideckbuilder-logs",
"lifecycle_rule": [
{
"abort_incomplete_multipart_upload_days": 5,
"enabled": true,
"expiration": [
{
"date": "",
"days": 90,
"expired_object_delete_marker": false
}
],
"id": "dev-onmyojideckbuilder-logs",
"noncurrent_version_expiration": [
{
"days": 90
}
],
"noncurrent_version_transition": [
{
"days": 30,
"storage_class": "GLACIER"
}
],
"prefix": "",
"tags": null,
"transition": [
{
"date": "",
"days": 30,
"storage_class": "STANDARD_IA"
},
{
"date": "",
"days": 60,
"storage_class": "GLACIER"
}
]
}
],
"logging": [],
"object_lock_configuration": [],
"policy": "",
"region": "eu-west-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
]
}
]
}
],
"tags": {
"Attributes": "logs",
"Description": "website to build and share onmyoji decks",
"Name": "dev-onmyojideckbuilder-logs",
"Project": "onmyoji-deck-builder",
"Stage": "dev"
},
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [],
"website_domain": null,
"website_endpoint": null
},
"private": "bnVsbA=="
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.logs",
"mode": "managed",
"type": "aws_s3_bucket_public_access_block",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"block_public_acls": true,
"block_public_policy": true,
"bucket": "dev-onmyojideckbuilder-logs",
"id": "dev-onmyojideckbuilder-logs",
"ignore_public_acls": true,
"restrict_public_buckets": true
},
"private": "bnVsbA==",
"dependencies": [
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
}

View File

@@ -1,69 +1,15 @@
{
"version": 4,
"terraform_version": "0.13.5",
"serial": 17,
"serial": 32,
"lineage": "9232bec8-e306-d87e-d0ff-5f5901d34c76",
"outputs": {
"cf_arn": {
"value": "arn:aws:cloudfront::745437999005:distribution/E26QN6RRQRWYWL",
"type": "string"
},
"cf_domain_name": {
"value": "d2x94vjdgw7i2d.cloudfront.net",
"type": "string"
},
"cf_etag": {
"value": "E17BC20562UZDI",
"type": "string"
},
"cf_hosted_zone_id": {
"value": "Z2FDTNDATAQYW2",
"type": "string"
},
"cf_id": {
"value": "E26QN6RRQRWYWL",
"type": "string"
},
"cf_status": {
"value": "Deployed",
"type": "string"
},
"s3_bucket": {
"value": "dev-onmyojideckbuilder-origin",
"type": "string"
},
"s3_bucket_domain_name": {
"value": "dev-onmyojideckbuilder-origin.s3.eu-west-1.amazonaws.com",
"value": "",
"type": "string"
}
},
"resources": [
{
"mode": "data",
"type": "archive_file",
"name": "lambda_main",
"provider": "provider[\"registry.terraform.io/hashicorp/archive\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"excludes": null,
"id": "320d4868dd37d1674e98bd790b8a54b006838d04",
"output_base64sha256": "5EVmwQDkgGfYMpMXNaWHUz3cmb/dSssoWl8mM8o3aMs=",
"output_md5": "611fc9e8b494e4b399217f632b8e35ed",
"output_path": "./lambda/main.js.zip",
"output_sha": "320d4868dd37d1674e98bd790b8a54b006838d04",
"output_size": 601,
"source": [],
"source_content": null,
"source_content_filename": null,
"source_dir": null,
"source_file": "./lambda/main.js",
"type": "zip"
}
}
]
},
{
"mode": "managed",
"type": "aws_iam_policy",
@@ -157,7 +103,7 @@
"invoke_arn": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:745437999005:function:dev-onmyojideckbuilder-directory_indexes/invocations",
"kms_key_arn": "",
"last_modified": "2021-03-19T03:02:57.785+0000",
"layers": null,
"layers": [],
"memory_size": 128,
"publish": true,
"qualified_arn": "arn:aws:lambda:us-east-1:745437999005:function:dev-onmyojideckbuilder-directory_indexes:1",
@@ -182,472 +128,7 @@
],
"version": "1",
"vpc_config": []
},
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDB9fQ==",
"dependencies": [
"aws_iam_policy.lambda_logging",
"aws_iam_role.lambda_role",
"aws_iam_role_policy_attachment.lambda_logging",
"data.archive_file.lambda_main"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "aws_iam_policy_document",
"name": "origin",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "1888516152",
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}${origin_path}*\",\n \"Principal\": {\n \"AWS\": \"${cloudfront_origin_access_identity_iam_arn}\"\n }\n },\n {\n \"Sid\": \"S3ListBucketForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:ListBucket\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}\",\n \"Principal\": {\n \"AWS\": \"${cloudfront_origin_access_identity_iam_arn}\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"override_json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\":\"PublicRead\",\n \"Effect\":\"Allow\",\n \"Principal\":\"*\",\n \"Action\":[\"s3:GetObject\"],\n \"Resource\":\"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\"\n }\n ]\n}\n",
"policy_id": null,
"source_json": null,
"statement": [
{
"actions": [
"s3:GetObject"
],
"condition": [],
"effect": "Allow",
"not_actions": [],
"not_principals": [],
"not_resources": [],
"principals": [
{
"identifiers": [
"${cloudfront_origin_access_identity_iam_arn}"
],
"type": "AWS"
}
],
"resources": [
"arn:aws:s3:::${bucket_name}${origin_path}*"
],
"sid": "S3GetObjectForCloudFront"
},
{
"actions": [
"s3:ListBucket"
],
"condition": [],
"effect": "Allow",
"not_actions": [],
"not_principals": [],
"not_resources": [],
"principals": [
{
"identifiers": [
"${cloudfront_origin_access_identity_iam_arn}"
],
"type": "AWS"
}
],
"resources": [
"arn:aws:s3:::${bucket_name}"
],
"sid": "S3ListBucketForCloudFront"
}
],
"version": "2012-10-17"
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "aws_iam_policy_document",
"name": "origin_website",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "1923286579",
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}${origin_path}*\",\n \"Principal\": {\n \"AWS\": \"*\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"override_json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\":\"PublicRead\",\n \"Effect\":\"Allow\",\n \"Principal\":\"*\",\n \"Action\":[\"s3:GetObject\"],\n \"Resource\":\"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\"\n }\n ]\n}\n",
"policy_id": null,
"source_json": null,
"statement": [
{
"actions": [
"s3:GetObject"
],
"condition": [],
"effect": "Allow",
"not_actions": [],
"not_principals": [],
"not_resources": [],
"principals": [
{
"identifiers": [
"*"
],
"type": "AWS"
}
],
"resources": [
"arn:aws:s3:::${bucket_name}${origin_path}*"
],
"sid": "S3GetObjectForCloudFront"
}
],
"version": "2012-10-17"
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "aws_s3_bucket",
"name": "selected",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:s3:::dev-onmyojideckbuilder-origin",
"bucket": "dev-onmyojideckbuilder-origin",
"bucket_domain_name": "dev-onmyojideckbuilder-origin.s3.amazonaws.com",
"bucket_regional_domain_name": "dev-onmyojideckbuilder-origin.s3.eu-west-1.amazonaws.com",
"hosted_zone_id": "Z1BKCTXD74EZPE",
"id": "dev-onmyojideckbuilder-origin",
"region": "eu-west-1",
"website_domain": null,
"website_endpoint": null
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "data",
"type": "template_file",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/template\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"filename": null,
"id": "abe7f8da350b4684c009a2f2f592539d4da30df5dbd3ec6d48e40259ca6af1c0",
"rendered": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1UEUM41WQK5JU\"\n }\n },\n {\n \"Sid\": \"S3ListBucketForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:ListBucket\",\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1UEUM41WQK5JU\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"template": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}${origin_path}*\",\n \"Principal\": {\n \"AWS\": \"${cloudfront_origin_access_identity_iam_arn}\"\n }\n },\n {\n \"Sid\": \"S3ListBucketForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:ListBucket\",\n \"Resource\": \"arn:aws:s3:::${bucket_name}\",\n \"Principal\": {\n \"AWS\": \"${cloudfront_origin_access_identity_iam_arn}\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}",
"vars": {
"bucket_name": "dev-onmyojideckbuilder-origin",
"cloudfront_origin_access_identity_iam_arn": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1UEUM41WQK5JU",
"origin_path": "/"
}
}
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_cloudfront_distribution",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 1,
"attributes": {
"active_trusted_signers": {
"enabled": "false",
"items.#": "0"
},
"aliases": [
"dev.onmyojideckbuilder.com"
],
"arn": "arn:aws:cloudfront::745437999005:distribution/E26QN6RRQRWYWL",
"cache_behavior": [],
"caller_reference": "terraform-20210319030304382400000003",
"comment": "Managed by Terraform",
"custom_error_response": [],
"default_cache_behavior": [
{
"allowed_methods": [
"DELETE",
"GET",
"HEAD",
"OPTIONS",
"PATCH",
"POST",
"PUT"
],
"cached_methods": [
"GET",
"HEAD"
],
"compress": true,
"default_ttl": 60,
"field_level_encryption_id": "",
"forwarded_values": [
{
"cookies": [
{
"forward": "none",
"whitelisted_names": null
}
],
"headers": [
"Access-Control-Request-Headers",
"Access-Control-Request-Method",
"Origin"
],
"query_string": false,
"query_string_cache_keys": null
}
],
"lambda_function_association": [
{
"event_type": "origin-request",
"include_body": false,
"lambda_arn": "arn:aws:lambda:us-east-1:745437999005:function:dev-onmyojideckbuilder-directory_indexes:1"
}
],
"max_ttl": 31536000,
"min_ttl": 0,
"smooth_streaming": false,
"target_origin_id": "dev-onmyojideckbuilder",
"trusted_signers": [],
"viewer_protocol_policy": "redirect-to-https"
}
],
"default_root_object": "index.html",
"domain_name": "d2x94vjdgw7i2d.cloudfront.net",
"enabled": true,
"etag": "E17BC20562UZDI",
"hosted_zone_id": "Z2FDTNDATAQYW2",
"http_version": "http2",
"id": "E26QN6RRQRWYWL",
"in_progress_validation_batches": 0,
"is_ipv6_enabled": true,
"last_modified_time": "2021-03-19 03:03:06.81 +0000 UTC",
"logging_config": [
{
"bucket": "dev-onmyojideckbuilder-logs.s3.amazonaws.com",
"include_cookies": false,
"prefix": ""
}
],
"ordered_cache_behavior": [],
"origin": [
{
"custom_header": [],
"custom_origin_config": [],
"domain_name": "dev-onmyojideckbuilder-origin.s3.eu-west-1.amazonaws.com",
"origin_id": "dev-onmyojideckbuilder",
"origin_path": "",
"s3_origin_config": [
{
"origin_access_identity": "origin-access-identity/cloudfront/E1UEUM41WQK5JU"
}
]
}
],
"origin_group": [],
"price_class": "PriceClass_100",
"restrictions": [
{
"geo_restriction": [
{
"locations": null,
"restriction_type": "none"
}
]
}
],
"retain_on_delete": false,
"status": "Deployed",
"tags": {
"Description": "website to build and share onmyoji decks",
"Name": "dev-onmyojideckbuilder",
"Project": "onmyoji-deck-builder",
"Stage": "dev"
},
"viewer_certificate": [
{
"acm_certificate_arn": "arn:aws:acm:us-east-1:745437999005:certificate/11502ff4-7851-426f-92ac-27db7c44825f",
"cloudfront_default_certificate": false,
"iam_certificate_id": "",
"minimum_protocol_version": "TLSv1",
"ssl_support_method": "sni-only"
}
],
"wait_for_deployment": true,
"web_acl_id": ""
},
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
"dependencies": [
"aws_iam_policy.lambda_logging",
"aws_iam_role.lambda_role",
"aws_iam_role_policy_attachment.lambda_logging",
"aws_lambda_function.directory_indexes",
"data.archive_file.lambda_main",
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_s3_bucket.selected",
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_cloudfront_origin_access_identity",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"caller_reference": "terraform-20210319030249312700000001",
"cloudfront_access_identity_path": "origin-access-identity/cloudfront/E1UEUM41WQK5JU",
"comment": "dev-onmyojideckbuilder",
"etag": "E2JOLG4NEGN166",
"iam_arn": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1UEUM41WQK5JU",
"id": "E1UEUM41WQK5JU",
"s3_canonical_user_id": "f4cc20ef906ac3e3520bb2d17bd4b7348eb7aedbcc4e9777821743621a394341f556a81a9a0fe994e2d52b0327d7c815"
},
"private": "bnVsbA=="
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_s3_bucket",
"name": "origin",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": "private",
"arn": "arn:aws:s3:::dev-onmyojideckbuilder-origin",
"bucket": "dev-onmyojideckbuilder-origin",
"bucket_domain_name": "dev-onmyojideckbuilder-origin.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "dev-onmyojideckbuilder-origin.s3.eu-west-1.amazonaws.com",
"cors_rule": [
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET",
"HEAD",
"PUT",
"POST"
],
"allowed_origins": [
"*.onmyojideckbuilder.com"
],
"expose_headers": [
"ETag"
],
"max_age_seconds": 3600
},
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"GET",
"HEAD",
"PUT",
"POST"
],
"allowed_origins": [
"dev.onmyojideckbuilder.com"
],
"expose_headers": [
"ETag"
],
"max_age_seconds": 3600
}
],
"force_destroy": true,
"grant": [],
"hosted_zone_id": "Z1BKCTXD74EZPE",
"id": "dev-onmyojideckbuilder-origin",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"policy": null,
"region": "eu-west-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
]
}
]
}
],
"tags": {
"Attributes": "origin",
"Description": "website to build and share onmyoji decks",
"Name": "dev-onmyojideckbuilder-origin",
"Project": "onmyoji-deck-builder",
"Stage": "dev"
},
"versioning": [
{
"enabled": true,
"mfa_delete": false
}
],
"website": [],
"website_domain": null,
"website_endpoint": null
},
"private": "bnVsbA=="
}
]
},
{
"module": "module.cloudfront_s3_cdn",
"mode": "managed",
"type": "aws_s3_bucket_policy",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"bucket": "dev-onmyojideckbuilder-origin",
"id": "dev-onmyojideckbuilder-origin",
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"S3GetObjectForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetObject\",\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1UEUM41WQK5JU\"\n }\n },\n {\n \"Sid\": \"S3ListBucketForCloudFront\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:ListBucket\",\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1UEUM41WQK5JU\"\n }\n },\n {\n \"Sid\": \"PublicRead\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Resource\": \"arn:aws:s3:::dev-onmyojideckbuilder-origin/*\",\n \"Principal\": \"*\"\n }\n ]\n}"
},
"private": "bnVsbA==",
"dependencies": [
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_iam_policy_document.origin",
"module.cloudfront_s3_cdn.data.aws_iam_policy_document.origin_website",
"module.cloudfront_s3_cdn.data.template_file.default"
]
}
]
},
@@ -682,236 +163,6 @@
}
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.dns",
"mode": "managed",
"type": "aws_route53_record",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 2,
"attributes": {
"alias": [
{
"evaluate_target_health": false,
"name": "d2x94vjdgw7i2d.cloudfront.net",
"zone_id": "Z2FDTNDATAQYW2"
}
],
"allow_overwrite": false,
"failover_routing_policy": [],
"fqdn": "dev.onmyojideckbuilder.com",
"geolocation_routing_policy": [],
"health_check_id": null,
"id": "Z0511918V1SF3MCG22JU_dev.onmyojideckbuilder.com_A",
"latency_routing_policy": [],
"multivalue_answer_routing_policy": null,
"name": "dev.onmyojideckbuilder.com",
"records": null,
"set_identifier": null,
"ttl": null,
"type": "A",
"weighted_routing_policy": [],
"zone_id": "Z0511918V1SF3MCG22JU"
},
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjIifQ==",
"dependencies": [
"aws_iam_policy.lambda_logging",
"aws_iam_role.lambda_role",
"aws_iam_role_policy_attachment.lambda_logging",
"aws_lambda_function.directory_indexes",
"data.archive_file.lambda_main",
"module.cloudfront_s3_cdn.aws_cloudfront_distribution.default",
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_s3_bucket.selected",
"module.cloudfront_s3_cdn.module.dns.data.aws_route53_zone.default",
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.dns",
"mode": "managed",
"type": "aws_route53_record",
"name": "ipv6",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 2,
"attributes": {
"alias": [
{
"evaluate_target_health": false,
"name": "d2x94vjdgw7i2d.cloudfront.net",
"zone_id": "Z2FDTNDATAQYW2"
}
],
"allow_overwrite": false,
"failover_routing_policy": [],
"fqdn": "dev.onmyojideckbuilder.com",
"geolocation_routing_policy": [],
"health_check_id": null,
"id": "Z0511918V1SF3MCG22JU_dev.onmyojideckbuilder.com_AAAA",
"latency_routing_policy": [],
"multivalue_answer_routing_policy": null,
"name": "dev.onmyojideckbuilder.com",
"records": null,
"set_identifier": null,
"ttl": null,
"type": "AAAA",
"weighted_routing_policy": [],
"zone_id": "Z0511918V1SF3MCG22JU"
},
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjIifQ==",
"dependencies": [
"aws_iam_policy.lambda_logging",
"aws_iam_role.lambda_role",
"aws_iam_role_policy_attachment.lambda_logging",
"aws_lambda_function.directory_indexes",
"data.archive_file.lambda_main",
"module.cloudfront_s3_cdn.aws_cloudfront_distribution.default",
"module.cloudfront_s3_cdn.aws_cloudfront_origin_access_identity.default",
"module.cloudfront_s3_cdn.aws_s3_bucket.origin",
"module.cloudfront_s3_cdn.data.aws_s3_bucket.selected",
"module.cloudfront_s3_cdn.module.dns.data.aws_route53_zone.default",
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.logs",
"mode": "managed",
"type": "aws_s3_bucket",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": "log-delivery-write",
"arn": "arn:aws:s3:::dev-onmyojideckbuilder-logs",
"bucket": "dev-onmyojideckbuilder-logs",
"bucket_domain_name": "dev-onmyojideckbuilder-logs.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "dev-onmyojideckbuilder-logs.s3.eu-west-1.amazonaws.com",
"cors_rule": [],
"force_destroy": true,
"grant": [],
"hosted_zone_id": "Z1BKCTXD74EZPE",
"id": "dev-onmyojideckbuilder-logs",
"lifecycle_rule": [
{
"abort_incomplete_multipart_upload_days": 5,
"enabled": true,
"expiration": [
{
"date": "",
"days": 90,
"expired_object_delete_marker": false
}
],
"id": "dev-onmyojideckbuilder-logs",
"noncurrent_version_expiration": [
{
"days": 90
}
],
"noncurrent_version_transition": [
{
"days": 30,
"storage_class": "GLACIER"
}
],
"prefix": "",
"tags": null,
"transition": [
{
"date": "",
"days": 30,
"storage_class": "STANDARD_IA"
},
{
"date": "",
"days": 60,
"storage_class": "GLACIER"
}
]
}
],
"logging": [],
"object_lock_configuration": [],
"policy": "",
"region": "eu-west-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
]
}
]
}
],
"tags": {
"Attributes": "logs",
"Description": "website to build and share onmyoji decks",
"Name": "dev-onmyojideckbuilder-logs",
"Project": "onmyoji-deck-builder",
"Stage": "dev"
},
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [],
"website_domain": null,
"website_endpoint": null
},
"private": "bnVsbA=="
}
]
},
{
"module": "module.cloudfront_s3_cdn.module.logs",
"mode": "managed",
"type": "aws_s3_bucket_public_access_block",
"name": "default",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"index_key": 0,
"schema_version": 0,
"attributes": {
"block_public_acls": true,
"block_public_policy": true,
"bucket": "dev-onmyojideckbuilder-logs",
"id": "dev-onmyojideckbuilder-logs",
"ignore_public_acls": true,
"restrict_public_buckets": true
},
"private": "bnVsbA==",
"dependencies": [
"module.cloudfront_s3_cdn.module.logs.aws_s3_bucket.default"
]
}
]
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.5 100"><defs><style>.cls-1{fill:#1697f6;}.cls-2{fill:#7bc6ff;}.cls-3{fill:#1867c0;}.cls-4{fill:#aeddff;}</style></defs><title>Artboard 46</title><polyline class="cls-1" points="43.75 0 23.31 0 43.75 48.32"/><polygon class="cls-2" points="43.75 62.5 43.75 100 0 14.58 22.92 14.58 43.75 62.5"/><polyline class="cls-3" points="43.75 0 64.19 0 43.75 48.32"/><polygon class="cls-4" points="64.58 14.58 87.5 14.58 43.75 100 43.75 62.5 64.58 14.58"/></svg>

Before

Width:  |  Height:  |  Size: 539 B

View File

@@ -4,94 +4,163 @@
},
{
"name": "Hakuro",
"character_card": "hakuro/char.png",
"character_card": "hakuro/hakuro-char.png",
"cards": [
{ "id": "23c8ab29", "name": "Hanare", "url": "hakuro/hanare.png" },
{ "id": "58472d92", "name": "Hanare", "url": "hakuro/hanare.png" },
{ "id": "4210b5bb", "name": "Protection", "url": "hakuro/protection.png" },
{ "id": "1d512961", "name": "Protection", "url": "hakuro/protection.png" },
{ "id": "345fcb75", "name": "Perfect Shot", "url": "hakuro/perfect_shot.png" },
{ "id": "1d6b91ab", "name": "Perfect Shot", "url": "hakuro/perfect_shot.png" },
{ "id": "5aa61d05", "name": "Non Self", "url": "hakuro/non_self.png" },
{ "id": "006ebea2", "name": "Non Self", "url": "hakuro/non_self.png" },
{ "id": "cc861795", "name": "Evolved: Hakuro", "url": "hakuro/evolved.png" },
{ "id": "c34695f0", "name": "Evolved: Hakuro", "url": "hakuro/evolved.png" },
{ "id": "8086ded8", "name": "Kai", "url": "hakuro/kai.png" },
{ "id": "d0df74c2", "name": "Kai", "url": "hakuro/kai.png" },
{ "id": "b8dfe5be", "name": "Zanshin", "url": "hakuro/zanshin.png" },
{ "id": "d72b3867", "name": "Zanshin", "url": "hakuro/zanshin.png" },
{ "id": "e715a175", "name": "Sharpshot", "url": "hakuro/sharpshot.png" },
{ "id": "0b19a276", "name": "Sharpshot", "url": "hakuro/sharpshot.png" }
{ "id": "23c8ab29", "name": "Hanare", "url": "hakuro/hakuro-hanare.png" },
{ "id": "58472d92", "name": "Hanare", "url": "hakuro/hakuro-hanare.png" },
{ "id": "4210b5bb", "name": "Protection", "url": "hakuro/hakuro-protection.png" },
{ "id": "1d512961", "name": "Protection", "url": "hakuro/hakuro-protection.png" },
{ "id": "345fcb75", "name": "Perfect Shot", "url": "hakuro/hakuro-perfect_shot.png" },
{ "id": "1d6b91ab", "name": "Perfect Shot", "url": "hakuro/hakuro-perfect_shot.png" },
{ "id": "5aa61d05", "name": "Non Self", "url": "hakuro/hakuro-non_self.png" },
{ "id": "006ebea2", "name": "Non Self", "url": "hakuro/hakuro-non_self.png" },
{ "id": "cc861795", "name": "Evolved: Hakuro", "url": "hakuro/hakuro-evolved.png" },
{ "id": "c34695f0", "name": "Evolved: Hakuro", "url": "hakuro/hakuro-evolved.png" },
{ "id": "8086ded8", "name": "Kai", "url": "hakuro/hakuro-kai.png" },
{ "id": "d0df74c2", "name": "Kai", "url": "hakuro/hakuro-kai.png" },
{ "id": "b8dfe5be", "name": "Zanshin", "url": "hakuro/hakuro-zanshin.png" },
{ "id": "d72b3867", "name": "Zanshin", "url": "hakuro/hakuro-zanshin.png" },
{ "id": "e715a175", "name": "Sharpshot", "url": "hakuro/hakuro-sharpshot.png" },
{ "id": "0b19a276", "name": "Sharpshot", "url": "hakuro/hakuro-sharpshot.png" }
],
"avatar": "hakuro/avatar.png"
"avatar": "hakuro/hakuro-avatar.png"
},
{
"name": "Samurai X",
"character_card": "samurai_x/char.png",
"character_card": "samurai_x/samurai_x-char.png",
"cards": [
{ "id": "1a89af30", "name": "Evovled", "url": "samurai_x/evolved.png" },
{ "id": "21265148", "name": "Evovled", "url": "samurai_x/evolved.png" },
{ "id": "7d7b03d2", "name": "Bull Rush", "url": "samurai_x/bull_rush.png" },
{ "id": "c74548ce", "name": "Bull Rush", "url": "samurai_x/bull_rush.png" },
{ "id": "1d34d24e", "name": "Immovable", "url": "samurai_x/immovable.png" },
{ "id": "a16d701b", "name": "Immovable", "url": "samurai_x/immovable.png" },
{ "id": "6dc6da5d", "name": "Dust Blade", "url": "samurai_x/dust_blade.png" },
{ "id": "b614c409", "name": "Dust Blade", "url": "samurai_x/dust_blade.png" },
{ "id": "868fed7d", "name": "Binding Array", "url": "samurai_x/binding_array.png" },
{ "id": "e91253e9", "name": "Binding Array", "url": "samurai_x/binding_array.png" },
{ "id": "2a6f5c24", "name": "Shield of Dust", "url": "samurai_x/shield_of_dust.png" },
{ "id": "64a837a5", "name": "Shield of Dust", "url": "samurai_x/shield_of_dust.png" },
{ "id": "834f18b4", "name": "Moving Fortress", "url": "samurai_x/moving_fortress.png" },
{ "id": "97239b92", "name": "Moving Fortress", "url": "samurai_x/moving_fortress.png" },
{ "id": "7a0c5657", "name": "Wall of the Ancients", "url": "samurai_x/wall_of_the_ancients.png" },
{ "id": "40ac9ae2", "name": "Wall of the Ancients", "url": "samurai_x/wall_of_the_ancients.png" }
{ "id": "1a89af30", "name": "Evovled", "url": "samurai_x/samurai_x-evolved.png" },
{ "id": "21265148", "name": "Evovled", "url": "samurai_x/samurai_x-evolved.png" },
{ "id": "7d7b03d2", "name": "Bull Rush", "url": "samurai_x/samurai_x-bull_rush.png" },
{ "id": "c74548ce", "name": "Bull Rush", "url": "samurai_x/samurai_x-bull_rush.png" },
{ "id": "1d34d24e", "name": "Immovable", "url": "samurai_x/samurai_x-immovable.png" },
{ "id": "a16d701b", "name": "Immovable", "url": "samurai_x/samurai_x-immovable.png" },
{ "id": "6dc6da5d", "name": "Dust Blade", "url": "samurai_x/samurai_x-dust_blade.png" },
{ "id": "b614c409", "name": "Dust Blade", "url": "samurai_x/samurai_x-dust_blade.png" },
{ "id": "868fed7d", "name": "Binding Array", "url": "samurai_x/samurai_x-binding_array.png" },
{ "id": "e91253e9", "name": "Binding Array", "url": "samurai_x/samurai_x-binding_array.png" },
{ "id": "2a6f5c24", "name": "Shield of Dust", "url": "samurai_x/samurai_x-shield_of_dust.png" },
{ "id": "64a837a5", "name": "Shield of Dust", "url": "samurai_x/samurai_x-shield_of_dust.png" },
{ "id": "834f18b4", "name": "Moving Fortress", "url": "samurai_x/samurai_x-moving_fortress.png" },
{ "id": "97239b92", "name": "Moving Fortress", "url": "samurai_x/samurai_x-moving_fortress.png" },
{ "id": "7a0c5657", "name": "Wall of the Ancients", "url": "samurai_x/samurai_x-wall_of_the_ancients.png" },
{ "id": "40ac9ae2", "name": "Wall of the Ancients", "url": "samurai_x/samurai_x-wall_of_the_ancients.png" }
],
"avatar": "samurai_x/avatar.png"
"avatar": "samurai_x/samurai_x-avatar.png"
},
{
"name": "Ibaraki Doji",
"character_card": "ibaraki_doji/char.png",
"character_card": "ibaraki_doji/ibaraki_doji-char.png",
"cards": [
{ "id": "7eb59ee9", "name": "Black Flame Hand", "url": "ibaraki_doji/black_flame_hand.png" },
{ "id": "58281234", "name": "Black Flame Hand", "url": "ibaraki_doji/black_flame_hand.png" },
{ "id": "ec9012fa", "name": "Blazing Fist", "url": "ibaraki_doji/blazing_fist.png" },
{ "id": "90857399", "name": "Blazing Fist", "url": "ibaraki_doji/blazing_fist.png" },
{ "id": "ebb48e83", "name": "Demon of Rashomon", "url": "ibaraki_doji/demon_of_rashomon.png" },
{ "id": "d48dead8", "name": "Demon of Rashomon", "url": "ibaraki_doji/demon_of_rashomon.png" },
{ "id": "a78431d8", "name": "Demon's Hand", "url": "ibaraki_doji/demons_hand.png" },
{ "id": "f84c61e2", "name": "Demon's Hand", "url": "ibaraki_doji/demons_hand.png" },
{ "id": "103ef376", "name": "Evolved: Ibaraki Doji", "url": "ibaraki_doji/evolved.png" },
{ "id": "cf4b7b59", "name": "Evolved: Ibaraki Doji", "url": "ibaraki_doji/evolved.png" },
{ "id": "caf967df", "name": "Infernal Hand", "url": "ibaraki_doji/infernal_hand.png" },
{ "id": "5d1c9ab7", "name": "Infernal Hand", "url": "ibaraki_doji/infernal_hand.png" },
{ "id": "c2f7660b", "name": "Rage Outlet", "url": "ibaraki_doji/rage_outlet.png" },
{ "id": "c29e48de", "name": "Rage Outlet", "url": "ibaraki_doji/rage_outlet.png" },
{ "id": "9f63acfb", "name": "Sever Arm", "url": "ibaraki_doji/sever_arm.png" },
{ "id": "f9380f3b", "name": "Sever Arm", "url": "ibaraki_doji/sever_arm.png" }
{ "id": "7eb59ee9", "name": "Black Flame Hand", "url": "ibaraki_doji/ibaraki_doji-black_flame_hand.png" },
{ "id": "58281234", "name": "Black Flame Hand", "url": "ibaraki_doji/ibaraki_doji-black_flame_hand.png" },
{ "id": "ec9012fa", "name": "Blazing Fist", "url": "ibaraki_doji/ibaraki_doji-blazing_fist.png" },
{ "id": "90857399", "name": "Blazing Fist", "url": "ibaraki_doji/ibaraki_doji-blazing_fist.png" },
{ "id": "ebb48e83", "name": "Demon of Rashomon", "url": "ibaraki_doji/ibaraki_doji-demon_of_rashomon.png" },
{ "id": "d48dead8", "name": "Demon of Rashomon", "url": "ibaraki_doji/ibaraki_doji-demon_of_rashomon.png" },
{ "id": "a78431d8", "name": "Demon's Hand", "url": "ibaraki_doji/ibaraki_doji-demons_hand.png" },
{ "id": "f84c61e2", "name": "Demon's Hand", "url": "ibaraki_doji/ibaraki_doji-demons_hand.png" },
{ "id": "103ef376", "name": "Evolved: Ibaraki Doji", "url": "ibaraki_doji/ibaraki_doji-evolved.png" },
{ "id": "cf4b7b59", "name": "Evolved: Ibaraki Doji", "url": "ibaraki_doji/ibaraki_doji-evolved.png" },
{ "id": "caf967df", "name": "Infernal Hand", "url": "ibaraki_doji/ibaraki_doji-infernal_hand.png" },
{ "id": "5d1c9ab7", "name": "Infernal Hand", "url": "ibaraki_doji/ibaraki_doji-infernal_hand.png" },
{ "id": "c2f7660b", "name": "Rage Outlet", "url": "ibaraki_doji/ibaraki_doji-rage_outlet.png" },
{ "id": "c29e48de", "name": "Rage Outlet", "url": "ibaraki_doji/ibaraki_doji-rage_outlet.png" },
{ "id": "9f63acfb", "name": "Sever Arm", "url": "ibaraki_doji/ibaraki_doji-sever_arm.png" },
{ "id": "f9380f3b", "name": "Sever Arm", "url": "ibaraki_doji/ibaraki_doji-sever_arm.png" }
],
"avatar": "ibaraki_doji/avatar.png"
"avatar": "ibaraki_doji/ibaraki_doji-avatar.png"
},
{
"name": "Ootengu",
"character_card": "ootengu/char.png",
"character_card": "ootengu/ootengu-char.png",
"cards": [
{ "id": "9af464b1", "name": "Dark Featherblade", "url": "ootengu/dark_featherblade.png" },
{ "id": "027ef4c6", "name": "Dark Featherblade", "url": "ootengu/dark_featherblade.png" },
{ "id": "68c8f118", "name": "Evolved: Ootengu", "url": "ootengu/evolved.png" },
{ "id": "f731fca9", "name": "Evolved: Ootengu", "url": "ootengu/evolved.png" },
{ "id": "bc39f712", "name": "Featherblade Storm", "url": "ootengu/featherblade_storm.png" },
{ "id": "90990cd5", "name": "Featherblade Storm", "url": "ootengu/featherblade_storm.png" },
{ "id": "eb20d335", "name": "I am Justice", "url": "ootengu/i_am_justice.png" },
{ "id": "52a5c6ea", "name": "I am Justice", "url": "ootengu/i_am_justice.png" },
{ "id": "8213c9c6", "name": "Lord of the Storm", "url": "ootengu/lord_of_the_storm.png" },
{ "id": "e11e2fba", "name": "Lord of the Storm", "url": "ootengu/lord_of_the_storm.png" },
{ "id": "2ab5bf45", "name": "Shield of the Storm", "url": "ootengu/shield_of_the_storm.png" },
{ "id": "77c724c2", "name": "Shield of the Storm", "url": "ootengu/shield_of_the_storm.png" },
{ "id": "b37a9e12", "name": "Tengu's Fury", "url": "ootengu/tengus_fury.png" },
{ "id": "d39da094", "name": "Tengu's Fury", "url": "ootengu/tengus_fury.png" },
{ "id": "6ad67909", "name": "Wind Blast", "url": "ootengu/wind_blast.png" },
{ "id": "f800c894", "name": "Wind Blast", "url": "ootengu/wind_blast.png" }
{ "id": "9af464b1", "name": "Dark Featherblade", "url": "ootengu/ootengu-dark_featherblade.png" },
{ "id": "027ef4c6", "name": "Dark Featherblade", "url": "ootengu/ootengu-dark_featherblade.png" },
{ "id": "68c8f118", "name": "Evolved: Ootengu", "url": "ootengu/ootengu-evolved.png" },
{ "id": "f731fca9", "name": "Evolved: Ootengu", "url": "ootengu/ootengu-evolved.png" },
{ "id": "bc39f712", "name": "Featherblade Storm", "url": "ootengu/ootengu-featherblade_storm.png" },
{ "id": "90990cd5", "name": "Featherblade Storm", "url": "ootengu/ootengu-featherblade_storm.png" },
{ "id": "eb20d335", "name": "I am Justice", "url": "ootengu/ootengu-i_am_justice.png" },
{ "id": "52a5c6ea", "name": "I am Justice", "url": "ootengu/ootengu-i_am_justice.png" },
{ "id": "8213c9c6", "name": "Lord of the Storm", "url": "ootengu/ootengu-lord_of_the_storm.png" },
{ "id": "e11e2fba", "name": "Lord of the Storm", "url": "ootengu/ootengu-lord_of_the_storm.png" },
{ "id": "2ab5bf45", "name": "Shield of Storm", "url": "ootengu/ootengu-shield_of_storm.png" },
{ "id": "77c724c2", "name": "Shield of Storm", "url": "ootengu/ootengu-shield_of_storm.png" },
{ "id": "b37a9e12", "name": "Tengu's Fury", "url": "ootengu/ootengu-tengus_fury.png" },
{ "id": "d39da094", "name": "Tengu's Fury", "url": "ootengu/ootengu-tengus_fury.png" },
{ "id": "6ad67909", "name": "Wind Blast", "url": "ootengu/ootengu-wind_blast.png" },
{ "id": "f800c894", "name": "Wind Blast", "url": "ootengu/ootengu-wind_blast.png" }
],
"avatar": "ootengu/avatar.png"
"avatar": "ootengu/ootengu-avatar.png"
},
{
"name": "Hououka",
"character_card": "hououka/hououka-char.png",
"cards": [
{ "id": "f98d894b", "name": "Ascension", "url": "hououka/hououka-ascension.png" },
{ "id": "f08efb12", "name": "Ascension", "url": "hououka/hououka-ascension.png" },
{ "id": "0882462a", "name": "Evolved: Hououka", "url": "hououka/hououka-evolved.png" },
{ "id": "27fd5685", "name": "Evolved: Hououka", "url": "hououka/hououka-evolved.png" },
{ "id": "4775e033", "name": "Ignite", "url": "hououka/hououka-ignite.png" },
{ "id": "a789f8ef", "name": "Ignite", "url": "hououka/hououka-ignite.png" },
{ "id": "534a788c", "name": "Immolating Quill", "url": "hououka/hououka-immolating_quill.png" },
{ "id": "2d149086", "name": "Immolating Quill", "url": "hououka/hououka-immolating_quill.png" },
{ "id": "21301dae", "name": "Phoenix Cry", "url": "hououka/hououka-phoenix_cry.png" },
{ "id": "a8432c45", "name": "Phoenix Cry", "url": "hououka/hououka-phoenix_cry.png" },
{ "id": "635f2c7f", "name": "Phoenix Flame", "url": "hououka/hououka-phoenix_flame.png" },
{ "id": "bd23f1aa", "name": "Phoenix Flame", "url": "hououka/hououka-phoenix_flame.png" },
{ "id": "b1be2ed1", "name": "Soar", "url": "hououka/hououka-soar.png" },
{ "id": "8ebec60e", "name": "Soar", "url": "hououka/hououka-soar.png" },
{ "id": "f51520ba", "name": "Swaying Blaze", "url": "hououka/hououka-swaying_blaze.png" },
{ "id": "787ae817", "name": "Swaying Blaze", "url": "hououka/hououka-swaying_blaze.png" }
],
"avatar": "hououka/hououka-avatar.png"
},
{
"name": "Ubume",
"character_card": "ubume/ubume-char.png",
"cards": [
{ "id": "72c28428", "name": "Crane Dance", "url": "ubume/ubume-crane_dance.png" },
{ "id": "59ab7011", "name": "Crane Dance", "url": "ubume/ubume-crane_dance.png" },
{ "id": "8be4fd04", "name": "Evolved: Ubume", "url": "ubume/ubume-evolved.png" },
{ "id": "eebee280", "name": "Evolved: Ubume", "url": "ubume/ubume-evolved.png" },
{ "id": "434e4b48", "name": "Golden Bird", "url": "ubume/ubume-golden_bird.png" },
{ "id": "0126bfed", "name": "Golden Bird", "url": "ubume/ubume-golden_bird.png" },
{ "id": "cf49b739", "name": "Hack and Slash", "url": "ubume/ubume-hack_and_slash.png" },
{ "id": "28a57d58", "name": "Hack and Slash", "url": "ubume/ubume-hack_and_slash.png" },
{ "id": "8676b212", "name": "Motherhood", "url": "ubume/ubume-motherhood.png" },
{ "id": "74f8c877", "name": "Motherhood", "url": "ubume/ubume-motherhood.png" },
{ "id": "df51b49a", "name": "Raid", "url": "ubume/ubume-raid.png" },
{ "id": "d55089f0", "name": "Raid", "url": "ubume/ubume-raid.png" },
{ "id": "81edb5cf", "name": "Shadow Wing", "url": "ubume/ubume-shadow_wing.png" },
{ "id": "99cb69ec", "name": "Shadow Wing", "url": "ubume/ubume-shadow_wing.png" },
{ "id": "1f19fa8e", "name": "Umbrella Sword", "url": "ubume/ubume-umbrella_sword.png" },
{ "id": "ad56eae2", "name": "Umbrella Sword", "url": "ubume/ubume-umbrella_sword.png" }
],
"avatar": "ubume/ubume-avatar.png"
},
{
"name": "Umibozu",
"character_card": "umibozu/umibozu-char.png",
"cards": [
{ "id": "5930f94b", "name": "Blessed Water", "url": "umibozu/umibozu-blessed_water.png" },
{ "id": "c0753f17", "name": "Blessed Water", "url": "umibozu/umibozu-blessed_water.png" },
{ "id": "43d92212", "name": "Evolved: Umibozu", "url": "umibozu/umibozu-evolved.png" },
{ "id": "c6be9e57", "name": "Evolved: Umibozu", "url": "umibozu/umibozu-evolved.png" },
{ "id": "ce402df1", "name": "Giant Waves", "url": "umibozu/umibozu-giant_waves.png" },
{ "id": "708d29b0", "name": "Giant Waves", "url": "umibozu/umibozu-giant_waves.png" },
{ "id": "b49275c6", "name": "Healing Water", "url": "umibozu/umibozu-healing_water.png" },
{ "id": "74e7bdc4", "name": "Healing Water", "url": "umibozu/umibozu-healing_water.png" },
{ "id": "38297f66", "name": "Master of the Sea", "url": "umibozu/umibozu-master_of_the_sea.png" },
{ "id": "621303f7", "name": "Master of the Sea", "url": "umibozu/umibozu-master_of_the_sea.png" },
{ "id": "135c520a", "name": "Shield of the Sea", "url": "umibozu/umibozu-shield_of_the_sea.png" },
{ "id": "4be79e70", "name": "Shield of the Sea", "url": "umibozu/umibozu-shield_of_the_sea.png" },
{ "id": "c73493d8", "name": "Spectral", "url": "umibozu/umibozu-spectral.png" },
{ "id": "bb14e042", "name": "Spectral", "url": "umibozu/umibozu-spectral.png" },
{ "id": "6c0aac31", "name": "Waterspout", "url": "umibozu/umibozu-waterspout.png" },
{ "id": "dad679e3", "name": "Waterspout", "url": "umibozu/umibozu-waterspout.png" }
],
"avatar": "umibozu/umibozu-avatar.png"
}
]

View File

@@ -297,7 +297,9 @@ export default {
}
if (this.$route.query.deck_description) {
const saved_deck_description = JSON.parse(atob(this.$route.query.deck_description));
const saved_deck_description = JSON.parse(
atob(this.$route.query.deck_description)
);
if (typeof saved_deck_description != "string") {
this.deck_description = "";