diff --git a/.docker/docker-compose/docker-compose-old.yml b/.docker/docker-compose/docker-compose-old.yml deleted file mode 100644 index 903b92dac..000000000 --- a/.docker/docker-compose/docker-compose-old.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: "2" -services: - mongodb: - image: mongo - ports: - - "11000:27017" - mysql: - image: registry.gitlab.com/printshopcreator/docker/docker_mysql:latest - ports: - - "11001:3306" - environment: - - MYSQL_ROOT_PASSWORD=Wichtig1 - - MYSQL_DATABASE=psc - cron: - image: registry.gitlab.com/printshopcreator/docker/docker_cron:php7 - environment: - - SYMFONY_DECRYPTION_SECRET=ZfzbggHk012ImxwsovgF0iLkJf7pUJlMJ+uBLNTHFxbwz0iwe7STUJhAyULlDSv9unBVXfPW3DFf/VuVw6vPCQ==% - volumes: - - .:/data/www/old - - .:/data/www/new - links: - - mysql:mysql - - mongodb:mongodb - php: - image: registry.gitlab.com/printshopcreator/docker/docker_php:php7 - environment: - - ftpUsername=papedruck - - ftpPassword=27JSdjs62Jhs - - ftpHost=157.90.18.62 - - ftpPort=20000 - - ftpIp=157.90.18.62 - - SYMFONY_DECRYPTION_SECRET=ZfzbggHk012ImxwsovgF0iLkJf7pUJlMJ+uBLNTHFxbwz0iwe7STUJhAyULlDSv9unBVXfPW3DFf/VuVw6vPCQ==% - links: - - mysql:mysql - - mongodb:mongodb - volumes: - - ./psc-source-v1:/data/www/old - - ./psc-source-v2:/data/www/new - tp: - image: registry.gitlab.com/printshopcreator/docker/docker_tp:v21x1x1 - web: - image: registry.gitlab.com/printshopcreator/docker/docker_web:php7_tp - ports: - - "8001:80" - volumes: - - ./psc-source-v1:/data/www/old - - ./psc-source-v2:/data/www/new diff --git a/.docker/docker-compose/docker-compose.local.ci.prod.yml b/.docker/docker-compose/docker-compose.local.ci.prod.yml new file mode 100644 index 000000000..55cf0f581 --- /dev/null +++ b/.docker/docker-compose/docker-compose.local.ci.prod.yml @@ -0,0 +1,12 @@ +version: '3.7' + +services: + application: + image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?} + build: + context: ../ + dockerfile: ./images/php/application/Dockerfile + target: ${ENV?} + args: + - BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?} + - ENV=${ENV?} diff --git a/.docker/docker-compose/docker-compose.local.ci.yml b/.docker/docker-compose/docker-compose.local.ci.yml new file mode 100644 index 000000000..2a6250aad --- /dev/null +++ b/.docker/docker-compose/docker-compose.local.ci.yml @@ -0,0 +1,3 @@ +version: '3.7' + + diff --git a/.docker/docker-compose/docker-compose.yml b/.docker/docker-compose/docker-compose.local.prod.yml similarity index 85% rename from .docker/docker-compose/docker-compose.yml rename to .docker/docker-compose/docker-compose.local.prod.yml index 28527a837..ad6865403 100644 --- a/.docker/docker-compose/docker-compose.yml +++ b/.docker/docker-compose/docker-compose.local.prod.yml @@ -1,31 +1,31 @@ -version: '3.7' - -services: - php-fpm: - image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-fpm-${ENV?}:${TAG?} - build: - context: ../ - dockerfile: ./images/php/fpm/Dockerfile - target: ${ENV?} - args: - - BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?} - - TARGET_PHP_VERSION=${PHP_VERSION?} - - php-cron: - image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-cron-${ENV?}:${TAG?} - build: - context: ../ - dockerfile: ./images/php/cron/Dockerfile - target: ${ENV?} - args: - - BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?} - - web: - image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/web-${ENV?}:${TAG?} - build: - context: ../ - dockerfile: ./images/nginx/Dockerfile - target: ${ENV?} - args: - - NGINX_VERSION=${NGINX_VERSION?} +version: '3.7' + +services: + php-fpm: + image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-fpm-${ENV?}:${TAG?} + build: + context: ../ + dockerfile: ./images/php/fpm/Dockerfile + target: ${ENV?} + args: + - BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?} + - TARGET_PHP_VERSION=${PHP_VERSION?} + php-cron: + image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-cron-${ENV?}:${TAG?} + build: + context: ../ + dockerfile: ./images/php/cron/Dockerfile + target: ${ENV?} + args: + - BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?} + - TARGET_PHP_VERSION=${PHP_VERSION?} + + web: + image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/web-${ENV?}:${TAG?} + build: + context: ../../ + dockerfile: ./.docker/images/nginx/Dockerfile + target: ${ENV?} + args: + - NGINX_VERSION=${NGINX_VERSION?} - APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?} \ No newline at end of file diff --git a/.docker/docker-compose/docker-compose.local.yml b/.docker/docker-compose/docker-compose.local.yml index 047bc5543..faada089b 100644 --- a/.docker/docker-compose/docker-compose.local.yml +++ b/.docker/docker-compose/docker-compose.local.yml @@ -103,7 +103,7 @@ services: - TZ=${TIMEZONE:-UTC} volumes: - mysql:/var/lib/mysql - command: mysqld --sql_mode="ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" --character-set-server=utf8 --collation-server=utf8_slovenian_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0 + command: mysqld --sql_mode="ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" --character-set-server=utf8 --collation-server=utf8_slovenian_ci --innodb-flush-log-at-trx-commit=0 networks: - network ports: diff --git a/.docker/images/nginx/Dockerfile b/.docker/images/nginx/Dockerfile index 0d86a035c..8a6491585 100644 --- a/.docker/images/nginx/Dockerfile +++ b/.docker/images/nginx/Dockerfile @@ -1,10 +1,15 @@ ARG NGINX_VERSION FROM nginx:${NGINX_VERSION} as base -COPY --chown=nginx:nginx ./images/nginx/conf.d/default.conf /etc/nginx/conf.d +COPY --chown=nginx:nginx ./.docker/images/nginx/conf.d/default.conf /etc/nginx/conf.d ARG APP_CODE_PATH RUN sed -i "s#__NGINX_ROOT_NEW;#$APP_CODE_PATH/new/web;#" /etc/nginx/conf.d/default.conf RUN sed -i "s#__NGINX_ROOT_OLD;#$APP_CODE_PATH/old/public;#" /etc/nginx/conf.d/default.conf -FROM base as local +FROM base as prod + +COPY ./src/old/public /data/www/old/public +COPY ./src/new/web /data/www/new/web + +FROM base as local \ No newline at end of file diff --git a/.docker/images/nginx/conf.d/default.conf b/.docker/images/nginx/conf.d/default.conf index eee84b9fe..63097a280 100644 --- a/.docker/images/nginx/conf.d/default.conf +++ b/.docker/images/nginx/conf.d/default.conf @@ -59,10 +59,10 @@ server { try_files $uri @sfFront; } - #location /w2p/ { - # proxy_pass http://tp:8080/w2p/; - # proxy_temp_path /tmp/proxy; - #} + location /w2p/ { + proxy_pass http://tp:8080/w2p/; + proxy_temp_path /tmp/proxy; + } location @sfFront { # Symfony if ($request_method = 'OPTIONS') { diff --git a/.docker/images/php/application/Dockerfile b/.docker/images/php/application/Dockerfile index 7ba863b82..1c2f0eb3c 100644 --- a/.docker/images/php/application/Dockerfile +++ b/.docker/images/php/application/Dockerfile @@ -1,6 +1,9 @@ ARG BASE_IMAGE FROM ${BASE_IMAGE} as base +RUN apt update && apt install -y \ + sqlite3 + FROM base as prod USER $APP_USER_NAME @@ -11,9 +14,6 @@ USER $APP_USER_NAME FROM base as local -#RUN apt install -y \ -# openssh-server -# #ARG APP_SSH_PASSWORD #RUN echo "$APP_USER_NAME:$APP_SSH_PASSWORD" | chpasswd 2>&1 # diff --git a/.docker/images/php/base/Dockerfile b/.docker/images/php/base/Dockerfile index 6f567b4c3..0b41e93b4 100644 --- a/.docker/images/php/base/Dockerfile +++ b/.docker/images/php/base/Dockerfile @@ -26,21 +26,13 @@ RUN addgroup -gid $APP_GROUP_ID $APP_GROUP_NAME && \ mkdir -p $APP_CODE_PATH && \ chown $APP_USER_NAME: $APP_CODE_PATH -# install git-secret -# @see https://git-secret.io/installation#alpine ADD https://gitsecret.jfrog.io/artifactory/api/security/keypair/public/repositories/git-secret-apk /etc/apk/keys/git-secret-apk.rsa.pub -# FYI, we are NOT using a cache mount to store the apk cache via -# RUN --mount=type=cache,target=/var/cache/apk ln -vs /var/cache/apk /etc/apk/cache && \ -# @see https://github.com/FernandoMiguel/BuildKit#new-dockerfile -# @see https://wiki.alpinelinux.org/wiki/Local_APK_cache#Enabling_Local_Cache_on_HDD_installs -# because we run --update anyways to get the latest files RUN apt update && \ apt install -y \ bash \ git \ git-secret \ - # required for git-secret gawk \ gnupg \ make \ @@ -103,6 +95,8 @@ RUN docker-php-ext-install -j$(nproc) ldap RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \ docker-php-ext-install -j$(nproc) imap +COPY ./.docker/images/php/base/pdf/php_pdflib.so /pdflib.so + # make bash default shell RUN sed -e 's;/bin/ash$;/bin/bash;g' -i /etc/passwd @@ -114,20 +108,6 @@ COPY ./.docker/images/php/base/.bashrc /root/.bashrc COPY --from=composer /usr/bin/composer /usr/local/bin/composer -# Fix git permission issue: -# `git` introduced a security feature to throw an error if the parent directory -# of the `.git` directory is owned by another user. -# @see https://github.blog/2022-04-12-git-security-vulnerability-announced/ -# @see https://github.com/actions/checkout/issues/760 -# -# Since we might not have full control over the owner -# ( see e.g. https://github.com/docker/for-win/issues/12742 ) -# we will add the $APP_CODE_PATH as a "safe" directory to the global git config via -# git config --system --add safe.directory "/path/to/git/parent/folder" -# @see https://git-scm.com/docs/git-config/2.36.0#Documentation/git-config.txt-safedirectory -# -# Without this fix, git-secret will emit the error -# git-secret: abort: not in dir with git repo. Use 'git init' or 'git clone', then in repo use 'git secret init' RUN git config --system --add safe.directory "$APP_CODE_PATH" WORKDIR $APP_CODE_PATH @@ -136,19 +116,13 @@ FROM base as codebase # By only copying the composer files required to run composer install # the layer will be cached and only invalidated when the composer dependencies are changed -COPY ./new/composer.json /dependencies/new/ -COPY ./new/composer.lock /dependencies/new/ +COPY ./src/new/composer.json /dependencies/new/ +COPY ./src/new/composer.lock /dependencies/new/ # use a cache mount to cache the composer dependencies # this is essentially a cache that lives in Docker BuildKit (i.e. has nothing to do with the host system) RUN --mount=type=cache,target=/tmp/.composer \ cd /dependencies/new && \ - # COMPOSER_HOME=/tmp/.composer sets the home directory of composer that - # also controls where composer looks for the cache - # so we don't have to download dependencies again (if they are cached) - # @see https://stackoverflow.com/a/60518444 for the correct if-then-else syntax: - # - end all commands with ; \ - # - except THEN and ELSE if [ "$ENV" == "prod" ] ; \ then \ # on production, we don't want test dependencies @@ -158,10 +132,10 @@ RUN --mount=type=cache,target=/tmp/.composer \ fi # copy the full codebase -COPY . /codebase +COPY ./src/ /codebase # move the dependencies -RUN mv /dependencies/vendor /codebase/new/vendor +RUN mv /dependencies/new/vendor /codebase/new/vendor # remove files we don't require in the image to keep the image size small RUN cd /codebase && \ @@ -172,46 +146,10 @@ RUN cd /codebase && \ rm -rf tests/; \ fi -# Remove all secrets that are NOT required for the given ENV: -# `find /codebase/.secrets -type f -print` lists all files in the .secrets directory -# `grep -v "/\(shared\|$ENV\)/"` matches only the files that are NOT in the shared/ or $ENV/ (e.g. prod/) directories -# `grep -v ".secret\$"` ensures that we remove all files that are NOT ending in .secret -# FYI: -# the "$" has to be escaped with a "\" -# "Escaping is possible by adding a \ before the variable" -# @see https://docs.docker.com/engine/reference/builder/#environment-replacement -# `xargs rm -f` retrieves the remaining file and deletes them -# FYI: -# `xargs` is necessary to convert the stdin to args for `rm` -# @see https://stackoverflow.com/a/20307392/413531 -# the `-f` flag is required so that `rm` doesn't fail if no files are matched -RUN find /codebase/.secrets -type f -print | grep -v "/\(shared\|$ENV\)/" | xargs rm -f && \ - find /codebase/.secrets -type f -print | grep -v ".secret\$" | xargs rm -f && \ - # list the remaining files for debugging purposes - find /codebase/.secrets -type f -print - -# We need a git repository for git-secret to work (can be an empty one) -RUN cd /codebase && \ - git init - FROM base as prod -# We will use a custom ENTRYPOINT to decrypt the secrets when the container starts. -# This way, we can store the secrets in their encrypted form directly in the image. -# Note: Because we defined a custom ENTRYPOINT, the default CMD of the base image -# will be overriden. Thus, we must explicitly re-define it here via `CMD ["/bin/sh"]`. -# This behavior is described in the docs as: -# "If CMD is defined from the base image, setting ENTRYPOINT will reset CMD to an empty value. In this scenario, CMD must be defined in the current image to have a value." -# @see https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact -COPY ./.docker/images/php/base/decrypt-secrets.sh /decrypt-secrets.sh -RUN chmod +x /decrypt-secrets.sh -CMD ["/bin/sh"] -ENTRYPOINT ["/decrypt-secrets.sh"] - COPY --from=codebase --chown=$APP_USER_NAME:$APP_GROUP_NAME /codebase $APP_CODE_PATH -COPY --chown=$APP_USER_NAME:$APP_GROUP_NAME ./.build/build-info $APP_CODE_PATH/build-info - FROM base as ci COPY --from=codebase --chown=$APP_USER_NAME:$APP_GROUP_NAME /codebase $APP_CODE_PATH diff --git a/.docker/images/php/base/conf.d/zz-app-local.ini b/.docker/images/php/base/conf.d/zz-app-local.ini index 1a6e8c513..5739ce850 100644 --- a/.docker/images/php/base/conf.d/zz-app-local.ini +++ b/.docker/images/php/base/conf.d/zz-app-local.ini @@ -8,7 +8,7 @@ zend.assertions = 1 ; Note: display_error=1 -error_reporting=E_ALL +error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED zend_extension=xdebug xdebug.client_host=host.docker.internal xdebug.start_with_request=yes diff --git a/.docker/images/php/base/conf.d/zz-app-prod.ini b/.docker/images/php/base/conf.d/zz-app-prod.ini index c8662e171..4d9c8fca2 100644 --- a/.docker/images/php/base/conf.d/zz-app-prod.ini +++ b/.docker/images/php/base/conf.d/zz-app-prod.ini @@ -4,3 +4,6 @@ opcache.revalidate_freq = "0" ; enable assert() statements for development assert.exception = 1 zend.assertions = 1 + +display_error=0 +error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED \ No newline at end of file diff --git a/.docker/images/php/base/conf.d/zz-app.ini b/.docker/images/php/base/conf.d/zz-app.ini index c6abc1ccb..1ff3af068 100644 --- a/.docker/images/php/base/conf.d/zz-app.ini +++ b/.docker/images/php/base/conf.d/zz-app.ini @@ -11,3 +11,4 @@ opcache.interned_strings_buffer=12 memory_limit = -1 disable_functions = +extension=/pdflib.so \ No newline at end of file diff --git a/.docker/images/php/base/pdf/php_pdflib.so b/.docker/images/php/base/pdf/php_pdflib.so new file mode 100644 index 000000000..f1f791dd2 Binary files /dev/null and b/.docker/images/php/base/pdf/php_pdflib.so differ diff --git a/.docker/images/php/cron/Dockerfile b/.docker/images/php/cron/Dockerfile index 7038979fb..3dabcb961 100644 --- a/.docker/images/php/cron/Dockerfile +++ b/.docker/images/php/cron/Dockerfile @@ -11,7 +11,7 @@ RUN sed -i '/imklog/s/^/#/' /etc/rsyslog.conf FROM base as prod -USER $APP_USER_NAME +CMD ["/usr/bin/set-env.sh"] FROM base as ci diff --git a/.docker/images/php/cron/bin/start-cron.sh b/.docker/images/php/cron/bin/start-cron.sh index ad7cf1ea0..acceae769 100644 --- a/.docker/images/php/cron/bin/start-cron.sh +++ b/.docker/images/php/cron/bin/start-cron.sh @@ -3,6 +3,9 @@ rsyslogd cron touch /var/log/cron.log +chmod -R 0777 /var/log/cron.log +rm /data/www/new/var/cache/* +rm /data/www/new/var/log/* chmod -R 0777 /data/www/new/var/cache chmod -R 0777 /data/www/new/var/log tail -F /var/log/syslog /var/log/cron.log diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..d02f1dd72 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +**/.git +**/node_modules +**/.env.local +**/.env.test +**/var/log/* +**/var/cache/* +src/old/logs/* +src/old/cache/* \ No newline at end of file diff --git a/.make/01-application-setup.mk b/.make/01-application-setup.mk index 65e911023..ee02fe01f 100644 --- a/.make/01-application-setup.mk +++ b/.make/01-application-setup.mk @@ -16,7 +16,3 @@ setup-db: ## Setup the DB tables composer: ## Run composer commands. Specify the command e.g. via ARGS="install" $(EXECUTE_IN_APPLICATION_CONTAINER) composer $(ARGS); -.PHONY: phpunit -phpunit: ## Run PHPUNIT - $(EXECUTE_IN_APPLICATION_CONTAINER) /data/www/new/vendor/bin/phpunit; - diff --git a/.make/02-application-commands.mk b/.make/02-application-commands.mk index 21929a727..fb6e09802 100644 --- a/.make/02-application-commands.mk +++ b/.make/02-application-commands.mk @@ -24,8 +24,8 @@ copy-in-mysql: ## Execute a command in a container. E.g. via "make execute-in-co .PHONY: enable-xdebug enable-xdebug: ## Enable xdebug in the given container specified by "DOCKER_SERVICE_NAME". E.g. "make enable-xdebug DOCKER_SERVICE_NAME=php-fpm" - "$(MAKE)" execute-in-container APP_USER_NAME="root" DOCKER_SERVICE_NAME=$(DOCKER_SERVICE_NAME) COMMAND="sed -i 's/.*zend_extension=xdebug/zend_extension=xdebug/' '/etc/php8/conf.d/zz-app-local.ini'" + "$(MAKE)" execute-in-container APP_USER_NAME="root" DOCKER_SERVICE_NAME=$(DOCKER_SERVICE_NAME) COMMAND="sed -i 's/.*zend_extension=xdebug/zend_extension=xdebug/' '/usr/local/etc/php/conf.d/zz-ppp-local.ini'" .PHONY: disable-xdebug disable-xdebug: ## Disable xdebug in the given container specified by "DOCKER_SERVICE_NAME". E.g. "make disable-xdebug DOCKER_SERVICE_NAME=php-fpm" - "$(MAKE)" execute-in-container APP_USER_NAME="root" DOCKER_SERVICE_NAME=$(DOCKER_SERVICE_NAME) COMMAND="sed -i 's/.*zend_extension=xdebug/;zend_extension=xdebug/' '/etc/php8/conf.d/zz-app-local.ini'" + "$(MAKE)" execute-in-container APP_USER_NAME="root" DOCKER_SERVICE_NAME=$(DOCKER_SERVICE_NAME) COMMAND="sed -i 's/.*zend_extension=xdebug/;zend_extension=xdebug/' '/usr/local/etc/php/conf.d/zz-ppp-local.ini'" diff --git a/.make/03-application-qa.mk b/.make/03-application-qa.mk index 938e04f79..5fe21677d 100644 --- a/.make/03-application-qa.mk +++ b/.make/03-application-qa.mk @@ -17,7 +17,7 @@ NO_COLOR:=\033[0m # Tool CLI config PHPUNIT_CMD=php vendor/bin/phpunit -PHPUNIT_ARGS= -c phpunit.xml +PHPUNIT_ARGS= PHPUNIT_FILES= PHPSTAN_CMD=php -d xdebug.mode=off -d memory_limit=-1 vendor/bin/phpstan analyse PHPSTAN_ARGS=--level=9 @@ -50,11 +50,11 @@ endif # any errors that occured. define execute if [ "$(NO_PROGRESS)" = "false" ]; then \ - eval "$(EXECUTE_IN_APPLICATION_CONTAINER) bash -c 'cd new && $(1) $(2) $(3) $(4)'"; \ + eval "$(EXECUTE_IN_APPLICATION_CONTAINER) $(1) $(2) $(3) $(4)"; \ else \ START=$$(date +%s); \ printf "%-35s" "$@"; \ - if OUTPUT=$$(eval "$(EXECUTE_IN_APPLICATION_CONTAINER) bash -c 'cd new && $(1) $(2) $(3) $(4)'" 2>&1); then \ + if OUTPUT=$$(eval "$(EXECUTE_IN_APPLICATION_CONTAINER) $(1) $(2) $(3) $(4)" 2>&1); then \ printf " $(GREEN)%-6s$(NO_COLOR)" "done"; \ END=$$(date +%s); \ RUNTIME=$$((END-START)) ;\ diff --git a/.make/04-docker.mk b/.make/04-docker.mk index a5e1c8c06..ffab16325 100644 --- a/.make/04-docker.mk +++ b/.make/04-docker.mk @@ -1,8 +1,3 @@ -# For local builds we always want to use "latest" as tag per default -ifeq ($(ENV),local) - TAG:=latest -endif - # Enable buildkit for docker and docker-compose by default for every environment. # For specific environments (e.g. MacBook with Apple Silicon M1 CPU) it should be turned off to work stable # - this can be done in the .make/.env file @@ -12,16 +7,6 @@ DOCKER_BUILDKIT?=1 export COMPOSE_DOCKER_CLI_BUILD export DOCKER_BUILDKIT -# Container names -## must match the names used in the docker-composer.yml files -DOCKER_SERVICE_NAME_WEB:=web -DOCKER_SERVICE_NAME_PHP_BASE:=php-base -DOCKER_SERVICE_NAME_PHP_FPM:=php-fpm -DOCKER_SERVICE_NAME_PHP_CRON:=cron -DOCKER_SERVICE_NAME_PHP_MYSQL:=mysql -DOCKER_SERVICE_NAME_PHP_MONGODB:=mongodb -DOCKER_SERVICE_NAME_APPLICATION:=application - # FYI: # Naming convention for images is $(DOCKER_REGISTRY)/$(DOCKER_NAMESPACE)/$(DOCKER_SERVICE_NAME)-$(ENV) # e.g. docker.io/dofroscra/nginx-local @@ -33,40 +18,46 @@ DOCKER_SERVICE_NAME_APPLICATION:=application DOCKER_DIR:=./.docker DOCKER_ENV_FILE:=$(DOCKER_DIR)/.env DOCKER_COMPOSE_DIR:=$(DOCKER_DIR)/docker-compose -DOCKER_COMPOSE_FILE:=$(DOCKER_COMPOSE_DIR)/docker-compose.yml +DOCKER_COMPOSE_FILE_LOCAL_CI_PROD:=$(DOCKER_COMPOSE_DIR)/docker-compose.local.ci.prod.yml +DOCKER_COMPOSE_FILE_LOCAL_CI:=$(DOCKER_COMPOSE_DIR)/docker-compose.local.ci.yml +DOCKER_COMPOSE_FILE_LOCAL_PROD:=$(DOCKER_COMPOSE_DIR)/docker-compose.local.prod.yml DOCKER_COMPOSE_FILE_LOCAL:=$(DOCKER_COMPOSE_DIR)/docker-compose.local.yml +DOCKER_COMPOSE_FILE_CI:=$(DOCKER_COMPOSE_DIR)/docker-compose.ci.yml DOCKER_COMPOSE_FILE_PHP_BASE:=$(DOCKER_COMPOSE_DIR)/docker-compose-php-base.yml -DOCKER_COMPOSE_PROJECT_NAME:=tp_$(ENV) +DOCKER_COMPOSE_PROJECT_NAME:=psc_$(ENV) -# we need a couple of environment variables for docker-compose so we define a make-variable that we can -# then reference later in the Makefile without having to repeat all the environment variables -DOCKER_COMPOSE_COMMAND:=ENV=$(ENV) \ +# We need to "assemble" the correct combination of docker-compose.yml config files +DOCKER_COMPOSE_FILES:= +ifeq ($(ENV),prod) + DOCKER_COMPOSE_FILES:=-f $(DOCKER_COMPOSE_FILE_LOCAL_CI_PROD) -f $(DOCKER_COMPOSE_FILE_LOCAL_PROD) +else ifeq ($(ENV),ci) + DOCKER_COMPOSE_FILES:=-f $(DOCKER_COMPOSE_FILE_LOCAL_CI_PROD) -f $(DOCKER_COMPOSE_FILE_LOCAL_CI) -f $(DOCKER_COMPOSE_FILE_CI) +else ifeq ($(ENV),local) + DOCKER_COMPOSE_FILES:=-f $(DOCKER_COMPOSE_FILE_LOCAL_CI_PROD) -f $(DOCKER_COMPOSE_FILE_LOCAL_CI) -f $(DOCKER_COMPOSE_FILE_LOCAL_PROD) -f $(DOCKER_COMPOSE_FILE_LOCAL) +endif + +# We need a couple of environment variables for docker compose so we define a make variable that we can +# then reference later in the Makefile without having to repeat all the environment variables every time +# @see https://www.pascallandau.com/blog/docker-from-scratch-for-php-applications-in-2022/#make-docker-3 +DOCKER_COMPOSE_COMMAND:= \ + ENV=$(ENV) \ TAG=$(TAG) \ DOCKER_REGISTRY=$(DOCKER_REGISTRY) \ DOCKER_NAMESPACE=$(DOCKER_NAMESPACE) \ APP_USER_ID=$(APP_USER_ID) \ APP_GROUP_ID=$(APP_GROUP_ID) \ APP_USER_NAME=$(APP_USER_NAME) \ + APP_CODE_PATH_CONTAINER=$(APP_CODE_PATH_CONTAINER) \ docker compose -p $(DOCKER_COMPOSE_PROJECT_NAME) --env-file $(DOCKER_ENV_FILE) -DOCKER_COMPOSE:=$(DOCKER_COMPOSE_COMMAND) -f $(DOCKER_COMPOSE_FILE) -f $(DOCKER_COMPOSE_FILE_LOCAL) +DOCKER_COMPOSE:=$(DOCKER_COMPOSE_COMMAND) $(DOCKER_COMPOSE_FILES) DOCKER_COMPOSE_PHP_BASE:=$(DOCKER_COMPOSE_COMMAND) -f $(DOCKER_COMPOSE_FILE_PHP_BASE) EXECUTE_IN_ANY_CONTAINER?= EXECUTE_IN_CRON_CONTAINER?= EXECUTE_IN_APPLICATION_CONTAINER?= -EXECUTE_IN_MONGODB_CONTAINER?= -EXECUTE_IN_mYSQL_CONTAINER?= - -COPY_IN_ANY_CONTAINER?= -COPY_IN_CRON_CONTAINER?= -COPY_IN_APPLICATION_CONTAINER?= -COPY_IN_MONGODB_CONTAINER?= -COPY_IN_mYSQL_CONTAINER?= DOCKER_SERVICE_NAME?= -FROM?= -TO?= # we can pass EXECUTE_IN_CONTAINER=true to a make invocation in order to execute the target in a docker container. # Caution: this only works if the command in the target is prefixed with a $(EXECUTE_IN_*_CONTAINER) variable. @@ -83,62 +74,153 @@ ifndef EXECUTE_IN_CONTAINER endif endif ifeq ($(EXECUTE_IN_CONTAINER),true) - EXECUTE_IN_ANY_CONTAINER:=$(DOCKER_COMPOSE) exec -T --user $(APP_USER_NAME) $(DOCKER_SERVICE_NAME) - EXECUTE_IN_APPLICATION_CONTAINER:=$(DOCKER_COMPOSE) exec -w /data/www/new -T --user $(APP_USER_NAME) $(DOCKER_SERVICE_NAME_APPLICATION) - EXECUTE_IN_CRON_CONTAINER:=$(DOCKER_COMPOSE) exec -T --user $(APP_USER_NAME) $(DOCKER_SERVICE_NAME_PHP_CRON) - EXECUTE_IN_MYSQL_CONTAINER:=$(DOCKER_COMPOSE) exec -T $(DOCKER_SERVICE_NAME_PHP_MYSQL) - EXECUTE_IN_MONGODB_CONTAINER:=$(DOCKER_COMPOSE) exec -T $(DOCKER_SERVICE_NAME_PHP_MONGODB) - - COPY_IN_ANY_CONTAINER:=$(DOCKER_COMPOSE) cp $(FROM) $(DOCKER_SERVICE_NAME):$(TO) - COPY_IN_APPLICATION_CONTAINER:=$(DOCKER_COMPOSE) cp $(FROM) $(DOCKER_SERVICE_NAME_APPLICATION):$(TO) - COPY_IN_CRON_CONTAINER:=$(DOCKER_COMPOSE) cp $(FROM) $(DOCKER_SERVICE_NAME_PHP_CRON):$(TO) - COPY_IN_MYSQL_CONTAINER:=$(DOCKER_COMPOSE) cp $(FROM) $(DOCKER_SERVICE_NAME_PHP_MYSQL):$(TO) - COPY_IN_MONGODB_CONTAINER:=$(DOCKER_COMPOSE) cp $(FROM) $(DOCKER_SERVICE_NAME_PHP_MONGODB):$(TO) + EXECUTE_IN_ANY_CONTAINER:=$(DOCKER_COMPOSE) exec $(DOCKER_COMPOSE_EXEC_OPTIONS) --user $(APP_USER_NAME) $(DOCKER_SERVICE_NAME) + EXECUTE_IN_APPLICATION_CONTAINER:=$(DOCKER_COMPOSE) exec $(DOCKER_COMPOSE_EXEC_OPTIONS) --user $(APP_USER_NAME) -w /data/www/new $(DOCKER_SERVICE_NAME_APPLICATION) + EXECUTE_IN_CRON_CONTAINER:=$(DOCKER_COMPOSE) exec $(DOCKER_COMPOSE_EXEC_OPTIONS) --user $(APP_USER_NAME) $(DOCKER_SERVICE_NAME_PHP_CRON) endif -##@ [Docker] +##@ [Docker compose] .PHONY: docker-clean -docker-clean: ## Remove the .env file for docker - @rm -f $(DOCKER_ENV_FILE) - -.PHONY: validate-docker-variables -validate-docker-variables: .docker/.env - @$(if $(TAG),,$(error TAG is undefined)) - @$(if $(ENV),,$(error ENV is undefined)) - @$(if $(DOCKER_REGISTRY),,$(error DOCKER_REGISTRY is undefined - Did you run make-init?)) - @$(if $(DOCKER_NAMESPACE),,$(error DOCKER_NAMESPACE is undefined - Did you run make-init?)) - @$(if $(APP_USER_ID),,$(error APP_USER_ID is undefined - Did you run make-init?)) - @$(if $(APP_GROUP_ID),,$(error APP_GROUP_ID is undefined - Did you run make-init?)) - @$(if $(APP_USER_NAME),,$(error APP_USER_NAME is undefined - Did you run make-init?)) - -.docker/.env: +.PHONY: docker-compose-init +docker-compose-init: ## Initialize the .env file for docker compose @cp $(DOCKER_ENV_FILE).example $(DOCKER_ENV_FILE) -.PHONY:docker-build-image -docker-build-image: validate-docker-variables ## Build all docker images OR a specific image by providing the service name via: make docker-build DOCKER_SERVICE_NAME= - $(DOCKER_COMPOSE) build $(DOCKER_SERVICE_NAME) +.PHONY: docker-compose-clean +docker-compose-clean: ## Remove the .env file for docker compose + @rm -f $(DOCKER_ENV_FILE) -.PHONY: docker-build-php -docker-build-php: validate-docker-variables ## Build the php base image - $(DOCKER_COMPOSE_PHP_BASE) build $(DOCKER_SERVICE_NAME_PHP_BASE) +.PHONY: validate-docker-compose-variables +validate-docker-compose-variables: validate-docker-variables + @$(if $(APP_USER_NAME),,$(error APP_USER_NAME is undefined)) + @$(if $(APP_USER_ID),,$(error APP_USER_ID is undefined)) + @$(if $(APP_GROUP_ID),,$(error APP_GROUP_ID is undefined)) -.PHONY: docker-build -docker-build: docker-build-php docker-build-image ## Build the php image and then all other docker images +.PHONY: docker-compose-build-image +docker-compose-build-image: validate-docker-compose-variables ## Build all docker images OR a specific image by providing the service name via: make docker-compose-build DOCKER_SERVICE_NAME= + $(DOCKER_COMPOSE) build $(DOCKER_SERVICE_NAME) $(ARGS) -.PHONY: docker-up -docker-up: validate-docker-variables ## Create and start all docker containers. To create/start only a specific container, use DOCKER_SERVICE_NAME= +.PHONY: docker-compose-build-php +docker-compose-build-php: validate-docker-compose-variables ## Build the php base image + $(DOCKER_COMPOSE_PHP_BASE) build $(DOCKER_SERVICE_NAME_PHP_BASE) $(ARGS) + +.PHONY: docker-compose-build +docker-compose-build: docker-compose-build-php docker-compose-build-image ## Build the php image and then all other docker images + +.PHONY: docker-compose-up +docker-compose-up: validate-docker-compose-variables ## Create and start all docker containers. To create/start only a specific container, use DOCKER_SERVICE_NAME= $(DOCKER_COMPOSE) up -d $(DOCKER_SERVICE_NAME) -.PHONY: docker-down -docker-down: validate-docker-variables ## Stop and remove all docker containers. +.PHONY: docker-compose-down +docker-compose-down: validate-docker-compose-variables ## Stop and remove all docker containers. @$(DOCKER_COMPOSE) down -.PHONY: docker-config -docker-config: validate-docker-variables ## List the configuration +.PHONY: docker-compose-restart +docker-compose-restart: validate-docker-compose-variables ## Restart all docker containers. + @$(DOCKER_COMPOSE) restart + +.PHONY: docker-compose-config +docker-compose-config: validate-docker-compose-variables ## List the configuration @$(DOCKER_COMPOSE) config +.PHONY: docker-compose-push +docker-compose-push: validate-docker-compose-variables ## Push all docker images to the remote repository + $(DOCKER_COMPOSE) push $(ARGS) + +.PHONY: docker-compose-pull +docker-compose-pull: validate-docker-compose-variables ## Pull all docker images from the remote repository + $(DOCKER_COMPOSE) pull $(ARGS) + +DOCKER_USERNAME?=root +.PHONY: docker-compose-exec +docker-compose-exec: validate-docker-compose-variables ## Execute a command in a docker container. Usage: `make docker-compose-exec DOCKER_SERVICE_NAME="application" DOCKER_COMMAND="echo 'Hello world!' DOCKER_USERNAME=root"` + @$(if $(DOCKER_SERVICE_NAME),,$(error "DOCKER_SERVICE_NAME is undefined")) + @$(if $(DOCKER_COMMAND),,$(error "DOCKER_COMMAND is undefined")) + @$(if $(DOCKER_USERNAME),,$(error "DOCKER_USERNAME is undefined")) + $(DOCKER_COMPOSE) exec -T --user $(DOCKER_USERNAME) $(DOCKER_SERVICE_NAME) $(DOCKER_COMMAND) + +# `docker build` and `docker compose build` are behaving differently +# @see https://github.com/docker/compose/issues/9508 +.PHONY: docker-compose-show-build-context +docker-compose-show-build-context: ## Show all files that are in the docker build context for `docker compose build` + @.dev/scripts/docker-compose-build-context/show-build-context.sh + +##@ [Docker] + +.PHONY: validate-docker-variables +validate-docker-variables: + @$(if $(TAG),,$(error TAG is undefined - Did you run 'make make-init'?)) + @$(if $(ENV),,$(error ENV is undefined - Did you run 'make make-init'?)) + @$(if $(DOCKER_REGISTRY),,$(error DOCKER_REGISTRY is undefined)) + @$(if $(DOCKER_NAMESPACE),,$(error DOCKER_NAMESPACE is undefined)) + @$(if $(APP_CODE_PATH_CONTAINER),,$(error APP_CODE_PATH_CONTAINER is undefined)) + .PHONY: docker-prune docker-prune: ## Remove ALL unused docker resources, including volumes @docker system prune -a -f --volumes + +# @see https://www.linuxfixes.com/2022/01/solved-how-to-test-dockerignore-file.html +# helpful to debug a .dockerignore file +.PHONY: docker-show-build-context +docker-show-build-context: ## Show all files that are in the docker build context for `docker build` + @echo -e "FROM busybox\nCOPY . /codebase\nCMD find /codebase -print" | docker image build --no-cache -t build-context -f - . + @docker run --rm build-context | sort + +.PHONY: docker-pull +docker-pull: validate-docker-variables ## Pull a single docker images from the remote repository + @$(if $(DOCKER_SERVICE_NAME),,$(error "DOCKER_SERVICE_NAME is undefined")) + docker pull $(DOCKER_REGISTRY)/$(DOCKER_NAMESPACE)/$(DOCKER_SERVICE_NAME)-$(ENV):$(TAG) + +.PHONY: docker-run +docker-run: validate-docker-variables ## Start a single docker container + @$(if $(DOCKER_SERVICE_NAME),,$(error "DOCKER_SERVICE_NAME is undefined")) + @$(if $(HOST_STRING),,$(error "HOST_STRING is undefined")) + docker run --name $(DOCKER_SERVICE_NAME) \ + -d \ + -it \ + --env-file compose-secrets.env \ + --mount type=bind,source="$$(pwd)"/secret.gpg,target=$(APP_CODE_PATH_CONTAINER)/secret.gpg,readonly \ + $(HOST_STRING) \ + $(DOCKER_SERVICE_OPTIONS) \ + $(DOCKER_REGISTRY)/$(DOCKER_NAMESPACE)/$(DOCKER_SERVICE_NAME)-$(ENV):$(TAG) + + +# see scripts in .docker/images/logger/logrotate.d for a documentation of the paths of the log volumes +.PHONY: docker-run-logger +docker-run-logger: validate-docker-variables ## Start a logger sidecar container + docker run --name $(DOCKER_SERVICE_NAME_LOGGER) \ + -d \ + -it \ + -v logs-cron:/var/log/cron \ + -v logs-nginx:/var/log/nginx \ + -v logs-app:/var/log/app \ + -v logs-supervisor:/var/log/supervisor \ + -v logs-php-fpm:/var/log/php-fpm \ + $(DOCKER_REGISTRY)/$(DOCKER_NAMESPACE)/$(DOCKER_SERVICE_NAME_LOGGER)-$(ENV):$(TAG) + +.PHONY: docker-run-nginx +docker-run-nginx: ## Start the nginx container + "$(MAKE)" docker-run DOCKER_SERVICE_NAME="$(DOCKER_SERVICE_NAME_NGINX)" DOCKER_SERVICE_OPTIONS="-v logs-nginx:/var/log/nginx -p 80:80 -p 443:443" + +.PHONY: docker-run-php-fpm +docker-run-php-fpm: ## Start the php-fpm container + "$(MAKE)" docker-run DOCKER_SERVICE_NAME="$(DOCKER_SERVICE_NAME_PHP_FPM)" DOCKER_SERVICE_OPTIONS="-v logs-app:/var/log/app -v logs-php-fpm:/var/log/php-fpm -p 9000:9000" + +.PHONY: docker-run-application +docker-run-application: ## Start the application container + "$(MAKE)" docker-run DOCKER_SERVICE_NAME="$(DOCKER_SERVICE_NAME_APPLICATION)" DOCKER_SERVICE_OPTIONS="-v logs-app:/var/log/app" + +.PHONY: docker-run-php-worker +docker-run-php-worker: ## Start the php-worker container + "$(MAKE)" docker-run DOCKER_SERVICE_NAME="$(DOCKER_SERVICE_NAME_PHP_WORKER)" DOCKER_SERVICE_OPTIONS="-v logs-app:/var/log/app -v logs-supervisor:/var/log/supervisor" + +.PHONY: docker-stop +docker-stop: validate-docker-variables ## Stop a single docker container + @$(if $(DOCKER_SERVICE_NAME),,$(error "DOCKER_SERVICE_NAME is undefined")) + docker stop $(DOCKER_SERVICE_NAME) + +.PHONY: docker-rm +docker-rm: validate-docker-variables ## Remove a single docker container + @$(if $(DOCKER_SERVICE_NAME),,$(error "DOCKER_SERVICE_NAME is undefined")) + docker rm $(DOCKER_SERVICE_NAME) diff --git a/.make/variables.env b/.make/variables.env index 6cf50b001..5ce2a0a9c 100644 --- a/.make/variables.env +++ b/.make/variables.env @@ -1,5 +1,5 @@ -DOCKER_REGISTRY=gitlab.com/boonkerz -DOCKER_NAMESPACE=boonkerz +DOCKER_REGISTRY=registry.gitlab.com/printshopcreator +DOCKER_NAMESPACE=docker APP_USER_NAME=application APP_USER_ID=10000 diff --git a/web.xml b/web.xml new file mode 100644 index 000000000..dadff7340 --- /dev/null +++ b/web.xml @@ -0,0 +1,4760 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + org.apache.catalina.servlets.DefaultServlet + + debug + 0 + + + listings + false + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jsp + org.apache.jasper.servlet.JspServlet + + fork + false + + + xpoweredBy + false + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + / + + + + + jsp + *.jsp + *.jspx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CorsFilter + org.apache.catalina.filters.CorsFilter + + cors.allowed.origins + * + + + cors.allowed.methods + GET,POST,PUT,DELETE,HEAD,OPTIONS + + + cors.allowed.headers + Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers + + + cors.exposed.headers + Access-Control-Allow-Origin,Access-Control-Allow-Credentials + + + + CorsFilter + /* + + + + + + + + + + + + + + + + + + + + 30 + + + + + + + + + + + + + 123 + application/vnd.lotus-1-2-3 + + + 3dml + text/vnd.in3d.3dml + + + 3ds + image/x-3ds + + + 3g2 + video/3gpp2 + + + 3gp + video/3gpp + + + 7z + application/x-7z-compressed + + + aab + application/x-authorware-bin + + + aac + audio/x-aac + + + aam + application/x-authorware-map + + + aas + application/x-authorware-seg + + + abs + audio/x-mpeg + + + abw + application/x-abiword + + + ac + application/pkix-attr-cert + + + acc + application/vnd.americandynamics.acc + + + ace + application/x-ace-compressed + + + acu + application/vnd.acucobol + + + acutc + application/vnd.acucorp + + + adp + audio/adpcm + + + aep + application/vnd.audiograph + + + afm + application/x-font-type1 + + + afp + application/vnd.ibm.modcap + + + ahead + application/vnd.ahead.space + + + ai + application/postscript + + + aif + audio/x-aiff + + + aifc + audio/x-aiff + + + aiff + audio/x-aiff + + + aim + application/x-aim + + + air + application/vnd.adobe.air-application-installer-package+zip + + + ait + application/vnd.dvb.ait + + + ami + application/vnd.amiga.ami + + + anx + application/annodex + + + apk + application/vnd.android.package-archive + + + appcache + text/cache-manifest + + + application + application/x-ms-application + + + apr + application/vnd.lotus-approach + + + arc + application/x-freearc + + + art + image/x-jg + + + asc + application/pgp-signature + + + asf + video/x-ms-asf + + + asm + text/x-asm + + + aso + application/vnd.accpac.simply.aso + + + asx + video/x-ms-asf + + + atc + application/vnd.acucorp + + + atom + application/atom+xml + + + atomcat + application/atomcat+xml + + + atomsvc + application/atomsvc+xml + + + atx + application/vnd.antix.game-component + + + au + audio/basic + + + avi + video/x-msvideo + + + avx + video/x-rad-screenplay + + + aw + application/applixware + + + axa + audio/annodex + + + axv + video/annodex + + + azf + application/vnd.airzip.filesecure.azf + + + azs + application/vnd.airzip.filesecure.azs + + + azw + application/vnd.amazon.ebook + + + bat + application/x-msdownload + + + bcpio + application/x-bcpio + + + bdf + application/x-font-bdf + + + bdm + application/vnd.syncml.dm+wbxml + + + bed + application/vnd.realvnc.bed + + + bh2 + application/vnd.fujitsu.oasysprs + + + bin + application/octet-stream + + + blb + application/x-blorb + + + blorb + application/x-blorb + + + bmi + application/vnd.bmi + + + bmp + image/bmp + + + body + text/html + + + book + application/vnd.framemaker + + + box + application/vnd.previewsystems.box + + + boz + application/x-bzip2 + + + bpk + application/octet-stream + + + btif + image/prs.btif + + + bz + application/x-bzip + + + bz2 + application/x-bzip2 + + + c + text/x-c + + + c11amc + application/vnd.cluetrust.cartomobile-config + + + c11amz + application/vnd.cluetrust.cartomobile-config-pkg + + + c4d + application/vnd.clonk.c4group + + + c4f + application/vnd.clonk.c4group + + + c4g + application/vnd.clonk.c4group + + + c4p + application/vnd.clonk.c4group + + + c4u + application/vnd.clonk.c4group + + + cab + application/vnd.ms-cab-compressed + + + caf + audio/x-caf + + + cap + application/vnd.tcpdump.pcap + + + car + application/vnd.curl.car + + + cat + application/vnd.ms-pki.seccat + + + cb7 + application/x-cbr + + + cba + application/x-cbr + + + cbr + application/x-cbr + + + cbt + application/x-cbr + + + cbz + application/x-cbr + + + cc + text/x-c + + + cct + application/x-director + + + ccxml + application/ccxml+xml + + + cdbcmsg + application/vnd.contact.cmsg + + + cdf + application/x-cdf + + + cdkey + application/vnd.mediastation.cdkey + + + cdmia + application/cdmi-capability + + + cdmic + application/cdmi-container + + + cdmid + application/cdmi-domain + + + cdmio + application/cdmi-object + + + cdmiq + application/cdmi-queue + + + cdx + chemical/x-cdx + + + cdxml + application/vnd.chemdraw+xml + + + cdy + application/vnd.cinderella + + + cer + application/pkix-cert + + + cfs + application/x-cfs-compressed + + + cgm + image/cgm + + + chat + application/x-chat + + + chm + application/vnd.ms-htmlhelp + + + chrt + application/vnd.kde.kchart + + + cif + chemical/x-cif + + + cii + application/vnd.anser-web-certificate-issue-initiation + + + cil + application/vnd.ms-artgalry + + + cla + application/vnd.claymore + + + class + application/java + + + clkk + application/vnd.crick.clicker.keyboard + + + clkp + application/vnd.crick.clicker.palette + + + clkt + application/vnd.crick.clicker.template + + + clkw + application/vnd.crick.clicker.wordbank + + + clkx + application/vnd.crick.clicker + + + clp + application/x-msclip + + + cmc + application/vnd.cosmocaller + + + cmdf + chemical/x-cmdf + + + cml + chemical/x-cml + + + cmp + application/vnd.yellowriver-custom-menu + + + cmx + image/x-cmx + + + cod + application/vnd.rim.cod + + + com + application/x-msdownload + + + conf + text/plain + + + cpio + application/x-cpio + + + cpp + text/x-c + + + cpt + application/mac-compactpro + + + crd + application/x-mscardfile + + + crl + application/pkix-crl + + + crt + application/x-x509-ca-cert + + + cryptonote + application/vnd.rig.cryptonote + + + csh + application/x-csh + + + csml + chemical/x-csml + + + csp + application/vnd.commonspace + + + css + text/css + + + cst + application/x-director + + + csv + text/csv + + + cu + application/cu-seeme + + + curl + text/vnd.curl + + + cww + application/prs.cww + + + cxt + application/x-director + + + cxx + text/x-c + + + dae + model/vnd.collada+xml + + + daf + application/vnd.mobius.daf + + + dart + application/vnd.dart + + + dataless + application/vnd.fdsn.seed + + + davmount + application/davmount+xml + + + dbk + application/docbook+xml + + + dcr + application/x-director + + + dcurl + text/vnd.curl.dcurl + + + dd2 + application/vnd.oma.dd2+xml + + + ddd + application/vnd.fujixerox.ddd + + + deb + application/x-debian-package + + + def + text/plain + + + deploy + application/octet-stream + + + der + application/x-x509-ca-cert + + + dfac + application/vnd.dreamfactory + + + dgc + application/x-dgc-compressed + + + dib + image/bmp + + + dic + text/x-c + + + dir + application/x-director + + + dis + application/vnd.mobius.dis + + + dist + application/octet-stream + + + distz + application/octet-stream + + + djv + image/vnd.djvu + + + djvu + image/vnd.djvu + + + dll + application/x-msdownload + + + dmg + application/x-apple-diskimage + + + dmp + application/vnd.tcpdump.pcap + + + dms + application/octet-stream + + + dna + application/vnd.dna + + + doc + application/msword + + + docm + application/vnd.ms-word.document.macroenabled.12 + + + docx + application/vnd.openxmlformats-officedocument.wordprocessingml.document + + + dot + application/msword + + + dotm + application/vnd.ms-word.template.macroenabled.12 + + + dotx + application/vnd.openxmlformats-officedocument.wordprocessingml.template + + + dp + application/vnd.osgi.dp + + + dpg + application/vnd.dpgraph + + + dra + audio/vnd.dra + + + dsc + text/prs.lines.tag + + + dssc + application/dssc+der + + + dtb + application/x-dtbook+xml + + + dtd + application/xml-dtd + + + dts + audio/vnd.dts + + + dtshd + audio/vnd.dts.hd + + + dump + application/octet-stream + + + dv + video/x-dv + + + dvb + video/vnd.dvb.file + + + dvi + application/x-dvi + + + dwf + model/vnd.dwf + + + dwg + image/vnd.dwg + + + dxf + image/vnd.dxf + + + dxp + application/vnd.spotfire.dxp + + + dxr + application/x-director + + + ecelp4800 + audio/vnd.nuera.ecelp4800 + + + ecelp7470 + audio/vnd.nuera.ecelp7470 + + + ecelp9600 + audio/vnd.nuera.ecelp9600 + + + ecma + application/ecmascript + + + edm + application/vnd.novadigm.edm + + + edx + application/vnd.novadigm.edx + + + efif + application/vnd.picsel + + + ei6 + application/vnd.pg.osasli + + + elc + application/octet-stream + + + emf + application/x-msmetafile + + + eml + message/rfc822 + + + emma + application/emma+xml + + + emz + application/x-msmetafile + + + eol + audio/vnd.digital-winds + + + eot + application/vnd.ms-fontobject + + + eps + application/postscript + + + epub + application/epub+zip + + + es3 + application/vnd.eszigno3+xml + + + esa + application/vnd.osgi.subsystem + + + esf + application/vnd.epson.esf + + + et3 + application/vnd.eszigno3+xml + + + etx + text/x-setext + + + eva + application/x-eva + + + evy + application/x-envoy + + + exe + application/octet-stream + + + exi + application/exi + + + ext + application/vnd.novadigm.ext + + + ez + application/andrew-inset + + + ez2 + application/vnd.ezpix-album + + + ez3 + application/vnd.ezpix-package + + + f + text/x-fortran + + + f4v + video/x-f4v + + + f77 + text/x-fortran + + + f90 + text/x-fortran + + + fbs + image/vnd.fastbidsheet + + + fcdt + application/vnd.adobe.formscentral.fcdt + + + fcs + application/vnd.isac.fcs + + + fdf + application/vnd.fdf + + + fe_launch + application/vnd.denovo.fcselayout-link + + + fg5 + application/vnd.fujitsu.oasysgp + + + fgd + application/x-director + + + fh + image/x-freehand + + + fh4 + image/x-freehand + + + fh5 + image/x-freehand + + + fh7 + image/x-freehand + + + fhc + image/x-freehand + + + fig + application/x-xfig + + + flac + audio/flac + + + fli + video/x-fli + + + flo + application/vnd.micrografx.flo + + + flv + video/x-flv + + + flw + application/vnd.kde.kivio + + + flx + text/vnd.fmi.flexstor + + + fly + text/vnd.fly + + + fm + application/vnd.framemaker + + + fnc + application/vnd.frogans.fnc + + + for + text/x-fortran + + + fpx + image/vnd.fpx + + + frame + application/vnd.framemaker + + + fsc + application/vnd.fsc.weblaunch + + + fst + image/vnd.fst + + + ftc + application/vnd.fluxtime.clip + + + fti + application/vnd.anser-web-funds-transfer-initiation + + + fvt + video/vnd.fvt + + + fxp + application/vnd.adobe.fxp + + + fxpl + application/vnd.adobe.fxp + + + fzs + application/vnd.fuzzysheet + + + g2w + application/vnd.geoplan + + + g3 + image/g3fax + + + g3w + application/vnd.geospace + + + gac + application/vnd.groove-account + + + gam + application/x-tads + + + gbr + application/rpki-ghostbusters + + + gca + application/x-gca-compressed + + + gdl + model/vnd.gdl + + + geo + application/vnd.dynageo + + + gex + application/vnd.geometry-explorer + + + ggb + application/vnd.geogebra.file + + + ggt + application/vnd.geogebra.tool + + + ghf + application/vnd.groove-help + + + gif + image/gif + + + gim + application/vnd.groove-identity-message + + + gml + application/gml+xml + + + gmx + application/vnd.gmx + + + gnumeric + application/x-gnumeric + + + gph + application/vnd.flographit + + + gpx + application/gpx+xml + + + gqf + application/vnd.grafeq + + + gqs + application/vnd.grafeq + + + gram + application/srgs + + + gramps + application/x-gramps-xml + + + gre + application/vnd.geometry-explorer + + + grv + application/vnd.groove-injector + + + grxml + application/srgs+xml + + + gsf + application/x-font-ghostscript + + + gtar + application/x-gtar + + + gtm + application/vnd.groove-tool-message + + + gtw + model/vnd.gtw + + + gv + text/vnd.graphviz + + + gxf + application/gxf + + + gxt + application/vnd.geonext + + + gz + application/x-gzip + + + h + text/x-c + + + h261 + video/h261 + + + h263 + video/h263 + + + h264 + video/h264 + + + hal + application/vnd.hal+xml + + + hbci + application/vnd.hbci + + + hdf + application/x-hdf + + + hh + text/x-c + + + hlp + application/winhlp + + + hpgl + application/vnd.hp-hpgl + + + hpid + application/vnd.hp-hpid + + + hps + application/vnd.hp-hps + + + hqx + application/mac-binhex40 + + + htc + text/x-component + + + htke + application/vnd.kenameaapp + + + htm + text/html + + + html + text/html + + + hvd + application/vnd.yamaha.hv-dic + + + hvp + application/vnd.yamaha.hv-voice + + + hvs + application/vnd.yamaha.hv-script + + + i2g + application/vnd.intergeo + + + icc + application/vnd.iccprofile + + + ice + x-conference/x-cooltalk + + + icm + application/vnd.iccprofile + + + ico + image/x-icon + + + ics + text/calendar + + + ief + image/ief + + + ifb + text/calendar + + + ifm + application/vnd.shana.informed.formdata + + + iges + model/iges + + + igl + application/vnd.igloader + + + igm + application/vnd.insors.igm + + + igs + model/iges + + + igx + application/vnd.micrografx.igx + + + iif + application/vnd.shana.informed.interchange + + + imp + application/vnd.accpac.simply.imp + + + ims + application/vnd.ms-ims + + + in + text/plain + + + ink + application/inkml+xml + + + inkml + application/inkml+xml + + + install + application/x-install-instructions + + + iota + application/vnd.astraea-software.iota + + + ipfix + application/ipfix + + + ipk + application/vnd.shana.informed.package + + + irm + application/vnd.ibm.rights-management + + + irp + application/vnd.irepository.package+xml + + + iso + application/x-iso9660-image + + + itp + application/vnd.shana.informed.formtemplate + + + ivp + application/vnd.immervision-ivp + + + ivu + application/vnd.immervision-ivu + + + jad + text/vnd.sun.j2me.app-descriptor + + + jam + application/vnd.jam + + + jar + application/java-archive + + + java + text/x-java-source + + + jisp + application/vnd.jisp + + + jlt + application/vnd.hp-jlyt + + + jnlp + application/x-java-jnlp-file + + + joda + application/vnd.joost.joda-archive + + + jpe + image/jpeg + + + jpeg + image/jpeg + + + jpg + image/jpeg + + + jpgm + video/jpm + + + jpgv + video/jpeg + + + jpm + video/jpm + + + js + application/javascript + + + jsf + text/plain + + + json + application/json + + + jsonml + application/jsonml+json + + + jspf + text/plain + + + kar + audio/midi + + + karbon + application/vnd.kde.karbon + + + kfo + application/vnd.kde.kformula + + + kia + application/vnd.kidspiration + + + kml + application/vnd.google-earth.kml+xml + + + kmz + application/vnd.google-earth.kmz + + + kne + application/vnd.kinar + + + knp + application/vnd.kinar + + + kon + application/vnd.kde.kontour + + + kpr + application/vnd.kde.kpresenter + + + kpt + application/vnd.kde.kpresenter + + + kpxx + application/vnd.ds-keypoint + + + ksp + application/vnd.kde.kspread + + + ktr + application/vnd.kahootz + + + ktx + image/ktx + + + ktz + application/vnd.kahootz + + + kwd + application/vnd.kde.kword + + + kwt + application/vnd.kde.kword + + + lasxml + application/vnd.las.las+xml + + + latex + application/x-latex + + + lbd + application/vnd.llamagraphics.life-balance.desktop + + + lbe + application/vnd.llamagraphics.life-balance.exchange+xml + + + les + application/vnd.hhe.lesson-player + + + lha + application/x-lzh-compressed + + + link66 + application/vnd.route66.link66+xml + + + list + text/plain + + + list3820 + application/vnd.ibm.modcap + + + listafp + application/vnd.ibm.modcap + + + lnk + application/x-ms-shortcut + + + log + text/plain + + + lostxml + application/lost+xml + + + lrf + application/octet-stream + + + lrm + application/vnd.ms-lrm + + + ltf + application/vnd.frogans.ltf + + + lvp + audio/vnd.lucent.voice + + + lwp + application/vnd.lotus-wordpro + + + lzh + application/x-lzh-compressed + + + m13 + application/x-msmediaview + + + m14 + application/x-msmediaview + + + m1v + video/mpeg + + + m21 + application/mp21 + + + m2a + audio/mpeg + + + m2v + video/mpeg + + + m3a + audio/mpeg + + + m3u + audio/x-mpegurl + + + m3u8 + application/vnd.apple.mpegurl + + + m4a + audio/mp4 + + + m4b + audio/mp4 + + + m4r + audio/mp4 + + + m4u + video/vnd.mpegurl + + + m4v + video/mp4 + + + ma + application/mathematica + + + mac + image/x-macpaint + + + mads + application/mads+xml + + + mag + application/vnd.ecowin.chart + + + maker + application/vnd.framemaker + + + man + text/troff + + + mar + application/octet-stream + + + mathml + application/mathml+xml + + + mb + application/mathematica + + + mbk + application/vnd.mobius.mbk + + + mbox + application/mbox + + + mc1 + application/vnd.medcalcdata + + + mcd + application/vnd.mcd + + + mcurl + text/vnd.curl.mcurl + + + mdb + application/x-msaccess + + + mdi + image/vnd.ms-modi + + + me + text/troff + + + mesh + model/mesh + + + meta4 + application/metalink4+xml + + + metalink + application/metalink+xml + + + mets + application/mets+xml + + + mfm + application/vnd.mfmp + + + mft + application/rpki-manifest + + + mgp + application/vnd.osgeo.mapguide.package + + + mgz + application/vnd.proteus.magazine + + + mid + audio/midi + + + midi + audio/midi + + + mie + application/x-mie + + + mif + application/x-mif + + + mime + message/rfc822 + + + mj2 + video/mj2 + + + mjp2 + video/mj2 + + + mk3d + video/x-matroska + + + mka + audio/x-matroska + + + mks + video/x-matroska + + + mkv + video/x-matroska + + + mlp + application/vnd.dolby.mlp + + + mmd + application/vnd.chipnuts.karaoke-mmd + + + mmf + application/vnd.smaf + + + mmr + image/vnd.fujixerox.edmics-mmr + + + mng + video/x-mng + + + mny + application/x-msmoney + + + mobi + application/x-mobipocket-ebook + + + mods + application/mods+xml + + + mov + video/quicktime + + + movie + video/x-sgi-movie + + + mp1 + audio/mpeg + + + mp2 + audio/mpeg + + + mp21 + application/mp21 + + + mp2a + audio/mpeg + + + mp3 + audio/mpeg + + + mp4 + video/mp4 + + + mp4a + audio/mp4 + + + mp4s + application/mp4 + + + mp4v + video/mp4 + + + mpa + audio/mpeg + + + mpc + application/vnd.mophun.certificate + + + mpe + video/mpeg + + + mpeg + video/mpeg + + + mpega + audio/x-mpeg + + + mpg + video/mpeg + + + mpg4 + video/mp4 + + + mpga + audio/mpeg + + + mpkg + application/vnd.apple.installer+xml + + + mpm + application/vnd.blueice.multipass + + + mpn + application/vnd.mophun.application + + + mpp + application/vnd.ms-project + + + mpt + application/vnd.ms-project + + + mpv2 + video/mpeg2 + + + mpy + application/vnd.ibm.minipay + + + mqy + application/vnd.mobius.mqy + + + mrc + application/marc + + + mrcx + application/marcxml+xml + + + ms + text/troff + + + mscml + application/mediaservercontrol+xml + + + mseed + application/vnd.fdsn.mseed + + + mseq + application/vnd.mseq + + + msf + application/vnd.epson.msf + + + msh + model/mesh + + + msi + application/x-msdownload + + + msl + application/vnd.mobius.msl + + + msty + application/vnd.muvee.style + + + mts + model/vnd.mts + + + mus + application/vnd.musician + + + musicxml + application/vnd.recordare.musicxml+xml + + + mvb + application/x-msmediaview + + + mwf + application/vnd.mfer + + + mxf + application/mxf + + + mxl + application/vnd.recordare.musicxml + + + mxml + application/xv+xml + + + mxs + application/vnd.triscape.mxs + + + mxu + video/vnd.mpegurl + + + n-gage + application/vnd.nokia.n-gage.symbian.install + + + n3 + text/n3 + + + nb + application/mathematica + + + nbp + application/vnd.wolfram.player + + + nc + application/x-netcdf + + + ncx + application/x-dtbncx+xml + + + nfo + text/x-nfo + + + ngdat + application/vnd.nokia.n-gage.data + + + nitf + application/vnd.nitf + + + nlu + application/vnd.neurolanguage.nlu + + + nml + application/vnd.enliven + + + nnd + application/vnd.noblenet-directory + + + nns + application/vnd.noblenet-sealer + + + nnw + application/vnd.noblenet-web + + + npx + image/vnd.net-fpx + + + nsc + application/x-conference + + + nsf + application/vnd.lotus-notes + + + ntf + application/vnd.nitf + + + nzb + application/x-nzb + + + oa2 + application/vnd.fujitsu.oasys2 + + + oa3 + application/vnd.fujitsu.oasys3 + + + oas + application/vnd.fujitsu.oasys + + + obd + application/x-msbinder + + + obj + application/x-tgif + + + oda + application/oda + + + + odb + application/vnd.oasis.opendocument.database + + + + odc + application/vnd.oasis.opendocument.chart + + + + odf + application/vnd.oasis.opendocument.formula + + + odft + application/vnd.oasis.opendocument.formula-template + + + + odg + application/vnd.oasis.opendocument.graphics + + + + odi + application/vnd.oasis.opendocument.image + + + + odm + application/vnd.oasis.opendocument.text-master + + + + odp + application/vnd.oasis.opendocument.presentation + + + + ods + application/vnd.oasis.opendocument.spreadsheet + + + + odt + application/vnd.oasis.opendocument.text + + + oga + audio/ogg + + + ogg + audio/ogg + + + ogv + video/ogg + + + + ogx + application/ogg + + + omdoc + application/omdoc+xml + + + onepkg + application/onenote + + + onetmp + application/onenote + + + onetoc + application/onenote + + + onetoc2 + application/onenote + + + opf + application/oebps-package+xml + + + opml + text/x-opml + + + oprc + application/vnd.palm + + + org + application/vnd.lotus-organizer + + + osf + application/vnd.yamaha.openscoreformat + + + osfpvg + application/vnd.yamaha.openscoreformat.osfpvg+xml + + + otc + application/vnd.oasis.opendocument.chart-template + + + otf + font/otf + + + + otg + application/vnd.oasis.opendocument.graphics-template + + + + oth + application/vnd.oasis.opendocument.text-web + + + oti + application/vnd.oasis.opendocument.image-template + + + + otp + application/vnd.oasis.opendocument.presentation-template + + + + ots + application/vnd.oasis.opendocument.spreadsheet-template + + + + ott + application/vnd.oasis.opendocument.text-template + + + oxps + application/oxps + + + oxt + application/vnd.openofficeorg.extension + + + p + text/x-pascal + + + p10 + application/pkcs10 + + + p12 + application/x-pkcs12 + + + p7b + application/x-pkcs7-certificates + + + p7c + application/pkcs7-mime + + + p7m + application/pkcs7-mime + + + p7r + application/x-pkcs7-certreqresp + + + p7s + application/pkcs7-signature + + + p8 + application/pkcs8 + + + pas + text/x-pascal + + + paw + application/vnd.pawaafile + + + pbd + application/vnd.powerbuilder6 + + + pbm + image/x-portable-bitmap + + + pcap + application/vnd.tcpdump.pcap + + + pcf + application/x-font-pcf + + + pcl + application/vnd.hp-pcl + + + pclxl + application/vnd.hp-pclxl + + + pct + image/pict + + + pcurl + application/vnd.curl.pcurl + + + pcx + image/x-pcx + + + pdb + application/vnd.palm + + + pdf + application/pdf + + + pfa + application/x-font-type1 + + + pfb + application/x-font-type1 + + + pfm + application/x-font-type1 + + + pfr + application/font-tdpfr + + + pfx + application/x-pkcs12 + + + pgm + image/x-portable-graymap + + + pgn + application/x-chess-pgn + + + pgp + application/pgp-encrypted + + + pic + image/pict + + + pict + image/pict + + + pkg + application/octet-stream + + + pki + application/pkixcmp + + + pkipath + application/pkix-pkipath + + + plb + application/vnd.3gpp.pic-bw-large + + + plc + application/vnd.mobius.plc + + + plf + application/vnd.pocketlearn + + + pls + audio/x-scpls + + + pml + application/vnd.ctc-posml + + + png + image/png + + + pnm + image/x-portable-anymap + + + pnt + image/x-macpaint + + + portpkg + application/vnd.macports.portpkg + + + pot + application/vnd.ms-powerpoint + + + potm + application/vnd.ms-powerpoint.template.macroenabled.12 + + + potx + application/vnd.openxmlformats-officedocument.presentationml.template + + + ppam + application/vnd.ms-powerpoint.addin.macroenabled.12 + + + ppd + application/vnd.cups-ppd + + + ppm + image/x-portable-pixmap + + + pps + application/vnd.ms-powerpoint + + + ppsm + application/vnd.ms-powerpoint.slideshow.macroenabled.12 + + + ppsx + application/vnd.openxmlformats-officedocument.presentationml.slideshow + + + ppt + application/vnd.ms-powerpoint + + + pptm + application/vnd.ms-powerpoint.presentation.macroenabled.12 + + + pptx + application/vnd.openxmlformats-officedocument.presentationml.presentation + + + pqa + application/vnd.palm + + + prc + application/x-mobipocket-ebook + + + pre + application/vnd.lotus-freelance + + + prf + application/pics-rules + + + ps + application/postscript + + + psb + application/vnd.3gpp.pic-bw-small + + + psd + image/vnd.adobe.photoshop + + + psf + application/x-font-linux-psf + + + pskcxml + application/pskc+xml + + + ptid + application/vnd.pvi.ptid1 + + + pub + application/x-mspublisher + + + pvb + application/vnd.3gpp.pic-bw-var + + + pwn + application/vnd.3m.post-it-notes + + + pya + audio/vnd.ms-playready.media.pya + + + pyv + video/vnd.ms-playready.media.pyv + + + qam + application/vnd.epson.quickanime + + + qbo + application/vnd.intu.qbo + + + qfx + application/vnd.intu.qfx + + + qps + application/vnd.publishare-delta-tree + + + qt + video/quicktime + + + qti + image/x-quicktime + + + qtif + image/x-quicktime + + + qwd + application/vnd.quark.quarkxpress + + + qwt + application/vnd.quark.quarkxpress + + + qxb + application/vnd.quark.quarkxpress + + + qxd + application/vnd.quark.quarkxpress + + + qxl + application/vnd.quark.quarkxpress + + + qxt + application/vnd.quark.quarkxpress + + + ra + audio/x-pn-realaudio + + + ram + audio/x-pn-realaudio + + + rar + application/x-rar-compressed + + + ras + image/x-cmu-raster + + + rcprofile + application/vnd.ipunplugged.rcprofile + + + rdf + application/rdf+xml + + + rdz + application/vnd.data-vision.rdz + + + rep + application/vnd.businessobjects + + + res + application/x-dtbresource+xml + + + rgb + image/x-rgb + + + rif + application/reginfo+xml + + + rip + audio/vnd.rip + + + ris + application/x-research-info-systems + + + rl + application/resource-lists+xml + + + rlc + image/vnd.fujixerox.edmics-rlc + + + rld + application/resource-lists-diff+xml + + + rm + application/vnd.rn-realmedia + + + rmi + audio/midi + + + rmp + audio/x-pn-realaudio-plugin + + + rms + application/vnd.jcp.javame.midlet-rms + + + rmvb + application/vnd.rn-realmedia-vbr + + + rnc + application/relax-ng-compact-syntax + + + roa + application/rpki-roa + + + roff + text/troff + + + rp9 + application/vnd.cloanto.rp9 + + + rpss + application/vnd.nokia.radio-presets + + + rpst + application/vnd.nokia.radio-preset + + + rq + application/sparql-query + + + rs + application/rls-services+xml + + + rsd + application/rsd+xml + + + rss + application/rss+xml + + + rtf + application/rtf + + + rtx + text/richtext + + + s + text/x-asm + + + s3m + audio/s3m + + + saf + application/vnd.yamaha.smaf-audio + + + sbml + application/sbml+xml + + + sc + application/vnd.ibm.secure-container + + + scd + application/x-msschedule + + + scm + application/vnd.lotus-screencam + + + scq + application/scvp-cv-request + + + scs + application/scvp-cv-response + + + scurl + text/vnd.curl.scurl + + + sda + application/vnd.stardivision.draw + + + sdc + application/vnd.stardivision.calc + + + sdd + application/vnd.stardivision.impress + + + sdkd + application/vnd.solent.sdkm+xml + + + sdkm + application/vnd.solent.sdkm+xml + + + sdp + application/sdp + + + sdw + application/vnd.stardivision.writer + + + see + application/vnd.seemail + + + seed + application/vnd.fdsn.seed + + + sema + application/vnd.sema + + + semd + application/vnd.semd + + + semf + application/vnd.semf + + + ser + application/java-serialized-object + + + setpay + application/set-payment-initiation + + + setreg + application/set-registration-initiation + + + sfd-hdstx + application/vnd.hydrostatix.sof-data + + + sfs + application/vnd.spotfire.sfs + + + sfv + text/x-sfv + + + sgi + image/sgi + + + sgl + application/vnd.stardivision.writer-global + + + sgm + text/sgml + + + sgml + text/sgml + + + sh + application/x-sh + + + shar + application/x-shar + + + shf + application/shf+xml + + + + sid + image/x-mrsid-image + + + sig + application/pgp-signature + + + sil + audio/silk + + + silo + model/mesh + + + sis + application/vnd.symbian.install + + + sisx + application/vnd.symbian.install + + + sit + application/x-stuffit + + + sitx + application/x-stuffitx + + + skd + application/vnd.koan + + + skm + application/vnd.koan + + + skp + application/vnd.koan + + + skt + application/vnd.koan + + + sldm + application/vnd.ms-powerpoint.slide.macroenabled.12 + + + sldx + application/vnd.openxmlformats-officedocument.presentationml.slide + + + slt + application/vnd.epson.salt + + + sm + application/vnd.stepmania.stepchart + + + smf + application/vnd.stardivision.math + + + smi + application/smil+xml + + + smil + application/smil+xml + + + smv + video/x-smv + + + smzip + application/vnd.stepmania.package + + + snd + audio/basic + + + snf + application/x-font-snf + + + so + application/octet-stream + + + spc + application/x-pkcs7-certificates + + + spf + application/vnd.yamaha.smaf-phrase + + + spl + application/x-futuresplash + + + spot + text/vnd.in3d.spot + + + spp + application/scvp-vp-response + + + spq + application/scvp-vp-request + + + spx + audio/ogg + + + sql + application/x-sql + + + src + application/x-wais-source + + + srt + application/x-subrip + + + sru + application/sru+xml + + + srx + application/sparql-results+xml + + + ssdl + application/ssdl+xml + + + sse + application/vnd.kodak-descriptor + + + ssf + application/vnd.epson.ssf + + + ssml + application/ssml+xml + + + st + application/vnd.sailingtracker.track + + + stc + application/vnd.sun.xml.calc.template + + + std + application/vnd.sun.xml.draw.template + + + stf + application/vnd.wt.stf + + + sti + application/vnd.sun.xml.impress.template + + + stk + application/hyperstudio + + + stl + application/vnd.ms-pki.stl + + + str + application/vnd.pg.format + + + stw + application/vnd.sun.xml.writer.template + + + sub + text/vnd.dvb.subtitle + + + sus + application/vnd.sus-calendar + + + susp + application/vnd.sus-calendar + + + sv4cpio + application/x-sv4cpio + + + sv4crc + application/x-sv4crc + + + svc + application/vnd.dvb.service + + + svd + application/vnd.svd + + + svg + image/svg+xml + + + svgz + image/svg+xml + + + swa + application/x-director + + + swf + application/x-shockwave-flash + + + swi + application/vnd.aristanetworks.swi + + + sxc + application/vnd.sun.xml.calc + + + sxd + application/vnd.sun.xml.draw + + + sxg + application/vnd.sun.xml.writer.global + + + sxi + application/vnd.sun.xml.impress + + + sxm + application/vnd.sun.xml.math + + + sxw + application/vnd.sun.xml.writer + + + t + text/troff + + + t3 + application/x-t3vm-image + + + taglet + application/vnd.mynfc + + + tao + application/vnd.tao.intent-module-archive + + + tar + application/x-tar + + + tcap + application/vnd.3gpp2.tcap + + + tcl + application/x-tcl + + + teacher + application/vnd.smart.teacher + + + tei + application/tei+xml + + + teicorpus + application/tei+xml + + + tex + application/x-tex + + + texi + application/x-texinfo + + + texinfo + application/x-texinfo + + + text + text/plain + + + tfi + application/thraud+xml + + + tfm + application/x-tex-tfm + + + tga + image/x-tga + + + thmx + application/vnd.ms-officetheme + + + tif + image/tiff + + + tiff + image/tiff + + + tmo + application/vnd.tmobile-livetv + + + torrent + application/x-bittorrent + + + tpl + application/vnd.groove-tool-template + + + tpt + application/vnd.trid.tpt + + + tr + text/troff + + + tra + application/vnd.trueapp + + + trm + application/x-msterminal + + + tsd + application/timestamped-data + + + tsv + text/tab-separated-values + + + ttc + font/collection + + + ttf + font/ttf + + + ttl + text/turtle + + + twd + application/vnd.simtech-mindmapper + + + twds + application/vnd.simtech-mindmapper + + + txd + application/vnd.genomatix.tuxedo + + + txf + application/vnd.mobius.txf + + + txt + text/plain + + + u32 + application/x-authorware-bin + + + udeb + application/x-debian-package + + + ufd + application/vnd.ufdl + + + ufdl + application/vnd.ufdl + + + ulw + audio/basic + + + ulx + application/x-glulx + + + umj + application/vnd.umajin + + + unityweb + application/vnd.unity + + + uoml + application/vnd.uoml+xml + + + uri + text/uri-list + + + uris + text/uri-list + + + urls + text/uri-list + + + ustar + application/x-ustar + + + utz + application/vnd.uiq.theme + + + uu + text/x-uuencode + + + uva + audio/vnd.dece.audio + + + uvd + application/vnd.dece.data + + + uvf + application/vnd.dece.data + + + uvg + image/vnd.dece.graphic + + + uvh + video/vnd.dece.hd + + + uvi + image/vnd.dece.graphic + + + uvm + video/vnd.dece.mobile + + + uvp + video/vnd.dece.pd + + + uvs + video/vnd.dece.sd + + + uvt + application/vnd.dece.ttml+xml + + + uvu + video/vnd.uvvu.mp4 + + + uvv + video/vnd.dece.video + + + uvva + audio/vnd.dece.audio + + + uvvd + application/vnd.dece.data + + + uvvf + application/vnd.dece.data + + + uvvg + image/vnd.dece.graphic + + + uvvh + video/vnd.dece.hd + + + uvvi + image/vnd.dece.graphic + + + uvvm + video/vnd.dece.mobile + + + uvvp + video/vnd.dece.pd + + + uvvs + video/vnd.dece.sd + + + uvvt + application/vnd.dece.ttml+xml + + + uvvu + video/vnd.uvvu.mp4 + + + uvvv + video/vnd.dece.video + + + uvvx + application/vnd.dece.unspecified + + + uvvz + application/vnd.dece.zip + + + uvx + application/vnd.dece.unspecified + + + uvz + application/vnd.dece.zip + + + vcard + text/vcard + + + vcd + application/x-cdlink + + + vcf + text/x-vcard + + + vcg + application/vnd.groove-vcard + + + vcs + text/x-vcalendar + + + vcx + application/vnd.vcx + + + vis + application/vnd.visionary + + + viv + video/vnd.vivo + + + vob + video/x-ms-vob + + + vor + application/vnd.stardivision.writer + + + vox + application/x-authorware-bin + + + vrml + model/vrml + + + vsd + application/vnd.visio + + + vsf + application/vnd.vsf + + + vss + application/vnd.visio + + + vst + application/vnd.visio + + + vsw + application/vnd.visio + + + vtu + model/vnd.vtu + + + vxml + application/voicexml+xml + + + w3d + application/x-director + + + wad + application/x-doom + + + wasm + application/wasm + + + wav + audio/x-wav + + + wax + audio/x-ms-wax + + + + wbmp + image/vnd.wap.wbmp + + + wbs + application/vnd.criticaltools.wbs+xml + + + wbxml + application/vnd.wap.wbxml + + + wcm + application/vnd.ms-works + + + wdb + application/vnd.ms-works + + + wdp + image/vnd.ms-photo + + + weba + audio/webm + + + webm + video/webm + + + webp + image/webp + + + wg + application/vnd.pmi.widget + + + wgt + application/widget + + + wks + application/vnd.ms-works + + + wm + video/x-ms-wm + + + wma + audio/x-ms-wma + + + wmd + application/x-ms-wmd + + + wmf + application/x-msmetafile + + + + wml + text/vnd.wap.wml + + + + wmlc + application/vnd.wap.wmlc + + + + wmls + text/vnd.wap.wmlscript + + + + wmlsc + application/vnd.wap.wmlscriptc + + + wmv + video/x-ms-wmv + + + wmx + video/x-ms-wmx + + + wmz + application/x-msmetafile + + + woff + font/woff + + + woff2 + font/woff2 + + + wpd + application/vnd.wordperfect + + + wpl + application/vnd.ms-wpl + + + wps + application/vnd.ms-works + + + wqd + application/vnd.wqd + + + wri + application/x-mswrite + + + wrl + model/vrml + + + wsdl + application/wsdl+xml + + + wspolicy + application/wspolicy+xml + + + wtb + application/vnd.webturbo + + + wvx + video/x-ms-wvx + + + x32 + application/x-authorware-bin + + + x3d + model/x3d+xml + + + x3db + model/x3d+binary + + + x3dbz + model/x3d+binary + + + x3dv + model/x3d+vrml + + + x3dvz + model/x3d+vrml + + + x3dz + model/x3d+xml + + + xaml + application/xaml+xml + + + xap + application/x-silverlight-app + + + xar + application/vnd.xara + + + xbap + application/x-ms-xbap + + + xbd + application/vnd.fujixerox.docuworks.binder + + + xbm + image/x-xbitmap + + + xdf + application/xcap-diff+xml + + + xdm + application/vnd.syncml.dm+xml + + + xdp + application/vnd.adobe.xdp+xml + + + xdssc + application/dssc+xml + + + xdw + application/vnd.fujixerox.docuworks + + + xenc + application/xenc+xml + + + xer + application/patch-ops-error+xml + + + xfdf + application/vnd.adobe.xfdf + + + xfdl + application/vnd.xfdl + + + xht + application/xhtml+xml + + + xhtml + application/xhtml+xml + + + xhvml + application/xv+xml + + + xif + image/vnd.xiff + + + xla + application/vnd.ms-excel + + + xlam + application/vnd.ms-excel.addin.macroenabled.12 + + + xlc + application/vnd.ms-excel + + + xlf + application/x-xliff+xml + + + xlm + application/vnd.ms-excel + + + xls + application/vnd.ms-excel + + + xlsb + application/vnd.ms-excel.sheet.binary.macroenabled.12 + + + xlsm + application/vnd.ms-excel.sheet.macroenabled.12 + + + xlsx + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + + + xlt + application/vnd.ms-excel + + + xltm + application/vnd.ms-excel.template.macroenabled.12 + + + xltx + application/vnd.openxmlformats-officedocument.spreadsheetml.template + + + xlw + application/vnd.ms-excel + + + xm + audio/xm + + + xml + application/xml + + + xo + application/vnd.olpc-sugar + + + xop + application/xop+xml + + + xpi + application/x-xpinstall + + + xpl + application/xproc+xml + + + xpm + image/x-xpixmap + + + xpr + application/vnd.is-xpr + + + xps + application/vnd.ms-xpsdocument + + + xpw + application/vnd.intercon.formnet + + + xpx + application/vnd.intercon.formnet + + + xsl + application/xml + + + xslt + application/xslt+xml + + + xsm + application/vnd.syncml+xml + + + xspf + application/xspf+xml + + + xul + application/vnd.mozilla.xul+xml + + + xvm + application/xv+xml + + + xvml + application/xv+xml + + + xwd + image/x-xwindowdump + + + xyz + chemical/x-xyz + + + xz + application/x-xz + + + yang + application/yang + + + yin + application/yin+xml + + + z + application/x-compress + + + z1 + application/x-zmachine + + + z2 + application/x-zmachine + + + z3 + application/x-zmachine + + + z4 + application/x-zmachine + + + z5 + application/x-zmachine + + + z6 + application/x-zmachine + + + z7 + application/x-zmachine + + + z8 + application/x-zmachine + + + zaz + application/vnd.zzazz.deck+xml + + + zip + application/zip + + + zir + application/vnd.zul + + + zirz + application/vnd.zul + + + zmm + application/vnd.handheld-entertainment+xml + + + + + + + + + + + + + + + + + + index.html + index.htm + index.jsp + + +