FROM debian:stretch
LABEL maintainer="Evgenii Protsenko <procenkoeg@yandex-team.ru>"

# Dependencies
RUN echo "deb http://deb.debian.org/debian stable-backports main" >> /etc/apt/sources.list
RUN apt-get -q update
RUN apt-get -qy install python-pymongo python-crypto python-setuptools \
    python-future python-bottle ca-certificates

# Py2neo
ADD https://github.com/nigelsmall/py2neo/tarball/py2neo-3.0.0 ./py2neo.tar.gz
RUN tar zxf ./py2neo.tar.gz && rm ./py2neo.tar.gz && \
    mv nigelsmall-py2neo-* py2neo && cd py2neo && \
    python setup.py build && python setup.py install && \
    cd ../ && rm -rf py2neo/

# IVRE
# RUN apt-get -qy install git python-pip
# RUN git clone https://github.com/cea-sec/ivre
# RUN cd ivre/ && pip install -r requirements-postgres.txt && \
#     python setup.py build && python setup.py install && \
#     apt-get -qy --purge autoremove git && cd ../ && rm -rf ivre/
RUN apt-get -y install python-pip
ADD ivre.tar ivre-src
RUN cd ivre-src/ivre && python setup.py build && \
    python setup.py install && pip install -r requirements-postgres.txt

# Config
ADD ivre.conf /etc/ivre.conf

# Install & configure Nginx
RUN apt-get -qy install nginx spawn-fcgi php-fpm php-gd fcgiwrap uwsgi-plugin-python
ADD nginx-default-site /etc/nginx/sites-available/default
RUN echo '\ndaemon off;' >> /etc/nginx/nginx.conf
RUN mkdir /var/run/uwsgi

# Download & install Dokuwiki
ADD http://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz ./dokuwiki-stable.tgz
RUN tar --transform='s#^dokuwiki-\([^/]*\)#var/www/dokuwiki#' -zxf ./dokuwiki-stable.tgz && rm ./dokuwiki-stable.tgz

# IVRE-specific
RUN apt-get -qy install patch && \
    patch var/www/dokuwiki/inc/html.php usr/local/share/ivre/dokuwiki/backlinks.patch && \
    apt-get -qy --purge autoremove patch
RUN ln -s /usr/local/share/ivre/dokuwiki/doc var/www/dokuwiki/data/pages/doc && \
    ln -s /usr/local/share/ivre/dokuwiki/media/logo.png var/www/dokuwiki/data/media/wiki/logo.png && \
    mkdir var/www/dokuwiki/data/media/doc && \
    ln -s /usr/local/share/doc/ivre/screenshots var/www/dokuwiki/data/media/doc/ && \
    ln -s /usr/local/share/ivre/dokuwiki/media/doc var/www/dokuwiki/data/media/wiki/doc && \
    echo 'WEB_GET_NOTEPAD_PAGES = ("localdokuwiki", ("/var/www/dokuwiki/data/pages",))' >> /etc/ivre.conf

# Configure Dokuwiki
RUN rm var/www/dokuwiki/install.php
ADD doku-conf-local.php var/www/dokuwiki/conf/local.php
ADD doku-conf-plugins.local.php var/www/dokuwiki/conf/plugins.local.php
ADD doku-conf-acl.auth.php var/www/dokuwiki/conf/acl.auth.php
ADD doku-conf-users.auth.php var/www/dokuwiki/conf/users.auth.php
RUN chown -Rh www-data:www-data var/www/dokuwiki/data var/www/dokuwiki/conf var/www/dokuwiki/lib/plugins

# Needed by Neo4j
RUN mkdir /var/www/.neo4j && chown www-data:www-data /var/www/.neo4j

EXPOSE 80
CMD service php7.0-fpm start && \
    service fcgiwrap start && \
    for d in "" /local; do if [ -f "/usr$d/share/ivre/web/wsgi/app.wsgi" ]; \
      then APP="/usr$d/share/ivre/web/wsgi/app.wsgi"; break; fi; done && \
    uwsgi --plugin /usr/lib/uwsgi/plugins/python_plugin.so \
      --daemonize /var/log/nginx/uwsgi.log \
      --socket /var/run/uwsgi/sock \
      --processes 4 --threads 2 \
      --mount /cgi="$APP" --manage-script-name && \
    exec /usr/sbin/nginx
