diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3204433..c15e458 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,4 +21,7 @@ jobs: uses: sourcemeta/jsonschema@v11.5.1 - name: Validate Service Schema - run: jsonschema validate ./schema.json ./services/*.json + run: jsonschema validate ./schemas/services.schema.json ./services/*.json + + - name: Validate Country Schema + run: jsonschema validate ./schemas/countries.schema.json ./countries/*.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2d9623d..8c8bd6c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,8 +28,11 @@ jobs: - name: Upload Compiled Services uses: actions/upload-artifact@v4 with: - name: services-compiled - path: services.json + name: cloud-shield-definitions + path: | + services.json + countries.json + ids.json retention-days: 90 - name: Create Release and Upload Asset @@ -42,7 +45,9 @@ jobs: echo "Creating release ${TAG_NAME}" gh release create "${TAG_NAME}" \ - --title "Services ${VERSION}" \ - --notes "Combined service definitions" \ + --title "Definitions ${VERSION}" \ + --notes "Combined service and country definitions" \ --latest \ - services.json + services.json \ + countries.json \ + ids.json diff --git a/.gitignore b/.gitignore index c52cb6a..2ede2de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Compiled output services.json +countries.json # Node modules (if needed in future) node_modules/ diff --git a/.vscode/settings.json b/.vscode/settings.json index e19c958..b72fd61 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,10 +4,16 @@ "fileMatch": [ "services/*.json" ], - "url": "./schema.json" + "url": "./schemas/services.schema.json" + }, + { + "fileMatch": [ + "countries/*.json" + ], + "url": "./schemas/countries.schema.json" } ], "json.validate.enable": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true -} \ No newline at end of file +} diff --git a/README.md b/README.md index 8995819..98a0ee8 100644 --- a/README.md +++ b/README.md @@ -3,58 +3,80 @@

-# Securepoint DNS Services +# Securepoint Cloud Shield Definitions -A collection of services with the corresponding domains used in our product "Cloud Shield". +A collection of Cloud Shield definitions, including services with their domains and ISO country definitions. ## Overview -This repository contains JSON definitions for various services and their associated domains that are used by Cloud Shield. Each service is defined in a separate JSON file that follows a standardized schema to ensure consistency and reliability. +This repository contains JSON definitions used by Cloud Shield. Services are defined with their associated domains, and countries are defined by ISO alpha-2 code with English and German display names. ## Repository Structure ``` -dns-services/ +cloud-shield-definitions/ ├── README.md -├── schema.json # JSON schema defining the service structure -├── compile.js # Script to compile all services into a single JSON file -└── services/ # Directory containing all service definitions - ├── service1.json - ├── service2.json +├── schemas/ +│ ├── services.schema.json # JSON schema defining the service structure +│ └── countries.schema.json # JSON schema defining the country structure +├── main.go # Script to compile all definitions into generated JSON files +├── ids.json # Stable numeric IDs grouped by service filename and ISO country code +├── services/ # Directory containing all service definitions +│ ├── service1.json +│ ├── service2.json +│ └── ... +└── countries/ # Directory containing ISO country definitions + ├── DE.json + ├── FR.json └── ... ``` -## Compiled Services +## Compiled Definitions -All individual service files are automatically compiled into a single `services.json` file through the CI/CD pipeline. This compiled file contains all services in a single JSON object where each key is the filename (without `.json` extension). +All individual definition files are automatically compiled into generated JSON catalogs. Service definitions are compiled into `services.json`, and country definitions are compiled into `countries.json`. ### Downloading the Compiled File -The compiled `services.json` file is available in two ways: +The compiled files are available in two ways: 1. **GitHub Releases**: Automatically published with each push to master branch 2. **GitHub Actions Artifacts**: Available for all CI runs (including pull requests) ### Local Compilation -To compile the services locally: +To compile the definitions locally: ```bash -node compile.js +go run main.go ``` -This will generate a `services.json` file in the root directory containing all services. +This will generate: + +- `services.json` with the compiled service catalog +- `countries.json` with the compiled country catalog +- `ids.json` with the stable numeric ID registry in the form `{ "services": {...}, "countries": {...} }` + +Each compiled service includes an `id` field. Each compiled country includes an `id` and `code` field. Existing IDs are preserved, and only newly added definition files receive the next free number. ## Adding New Services To add a new service: 1. Create a new JSON file in the `services` directory -2. Follow the structure defined in `schema.json` +2. Follow the structure defined in `schemas/services.schema.json` 3. Include all required fields and adhere to the specified formats 4. Use a descriptive filename that clearly identifies the service 5. Validate your JSON against the schema before submitting +## Adding New Countries + +To add a new country definition: + +1. Create a new JSON file in the `countries` directory named with the ISO alpha-2 code, for example `DE.json` +2. Follow the structure defined in `schemas/countries.schema.json` +3. Include English and German names in the `name` object +4. Do not rename existing country files after they are merged + > [!WARNING] > **DO NOT change existing file names once they are merged into the repository.** @@ -73,4 +95,4 @@ If you have suggestions for new services or improvements, please open an issue o ## License -MIT License \ No newline at end of file +MIT License diff --git a/countries/AD.json b/countries/AD.json new file mode 100644 index 0000000..26d05b3 --- /dev/null +++ b/countries/AD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Andorra", + "de": "Andorra" + } +} diff --git a/countries/AE.json b/countries/AE.json new file mode 100644 index 0000000..d79fd2e --- /dev/null +++ b/countries/AE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "United Arab Emirates", + "de": "Vereinigte Arabische Emirate" + } +} diff --git a/countries/AF.json b/countries/AF.json new file mode 100644 index 0000000..debd089 --- /dev/null +++ b/countries/AF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Afghanistan", + "de": "Afghanistan" + } +} diff --git a/countries/AG.json b/countries/AG.json new file mode 100644 index 0000000..ef7d760 --- /dev/null +++ b/countries/AG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Antigua & Barbuda", + "de": "Antigua und Barbuda" + } +} diff --git a/countries/AI.json b/countries/AI.json new file mode 100644 index 0000000..391c3b3 --- /dev/null +++ b/countries/AI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Anguilla", + "de": "Anguilla" + } +} diff --git a/countries/AL.json b/countries/AL.json new file mode 100644 index 0000000..effec2a --- /dev/null +++ b/countries/AL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Albania", + "de": "Albanien" + } +} diff --git a/countries/AM.json b/countries/AM.json new file mode 100644 index 0000000..d544529 --- /dev/null +++ b/countries/AM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Armenia", + "de": "Armenien" + } +} diff --git a/countries/AO.json b/countries/AO.json new file mode 100644 index 0000000..10eea86 --- /dev/null +++ b/countries/AO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Angola", + "de": "Angola" + } +} diff --git a/countries/AQ.json b/countries/AQ.json new file mode 100644 index 0000000..e45a42a --- /dev/null +++ b/countries/AQ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Antarctica", + "de": "Antarktis" + } +} diff --git a/countries/AR.json b/countries/AR.json new file mode 100644 index 0000000..9a76044 --- /dev/null +++ b/countries/AR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Argentina", + "de": "Argentinien" + } +} diff --git a/countries/AS.json b/countries/AS.json new file mode 100644 index 0000000..5b1674b --- /dev/null +++ b/countries/AS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "American Samoa", + "de": "Amerikanisch-Samoa" + } +} diff --git a/countries/AT.json b/countries/AT.json new file mode 100644 index 0000000..0a0727d --- /dev/null +++ b/countries/AT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Austria", + "de": "Österreich" + } +} diff --git a/countries/AU.json b/countries/AU.json new file mode 100644 index 0000000..3dcf444 --- /dev/null +++ b/countries/AU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Australia", + "de": "Australien" + } +} diff --git a/countries/AW.json b/countries/AW.json new file mode 100644 index 0000000..8cbb396 --- /dev/null +++ b/countries/AW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Aruba", + "de": "Aruba" + } +} diff --git a/countries/AX.json b/countries/AX.json new file mode 100644 index 0000000..c8fd514 --- /dev/null +++ b/countries/AX.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Åland Islands", + "de": "Ålandinseln" + } +} diff --git a/countries/AZ.json b/countries/AZ.json new file mode 100644 index 0000000..609fd2f --- /dev/null +++ b/countries/AZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Azerbaijan", + "de": "Aserbaidschan" + } +} diff --git a/countries/BA.json b/countries/BA.json new file mode 100644 index 0000000..63267de --- /dev/null +++ b/countries/BA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bosnia & Herzegovina", + "de": "Bosnien und Herzegowina" + } +} diff --git a/countries/BB.json b/countries/BB.json new file mode 100644 index 0000000..43481ec --- /dev/null +++ b/countries/BB.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Barbados", + "de": "Barbados" + } +} diff --git a/countries/BD.json b/countries/BD.json new file mode 100644 index 0000000..3b44fff --- /dev/null +++ b/countries/BD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bangladesh", + "de": "Bangladesch" + } +} diff --git a/countries/BE.json b/countries/BE.json new file mode 100644 index 0000000..5b5d6d6 --- /dev/null +++ b/countries/BE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Belgium", + "de": "Belgien" + } +} diff --git a/countries/BF.json b/countries/BF.json new file mode 100644 index 0000000..bc4511b --- /dev/null +++ b/countries/BF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Burkina Faso", + "de": "Burkina Faso" + } +} diff --git a/countries/BG.json b/countries/BG.json new file mode 100644 index 0000000..daf473f --- /dev/null +++ b/countries/BG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bulgaria", + "de": "Bulgarien" + } +} diff --git a/countries/BH.json b/countries/BH.json new file mode 100644 index 0000000..5746e68 --- /dev/null +++ b/countries/BH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bahrain", + "de": "Bahrain" + } +} diff --git a/countries/BI.json b/countries/BI.json new file mode 100644 index 0000000..fe67ef4 --- /dev/null +++ b/countries/BI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Burundi", + "de": "Burundi" + } +} diff --git a/countries/BJ.json b/countries/BJ.json new file mode 100644 index 0000000..cb6c083 --- /dev/null +++ b/countries/BJ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Benin", + "de": "Benin" + } +} diff --git a/countries/BL.json b/countries/BL.json new file mode 100644 index 0000000..822f579 --- /dev/null +++ b/countries/BL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Barthélemy", + "de": "St. Barthélemy" + } +} diff --git a/countries/BM.json b/countries/BM.json new file mode 100644 index 0000000..73baa19 --- /dev/null +++ b/countries/BM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bermuda", + "de": "Bermuda" + } +} diff --git a/countries/BN.json b/countries/BN.json new file mode 100644 index 0000000..ca3ca9e --- /dev/null +++ b/countries/BN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Brunei", + "de": "Brunei Darussalam" + } +} diff --git a/countries/BO.json b/countries/BO.json new file mode 100644 index 0000000..5b518cb --- /dev/null +++ b/countries/BO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bolivia", + "de": "Bolivien" + } +} diff --git a/countries/BQ.json b/countries/BQ.json new file mode 100644 index 0000000..cac5fa4 --- /dev/null +++ b/countries/BQ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Caribbean Netherlands", + "de": "Karibische Niederlande" + } +} diff --git a/countries/BR.json b/countries/BR.json new file mode 100644 index 0000000..044d350 --- /dev/null +++ b/countries/BR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Brazil", + "de": "Brasilien" + } +} diff --git a/countries/BS.json b/countries/BS.json new file mode 100644 index 0000000..9dc6de2 --- /dev/null +++ b/countries/BS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bahamas", + "de": "Bahamas" + } +} diff --git a/countries/BT.json b/countries/BT.json new file mode 100644 index 0000000..4e93215 --- /dev/null +++ b/countries/BT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bhutan", + "de": "Bhutan" + } +} diff --git a/countries/BV.json b/countries/BV.json new file mode 100644 index 0000000..8338049 --- /dev/null +++ b/countries/BV.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Bouvet Island", + "de": "Bouvetinsel" + } +} diff --git a/countries/BW.json b/countries/BW.json new file mode 100644 index 0000000..308a87b --- /dev/null +++ b/countries/BW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Botswana", + "de": "Botsuana" + } +} diff --git a/countries/BY.json b/countries/BY.json new file mode 100644 index 0000000..768017b --- /dev/null +++ b/countries/BY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Belarus", + "de": "Belarus" + } +} diff --git a/countries/BZ.json b/countries/BZ.json new file mode 100644 index 0000000..7d73ed3 --- /dev/null +++ b/countries/BZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Belize", + "de": "Belize" + } +} diff --git a/countries/CA.json b/countries/CA.json new file mode 100644 index 0000000..c195a66 --- /dev/null +++ b/countries/CA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Canada", + "de": "Kanada" + } +} diff --git a/countries/CC.json b/countries/CC.json new file mode 100644 index 0000000..5721525 --- /dev/null +++ b/countries/CC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cocos (Keeling) Islands", + "de": "Kokosinseln" + } +} diff --git a/countries/CD.json b/countries/CD.json new file mode 100644 index 0000000..3f58cc1 --- /dev/null +++ b/countries/CD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Congo - Kinshasa", + "de": "Kongo-Kinshasa" + } +} diff --git a/countries/CF.json b/countries/CF.json new file mode 100644 index 0000000..45a9101 --- /dev/null +++ b/countries/CF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Central African Republic", + "de": "Zentralafrikanische Republik" + } +} diff --git a/countries/CG.json b/countries/CG.json new file mode 100644 index 0000000..41330ab --- /dev/null +++ b/countries/CG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Congo - Brazzaville", + "de": "Kongo-Brazzaville" + } +} diff --git a/countries/CH.json b/countries/CH.json new file mode 100644 index 0000000..7c01a3b --- /dev/null +++ b/countries/CH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Switzerland", + "de": "Schweiz" + } +} diff --git a/countries/CI.json b/countries/CI.json new file mode 100644 index 0000000..dd076bc --- /dev/null +++ b/countries/CI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Côte d’Ivoire", + "de": "Côte d’Ivoire" + } +} diff --git a/countries/CK.json b/countries/CK.json new file mode 100644 index 0000000..83720a3 --- /dev/null +++ b/countries/CK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cook Islands", + "de": "Cookinseln" + } +} diff --git a/countries/CL.json b/countries/CL.json new file mode 100644 index 0000000..5a93a16 --- /dev/null +++ b/countries/CL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Chile", + "de": "Chile" + } +} diff --git a/countries/CM.json b/countries/CM.json new file mode 100644 index 0000000..4789340 --- /dev/null +++ b/countries/CM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cameroon", + "de": "Kamerun" + } +} diff --git a/countries/CN.json b/countries/CN.json new file mode 100644 index 0000000..643756a --- /dev/null +++ b/countries/CN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "China", + "de": "China" + } +} diff --git a/countries/CO.json b/countries/CO.json new file mode 100644 index 0000000..9967b27 --- /dev/null +++ b/countries/CO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Colombia", + "de": "Kolumbien" + } +} diff --git a/countries/CR.json b/countries/CR.json new file mode 100644 index 0000000..a53b363 --- /dev/null +++ b/countries/CR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Costa Rica", + "de": "Costa Rica" + } +} diff --git a/countries/CU.json b/countries/CU.json new file mode 100644 index 0000000..f539ad6 --- /dev/null +++ b/countries/CU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cuba", + "de": "Kuba" + } +} diff --git a/countries/CV.json b/countries/CV.json new file mode 100644 index 0000000..86084f9 --- /dev/null +++ b/countries/CV.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cape Verde", + "de": "Cabo Verde" + } +} diff --git a/countries/CW.json b/countries/CW.json new file mode 100644 index 0000000..93fc445 --- /dev/null +++ b/countries/CW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Curaçao", + "de": "Curaçao" + } +} diff --git a/countries/CX.json b/countries/CX.json new file mode 100644 index 0000000..4724d92 --- /dev/null +++ b/countries/CX.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Christmas Island", + "de": "Weihnachtsinsel" + } +} diff --git a/countries/CY.json b/countries/CY.json new file mode 100644 index 0000000..911d746 --- /dev/null +++ b/countries/CY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cyprus", + "de": "Zypern" + } +} diff --git a/countries/CZ.json b/countries/CZ.json new file mode 100644 index 0000000..4125310 --- /dev/null +++ b/countries/CZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Czechia", + "de": "Tschechien" + } +} diff --git a/countries/DE.json b/countries/DE.json new file mode 100644 index 0000000..a4b28d2 --- /dev/null +++ b/countries/DE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Germany", + "de": "Deutschland" + } +} diff --git a/countries/DJ.json b/countries/DJ.json new file mode 100644 index 0000000..3ed93c9 --- /dev/null +++ b/countries/DJ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Djibouti", + "de": "Dschibuti" + } +} diff --git a/countries/DK.json b/countries/DK.json new file mode 100644 index 0000000..45849bf --- /dev/null +++ b/countries/DK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Denmark", + "de": "Dänemark" + } +} diff --git a/countries/DM.json b/countries/DM.json new file mode 100644 index 0000000..2d379c1 --- /dev/null +++ b/countries/DM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Dominica", + "de": "Dominica" + } +} diff --git a/countries/DO.json b/countries/DO.json new file mode 100644 index 0000000..247bc1f --- /dev/null +++ b/countries/DO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Dominican Republic", + "de": "Dominikanische Republik" + } +} diff --git a/countries/DZ.json b/countries/DZ.json new file mode 100644 index 0000000..1054558 --- /dev/null +++ b/countries/DZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Algeria", + "de": "Algerien" + } +} diff --git a/countries/EC.json b/countries/EC.json new file mode 100644 index 0000000..d59a64a --- /dev/null +++ b/countries/EC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Ecuador", + "de": "Ecuador" + } +} diff --git a/countries/EE.json b/countries/EE.json new file mode 100644 index 0000000..dd8ea2f --- /dev/null +++ b/countries/EE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Estonia", + "de": "Estland" + } +} diff --git a/countries/EG.json b/countries/EG.json new file mode 100644 index 0000000..17e86c4 --- /dev/null +++ b/countries/EG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Egypt", + "de": "Ägypten" + } +} diff --git a/countries/EH.json b/countries/EH.json new file mode 100644 index 0000000..582a330 --- /dev/null +++ b/countries/EH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Western Sahara", + "de": "Westsahara" + } +} diff --git a/countries/ER.json b/countries/ER.json new file mode 100644 index 0000000..ec73905 --- /dev/null +++ b/countries/ER.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Eritrea", + "de": "Eritrea" + } +} diff --git a/countries/ES.json b/countries/ES.json new file mode 100644 index 0000000..64d2ef5 --- /dev/null +++ b/countries/ES.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Spain", + "de": "Spanien" + } +} diff --git a/countries/ET.json b/countries/ET.json new file mode 100644 index 0000000..a07542c --- /dev/null +++ b/countries/ET.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Ethiopia", + "de": "Äthiopien" + } +} diff --git a/countries/FI.json b/countries/FI.json new file mode 100644 index 0000000..60dcd8c --- /dev/null +++ b/countries/FI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Finland", + "de": "Finnland" + } +} diff --git a/countries/FJ.json b/countries/FJ.json new file mode 100644 index 0000000..090d646 --- /dev/null +++ b/countries/FJ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Fiji", + "de": "Fidschi" + } +} diff --git a/countries/FK.json b/countries/FK.json new file mode 100644 index 0000000..c3d6e27 --- /dev/null +++ b/countries/FK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Falkland Islands", + "de": "Falklandinseln" + } +} diff --git a/countries/FM.json b/countries/FM.json new file mode 100644 index 0000000..dcea512 --- /dev/null +++ b/countries/FM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Micronesia", + "de": "Mikronesien" + } +} diff --git a/countries/FO.json b/countries/FO.json new file mode 100644 index 0000000..06163fa --- /dev/null +++ b/countries/FO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Faroe Islands", + "de": "Färöer" + } +} diff --git a/countries/FR.json b/countries/FR.json new file mode 100644 index 0000000..6836464 --- /dev/null +++ b/countries/FR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "France", + "de": "Frankreich" + } +} diff --git a/countries/GA.json b/countries/GA.json new file mode 100644 index 0000000..10e5b82 --- /dev/null +++ b/countries/GA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Gabon", + "de": "Gabun" + } +} diff --git a/countries/GB.json b/countries/GB.json new file mode 100644 index 0000000..b674342 --- /dev/null +++ b/countries/GB.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "United Kingdom", + "de": "Vereinigtes Königreich" + } +} diff --git a/countries/GD.json b/countries/GD.json new file mode 100644 index 0000000..3f55fa4 --- /dev/null +++ b/countries/GD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Grenada", + "de": "Grenada" + } +} diff --git a/countries/GE.json b/countries/GE.json new file mode 100644 index 0000000..342daf7 --- /dev/null +++ b/countries/GE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Georgia", + "de": "Georgien" + } +} diff --git a/countries/GF.json b/countries/GF.json new file mode 100644 index 0000000..9d769b9 --- /dev/null +++ b/countries/GF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "French Guiana", + "de": "Französisch-Guayana" + } +} diff --git a/countries/GG.json b/countries/GG.json new file mode 100644 index 0000000..0b108c3 --- /dev/null +++ b/countries/GG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guernsey", + "de": "Guernsey" + } +} diff --git a/countries/GH.json b/countries/GH.json new file mode 100644 index 0000000..bb82226 --- /dev/null +++ b/countries/GH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Ghana", + "de": "Ghana" + } +} diff --git a/countries/GI.json b/countries/GI.json new file mode 100644 index 0000000..0ac7537 --- /dev/null +++ b/countries/GI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Gibraltar", + "de": "Gibraltar" + } +} diff --git a/countries/GL.json b/countries/GL.json new file mode 100644 index 0000000..697a792 --- /dev/null +++ b/countries/GL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Greenland", + "de": "Grönland" + } +} diff --git a/countries/GM.json b/countries/GM.json new file mode 100644 index 0000000..23ff49a --- /dev/null +++ b/countries/GM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Gambia", + "de": "Gambia" + } +} diff --git a/countries/GN.json b/countries/GN.json new file mode 100644 index 0000000..22c3a7f --- /dev/null +++ b/countries/GN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guinea", + "de": "Guinea" + } +} diff --git a/countries/GP.json b/countries/GP.json new file mode 100644 index 0000000..c1120fe --- /dev/null +++ b/countries/GP.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guadeloupe", + "de": "Guadeloupe" + } +} diff --git a/countries/GQ.json b/countries/GQ.json new file mode 100644 index 0000000..40cb188 --- /dev/null +++ b/countries/GQ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Equatorial Guinea", + "de": "Äquatorialguinea" + } +} diff --git a/countries/GR.json b/countries/GR.json new file mode 100644 index 0000000..ddc1015 --- /dev/null +++ b/countries/GR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Greece", + "de": "Griechenland" + } +} diff --git a/countries/GS.json b/countries/GS.json new file mode 100644 index 0000000..e988aa7 --- /dev/null +++ b/countries/GS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "South Georgia & South Sandwich Islands", + "de": "Südgeorgien und die Südlichen Sandwichinseln" + } +} diff --git a/countries/GT.json b/countries/GT.json new file mode 100644 index 0000000..f7533c4 --- /dev/null +++ b/countries/GT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guatemala", + "de": "Guatemala" + } +} diff --git a/countries/GU.json b/countries/GU.json new file mode 100644 index 0000000..3a1aa7a --- /dev/null +++ b/countries/GU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guam", + "de": "Guam" + } +} diff --git a/countries/GW.json b/countries/GW.json new file mode 100644 index 0000000..c4cecee --- /dev/null +++ b/countries/GW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guinea-Bissau", + "de": "Guinea-Bissau" + } +} diff --git a/countries/GY.json b/countries/GY.json new file mode 100644 index 0000000..9733faf --- /dev/null +++ b/countries/GY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Guyana", + "de": "Guyana" + } +} diff --git a/countries/HK.json b/countries/HK.json new file mode 100644 index 0000000..e02f796 --- /dev/null +++ b/countries/HK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Hong Kong SAR China", + "de": "Sonderverwaltungsregion Hongkong" + } +} diff --git a/countries/HM.json b/countries/HM.json new file mode 100644 index 0000000..09b9e1f --- /dev/null +++ b/countries/HM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Heard & McDonald Islands", + "de": "Heard und McDonaldinseln" + } +} diff --git a/countries/HN.json b/countries/HN.json new file mode 100644 index 0000000..c07f91a --- /dev/null +++ b/countries/HN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Honduras", + "de": "Honduras" + } +} diff --git a/countries/HR.json b/countries/HR.json new file mode 100644 index 0000000..3e2de02 --- /dev/null +++ b/countries/HR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Croatia", + "de": "Kroatien" + } +} diff --git a/countries/HT.json b/countries/HT.json new file mode 100644 index 0000000..dc9a99f --- /dev/null +++ b/countries/HT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Haiti", + "de": "Haiti" + } +} diff --git a/countries/HU.json b/countries/HU.json new file mode 100644 index 0000000..279a9e7 --- /dev/null +++ b/countries/HU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Hungary", + "de": "Ungarn" + } +} diff --git a/countries/ID.json b/countries/ID.json new file mode 100644 index 0000000..917268c --- /dev/null +++ b/countries/ID.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Indonesia", + "de": "Indonesien" + } +} diff --git a/countries/IE.json b/countries/IE.json new file mode 100644 index 0000000..bd8ecc8 --- /dev/null +++ b/countries/IE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Ireland", + "de": "Irland" + } +} diff --git a/countries/IL.json b/countries/IL.json new file mode 100644 index 0000000..48635ba --- /dev/null +++ b/countries/IL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Israel", + "de": "Israel" + } +} diff --git a/countries/IM.json b/countries/IM.json new file mode 100644 index 0000000..87633a0 --- /dev/null +++ b/countries/IM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Isle of Man", + "de": "Isle of Man" + } +} diff --git a/countries/IN.json b/countries/IN.json new file mode 100644 index 0000000..e10b9be --- /dev/null +++ b/countries/IN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "India", + "de": "Indien" + } +} diff --git a/countries/IO.json b/countries/IO.json new file mode 100644 index 0000000..c983826 --- /dev/null +++ b/countries/IO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "British Indian Ocean Territory", + "de": "Britisches Territorium im Indischen Ozean" + } +} diff --git a/countries/IQ.json b/countries/IQ.json new file mode 100644 index 0000000..0031418 --- /dev/null +++ b/countries/IQ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Iraq", + "de": "Irak" + } +} diff --git a/countries/IR.json b/countries/IR.json new file mode 100644 index 0000000..cc3062e --- /dev/null +++ b/countries/IR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Iran", + "de": "Iran" + } +} diff --git a/countries/IS.json b/countries/IS.json new file mode 100644 index 0000000..7a1665b --- /dev/null +++ b/countries/IS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Iceland", + "de": "Island" + } +} diff --git a/countries/IT.json b/countries/IT.json new file mode 100644 index 0000000..14bc89b --- /dev/null +++ b/countries/IT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Italy", + "de": "Italien" + } +} diff --git a/countries/JE.json b/countries/JE.json new file mode 100644 index 0000000..d4d4c57 --- /dev/null +++ b/countries/JE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Jersey", + "de": "Jersey" + } +} diff --git a/countries/JM.json b/countries/JM.json new file mode 100644 index 0000000..5a72f56 --- /dev/null +++ b/countries/JM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Jamaica", + "de": "Jamaika" + } +} diff --git a/countries/JO.json b/countries/JO.json new file mode 100644 index 0000000..0f2cc44 --- /dev/null +++ b/countries/JO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Jordan", + "de": "Jordanien" + } +} diff --git a/countries/JP.json b/countries/JP.json new file mode 100644 index 0000000..c17914c --- /dev/null +++ b/countries/JP.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Japan", + "de": "Japan" + } +} diff --git a/countries/KE.json b/countries/KE.json new file mode 100644 index 0000000..81991e6 --- /dev/null +++ b/countries/KE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Kenya", + "de": "Kenia" + } +} diff --git a/countries/KG.json b/countries/KG.json new file mode 100644 index 0000000..26fe050 --- /dev/null +++ b/countries/KG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Kyrgyzstan", + "de": "Kirgisistan" + } +} diff --git a/countries/KH.json b/countries/KH.json new file mode 100644 index 0000000..d24ef47 --- /dev/null +++ b/countries/KH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cambodia", + "de": "Kambodscha" + } +} diff --git a/countries/KI.json b/countries/KI.json new file mode 100644 index 0000000..4af1b37 --- /dev/null +++ b/countries/KI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Kiribati", + "de": "Kiribati" + } +} diff --git a/countries/KM.json b/countries/KM.json new file mode 100644 index 0000000..dae70ca --- /dev/null +++ b/countries/KM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Comoros", + "de": "Komoren" + } +} diff --git a/countries/KN.json b/countries/KN.json new file mode 100644 index 0000000..52b2f27 --- /dev/null +++ b/countries/KN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Kitts & Nevis", + "de": "St. Kitts und Nevis" + } +} diff --git a/countries/KP.json b/countries/KP.json new file mode 100644 index 0000000..3539383 --- /dev/null +++ b/countries/KP.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "North Korea", + "de": "Nordkorea" + } +} diff --git a/countries/KR.json b/countries/KR.json new file mode 100644 index 0000000..116a9a9 --- /dev/null +++ b/countries/KR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "South Korea", + "de": "Südkorea" + } +} diff --git a/countries/KW.json b/countries/KW.json new file mode 100644 index 0000000..a3500ef --- /dev/null +++ b/countries/KW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Kuwait", + "de": "Kuwait" + } +} diff --git a/countries/KY.json b/countries/KY.json new file mode 100644 index 0000000..7051911 --- /dev/null +++ b/countries/KY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Cayman Islands", + "de": "Kaimaninseln" + } +} diff --git a/countries/KZ.json b/countries/KZ.json new file mode 100644 index 0000000..8ab48d1 --- /dev/null +++ b/countries/KZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Kazakhstan", + "de": "Kasachstan" + } +} diff --git a/countries/LA.json b/countries/LA.json new file mode 100644 index 0000000..cb7c0fd --- /dev/null +++ b/countries/LA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Laos", + "de": "Laos" + } +} diff --git a/countries/LB.json b/countries/LB.json new file mode 100644 index 0000000..1cc64be --- /dev/null +++ b/countries/LB.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Lebanon", + "de": "Libanon" + } +} diff --git a/countries/LC.json b/countries/LC.json new file mode 100644 index 0000000..f1b81e9 --- /dev/null +++ b/countries/LC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Lucia", + "de": "St. Lucia" + } +} diff --git a/countries/LI.json b/countries/LI.json new file mode 100644 index 0000000..ae90b32 --- /dev/null +++ b/countries/LI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Liechtenstein", + "de": "Liechtenstein" + } +} diff --git a/countries/LK.json b/countries/LK.json new file mode 100644 index 0000000..6ec2965 --- /dev/null +++ b/countries/LK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Sri Lanka", + "de": "Sri Lanka" + } +} diff --git a/countries/LR.json b/countries/LR.json new file mode 100644 index 0000000..ab46594 --- /dev/null +++ b/countries/LR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Liberia", + "de": "Liberia" + } +} diff --git a/countries/LS.json b/countries/LS.json new file mode 100644 index 0000000..42ed8e8 --- /dev/null +++ b/countries/LS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Lesotho", + "de": "Lesotho" + } +} diff --git a/countries/LT.json b/countries/LT.json new file mode 100644 index 0000000..6024a6c --- /dev/null +++ b/countries/LT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Lithuania", + "de": "Litauen" + } +} diff --git a/countries/LU.json b/countries/LU.json new file mode 100644 index 0000000..df8f109 --- /dev/null +++ b/countries/LU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Luxembourg", + "de": "Luxemburg" + } +} diff --git a/countries/LV.json b/countries/LV.json new file mode 100644 index 0000000..9fcbdca --- /dev/null +++ b/countries/LV.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Latvia", + "de": "Lettland" + } +} diff --git a/countries/LY.json b/countries/LY.json new file mode 100644 index 0000000..5fa3945 --- /dev/null +++ b/countries/LY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Libya", + "de": "Libyen" + } +} diff --git a/countries/MA.json b/countries/MA.json new file mode 100644 index 0000000..6bbe9fc --- /dev/null +++ b/countries/MA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Morocco", + "de": "Marokko" + } +} diff --git a/countries/MC.json b/countries/MC.json new file mode 100644 index 0000000..92a0371 --- /dev/null +++ b/countries/MC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Monaco", + "de": "Monaco" + } +} diff --git a/countries/MD.json b/countries/MD.json new file mode 100644 index 0000000..9fe5a70 --- /dev/null +++ b/countries/MD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Moldova", + "de": "Republik Moldau" + } +} diff --git a/countries/ME.json b/countries/ME.json new file mode 100644 index 0000000..15b9f67 --- /dev/null +++ b/countries/ME.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Montenegro", + "de": "Montenegro" + } +} diff --git a/countries/MF.json b/countries/MF.json new file mode 100644 index 0000000..401f914 --- /dev/null +++ b/countries/MF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Martin", + "de": "St. Martin" + } +} diff --git a/countries/MG.json b/countries/MG.json new file mode 100644 index 0000000..780406e --- /dev/null +++ b/countries/MG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Madagascar", + "de": "Madagaskar" + } +} diff --git a/countries/MH.json b/countries/MH.json new file mode 100644 index 0000000..c2ccedb --- /dev/null +++ b/countries/MH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Marshall Islands", + "de": "Marshallinseln" + } +} diff --git a/countries/MK.json b/countries/MK.json new file mode 100644 index 0000000..951a506 --- /dev/null +++ b/countries/MK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "North Macedonia", + "de": "Nordmazedonien" + } +} diff --git a/countries/ML.json b/countries/ML.json new file mode 100644 index 0000000..ff4804b --- /dev/null +++ b/countries/ML.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mali", + "de": "Mali" + } +} diff --git a/countries/MM.json b/countries/MM.json new file mode 100644 index 0000000..7664052 --- /dev/null +++ b/countries/MM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Myanmar (Burma)", + "de": "Myanmar" + } +} diff --git a/countries/MN.json b/countries/MN.json new file mode 100644 index 0000000..fcc86fc --- /dev/null +++ b/countries/MN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mongolia", + "de": "Mongolei" + } +} diff --git a/countries/MO.json b/countries/MO.json new file mode 100644 index 0000000..2935b7a --- /dev/null +++ b/countries/MO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Macao SAR China", + "de": "Sonderverwaltungsregion Macau" + } +} diff --git a/countries/MP.json b/countries/MP.json new file mode 100644 index 0000000..e4ed856 --- /dev/null +++ b/countries/MP.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Northern Mariana Islands", + "de": "Nördliche Marianen" + } +} diff --git a/countries/MQ.json b/countries/MQ.json new file mode 100644 index 0000000..0bcffa8 --- /dev/null +++ b/countries/MQ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Martinique", + "de": "Martinique" + } +} diff --git a/countries/MR.json b/countries/MR.json new file mode 100644 index 0000000..4c3d126 --- /dev/null +++ b/countries/MR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mauritania", + "de": "Mauretanien" + } +} diff --git a/countries/MS.json b/countries/MS.json new file mode 100644 index 0000000..f2034c8 --- /dev/null +++ b/countries/MS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Montserrat", + "de": "Montserrat" + } +} diff --git a/countries/MT.json b/countries/MT.json new file mode 100644 index 0000000..92ae5e1 --- /dev/null +++ b/countries/MT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Malta", + "de": "Malta" + } +} diff --git a/countries/MU.json b/countries/MU.json new file mode 100644 index 0000000..27e7169 --- /dev/null +++ b/countries/MU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mauritius", + "de": "Mauritius" + } +} diff --git a/countries/MV.json b/countries/MV.json new file mode 100644 index 0000000..3d7836c --- /dev/null +++ b/countries/MV.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Maldives", + "de": "Malediven" + } +} diff --git a/countries/MW.json b/countries/MW.json new file mode 100644 index 0000000..b3fa70c --- /dev/null +++ b/countries/MW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Malawi", + "de": "Malawi" + } +} diff --git a/countries/MX.json b/countries/MX.json new file mode 100644 index 0000000..bd88a33 --- /dev/null +++ b/countries/MX.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mexico", + "de": "Mexiko" + } +} diff --git a/countries/MY.json b/countries/MY.json new file mode 100644 index 0000000..e1d4cb8 --- /dev/null +++ b/countries/MY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Malaysia", + "de": "Malaysia" + } +} diff --git a/countries/MZ.json b/countries/MZ.json new file mode 100644 index 0000000..b1247e2 --- /dev/null +++ b/countries/MZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mozambique", + "de": "Mosambik" + } +} diff --git a/countries/NA.json b/countries/NA.json new file mode 100644 index 0000000..fd4bab1 --- /dev/null +++ b/countries/NA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Namibia", + "de": "Namibia" + } +} diff --git a/countries/NC.json b/countries/NC.json new file mode 100644 index 0000000..4390d0d --- /dev/null +++ b/countries/NC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "New Caledonia", + "de": "Neukaledonien" + } +} diff --git a/countries/NE.json b/countries/NE.json new file mode 100644 index 0000000..30029bb --- /dev/null +++ b/countries/NE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Niger", + "de": "Niger" + } +} diff --git a/countries/NF.json b/countries/NF.json new file mode 100644 index 0000000..59e3725 --- /dev/null +++ b/countries/NF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Norfolk Island", + "de": "Norfolkinsel" + } +} diff --git a/countries/NG.json b/countries/NG.json new file mode 100644 index 0000000..2c2c279 --- /dev/null +++ b/countries/NG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Nigeria", + "de": "Nigeria" + } +} diff --git a/countries/NI.json b/countries/NI.json new file mode 100644 index 0000000..f3d4069 --- /dev/null +++ b/countries/NI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Nicaragua", + "de": "Nicaragua" + } +} diff --git a/countries/NL.json b/countries/NL.json new file mode 100644 index 0000000..27ce1cc --- /dev/null +++ b/countries/NL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Netherlands", + "de": "Niederlande" + } +} diff --git a/countries/NO.json b/countries/NO.json new file mode 100644 index 0000000..b6ca487 --- /dev/null +++ b/countries/NO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Norway", + "de": "Norwegen" + } +} diff --git a/countries/NP.json b/countries/NP.json new file mode 100644 index 0000000..2398d6e --- /dev/null +++ b/countries/NP.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Nepal", + "de": "Nepal" + } +} diff --git a/countries/NR.json b/countries/NR.json new file mode 100644 index 0000000..ffecfad --- /dev/null +++ b/countries/NR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Nauru", + "de": "Nauru" + } +} diff --git a/countries/NU.json b/countries/NU.json new file mode 100644 index 0000000..b91fea1 --- /dev/null +++ b/countries/NU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Niue", + "de": "Niue" + } +} diff --git a/countries/NZ.json b/countries/NZ.json new file mode 100644 index 0000000..84597bb --- /dev/null +++ b/countries/NZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "New Zealand", + "de": "Neuseeland" + } +} diff --git a/countries/OM.json b/countries/OM.json new file mode 100644 index 0000000..6fd4410 --- /dev/null +++ b/countries/OM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Oman", + "de": "Oman" + } +} diff --git a/countries/PA.json b/countries/PA.json new file mode 100644 index 0000000..c041361 --- /dev/null +++ b/countries/PA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Panama", + "de": "Panama" + } +} diff --git a/countries/PE.json b/countries/PE.json new file mode 100644 index 0000000..4e13a2f --- /dev/null +++ b/countries/PE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Peru", + "de": "Peru" + } +} diff --git a/countries/PF.json b/countries/PF.json new file mode 100644 index 0000000..dfc1070 --- /dev/null +++ b/countries/PF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "French Polynesia", + "de": "Französisch-Polynesien" + } +} diff --git a/countries/PG.json b/countries/PG.json new file mode 100644 index 0000000..a34f691 --- /dev/null +++ b/countries/PG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Papua New Guinea", + "de": "Papua-Neuguinea" + } +} diff --git a/countries/PH.json b/countries/PH.json new file mode 100644 index 0000000..061bf61 --- /dev/null +++ b/countries/PH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Philippines", + "de": "Philippinen" + } +} diff --git a/countries/PK.json b/countries/PK.json new file mode 100644 index 0000000..b72f426 --- /dev/null +++ b/countries/PK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Pakistan", + "de": "Pakistan" + } +} diff --git a/countries/PL.json b/countries/PL.json new file mode 100644 index 0000000..26afe08 --- /dev/null +++ b/countries/PL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Poland", + "de": "Polen" + } +} diff --git a/countries/PM.json b/countries/PM.json new file mode 100644 index 0000000..6f9c081 --- /dev/null +++ b/countries/PM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Pierre & Miquelon", + "de": "St. Pierre und Miquelon" + } +} diff --git a/countries/PN.json b/countries/PN.json new file mode 100644 index 0000000..4411830 --- /dev/null +++ b/countries/PN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Pitcairn Islands", + "de": "Pitcairninseln" + } +} diff --git a/countries/PR.json b/countries/PR.json new file mode 100644 index 0000000..012ccd7 --- /dev/null +++ b/countries/PR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Puerto Rico", + "de": "Puerto Rico" + } +} diff --git a/countries/PS.json b/countries/PS.json new file mode 100644 index 0000000..8ab46f1 --- /dev/null +++ b/countries/PS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Palestinian Territories", + "de": "Palästinensische Autonomiegebiete" + } +} diff --git a/countries/PT.json b/countries/PT.json new file mode 100644 index 0000000..e9a54ae --- /dev/null +++ b/countries/PT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Portugal", + "de": "Portugal" + } +} diff --git a/countries/PW.json b/countries/PW.json new file mode 100644 index 0000000..1254697 --- /dev/null +++ b/countries/PW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Palau", + "de": "Palau" + } +} diff --git a/countries/PY.json b/countries/PY.json new file mode 100644 index 0000000..55b643e --- /dev/null +++ b/countries/PY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Paraguay", + "de": "Paraguay" + } +} diff --git a/countries/QA.json b/countries/QA.json new file mode 100644 index 0000000..c53dbe9 --- /dev/null +++ b/countries/QA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Qatar", + "de": "Katar" + } +} diff --git a/countries/RE.json b/countries/RE.json new file mode 100644 index 0000000..34adb6e --- /dev/null +++ b/countries/RE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Réunion", + "de": "Réunion" + } +} diff --git a/countries/RO.json b/countries/RO.json new file mode 100644 index 0000000..cd2e5e2 --- /dev/null +++ b/countries/RO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Romania", + "de": "Rumänien" + } +} diff --git a/countries/RS.json b/countries/RS.json new file mode 100644 index 0000000..2c7b4c4 --- /dev/null +++ b/countries/RS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Serbia", + "de": "Serbien" + } +} diff --git a/countries/RU.json b/countries/RU.json new file mode 100644 index 0000000..9d95cc0 --- /dev/null +++ b/countries/RU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Russia", + "de": "Russland" + } +} diff --git a/countries/RW.json b/countries/RW.json new file mode 100644 index 0000000..9386664 --- /dev/null +++ b/countries/RW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Rwanda", + "de": "Ruanda" + } +} diff --git a/countries/SA.json b/countries/SA.json new file mode 100644 index 0000000..a14765d --- /dev/null +++ b/countries/SA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Saudi Arabia", + "de": "Saudi-Arabien" + } +} diff --git a/countries/SB.json b/countries/SB.json new file mode 100644 index 0000000..3175e68 --- /dev/null +++ b/countries/SB.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Solomon Islands", + "de": "Salomonen" + } +} diff --git a/countries/SC.json b/countries/SC.json new file mode 100644 index 0000000..86cf0bc --- /dev/null +++ b/countries/SC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Seychelles", + "de": "Seychellen" + } +} diff --git a/countries/SD.json b/countries/SD.json new file mode 100644 index 0000000..3c5cc25 --- /dev/null +++ b/countries/SD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Sudan", + "de": "Sudan" + } +} diff --git a/countries/SE.json b/countries/SE.json new file mode 100644 index 0000000..0f9ff65 --- /dev/null +++ b/countries/SE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Sweden", + "de": "Schweden" + } +} diff --git a/countries/SG.json b/countries/SG.json new file mode 100644 index 0000000..600f3e5 --- /dev/null +++ b/countries/SG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Singapore", + "de": "Singapur" + } +} diff --git a/countries/SH.json b/countries/SH.json new file mode 100644 index 0000000..99d5657 --- /dev/null +++ b/countries/SH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Helena", + "de": "St. Helena" + } +} diff --git a/countries/SI.json b/countries/SI.json new file mode 100644 index 0000000..db4565d --- /dev/null +++ b/countries/SI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Slovenia", + "de": "Slowenien" + } +} diff --git a/countries/SJ.json b/countries/SJ.json new file mode 100644 index 0000000..8ceba02 --- /dev/null +++ b/countries/SJ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Svalbard & Jan Mayen", + "de": "Spitzbergen und Jan Mayen" + } +} diff --git a/countries/SK.json b/countries/SK.json new file mode 100644 index 0000000..df9f040 --- /dev/null +++ b/countries/SK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Slovakia", + "de": "Slowakei" + } +} diff --git a/countries/SL.json b/countries/SL.json new file mode 100644 index 0000000..7abcfaa --- /dev/null +++ b/countries/SL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Sierra Leone", + "de": "Sierra Leone" + } +} diff --git a/countries/SM.json b/countries/SM.json new file mode 100644 index 0000000..bfbc60d --- /dev/null +++ b/countries/SM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "San Marino", + "de": "San Marino" + } +} diff --git a/countries/SN.json b/countries/SN.json new file mode 100644 index 0000000..91c001f --- /dev/null +++ b/countries/SN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Senegal", + "de": "Senegal" + } +} diff --git a/countries/SO.json b/countries/SO.json new file mode 100644 index 0000000..bbd05a6 --- /dev/null +++ b/countries/SO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Somalia", + "de": "Somalia" + } +} diff --git a/countries/SR.json b/countries/SR.json new file mode 100644 index 0000000..f2c63b3 --- /dev/null +++ b/countries/SR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Suriname", + "de": "Suriname" + } +} diff --git a/countries/SS.json b/countries/SS.json new file mode 100644 index 0000000..c48eb37 --- /dev/null +++ b/countries/SS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "South Sudan", + "de": "Südsudan" + } +} diff --git a/countries/ST.json b/countries/ST.json new file mode 100644 index 0000000..7e6104d --- /dev/null +++ b/countries/ST.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "São Tomé & Príncipe", + "de": "São Tomé und Príncipe" + } +} diff --git a/countries/SV.json b/countries/SV.json new file mode 100644 index 0000000..9d3beae --- /dev/null +++ b/countries/SV.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "El Salvador", + "de": "El Salvador" + } +} diff --git a/countries/SX.json b/countries/SX.json new file mode 100644 index 0000000..b330fbc --- /dev/null +++ b/countries/SX.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Sint Maarten", + "de": "Sint Maarten" + } +} diff --git a/countries/SY.json b/countries/SY.json new file mode 100644 index 0000000..ff50814 --- /dev/null +++ b/countries/SY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Syria", + "de": "Syrien" + } +} diff --git a/countries/SZ.json b/countries/SZ.json new file mode 100644 index 0000000..b20ceb4 --- /dev/null +++ b/countries/SZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Eswatini", + "de": "Eswatini" + } +} diff --git a/countries/TC.json b/countries/TC.json new file mode 100644 index 0000000..377466c --- /dev/null +++ b/countries/TC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Turks & Caicos Islands", + "de": "Turks- und Caicosinseln" + } +} diff --git a/countries/TD.json b/countries/TD.json new file mode 100644 index 0000000..fcb8888 --- /dev/null +++ b/countries/TD.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Chad", + "de": "Tschad" + } +} diff --git a/countries/TF.json b/countries/TF.json new file mode 100644 index 0000000..6b77412 --- /dev/null +++ b/countries/TF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "French Southern Territories", + "de": "Französische Süd- und Antarktisgebiete" + } +} diff --git a/countries/TG.json b/countries/TG.json new file mode 100644 index 0000000..a9495b1 --- /dev/null +++ b/countries/TG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Togo", + "de": "Togo" + } +} diff --git a/countries/TH.json b/countries/TH.json new file mode 100644 index 0000000..cbbc188 --- /dev/null +++ b/countries/TH.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Thailand", + "de": "Thailand" + } +} diff --git a/countries/TJ.json b/countries/TJ.json new file mode 100644 index 0000000..27a4991 --- /dev/null +++ b/countries/TJ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Tajikistan", + "de": "Tadschikistan" + } +} diff --git a/countries/TK.json b/countries/TK.json new file mode 100644 index 0000000..de02c66 --- /dev/null +++ b/countries/TK.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Tokelau", + "de": "Tokelau" + } +} diff --git a/countries/TL.json b/countries/TL.json new file mode 100644 index 0000000..103408b --- /dev/null +++ b/countries/TL.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Timor-Leste", + "de": "Timor-Leste" + } +} diff --git a/countries/TM.json b/countries/TM.json new file mode 100644 index 0000000..f24df76 --- /dev/null +++ b/countries/TM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Turkmenistan", + "de": "Turkmenistan" + } +} diff --git a/countries/TN.json b/countries/TN.json new file mode 100644 index 0000000..c276cc4 --- /dev/null +++ b/countries/TN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Tunisia", + "de": "Tunesien" + } +} diff --git a/countries/TO.json b/countries/TO.json new file mode 100644 index 0000000..4470233 --- /dev/null +++ b/countries/TO.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Tonga", + "de": "Tonga" + } +} diff --git a/countries/TR.json b/countries/TR.json new file mode 100644 index 0000000..393df58 --- /dev/null +++ b/countries/TR.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Türkiye", + "de": "Türkei" + } +} diff --git a/countries/TT.json b/countries/TT.json new file mode 100644 index 0000000..2689f51 --- /dev/null +++ b/countries/TT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Trinidad & Tobago", + "de": "Trinidad und Tobago" + } +} diff --git a/countries/TV.json b/countries/TV.json new file mode 100644 index 0000000..da5a782 --- /dev/null +++ b/countries/TV.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Tuvalu", + "de": "Tuvalu" + } +} diff --git a/countries/TW.json b/countries/TW.json new file mode 100644 index 0000000..10a63b6 --- /dev/null +++ b/countries/TW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Taiwan", + "de": "Taiwan" + } +} diff --git a/countries/TZ.json b/countries/TZ.json new file mode 100644 index 0000000..d0e98d3 --- /dev/null +++ b/countries/TZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Tanzania", + "de": "Tansania" + } +} diff --git a/countries/UA.json b/countries/UA.json new file mode 100644 index 0000000..c219161 --- /dev/null +++ b/countries/UA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Ukraine", + "de": "Ukraine" + } +} diff --git a/countries/UG.json b/countries/UG.json new file mode 100644 index 0000000..c4526e8 --- /dev/null +++ b/countries/UG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Uganda", + "de": "Uganda" + } +} diff --git a/countries/UM.json b/countries/UM.json new file mode 100644 index 0000000..28ef8db --- /dev/null +++ b/countries/UM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "U.S. Outlying Islands", + "de": "Amerikanische Überseeinseln" + } +} diff --git a/countries/US.json b/countries/US.json new file mode 100644 index 0000000..80c03c5 --- /dev/null +++ b/countries/US.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "United States", + "de": "Vereinigte Staaten" + } +} diff --git a/countries/UY.json b/countries/UY.json new file mode 100644 index 0000000..470c986 --- /dev/null +++ b/countries/UY.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Uruguay", + "de": "Uruguay" + } +} diff --git a/countries/UZ.json b/countries/UZ.json new file mode 100644 index 0000000..eb50cff --- /dev/null +++ b/countries/UZ.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Uzbekistan", + "de": "Usbekistan" + } +} diff --git a/countries/VA.json b/countries/VA.json new file mode 100644 index 0000000..f615ef0 --- /dev/null +++ b/countries/VA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Vatican City", + "de": "Vatikanstadt" + } +} diff --git a/countries/VC.json b/countries/VC.json new file mode 100644 index 0000000..4e123a6 --- /dev/null +++ b/countries/VC.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "St. Vincent & Grenadines", + "de": "St. Vincent und die Grenadinen" + } +} diff --git a/countries/VE.json b/countries/VE.json new file mode 100644 index 0000000..bb4d30a --- /dev/null +++ b/countries/VE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Venezuela", + "de": "Venezuela" + } +} diff --git a/countries/VG.json b/countries/VG.json new file mode 100644 index 0000000..ee64eb2 --- /dev/null +++ b/countries/VG.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "British Virgin Islands", + "de": "Britische Jungferninseln" + } +} diff --git a/countries/VI.json b/countries/VI.json new file mode 100644 index 0000000..8089e02 --- /dev/null +++ b/countries/VI.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "U.S. Virgin Islands", + "de": "Amerikanische Jungferninseln" + } +} diff --git a/countries/VN.json b/countries/VN.json new file mode 100644 index 0000000..cc6674d --- /dev/null +++ b/countries/VN.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Vietnam", + "de": "Vietnam" + } +} diff --git a/countries/VU.json b/countries/VU.json new file mode 100644 index 0000000..778b14b --- /dev/null +++ b/countries/VU.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Vanuatu", + "de": "Vanuatu" + } +} diff --git a/countries/WF.json b/countries/WF.json new file mode 100644 index 0000000..7e60227 --- /dev/null +++ b/countries/WF.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Wallis & Futuna", + "de": "Wallis und Futuna" + } +} diff --git a/countries/WS.json b/countries/WS.json new file mode 100644 index 0000000..924c53b --- /dev/null +++ b/countries/WS.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Samoa", + "de": "Samoa" + } +} diff --git a/countries/YE.json b/countries/YE.json new file mode 100644 index 0000000..7775aec --- /dev/null +++ b/countries/YE.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Yemen", + "de": "Jemen" + } +} diff --git a/countries/YT.json b/countries/YT.json new file mode 100644 index 0000000..7ca17ca --- /dev/null +++ b/countries/YT.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Mayotte", + "de": "Mayotte" + } +} diff --git a/countries/ZA.json b/countries/ZA.json new file mode 100644 index 0000000..654a524 --- /dev/null +++ b/countries/ZA.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "South Africa", + "de": "Südafrika" + } +} diff --git a/countries/ZM.json b/countries/ZM.json new file mode 100644 index 0000000..cd02371 --- /dev/null +++ b/countries/ZM.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Zambia", + "de": "Sambia" + } +} diff --git a/countries/ZW.json b/countries/ZW.json new file mode 100644 index 0000000..27be622 --- /dev/null +++ b/countries/ZW.json @@ -0,0 +1,6 @@ +{ + "name": { + "en": "Zimbabwe", + "de": "Simbabwe" + } +} diff --git a/go.mod b/go.mod index dac4127..6b7e2ec 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/Securepoint/dns-services +module github.com/Securepoint/cloud-shield-definitions -go 1.25.0 +go 1.26.2 diff --git a/ids.json b/ids.json new file mode 100644 index 0000000..f321e61 --- /dev/null +++ b/ids.json @@ -0,0 +1,454 @@ +{ + "services": { + "4chan": 1, + "500px": 2, + "9gag": 3, + "activision-blizzard": 4, + "adobe-creative-cloud": 5, + "adp": 6, + "airbnb": 7, + "airtable": 8, + "ali-express": 9, + "alibaba": 10, + "amazon": 12, + "amazon-web-services": 11, + "amino": 13, + "apple": 15, + "apple-tv": 14, + "asana": 16, + "atlassian-jira": 17, + "auth0": 18, + "badoo": 19, + "bamboohr": 20, + "battle-net": 21, + "be-real": 22, + "bigo-live": 23, + "bilibili": 24, + "bing": 25, + "bitbucket": 26, + "blizzard": 27, + "bluesky": 28, + "booking-com": 29, + "bumble": 30, + "bytedance": 31, + "canais-globo": 32, + "canva": 33, + "cash-app": 34, + "character-ai": 35, + "chatgpt": 36, + "chess-com": 37, + "claude": 38, + "cloudflare": 39, + "clubhouse": 40, + "coolapk": 41, + "coursera": 42, + "crunchyroll": 43, + "dailymotion": 44, + "deepseek": 45, + "deezer": 46, + "digitalocean": 47, + "directvgo": 48, + "discord": 49, + "discoveryplus": 50, + "disney-plus": 51, + "docker-hub": 52, + "docusign": 53, + "douban": 54, + "dropbox": 55, + "ebay": 56, + "electronic-arts": 57, + "epic-games": 58, + "facebook": 59, + "fifa": 60, + "figma": 61, + "flickr": 62, + "fortnite": 63, + "gemini": 64, + "github": 65, + "gitlab": 66, + "globoplay": 67, + "gog": 68, + "google-chat": 69, + "google-drive": 70, + "google-meet": 71, + "grindr": 72, + "grok": 73, + "hbo-max": 74, + "heroku": 75, + "hinge": 76, + "huawei": 77, + "hulu": 78, + "iheartradio": 79, + "imgur": 80, + "instagram": 81, + "intercom": 82, + "io-interactive": 83, + "iqiyi": 84, + "jitsi-meet": 85, + "kakaotalk": 86, + "kik": 87, + "kook": 88, + "league-of-legends": 89, + "line": 90, + "linkedin": 91, + "linode": 92, + "lionsgateplus": 93, + "looke": 94, + "looker": 95, + "mail-ru": 96, + "mailchimp": 97, + "mastodon": 98, + "max": 99, + "medium": 100, + "messenger": 101, + "microsoft-onedrive": 102, + "microsoft-teams": 103, + "midjourney": 104, + "minecraft": 105, + "miro": 106, + "mural": 107, + "nebula": 108, + "netflix": 109, + "netlify": 110, + "nintendo": 111, + "notion": 112, + "nvidia": 113, + "odysee": 114, + "ok": 115, + "okta": 116, + "olvid": 117, + "onlyfans": 118, + "origin": 119, + "pandadoc": 120, + "paramount-plus": 121, + "paypal": 122, + "peacock": 123, + "perplexity": 124, + "pinterest": 125, + "playstation-network": 126, + "playstore": 127, + "plenty-of-fish": 128, + "plex": 129, + "pluto-tv": 130, + "power-bi": 131, + "prime-video": 132, + "qq": 133, + "quickbooks": 134, + "rakuten-viki": 135, + "reddit": 136, + "riot-games": 137, + "roblox": 138, + "rockstar-games": 139, + "salesforce": 140, + "samsung-tv-plus": 141, + "sap": 142, + "servicenow": 143, + "shein": 144, + "shopify": 145, + "signal": 146, + "skype": 147, + "slack": 148, + "snapchat": 149, + "soundcloud": 150, + "splunk": 151, + "spotify": 153, + "spotify-video": 152, + "stack-overflow": 154, + "steam": 155, + "stripe": 156, + "tableau": 157, + "telegram": 158, + "temu": 159, + "tidal": 160, + "tiktok": 161, + "tinder": 162, + "trello": 163, + "tumblr": 164, + "twilio": 165, + "twitch": 166, + "twitter": 167, + "uber": 168, + "ubisoft": 169, + "udemy": 170, + "valorant": 171, + "venmo": 172, + "vercel": 173, + "viber": 174, + "vimeo": 175, + "vivo-play": 176, + "vk": 177, + "vmware": 178, + "voot": 179, + "wargaming": 180, + "warnerbrosgames": 181, + "webex": 182, + "wechat": 183, + "weibo": 184, + "whatsapp": 185, + "wikipedia": 186, + "wish": 187, + "wizz": 188, + "wordpress": 189, + "workday": 190, + "xbox-live": 191, + "xero": 192, + "xiaohongshu": 193, + "xing": 194, + "youtube": 195, + "yy": 196, + "zendesk": 197, + "zhihu": 198, + "zoom": 199 + }, + "countries": { + "AD": 1, + "AE": 2, + "AF": 3, + "AG": 4, + "AI": 5, + "AL": 6, + "AM": 7, + "AO": 8, + "AQ": 9, + "AR": 10, + "AS": 11, + "AT": 12, + "AU": 13, + "AW": 14, + "AX": 15, + "AZ": 16, + "BA": 17, + "BB": 18, + "BD": 19, + "BE": 20, + "BF": 21, + "BG": 22, + "BH": 23, + "BI": 24, + "BJ": 25, + "BL": 26, + "BM": 27, + "BN": 28, + "BO": 29, + "BQ": 30, + "BR": 31, + "BS": 32, + "BT": 33, + "BV": 34, + "BW": 35, + "BY": 36, + "BZ": 37, + "CA": 38, + "CC": 39, + "CD": 40, + "CF": 41, + "CG": 42, + "CH": 43, + "CI": 44, + "CK": 45, + "CL": 46, + "CM": 47, + "CN": 48, + "CO": 49, + "CR": 50, + "CU": 51, + "CV": 52, + "CW": 53, + "CX": 54, + "CY": 55, + "CZ": 56, + "DE": 57, + "DJ": 58, + "DK": 59, + "DM": 60, + "DO": 61, + "DZ": 62, + "EC": 63, + "EE": 64, + "EG": 65, + "EH": 66, + "ER": 67, + "ES": 68, + "ET": 69, + "FI": 70, + "FJ": 71, + "FK": 72, + "FM": 73, + "FO": 74, + "FR": 75, + "GA": 76, + "GB": 77, + "GD": 78, + "GE": 79, + "GF": 80, + "GG": 81, + "GH": 82, + "GI": 83, + "GL": 84, + "GM": 85, + "GN": 86, + "GP": 87, + "GQ": 88, + "GR": 89, + "GS": 90, + "GT": 91, + "GU": 92, + "GW": 93, + "GY": 94, + "HK": 95, + "HM": 96, + "HN": 97, + "HR": 98, + "HT": 99, + "HU": 100, + "ID": 101, + "IE": 102, + "IL": 103, + "IM": 104, + "IN": 105, + "IO": 106, + "IQ": 107, + "IR": 108, + "IS": 109, + "IT": 110, + "JE": 111, + "JM": 112, + "JO": 113, + "JP": 114, + "KE": 115, + "KG": 116, + "KH": 117, + "KI": 118, + "KM": 119, + "KN": 120, + "KP": 121, + "KR": 122, + "KW": 123, + "KY": 124, + "KZ": 125, + "LA": 126, + "LB": 127, + "LC": 128, + "LI": 129, + "LK": 130, + "LR": 131, + "LS": 132, + "LT": 133, + "LU": 134, + "LV": 135, + "LY": 136, + "MA": 137, + "MC": 138, + "MD": 139, + "ME": 140, + "MF": 141, + "MG": 142, + "MH": 143, + "MK": 144, + "ML": 145, + "MM": 146, + "MN": 147, + "MO": 148, + "MP": 149, + "MQ": 150, + "MR": 151, + "MS": 152, + "MT": 153, + "MU": 154, + "MV": 155, + "MW": 156, + "MX": 157, + "MY": 158, + "MZ": 159, + "NA": 160, + "NC": 161, + "NE": 162, + "NF": 163, + "NG": 164, + "NI": 165, + "NL": 166, + "NO": 167, + "NP": 168, + "NR": 169, + "NU": 170, + "NZ": 171, + "OM": 172, + "PA": 173, + "PE": 174, + "PF": 175, + "PG": 176, + "PH": 177, + "PK": 178, + "PL": 179, + "PM": 180, + "PN": 181, + "PR": 182, + "PS": 183, + "PT": 184, + "PW": 185, + "PY": 186, + "QA": 187, + "RE": 188, + "RO": 189, + "RS": 190, + "RU": 191, + "RW": 192, + "SA": 193, + "SB": 194, + "SC": 195, + "SD": 196, + "SE": 197, + "SG": 198, + "SH": 199, + "SI": 200, + "SJ": 201, + "SK": 202, + "SL": 203, + "SM": 204, + "SN": 205, + "SO": 206, + "SR": 207, + "SS": 208, + "ST": 209, + "SV": 210, + "SX": 211, + "SY": 212, + "SZ": 213, + "TC": 214, + "TD": 215, + "TF": 216, + "TG": 217, + "TH": 218, + "TJ": 219, + "TK": 220, + "TL": 221, + "TM": 222, + "TN": 223, + "TO": 224, + "TR": 225, + "TT": 226, + "TV": 227, + "TW": 228, + "TZ": 229, + "UA": 230, + "UG": 231, + "UM": 232, + "US": 233, + "UY": 234, + "UZ": 235, + "VA": 236, + "VC": 237, + "VE": 238, + "VG": 239, + "VI": 240, + "VN": 241, + "VU": 242, + "WF": 243, + "WS": 244, + "YE": 245, + "YT": 246, + "ZA": 247, + "ZM": 248, + "ZW": 249 + } +} diff --git a/main.go b/main.go index 5c6943b..e244ae5 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ type Description struct { } type Service struct { + ID int `json:"id"` Name string `json:"name"` Group string `json:"group"` Description Description `json:"description"` @@ -21,73 +22,186 @@ type Service struct { Patterns []string `json:"patterns,omitempty"` } -type CompiledOutput struct { +type CountryDefinition struct { + Name Description `json:"name"` +} + +type Country struct { + ID int `json:"id"` + Code string `json:"code"` + Name Description `json:"name"` +} + +type CompiledServicesOutput struct { Groups map[string]Description `json:"groups"` Services map[string]Service `json:"services"` } +type CompiledCountriesOutput struct { + Countries map[string]Country `json:"countries"` +} + +type StableIDs struct { + Services map[string]int `json:"services"` + Countries map[string]int `json:"countries"` +} + func main() { + const stableIDsPath = "ids.json" + const legacyServiceIDsPath = "service_ids.json" + const legacyCountryIDsPath = "country_ids.json" + groups, err := loadGroups("groups.json") if err != nil { fmt.Fprintf(os.Stderr, "error loading groups: %v\n", err) os.Exit(1) } - compiled := CompiledOutput{ + stableIDs, err := loadStableIDs(stableIDsPath, legacyServiceIDsPath, legacyCountryIDsPath) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading stable ids: %v\n", err) + os.Exit(1) + } + + nextServiceID, err := nextAvailableID(stableIDs.Services) + if err != nil { + fmt.Fprintf(os.Stderr, "error preparing service ids: %v\n", err) + os.Exit(1) + } + + compiledServices := CompiledServicesOutput{ Groups: groups, Services: make(map[string]Service), } - entries, err := os.ReadDir("services") + serviceCount, err := compileServices("services", groups, stableIDs.Services, nextServiceID, compiledServices.Services) + if err != nil { + fmt.Fprintf(os.Stderr, "error compiling services: %v\n", err) + os.Exit(1) + } + + if err := writeJSONFile("services.json", compiledServices); err != nil { + fmt.Fprintf(os.Stderr, "error writing services.json: %v\n", err) + os.Exit(1) + } + + nextCountryID, err := nextAvailableID(stableIDs.Countries) + if err != nil { + fmt.Fprintf(os.Stderr, "error preparing country ids: %v\n", err) + os.Exit(1) + } + + compiledCountries := CompiledCountriesOutput{ + Countries: make(map[string]Country), + } + + countryCount, err := compileCountries("countries", stableIDs.Countries, nextCountryID, compiledCountries.Countries) if err != nil { - fmt.Fprintf(os.Stderr, "error reading services directory: %v\n", err) + fmt.Fprintf(os.Stderr, "error compiling countries: %v\n", err) + os.Exit(1) + } + + if err := writeJSONFile(stableIDsPath, stableIDs); err != nil { + fmt.Fprintf(os.Stderr, "error writing %s: %v\n", stableIDsPath, err) os.Exit(1) } - var cnt int + if err := writeJSONFile("countries.json", compiledCountries); err != nil { + fmt.Fprintf(os.Stderr, "error writing countries.json: %v\n", err) + os.Exit(1) + } + + fmt.Printf("successfully compiled %d services in %d groups to services.json using %d stable ids\n", serviceCount, len(compiledServices.Groups), len(stableIDs.Services)) + fmt.Printf("successfully compiled %d countries to countries.json using %d stable ids\n", countryCount, len(stableIDs.Countries)) +} + +func compileServices(dir string, groups map[string]Description, serviceIDs map[string]int, nextServiceID int, dst map[string]Service) (int, error) { + entries, err := os.ReadDir(dir) + if err != nil { + return 0, err + } + + var count int for _, e := range entries { if e.IsDir() || !strings.HasSuffix(e.Name(), ".json") { continue } - cnt++ + count++ - d, err := os.ReadFile(filepath.Join("services", e.Name())) + d, err := os.ReadFile(filepath.Join(dir, e.Name())) if err != nil { - fmt.Fprintf(os.Stderr, "error reading %s: %v\n", e.Name(), err) - os.Exit(1) + return 0, fmt.Errorf("reading %s: %w", e.Name(), err) } var svc Service if err := json.Unmarshal(d, &svc); err != nil { - fmt.Fprintf(os.Stderr, "error parsing %s: %v\n", e.Name(), err) - os.Exit(1) + return 0, fmt.Errorf("parsing %s: %w", e.Name(), err) } serviceID := strings.TrimSuffix(e.Name(), ".json") + numericID, ok := serviceIDs[serviceID] + if !ok { + numericID = nextServiceID + serviceIDs[serviceID] = numericID + nextServiceID++ + fmt.Printf("assigned new service id %d -> %s\n", numericID, serviceID) + } if _, ok := groups[svc.Group]; !ok { - fmt.Fprintf(os.Stderr, "unknown group %q in %s\n", svc.Group, e.Name()) - os.Exit(1) + return 0, fmt.Errorf("unknown group %q in %s", svc.Group, e.Name()) } - compiled.Services[serviceID] = svc - fmt.Printf("compiled: %s -> %s\n", serviceID, svc.Group) + svc.ID = numericID + dst[serviceID] = svc + fmt.Printf("compiled service: %s -> %s (id=%d)\n", serviceID, svc.Group, svc.ID) } - fmt.Printf("found %d service files\n", cnt) + fmt.Printf("found %d service files\n", count) + return count, nil +} - out, err := json.MarshalIndent(compiled, "", " ") +func compileCountries(dir string, countryIDs map[string]int, nextCountryID int, dst map[string]Country) (int, error) { + entries, err := os.ReadDir(dir) if err != nil { - fmt.Fprintf(os.Stderr, "error marshaling output: %v\n", err) - os.Exit(1) + return 0, err } - if err := os.WriteFile("services.json", out, 0644); err != nil { - fmt.Fprintf(os.Stderr, "error writing services.json: %v\n", err) - os.Exit(1) + var count int + for _, e := range entries { + if e.IsDir() || !strings.HasSuffix(e.Name(), ".json") { + continue + } + count++ + + d, err := os.ReadFile(filepath.Join(dir, e.Name())) + if err != nil { + return 0, fmt.Errorf("reading %s: %w", e.Name(), err) + } + + var def CountryDefinition + if err := json.Unmarshal(d, &def); err != nil { + return 0, fmt.Errorf("parsing %s: %w", e.Name(), err) + } + + countryCode := strings.ToUpper(strings.TrimSuffix(e.Name(), ".json")) + numericID, ok := countryIDs[countryCode] + if !ok { + numericID = nextCountryID + countryIDs[countryCode] = numericID + nextCountryID++ + fmt.Printf("assigned new country id %d -> %s\n", numericID, countryCode) + } + + dst[countryCode] = Country{ + ID: numericID, + Code: countryCode, + Name: def.Name, + } + fmt.Printf("compiled country: %s (id=%d)\n", countryCode, numericID) } - fmt.Printf("successfully compiled %d services in %d groups to services.json\n", cnt, len(compiled.Groups)) + fmt.Printf("found %d country files\n", count) + return count, nil } func loadGroups(path string) (map[string]Description, error) { @@ -103,3 +217,99 @@ func loadGroups(path string) (map[string]Description, error) { return g, nil } + +func loadStableIDs(path, legacyServicesPath, legacyCountriesPath string) (StableIDs, error) { + d, err := os.ReadFile(path) + if err != nil { + if os.IsNotExist(err) { + return loadLegacyStableIDs(legacyServicesPath, legacyCountriesPath) + } + return StableIDs{}, err + } + + var ids StableIDs + if err := json.Unmarshal(d, &ids); err != nil { + return StableIDs{}, err + } + + ensureStableIDMaps(&ids) + + return ids, nil +} + +func loadLegacyStableIDs(servicesPath, countriesPath string) (StableIDs, error) { + serviceIDs, err := loadLegacyStableIDMap(servicesPath) + if err != nil { + return StableIDs{}, err + } + + countryIDs, err := loadLegacyStableIDMap(countriesPath) + if err != nil { + return StableIDs{}, err + } + + return StableIDs{ + Services: serviceIDs, + Countries: countryIDs, + }, nil +} + +func loadLegacyStableIDMap(path string) (map[string]int, error) { + d, err := os.ReadFile(path) + if err != nil { + if os.IsNotExist(err) { + return make(map[string]int), nil + } + return nil, err + } + + var ids map[string]int + if err := json.Unmarshal(d, &ids); err != nil { + return nil, err + } + + if ids == nil { + ids = make(map[string]int) + } + + return ids, nil +} + +func ensureStableIDMaps(ids *StableIDs) { + if ids.Services == nil { + ids.Services = make(map[string]int) + } + if ids.Countries == nil { + ids.Countries = make(map[string]int) + } +} + +func nextAvailableID(ids map[string]int) (int, error) { + maxID := 0 + seen := make(map[int]string, len(ids)) + + for serviceKey, id := range ids { + if id <= 0 { + return 0, fmt.Errorf("service %q has invalid id %d", serviceKey, id) + } + if existingService, ok := seen[id]; ok { + return 0, fmt.Errorf("duplicate id %d for services %q and %q", id, existingService, serviceKey) + } + seen[id] = serviceKey + if id > maxID { + maxID = id + } + } + + return maxID + 1, nil +} + +func writeJSONFile(path string, value any) error { + out, err := json.MarshalIndent(value, "", " ") + if err != nil { + return err + } + + out = append(out, '\n') + return os.WriteFile(path, out, 0644) +} diff --git a/schemas/countries.schema.json b/schemas/countries.schema.json new file mode 100644 index 0000000..7c1b1af --- /dev/null +++ b/schemas/countries.schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "name": { + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English country name" + }, + "de": { + "type": "string", + "description": "The German country name" + } + }, + "required": ["en", "de"], + "additionalProperties": false + } + }, + "required": ["name"], + "additionalProperties": false +} diff --git a/schema.json b/schemas/services.schema.json similarity index 78% rename from schema.json rename to schemas/services.schema.json index d4bc891..326178a 100644 --- a/schema.json +++ b/schemas/services.schema.json @@ -22,10 +22,7 @@ "description": "The German description of the service" } }, - "required": [ - "en", - "de" - ] + "required": ["en", "de"] }, "domains": { "type": "array", @@ -43,28 +40,17 @@ } } }, - "required": [ - "name", - "group", - "description" - ], + "required": ["name", "group", "description"], "anyOf": [ { - "required": [ - "domains" - ] + "required": ["domains"] }, { - "required": [ - "patterns" - ] + "required": ["patterns"] }, { - "required": [ - "domains", - "patterns" - ] + "required": ["domains", "patterns"] } ], "additionalProperties": false -} \ No newline at end of file +}