diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..59f41f37a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.git +.github + +venv diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8d2ce0882..542c83a17 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,50 +7,28 @@ jobs: runs-on: ubuntu-latest steps: - - name: Check out repository code + - name: Checkout code uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.8.11 uses: actions/setup-python@v2 with: - python-version: 3.8 - - - name: Restore cache - uses: actions/cache@v2 - with: - path: .venv - key: ${{ runner.os }}-venv-${{ hashFiles('**/requirements*.txt') }} - restore-keys: | - ${{ runner.os }}-venv- + python-version: 3.8.11 - name: Install dependencies run: | - sudo apt install python3-dev postgresql libpq-dev build-essential libxml2-dev libxslt1-dev postgresql ncat - python -m pip install --upgrade pip + sudo apt-get install -y postgresql python3-dev libpq-dev build-essential + make dev envfile - - uses: syphar/restore-virtualenv@v1 - id: cache-virtualenv - with: - requirement_files: requirements*.txt # this is optional + - name: Validate code format + run: make check - - uses: syphar/restore-pip-download-cache@v1 - if: steps.cache-virtualenv.outputs.cache-hit != 'true' - - - run: pip install -r requirements.txt -r requirements-dev.txt - if: steps.cache-virtualenv.outputs.cache-hit != 'true' - - name: Setup database - env: - PGPASSWORD: vulnerablecode run: | sudo systemctl start postgresql - sudo -Eu postgres psql -c "CREATE ROLE vulnerablecode WITH PASSWORD '$PGPASSWORD' NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN;" - sudo systemctl status postgresql - createdb --encoding=utf-8 --owner=vulnerablecode --user=vulnerablecode \ - --host=localhost --port=5432 vulnerablecode + make postgres - name: Run tests - run: python -m pytest -v -m "not webtest" + run: make test env: - DJANGO_DEV: 1 GH_TOKEN: 1 diff --git a/.github/workflows/upstream_test.yml b/.github/workflows/upstream_test.yml index d918463e5..d634a8418 100644 --- a/.github/workflows/upstream_test.yml +++ b/.github/workflows/upstream_test.yml @@ -48,5 +48,4 @@ jobs: POSTGRES_HOST: localhost VC_DB_USER: postgres POSTGRES_PORT: 5432 - DJANGO_DEV: 1 - GH_TOKEN: 1 \ No newline at end of file + GH_TOKEN: 1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index dce1e0932..000000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -language: python -python: 3.8 - -services: - - postgresql - -install: - - pip install -e . -r requirements.txt -r requirements-dev.txt - -env: - global: - - SECRET_KEY="i1bn=oly)w*2yl-5yc&f!vvgt)p)fh3_2$r#spa!*sw36f5ov7" - - GH_TOKEN="dummygithubtoken" - -before_script: - - psql -c "CREATE DATABASE vulnerablecode;" -U postgres - - ./manage.py migrate - -script: - - ./manage.py collectstatic - - python -m pytest -v -m "not webtest" - -notifications: - email: false - webhooks: - urls: - - https://webhooks.gitter.im/e/b119fa557626081e1f36 - on_success: change # options: [always|never|change] default: always - on_failure: always # options: [always|never|change] default: always - on_start: never # options: [always|never|change] default: always diff --git a/Dockerfile b/Dockerfile index c4308986e..4a70b68df 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,11 @@ -FROM python@sha256:e9b7e3b4e9569808066c5901b8a9ad315a9f14ae8d3949ece22ae339fff2cad0 +FROM python:3.8 -# PYTHONUNBUFFERED=1 ensures that the python output is set straight -# to the terminal without buffering it first +# Force unbuffered stdout and stderr (i.e. they are flushed to terminal immediately) ENV PYTHONUNBUFFERED 1 -RUN mkdir /vulnerablecode -WORKDIR /vulnerablecode -ADD . /vulnerablecode/ -RUN pip install -r requirements.txt && \ - DJANGO_DEV=1 python manage.py collectstatic -LABEL "base_image": "pkg:docker/python@sha256%3Ae9b7e3b4e9569808066c5901b8a9ad315a9f14ae8d3949ece22ae339fff2cad0" -LABEL "dockerfile_url": "https://github.com/nexB/vulnerablecode/blob/develop/Dockerfile" -LABEL "homepage_url": "https://github.com/nexB/vulnerablecode" -LABEL "license": "Apache-2.0" \ No newline at end of file +RUN mkdir /opt/vulnerablecode && \ + mkdir -p /var/vulnerablecode/static/ +WORKDIR /opt/vulnerablecode +COPY . . +RUN python -m pip install --upgrade pip && \ + pip install -r requirements.txt diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..3fb472bc6 --- /dev/null +++ b/Makefile @@ -0,0 +1,117 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# http://nexb.com and https://github.com/nexB/scancode.io +# The ScanCode.io software is licensed under the Apache License version 2.0. +# Data generated with ScanCode.io is provided as-is without warranties. +# ScanCode is a trademark of nexB Inc. +# +# You may not use this software except in compliance with the License. +# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software distributed +# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# +# Data Generated with ScanCode.io is provided on an "AS IS" BASIS, WITHOUT WARRANTIES +# OR CONDITIONS OF ANY KIND, either express or implied. No content created from +# ScanCode.io should be considered or used as legal advice. Consult an Attorney +# for any legal advice. +# +# ScanCode.io is a free software code scanning tool from nexB Inc. and others. +# Visit https://github.com/nexB/scancode.io for support and download. +# Modified for VulnerableCode use + +# Python version can be specified with `$ PYTHON_EXE=python3.x make conf` +PYTHON_EXE?=python3 +VENV=venv +ACTIVATE?=. ${VENV}/bin/activate; +VIRTUALENV_PYZ=etc/thirdparty/virtualenv.pyz +BLACK_ARGS=-l 100 . +# Do not depend on Python to generate the SECRET_KEY +GET_SECRET_KEY=`base64 /dev/urandom | head -c50` +# Customize with `$ make envfile ENV_FILE=/etc/vulnerablecode/.env` +ENV_FILE=.env +# Customize with `$ make postgres VULNERABLECODE_DB_PASSWORD=YOUR_PASSWORD` +VULNERABLECODE_DB_PASSWORD=vulnerablecode + +# Use sudo for postgres, but only on Linux +UNAME := $(shell uname) +ifeq ($(UNAME), Linux) + SUDO_POSTGRES=sudo -u postgres +else + SUDO_POSTGRES= +endif + +virtualenv: + @echo "-> Bootstrap the virtualenv with PYTHON_EXE=${PYTHON_EXE}" + @${PYTHON_EXE} ${VIRTUALENV_PYZ} --never-download --no-periodic-update ${VENV} + +conf: virtualenv + @echo "-> Install dependencies" + @${ACTIVATE} pip install -r requirements.txt + +dev: conf + @echo "-> Configure and install development dependencies" + @${ACTIVATE} pip install -r requirements-dev.txt + +envfile: + @echo "-> Create the .env file and generate a secret key" + @if test -f ${ENV_FILE}; then echo ".env file exists already"; exit 1; fi + @mkdir -p $(shell dirname ${ENV_FILE}) && touch ${ENV_FILE} + @echo SECRET_KEY=\"${GET_SECRET_KEY}\" > ${ENV_FILE} + +check: + @echo "-> Run black validation" + @${ACTIVATE} black --check ${BLACK_ARGS} + +black: + @echo "-> Apply black code formatter" + ${VENV}/bin/black ${BLACK_ARGS} + +valid: black + +clean: + @echo "-> Clean the Python env" + rm -rm ${VENV} + +migrate: + @echo "-> Apply database migrations" + ${ACTIVATE} ./manage.py migrate + +postgres: + @echo "-> Configure PostgreSQL database" + @echo "-> Create database user 'vulnerablecode'" + ${SUDO_POSTGRES} createuser --no-createrole --no-superuser --login --inherit --createdb vulnerablecode || true + ${SUDO_POSTGRES} psql -c "alter user vulnerablecode with encrypted password '${VULNERABLECODE_DB_PASSWORD}';" || true + @echo "-> Drop 'vulnerablecode' database" + ${SUDO_POSTGRES} dropdb vulnerablecode || true + @echo "-> Create 'vulnerablecode' database" + ${SUDO_POSTGRES} createdb --encoding=utf-8 --owner=vulnerablecode vulnerablecode + @$(MAKE) migrate + +sqlite: + @echo "-> Configure SQLite database" + @echo VULNERABLECODE_DB_ENGINE=\"django.db.backends.sqlite3\" >> ${ENV_FILE} + @echo VULNERABLECODE_DB_NAME=\"sqlite3.db\" >> ${ENV_FILE} + @$(MAKE) migrate + +run: + ${ACTIVATE} ./manage.py runserver + +test: + @echo "-> Run the test suite" + ${ACTIVATE} ${PYTHON_EXE} -m pytest -v -m "not webtest" + +package: conf + @echo "-> Create a VulnerableCode package for offline installation" + @echo "-> Fetch dependencies in thirdparty/ for offline installation" + rm -rf thirdparty && mkdir thirdparty + ${VENV}/bin/pip download -r requirements.txt --no-cache-dir --dest thirdparty + @echo "-> Create package in dist/ for offline installation" + ${VENV}/bin/python setup.py sdist + +install: virtualenv + @echo "-> Install and configure the Python env with base dependencies, offline" + ${VENV}/bin/pip install --upgrade --no-index --no-cache-dir --find-links=thirdparty -e . + +.PHONY: virtualenv conf dev envfile install check valid clean migrate postgres sqlite run test package diff --git a/README.rst b/README.rst index a80551a2f..d35028e46 100644 --- a/README.rst +++ b/README.rst @@ -90,29 +90,10 @@ First clone the source code:: cd vulnerablecode - - Using Docker Compose -~~~~~~~~~~~~~~~~~~~~ - -An easy way to set up VulnerableCode is with docker containers and docker -compose. For this you need to have the following installed. - -- Docker Engine. Find instructions to install it - `here `__ -- Docker Compose. Find instructions to install it - `here `__ - -Use ``sudo docker-compose up`` to start VulnerableCode. Then access -VulnerableCode at http://localhost:8000/ or at http://127.0.0.1:8000/ - -**Important**: Don't forget to run ``sudo docker-compose up -d --no-deps --build web`` to sync your instance after every ``git pull``. - - -Use ``sudo docker-compose exec web bash`` to access the VulnerableCode -container. From here you can access ``manage.py`` and run management commands -to import data as specified below. +--------------------- +Please find the docker documentation in `Docker Installation `__ Without Docker Compose ~~~~~~~~~~~~~~~~~~~~~~ @@ -159,11 +140,13 @@ for this purpose:: SECRET_KEY=$(python -c "from django.core.management import utils; print(utils.get_random_secret_key())") -You will also need to setup the VC_ALLOWED_HOSTS environment variable to match the hostname where the app is deployed:: +You will also need to setup the `ALLOWED_HOSTS` array inside `vulnerablecode/settings.py` according to +[django specifications](https://docs.djangoproject.com/en/3.2/ref/settings/#allowed-hosts). One example would be: +.. code-block:: python - VC_ALLOWED_HOSTS=vulnerablecode.your.domain.example.com + ALLOWED_HOSTS = ['vulnerablecode.your.domain.example.com'] -You can specify several host by separating them with a colon `:` +You can specify several hosts by separating them with a comma (`,`) Using Nix ~~~~~~~~~ @@ -213,6 +196,8 @@ Use these commands to run code style checks and the test suite:: python -m pytest +.. _Data import: + Data import ----------- @@ -266,7 +251,6 @@ If you want to run the import periodically, you can use a systemd timer:: [Service] Type=oneshot - Environment="DJANGO_DEV=1" ExecStart=/path/to/venv/bin/python /path/to/vulnerablecode/manage.py import --all $ cat ~/.config/systemd/user/vulnerablecode.timer diff --git a/docker-compose.yml b/docker-compose.yml index c09057371..756a117c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,22 +1,41 @@ version: '3' services: - web: - environment: - - DJANGO_DEV=1 - - VC_DB_HOST=db + db: + image: postgres + env_file: + - docker.env + volumes: + - db_data:/var/lib/postgresql/data/ + + vulnerablecode: build: . - command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000" - container_name: "vulnerablecode" + command: /bin/sh -c " + ./manage.py migrate && + ./manage.py collectstatic --no-input --clear && + gunicorn vulnerablecode.wsgi:application -u nobody -g nogroup --bind :8000 --timeout 600 --workers 2" + env_file: + - docker.env volumes: - - .:/vulnerablecode - ports: - - "8000:8000" + - static:/var/vulnerablecode/static/ + restart: on-failure depends_on: - db - db: - image: postgres - environment: - - POSTGRES_DB=vulnerablecode - - POSTGRES_USER=vulnerablecode - - POSTGRES_PASSWORD=vulnerablecode \ No newline at end of file + + nginx: + image: nginx + env_file: + - docker.env + volumes: + - static:/var/vulnerablecode/static/ + - ./etc/nginx/templates/:/etc/nginx/templates/ + ports: + - ${NGINX_PORT:-8000}:80 + depends_on: + - vulnerablecode + + +volumes: + static: + db_data: + diff --git a/docker.env b/docker.env new file mode 100644 index 000000000..4a06ac2ac --- /dev/null +++ b/docker.env @@ -0,0 +1,8 @@ +POSTGRES_DB=vulnerablecode +POSTGRES_USER=vulnerablecode +POSTGRES_PASSWORD=vulnerablecode + +DJANGO_SETTINGS_MODULE=vulnerablecode.settings +VULNERABLECODE_DB_HOST=db + +GUNICORN_SERVER=vulnerablecode diff --git a/etc/nginx/templates/default.conf.template b/etc/nginx/templates/default.conf.template new file mode 100644 index 000000000..84b153ce2 --- /dev/null +++ b/etc/nginx/templates/default.conf.template @@ -0,0 +1,20 @@ +upstream gunicorn_app { + server ${GUNICORN_SERVER}:8000; +} + +server { + listen 80; + + location / { + proxy_pass http://gunicorn_app; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_redirect off; + client_max_body_size 10G; + proxy_read_timeout 600s; + } + + location /static/ { + alias /var/vulnerablecode/static/; + } +} diff --git a/etc/nix/flake.nix b/etc/nix/flake.nix index fb783de06..9f45a5a41 100644 --- a/etc/nix/flake.nix +++ b/etc/nix/flake.nix @@ -138,7 +138,6 @@ buildPhase = '' source ${libSh} initPostgres $(pwd) - export DJANGO_DEV=1 ${vulnerablecode}/manage.py migrate ''; diff --git a/etc/nix/test-import-using-nix.sh b/etc/nix/test-import-using-nix.sh index 641289ecb..37ceadeb4 100755 --- a/etc/nix/test-import-using-nix.sh +++ b/etc/nix/test-import-using-nix.sh @@ -10,7 +10,6 @@ THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" DEFAULT_INSTALL_DIR=$VULNERABLECODE_INSTALL_DIR # in the Nix store, see flake.nix INSTALL_DIR=${INSTALL_DIR:-$DEFAULT_INSTALL_DIR} ARGS=$(if [ $# -eq 0 ]; then echo "--all"; else echo "$@"; fi) -export DJANGO_DEV=${DJANGO_DEV:-1} TEMPDIR=$(mktemp -d -p "$THIS_DIR") export TEMPDIR diff --git a/etc/thirdparty/virtualenv.pyz b/etc/thirdparty/virtualenv.pyz new file mode 100644 index 000000000..3058a0883 Binary files /dev/null and b/etc/thirdparty/virtualenv.pyz differ diff --git a/requirements.txt b/requirements.txt index 114703d31..57dc4ad21 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,5 @@ beautifulsoup4>=4.9.3 python-dateutil>=2.8.1 toml>=0.10.2 lxml>=4.6.3 +gunicorn>=20.1.0 +django-environ==0.4.5 diff --git a/vulnerablecode/settings.py b/vulnerablecode/settings.py index daf76ed89..6107d6cdf 100644 --- a/vulnerablecode/settings.py +++ b/vulnerablecode/settings.py @@ -1,35 +1,21 @@ -""" -Django settings for app project. +from pathlib import Path -Generated by 'django-admin startproject' using Django 1.11. +import environ -For more information on this file, see -https://docs.djangoproject.com/en/1.11/topics/settings/ +PROJECT_DIR = Path(__file__).resolve().parent +ROOT_DIR = PROJECT_DIR.parent -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.11/ref/settings/ -""" +# Environment -import os +env_file = str(ROOT_DIR.joinpath(".env")) +if Path(env_file).exists(): + environ.Env.read_env(env_file) +env = environ.Env(TRAVIS=(bool, False)) -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +SECRET_KEY = env.str("SECRET_KEY") -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -DEBUG = False -SECRET_KEY = os.environ.get( - "SECRET_KEY", default="this-is-a-dummy-key-and-its-overridden-for-prod-servers" -) - -# SECURITY WARNING: don't run with debug turned on in production! - -DEBUG_PROPAGATE_EXCEPTIONS = True - -ALLOWED_HOSTS = os.environ.get("VC_ALLOWED_HOSTS", "*").split(":") +ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=[".localhost", "127.0.0.1", "[::1]"]) # Application definition @@ -62,7 +48,7 @@ TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [os.path.join(BASE_DIR, "templates")], + "DIRS": [str(PROJECT_DIR.joinpath("templates"))], "APP_DIRS": True, "OPTIONS": { "debug": False, @@ -81,20 +67,19 @@ # Database -# https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { "default": { - "ENGINE": "django.db.backends.postgresql", - "NAME": os.environ.get("VC_DB_NAME", "vulnerablecode"), - "USER": os.environ.get("VC_DB_USER", "vulnerablecode"), - "PASSWORD": os.environ.get("VC_DB_PASSWORD", "vulnerablecode"), - "HOST": os.environ.get("VC_DB_HOST", "localhost"), - "PORT": os.environ.get("VC_DB_PORT", "5432"), + "ENGINE": env.str("VULNERABLECODE_DB_ENGINE", "django.db.backends.postgresql"), + "NAME": env.str("VULNERABLECODE_DB_NAME", "vulnerablecode"), + "USER": env.str("VULNERABLECODE_DB_USER", "vulnerablecode"), + "PASSWORD": env.str("VULNERABLECODE_DB_PASSWORD", "vulnerablecode"), + "HOST": env.str("VULNERABLECODE_DB_HOST", "localhost"), + "PORT": env.str("VULNERABLECODE_DB_PORT", "5432"), } } -if "TRAVIS" in os.environ: +if env("TRAVIS"): DATABASES["default"]["USER"] = "postgres" DATABASES["default"]["PASSWORD"] = "" @@ -122,7 +107,6 @@ # Internationalization -# https://docs.djangoproject.com/en/1.11/topics/i18n/ LANGUAGE_CODE = "en-us" @@ -136,11 +120,15 @@ # Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.11/howto/static-files/ -STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") STATIC_URL = "/static/" +STATIC_ROOT = "/var/vulnerablecode/static" + +STATICFILES_DIRS = [ + str(PROJECT_DIR.joinpath("static")), +] + # REST API REST_FRAMEWORK = { "DEFAULT_FILTER_BACKENDS": ("django_filters.rest_framework.DjangoFilterBackend",), diff --git a/vulnerabilities/static/css/bulma.css b/vulnerablecode/static/css/bulma.css similarity index 100% rename from vulnerabilities/static/css/bulma.css rename to vulnerablecode/static/css/bulma.css diff --git a/vulnerabilities/static/css/bulma.css.ABOUT b/vulnerablecode/static/css/bulma.css.ABOUT similarity index 100% rename from vulnerabilities/static/css/bulma.css.ABOUT rename to vulnerablecode/static/css/bulma.css.ABOUT diff --git a/vulnerabilities/static/css/bulma.css.LICENSE b/vulnerablecode/static/css/bulma.css.LICENSE similarity index 100% rename from vulnerabilities/static/css/bulma.css.LICENSE rename to vulnerablecode/static/css/bulma.css.LICENSE diff --git a/vulnerabilities/static/css/custom.css b/vulnerablecode/static/css/custom.css similarity index 100% rename from vulnerabilities/static/css/custom.css rename to vulnerablecode/static/css/custom.css diff --git a/vulnerabilities/static/css/font-awesome.css b/vulnerablecode/static/css/font-awesome.css similarity index 100% rename from vulnerabilities/static/css/font-awesome.css rename to vulnerablecode/static/css/font-awesome.css diff --git a/vulnerabilities/static/css/font-awesome.css.ABOUT b/vulnerablecode/static/css/font-awesome.css.ABOUT similarity index 100% rename from vulnerabilities/static/css/font-awesome.css.ABOUT rename to vulnerablecode/static/css/font-awesome.css.ABOUT diff --git a/vulnerabilities/static/css/font-awesome.css.LICENSE b/vulnerablecode/static/css/font-awesome.css.LICENSE similarity index 100% rename from vulnerabilities/static/css/font-awesome.css.LICENSE rename to vulnerablecode/static/css/font-awesome.css.LICENSE diff --git a/vulnerabilities/static/fonts/FontAwesome.otf b/vulnerablecode/static/fonts/FontAwesome.otf similarity index 100% rename from vulnerabilities/static/fonts/FontAwesome.otf rename to vulnerablecode/static/fonts/FontAwesome.otf diff --git a/vulnerabilities/static/fonts/FontAwesome.otf.ABOUT b/vulnerablecode/static/fonts/FontAwesome.otf.ABOUT similarity index 100% rename from vulnerabilities/static/fonts/FontAwesome.otf.ABOUT rename to vulnerablecode/static/fonts/FontAwesome.otf.ABOUT diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.eot b/vulnerablecode/static/fonts/fontawesome-webfont.eot similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.eot rename to vulnerablecode/static/fonts/fontawesome-webfont.eot diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.eot.ABOUT b/vulnerablecode/static/fonts/fontawesome-webfont.eot.ABOUT similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.eot.ABOUT rename to vulnerablecode/static/fonts/fontawesome-webfont.eot.ABOUT diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.svg b/vulnerablecode/static/fonts/fontawesome-webfont.svg similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.svg rename to vulnerablecode/static/fonts/fontawesome-webfont.svg diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.svg.ABOUT b/vulnerablecode/static/fonts/fontawesome-webfont.svg.ABOUT similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.svg.ABOUT rename to vulnerablecode/static/fonts/fontawesome-webfont.svg.ABOUT diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.ttf b/vulnerablecode/static/fonts/fontawesome-webfont.ttf similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.ttf rename to vulnerablecode/static/fonts/fontawesome-webfont.ttf diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.ttf.ABOUT b/vulnerablecode/static/fonts/fontawesome-webfont.ttf.ABOUT similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.ttf.ABOUT rename to vulnerablecode/static/fonts/fontawesome-webfont.ttf.ABOUT diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.woff b/vulnerablecode/static/fonts/fontawesome-webfont.woff similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.woff rename to vulnerablecode/static/fonts/fontawesome-webfont.woff diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.woff.ABOUT b/vulnerablecode/static/fonts/fontawesome-webfont.woff.ABOUT similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.woff.ABOUT rename to vulnerablecode/static/fonts/fontawesome-webfont.woff.ABOUT diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.woff2 b/vulnerablecode/static/fonts/fontawesome-webfont.woff2 similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.woff2 rename to vulnerablecode/static/fonts/fontawesome-webfont.woff2 diff --git a/vulnerabilities/static/fonts/fontawesome-webfont.woff2.ABOUT b/vulnerablecode/static/fonts/fontawesome-webfont.woff2.ABOUT similarity index 100% rename from vulnerabilities/static/fonts/fontawesome-webfont.woff2.ABOUT rename to vulnerablecode/static/fonts/fontawesome-webfont.woff2.ABOUT diff --git a/vulnerabilities/static/fonts/fontawesome.LICENSE b/vulnerablecode/static/fonts/fontawesome.LICENSE similarity index 100% rename from vulnerabilities/static/fonts/fontawesome.LICENSE rename to vulnerablecode/static/fonts/fontawesome.LICENSE