diff --git a/.gitignore b/.gitignore index f7c993b4e..09cce3ba1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ /.tx/tmp/ npm-debug.log .env +.terraform/ +.terraform* transifex.auth diff --git a/modules/ui/init.js b/modules/ui/init.js index acd36448f..87c6027fc 100644 --- a/modules/ui/init.js +++ b/modules/ui/init.js @@ -349,6 +349,9 @@ export function uiInit(context) { } + // hide the sidebar by default + // ui.sidebar.toggle(false); + // Setup map dimensions and move map to initial center/zoom. // This should happen after .main-content and toolbars exist. ui.onResize(); diff --git a/scripts/build_data.js b/scripts/build_data.js index b9acc2d59..ac538021e 100644 --- a/scripts/build_data.js +++ b/scripts/build_data.js @@ -19,7 +19,7 @@ const dotenv = require('dotenv'); dotenv.config(); const presetsVersion = require('../package.json').devDependencies['@openstreetmap/id-tagging-schema']; /* eslint-disable no-process-env */ -const presetsUrl = (process.env.ID_PRESETS_CDN_URL || 'https://cdn.jsdelivr.net/npm/@openstreetmap/id-tagging-schema@{presets_version}').replace('{presets_version}', presetsVersion); +const presetsUrl = (process.env.ID_PRESETS_CDN_URL || 'https://id-tagging-schema.deflock.me/'); /* eslint-enable no-process-env */ let _currBuild = null; @@ -99,9 +99,9 @@ function buildData() { minifyJSON('data/territory_languages.json', 'dist/data/territory_languages.min.json'), Promise.all([ // Fetch the icons that are needed by the expected tagging schema version - fetchOrRequire(`${presetsUrl}/dist/presets.min.json`), - fetchOrRequire(`${presetsUrl}/dist/preset_categories.min.json`), - fetchOrRequire(`${presetsUrl}/dist/fields.min.json`) + fetchOrRequire(`${presetsUrl}dist/presets.min.json`), + fetchOrRequire(`${presetsUrl}dist/preset_categories.min.json`), + fetchOrRequire(`${presetsUrl}dist/fields.min.json`) ]) .then(responses => Promise.all(responses.map(response => response.json()))) .then((results) => { diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 000000000..20f75945e --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,59 @@ +provider "aws" { + region = "us-east-1" +} + +resource "aws_s3_bucket" "static_website" { + bucket = "editor.deflock.me" + + tags = { + Name = "editor.deflock.me" + Environment = "Production" + } +} + +resource "aws_s3_bucket_public_access_block" "static_website_public_access_block" { + bucket = aws_s3_bucket.static_website.id + + block_public_acls = false + block_public_policy = false + ignore_public_acls = false + restrict_public_buckets = false +} + +resource "null_resource" "sync_dist_to_s3" { + triggers = { + always_run = timestamp() + } + + provisioner "local-exec" { + command = "aws s3 sync ../dist s3://${aws_s3_bucket.static_website.bucket}" + } +} + +resource "aws_s3_bucket_policy" "static_website_policy" { + bucket = aws_s3_bucket.static_website.id + + policy = jsonencode({ + Version = "2012-10-17", + Statement = [ + { + Effect = "Allow", + Principal = "*", + Action = "s3:GetObject", + Resource = "${aws_s3_bucket.static_website.arn}/*" + } + ] + }) +} + +resource "aws_s3_bucket_cors_configuration" "static_website_cors" { + bucket = aws_s3_bucket.static_website.id + + cors_rule { + allowed_headers = ["*"] + allowed_methods = ["GET"] + allowed_origins = ["editor.deflock.me"] + expose_headers = ["ETag"] + max_age_seconds = 3000 + } +} diff --git a/terraform/terraform.tfstate b/terraform/terraform.tfstate new file mode 100644 index 000000000..c4beaa833 --- /dev/null +++ b/terraform/terraform.tfstate @@ -0,0 +1,208 @@ +{ + "version": 4, + "terraform_version": "1.9.2", + "serial": 49, + "lineage": "a3222e9e-217e-8114-ba75-aecb5b9f3cec", + "outputs": {}, + "resources": [ + { + "mode": "managed", + "type": "aws_s3_bucket", + "name": "static_website", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "acceleration_status": "", + "acl": null, + "arn": "arn:aws:s3:::editor.deflock.me", + "bucket": "editor.deflock.me", + "bucket_domain_name": "editor.deflock.me.s3.amazonaws.com", + "bucket_prefix": "", + "bucket_regional_domain_name": "editor.deflock.me.s3.us-east-1.amazonaws.com", + "cors_rule": [ + { + "allowed_headers": [ + "*" + ], + "allowed_methods": [ + "GET" + ], + "allowed_origins": [ + "editor.deflock.me" + ], + "expose_headers": [ + "ETag" + ], + "max_age_seconds": 3000 + } + ], + "force_destroy": false, + "grant": [ + { + "id": "f84c6ddbd25d207206bab0897ee1a1e4419f396282e256f36898c01604a56191", + "permissions": [ + "FULL_CONTROL" + ], + "type": "CanonicalUser", + "uri": "" + } + ], + "hosted_zone_id": "Z3AQBSTGFYJSTF", + "id": "editor.deflock.me", + "lifecycle_rule": [], + "logging": [], + "object_lock_configuration": [], + "object_lock_enabled": false, + "policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::editor.deflock.me/*\"}],\"Version\":\"2012-10-17\"}", + "region": "us-east-1", + "replication_configuration": [], + "request_payer": "BucketOwner", + "server_side_encryption_configuration": [ + { + "rule": [ + { + "apply_server_side_encryption_by_default": [ + { + "kms_master_key_id": "", + "sse_algorithm": "AES256" + } + ], + "bucket_key_enabled": false + } + ] + } + ], + "tags": { + "Environment": "Production", + "Name": "editor.deflock.me" + }, + "tags_all": { + "Environment": "Production", + "Name": "editor.deflock.me" + }, + "timeouts": null, + "versioning": [ + { + "enabled": false, + "mfa_delete": false + } + ], + "website": [], + "website_domain": "s3-website-us-east-1.amazonaws.com", + "website_endpoint": "editor.deflock.me.s3-website-us-east-1.amazonaws.com" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "mode": "managed", + "type": "aws_s3_bucket_cors_configuration", + "name": "static_website_cors", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "bucket": "editor.deflock.me", + "cors_rule": [ + { + "allowed_headers": [ + "*" + ], + "allowed_methods": [ + "GET" + ], + "allowed_origins": [ + "editor.deflock.me" + ], + "expose_headers": [ + "ETag" + ], + "id": "", + "max_age_seconds": 3000 + } + ], + "expected_bucket_owner": "", + "id": "editor.deflock.me" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_s3_bucket_policy", + "name": "static_website_policy", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "bucket": "editor.deflock.me", + "id": "editor.deflock.me", + "policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::editor.deflock.me/*\"}],\"Version\":\"2012-10-17\"}" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_s3_bucket_public_access_block", + "name": "static_website_public_access_block", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "block_public_acls": false, + "block_public_policy": false, + "bucket": "editor.deflock.me", + "id": "editor.deflock.me", + "ignore_public_acls": false, + "restrict_public_buckets": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + }, + { + "mode": "managed", + "type": "null_resource", + "name": "sync_dist_to_s3", + "provider": "provider[\"registry.terraform.io/hashicorp/null\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "6435195033311732920", + "triggers": { + "always_run": "2025-06-12T22:51:15Z" + } + }, + "sensitive_attributes": [], + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + } + ], + "check_results": null +} diff --git a/terraform/terraform.tfstate.backup b/terraform/terraform.tfstate.backup new file mode 100644 index 000000000..5f11be403 --- /dev/null +++ b/terraform/terraform.tfstate.backup @@ -0,0 +1,192 @@ +{ + "version": 4, + "terraform_version": "1.9.2", + "serial": 46, + "lineage": "a3222e9e-217e-8114-ba75-aecb5b9f3cec", + "outputs": {}, + "resources": [ + { + "mode": "managed", + "type": "aws_s3_bucket", + "name": "static_website", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "acceleration_status": "", + "acl": null, + "arn": "arn:aws:s3:::editor.deflock.me", + "bucket": "editor.deflock.me", + "bucket_domain_name": "editor.deflock.me.s3.amazonaws.com", + "bucket_prefix": "", + "bucket_regional_domain_name": "editor.deflock.me.s3.us-east-1.amazonaws.com", + "cors_rule": [], + "force_destroy": false, + "grant": [ + { + "id": "f84c6ddbd25d207206bab0897ee1a1e4419f396282e256f36898c01604a56191", + "permissions": [ + "FULL_CONTROL" + ], + "type": "CanonicalUser", + "uri": "" + } + ], + "hosted_zone_id": "Z3AQBSTGFYJSTF", + "id": "editor.deflock.me", + "lifecycle_rule": [], + "logging": [], + "object_lock_configuration": [], + "object_lock_enabled": false, + "policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::editor.deflock.me/*\"}],\"Version\":\"2012-10-17\"}", + "region": "us-east-1", + "replication_configuration": [], + "request_payer": "BucketOwner", + "server_side_encryption_configuration": [ + { + "rule": [ + { + "apply_server_side_encryption_by_default": [ + { + "kms_master_key_id": "", + "sse_algorithm": "AES256" + } + ], + "bucket_key_enabled": false + } + ] + } + ], + "tags": { + "Environment": "Production", + "Name": "editor.deflock.me" + }, + "tags_all": { + "Environment": "Production", + "Name": "editor.deflock.me" + }, + "timeouts": null, + "versioning": [ + { + "enabled": false, + "mfa_delete": false + } + ], + "website": [], + "website_domain": "s3-website-us-east-1.amazonaws.com", + "website_endpoint": "editor.deflock.me.s3-website-us-east-1.amazonaws.com" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "mode": "managed", + "type": "aws_s3_bucket_cors_configuration", + "name": "static_website_cors", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "bucket": "editor.deflock.me", + "cors_rule": [ + { + "allowed_headers": [ + "*" + ], + "allowed_methods": [ + "GET" + ], + "allowed_origins": [ + "editor.deflock.me" + ], + "expose_headers": [ + "ETag" + ], + "id": "", + "max_age_seconds": 3000 + } + ], + "expected_bucket_owner": "", + "id": "editor.deflock.me" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_s3_bucket_policy", + "name": "static_website_policy", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "bucket": "editor.deflock.me", + "id": "editor.deflock.me", + "policy": "{\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::editor.deflock.me/*\"}],\"Version\":\"2012-10-17\"}" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_s3_bucket_public_access_block", + "name": "static_website_public_access_block", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "block_public_acls": false, + "block_public_policy": false, + "bucket": "editor.deflock.me", + "id": "editor.deflock.me", + "ignore_public_acls": false, + "restrict_public_buckets": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + }, + { + "mode": "managed", + "type": "null_resource", + "name": "sync_dist_to_s3", + "provider": "provider[\"registry.terraform.io/hashicorp/null\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "6971444194100398041", + "triggers": { + "always_run": "2025-06-12T22:49:05Z" + } + }, + "sensitive_attributes": [], + "dependencies": [ + "aws_s3_bucket.static_website" + ] + } + ] + } + ], + "check_results": null +}