# ATST [![Build Status](https://travis-ci.org/dod-ccpo/atst.svg?branch=master)](https://travis-ci.org/dod-ccpo/atst) ## Description This is the main user-facing web application for the ATAT stack. All end-user requests are handled by ATST, with it making backend calls to various microservices when appropriate. ## Installation ### Requirements See the [scriptz](https://github.com/dod-ccpo/scriptz) repository for the shared requirements and guidelines for all ATAT applications. Additionally, ATST requires a redis instance for session management. Have redis installed and running. By default, ATST will try to connect to a redis instance running on localhost on its default port, 6379. ### Cloning This project contains git submodules. Here is an example clone command that will automatically initialize and update those modules: git clone --recurse-submodules git@github.com:dod-ccpo/atst.git If you have an existing clone that does not yet contain the submodules, you can set them up with the following command: git submodule update --init --recursive ### Setup This application uses Pipenv to manage Python dependencies and a virtual environment. Instead of the classic `requirements.txt` file, pipenv uses a Pipfile and Pipfile.lock, making it more similar to other modern package managers like yarn or mix. To perform the installation, run the setup script: script/setup The setup script creates the virtual environment, and then calls script/bootstrap to install all of the Python and Node dependencies. To enter the virtualenv manually (a la `source .venv/bin/activate`): pipenv shell If you want to automatically load the virtual environment whenever you enter the project directory, take a look at [direnv](https://direnv.net/). An `.envrc` file is included in this repository. direnv will activate and deactivate virtualenvs for you when you enter and leave the directory. ## Running (development) To start the app locally in the foreground and watch for changes: script/dev_server ### Users There are currently six mock users for development: - Sam (a CCPO) - Amanda - Brandon - Christina - Dominick - Erica To log in as one of them, navigate to `/login-dev?username=`. For example `/login-dev?username=amanda`. ## Testing To run lint, static analysis, and unit tests: script/test To run only the unit tests: pipenv run python -m pytest To re-run tests each time a file is changed: pipenv run ptw ## Notes tornado templates are like mustache templates -- add the following to `~/.vim/filetype.vim` for syntax highlighting: :au BufRead *.html.to set filetype=mustache ## Icons To render an icon use `{% module Icon('name') %}` in a template, where `name` is the filename of an svg file in `static/icons`. All icons used should be from the Noun Project, specifically [this collection](https://thenounproject.com/monstercritic/collection/tinicons-a-set-of-tiny-icons-perfect-for-ui-elemen/) if possible. SVG markup should be cleaned an minified, [Svgsus](http://www.svgs.us/) works well. ## Deployment The `/login-dev` endpoint is protected by HTTP basic auth when deployed. This can be configured for NGINX following the instructions [here](https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/). The following config should added within the main server block for the site: ``` location /login-dev { auth_basic "Developer Access"; auth_basic_user_file /etc/apache2/.htpasswd; [proxy information should follow this] } ``` The location block will require the same proxy pass configuration as other location blocks for the app.