# Duo publishes no official image; build from their source tarball.
# Install flags match Duo's documented non-interactive install.

FROM ubuntu:24.04 AS build

ARG DUO_VERSION=latest
RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      build-essential libssl-dev libffi-dev perl zlib1g-dev wget ca-certificates \
 && rm -rf /var/lib/apt/lists/*

RUN wget -q "https://dl.duosecurity.com/duoauthproxy-${DUO_VERSION}-src.tgz" -O /tmp/duo-src.tgz \
 && mkdir /tmp/duo \
 && tar xzf /tmp/duo-src.tgz -C /tmp/duo --strip-components=1

RUN groupadd -r -g 35505 duo \
 && useradd -r -u 35505 -g duo -d /opt/duoauthproxy -s /usr/sbin/nologin duo \
 && cd /tmp/duo && make \
 && cd duoauthproxy-build \
 && ./install --install-dir /opt/duoauthproxy --service-user duo \
      --log-group duo --create-init-script no --enable-selinux no

FROM ubuntu:24.04

# gettext-base = envsubst for rendering authproxy.cfg from env vars
RUN apt-get update \
 && apt-get install -y --no-install-recommends ca-certificates gettext-base \
 && rm -rf /var/lib/apt/lists/* \
 && groupadd -r -g 35505 duo \
 && useradd -r -u 35505 -g duo -d /opt/duoauthproxy -s /usr/sbin/nologin duo

COPY --from=build --chown=duo:duo /opt/duoauthproxy /opt/duoauthproxy
COPY --chown=duo:duo authproxy.cfg.template /opt/duoauthproxy/conf/authproxy.cfg.template
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

USER duo
ENTRYPOINT ["/entrypoint.sh"]
