# syntax=docker/dockerfile:1

ARG GO_VERSION=1.26.5

FROM debian:bookworm AS mtproxy-builder

ARG MTPROXY_COMMIT=f36d8af769ffaeac36978d38c2c0f6d1104c2137
ARG MTPROXY_SHA256=919795c416b870670841a21d1930ad97a24c7b84b9eb8c6f9e3de32f2fdf4655

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
      build-essential ca-certificates curl libssl-dev zlib1g-dev \
    && rm -rf /var/lib/apt/lists/*

RUN curl --fail --silent --show-error --location \
      --proto '=https' --proto-redir '=https' --tlsv1.2 \
      --output /tmp/mtproxy.tar.gz \
      "https://github.com/TelegramMessenger/MTProxy/archive/${MTPROXY_COMMIT}.tar.gz" \
    && echo "${MTPROXY_SHA256}  /tmp/mtproxy.tar.gz" | sha256sum -c - \
    && mkdir -p /src/mtproxy \
    && tar -C /src/mtproxy --strip-components=1 -xzf /tmp/mtproxy.tar.gz \
    && make -C /src/mtproxy -j"$(nproc)" \
    && test -x /src/mtproxy/objs/bin/mtproto-proxy

FROM golang:${GO_VERSION}-bookworm AS relay-builder

ARG TPROXY_COMMIT=c8adb8b7c6b7fc46c12ae3acb68be9070c26a8e8
ARG TPROXY_SHA256=a78b48f536180143dd7005785ca397310c36ee0b132e19949a45d64f586ab549

RUN apt-get update \
    && apt-get install -y --no-install-recommends ca-certificates curl \
    && rm -rf /var/lib/apt/lists/*

RUN curl --fail --silent --show-error --location \
      --proto '=https' --proto-redir '=https' --tlsv1.2 \
      --output /tmp/tproxy.tar.gz \
      "https://github.com/telegramdesktop/tproxy-server/archive/${TPROXY_COMMIT}.tar.gz" \
    && echo "${TPROXY_SHA256}  /tmp/tproxy.tar.gz" | sha256sum -c - \
    && mkdir -p /src/tproxy \
    && tar -C /src/tproxy --strip-components=1 -xzf /tmp/tproxy.tar.gz

WORKDIR /src/tproxy
RUN go test ./... \
    && CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' \
      -o /out/tproxy-server ./cmd/tproxy-server

WORKDIR /src/ingress
COPY ingress/ingress.go ./ingress.go
RUN CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' \
      -o /out/ingress ./ingress.go

FROM debian:bookworm-slim AS runtime

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
      ca-certificates curl hostname libssl3 openssl util-linux zlib1g \
    && rm -rf /var/lib/apt/lists/* \
    && useradd --system --uid 10001 --home-dir /nonexistent \
      --shell /usr/sbin/nologin mtproxy \
    && useradd --system --uid 10002 --home-dir /nonexistent \
      --shell /usr/sbin/nologin tproxy

COPY --from=mtproxy-builder /src/mtproxy/objs/bin/mtproto-proxy /usr/local/bin/mtproto-proxy
COPY --from=relay-builder /out/tproxy-server /usr/local/bin/tproxy-server
COPY --from=relay-builder /out/ingress /usr/local/bin/tproxy-ingress
COPY docker/entrypoint.sh /usr/local/bin/tproxy-entrypoint
COPY site/ /srv/tproxy-site/

RUN chown root:root \
      /usr/local/bin/mtproto-proxy \
      /usr/local/bin/tproxy-server \
      /usr/local/bin/tproxy-ingress \
      /usr/local/bin/tproxy-entrypoint \
    && chmod 0755 \
      /usr/local/bin/mtproto-proxy \
      /usr/local/bin/tproxy-server \
      /usr/local/bin/tproxy-ingress \
      /usr/local/bin/tproxy-entrypoint \
    && find /srv/tproxy-site -type d -exec chmod 0755 {} + \
    && find /srv/tproxy-site -type f -exec chmod 0644 {} +

VOLUME ["/data"]
EXPOSE 8088

ENTRYPOINT ["/usr/local/bin/tproxy-entrypoint"]
