ARG NODE_IMAGE=node:22-trixie-slim
FROM ${NODE_IMAGE} AS webssh2-builder

ENV DEBIAN_FRONTEND=noninteractive

# renovate: datasource=github-releases depName=billchurch/webssh2
ARG WEBSSH2_VERSION=5.0.1

RUN apt-get update \
    && apt-get install -y --no-install-recommends ca-certificates curl \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /opt/webssh2 \
    && curl -fsSLo "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz" "https://github.com/billchurch/webssh2/releases/download/webssh2-server-v${WEBSSH2_VERSION}/webssh2-${WEBSSH2_VERSION}.tar.gz" \
    && curl -fsSLo "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" "https://github.com/billchurch/webssh2/releases/download/webssh2-server-v${WEBSSH2_VERSION}/webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" \
    && cd /tmp \
    && sha256sum -c "webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" \
    && tar -xzf "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz" -C /opt/webssh2 \
    && cd /opt/webssh2 \
    && npm ci --omit=dev \
    && rm -f "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz" "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" \
    && npm cache clean --force

FROM debian:trixie-slim

# renovate: datasource=github-releases depName=janosmiko/lfk
ARG LFK_VERSION=0.14.16
# renovate: datasource=github-releases depName=kubernetes/kubernetes
ARG KUBECTL_VERSION=1.36.2
# renovate: datasource=github-releases depName=helm/helm
ARG HELM_VERSION=3.21.2
# renovate: datasource=github-releases depName=derailed/k9s
ARG K9S_VERSION=0.51.0


ENV DEBIAN_FRONTEND=noninteractive \
    WEB_SSH_PORT=3000 \
    WEBSSH2_LISTEN_PORT=3001 \
    WEBSSH2_SSH_HOST=127.0.0.1 \
    WEBSSH2_SSH_PORT=2222 \
    SSH_PORT=2222 \
    WEBSSH2_HEADER_TEXT=k8s-mgmt-pod \
    WEBSSH2_SSH_HOSTKEY_ENABLED=false

COPY --from=webssh2-builder /usr/local /usr/local
COPY --from=webssh2-builder /opt/webssh2 /opt/webssh2

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        bash-completion \
        ca-certificates \
        curl \
        tar \
        nginx-light \
        netcat-openbsd \
        openssh-client \
        openssh-server \
        openssl \
        sudo \
        tini \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /var/run/sshd /var/lib/k8s-mgmt-pod /etc/ssh/sshd_config.d \
    && useradd --create-home --shell /bin/bash admin \
    && useradd --create-home --shell /bin/bash user \
    && printf 'admin ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/90-admin-nopasswd \
    && chmod 0440 /etc/sudoers.d/90-admin-nopasswd \
    && curl -fsSLo "/tmp/lfk_${LFK_VERSION}_linux_amd64.deb" "https://github.com/janosmiko/lfk/releases/download/v${LFK_VERSION}/lfk_${LFK_VERSION}_linux_amd64.deb" \
    && curl -fsSLo /tmp/lfk.checksums "https://github.com/janosmiko/lfk/releases/download/v${LFK_VERSION}/checksums.txt" \
    && cd /tmp \
    && grep " lfk_${LFK_VERSION}_linux_amd64.deb$" /tmp/lfk.checksums | sha256sum -c - \
    && dpkg -i "/tmp/lfk_${LFK_VERSION}_linux_amd64.deb" \
    && rm -f "/tmp/lfk_${LFK_VERSION}_linux_amd64.deb" /tmp/lfk.checksums \
    && curl -fsSLo /usr/local/bin/kubectl "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \
    && curl -fsSLo /tmp/kubectl.sha256 "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256" \
    && echo "$(cat /tmp/kubectl.sha256)  /usr/local/bin/kubectl" | sha256sum -c - \
    && chmod 0755 /usr/local/bin/kubectl \
    && curl -fsSLo "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz" \
    && curl -fsSLo "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum" "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum" \
    && echo "$(awk '{print $1}' /tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum)  /tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" | sha256sum -c - \
    && tar -xzf "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" -C /tmp \
    && install -m 0755 /tmp/linux-amd64/helm /usr/local/bin/helm \
    && curl -fsSLo "/tmp/k9s_Linux_amd64.tar.gz" "https://github.com/derailed/k9s/releases/download/v${K9S_VERSION}/k9s_Linux_amd64.tar.gz" \
    && tar -xzf "/tmp/k9s_Linux_amd64.tar.gz" -C /tmp \
    && install -m 0755 /tmp/k9s /usr/local/bin/k9s \
    && mkdir -p /etc/bash_completion.d \
    && kubectl completion bash > /etc/bash_completion.d/kubectl \
    && helm completion bash > /etc/bash_completion.d/helm \
    && chmod 0644 /etc/bash_completion.d/kubectl /etc/bash_completion.d/helm \
    && rm -f /tmp/kubectl.sha256 \
    && rm -rf /tmp/linux-amd64 \
    && rm -f \
        "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" \
        "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum" \
        /tmp/k9s \
        /tmp/README.md \
        /tmp/LICENSE \
        /tmp/k9s_Linux_amd64.tar.gz \
    && rm -f /etc/ssh/ssh_host_* \
    && apt-get clean


COPY docker/sshd/10-lfk-base.conf /etc/ssh/sshd_config.d/10-lfk-base.conf
COPY docker/nginx/webssh.conf /etc/nginx/conf.d/webssh.conf
COPY docker/profile/20-k8s-tools-completion.sh /etc/profile.d/20-k8s-tools-completion.sh
COPY docker/motd /etc/motd
COPY entrypoint.sh /usr/local/bin/entrypoint.sh

RUN chmod 0755 /usr/local/bin/entrypoint.sh \
    && chmod 0644 /etc/profile.d/20-k8s-tools-completion.sh

EXPOSE 2222 3000

HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
    CMD nc -z 127.0.0.1 "${SSH_PORT:-2222}" || exit 1

ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/entrypoint.sh"]