# Scope

Django project, without virtual environment.

Hint, to create a virtualenv in the current dir: `virtualenv --python=python3.7 .`
This probably requires you to have built python3.7 manually and have debian packages installed: `python3-virtualenv python-virtualenv`

Then activate the virtenv: `source bin/activate`
To later deactive: `deactivate`


# Get started

## Prerequisites
### Python 3.7.4

Older versions might work, development environ and runtime environment run Python-3.7.4
Currently newer then in the repo's, if that's still the case, you might have to compile and built it yourself.

If you notice you can' t use ssl when using pip, you should have installed `libssl-dev` before building python, or any of the following packages: `libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev`

### System packages needed for psycopg2
Install either postgresql-server-dev-X.Y or libpq-dev: `sudo apt install`...

## Download the project files.
 1. `git clone ssh://h0v1n8.nl/srv/git/h0v1n8-website.git`

## Python packages
Install required pyton packages: `pip3 install -r requirements.txt`

## Postgres database with user.
Fill in the passwords, don't change the database name, it's hardcoded in pyRot, for now.
1. `sudo apt install postrgresql`
1. `sudo su - postgresql`
1. `psql`
1. `CREATE ROLE website WITH LOGIN PASSWORD '';
1. `CREATE DATABASE website WITH OWNER = website;`
1. `CREATE ROLE pyrot WITH LOGIN PASSWORD '';`
1. `GRANT ALL ON DATABASE website TO pyrot;`
1. Connect to database website
1. `GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO pyrot;`
1. `GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO pyrot;`

## Configuration
1. Set the database authentication details in the following file, for the robot: `rotbot/bot.py`
1. Create file `website/website/local_settings.py` and fill in the key and password:
```
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = ''

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'website',
        'USER': 'website',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
```

## Create the database tables, static files and superuser.
1. `cd website`
1. `python manage.py makemigrations`
1. `python manage.py migrate`
1. `python manage.py collectstatic`
1. `python manage.py createsuperuser`

## uwsgi
1. `sudo ln -s /opt/h0v1n8-website-env/website_uwsgi.ini /etc/uwsgi/vassals/website_uwsgi.ini`
1. `sudo nano /etc/rc.local`:
```
#!/bin/sh

/opt/h0v1n8-env/bin/uwsgi --emperor /etc/uwsgi/vassals/ --daemonize /var/log/uwsgi-emperor.log`

exit 0
```
Test with: `bin/uwsgi --emperor /etc/uwsgi/vassals/`
TBD
/etc/rc.local:

## Nginx configuration
1. See if you to change `STATIC_ROOT` in `website/website/settings.py`.
1. `sudo ln -s /opt/h0v1n8-website-env/website_nginx.conf /etc/nginx/sites-enabled/website_nginx.conf`
1. `sudo systemctl reload nginx`


# Testing the project.

## webgui
1. `cd website`
1. `python manage.py runserver`


# Running the project

## pyRot
The pythonic version of RotBot, there have been 5 earlier versions including winRot and javaRot.

1. `cd rotbot`
1. `python bot.py 1` Where `1` is the ID of the server database record.
Tip: Run it in a "screen".

## h0v1n8 website
1. `sudo systemctl start rc-`


# Updating
1. `git pull`
1.

# Edeting the look of the webgui

## Build Fomatic-ui 2.7.8

### Requirements: NodeJS 10.15.3 & NPM 6.4.1

On debian: `sudo apt install npm`
