# build stage
FROM golang:1.17.7-alpine AS build-env
RUN apk --no-cache add build-base git gcc

RUN mkdir -p /build
COPY ./ /build/

WORKDIR /build/cmd/steward/
RUN go version
RUN go build -o steward

# final stage
FROM alpine

RUN apk update && apk add curl && apk add nmap

WORKDIR /app
COPY --from=build-env /build/cmd/steward/steward /app/

ENV RING_BUFFER_PERSIST_STORE "1"
ENV RING_BUFFER_SIZE "1000"
ENV CONFIG_FOLDER "./etc"
ENV SOCKET_FOLDER "./tmp"
ENV TCP_LISTENER ""
ENV HTTP_LISTENER "localhost:8091"
ENV DATABASE_FOLDER "./var/lib"
ENV NODE_NAME ""
ENV BROKER_ADDRESS "127.0.0.1:4222"
ENV NATS_CONN_OPT_TIMEOUT "20"
ENV NATS_CONNECT_RETRY_INTERVAL "10"
ENV NATS_RECONNECT_JITTER "100"
ENV NATS_RECONNECT_JITTER_TLS "1"
ENV REQ_KEYS_REQUEST_UPDATE_INTERVAL "60"
ENV REQ_ACL_REQUEST_UPDATE_INTERVAL "60"
ENV PROFILING_PORT ""
ENV PROM_HOST_AND_PORT "127.0.0.1:2111"
ENV DEFAULT_MESSAGE_TIMEOUT 10
ENV DEFAULT_MESSAGE_RETRIES 3
ENV DEFAULT_METHOD_TIMEOUT 10
ENV SUBSCRIBERS_DATA_FOLDER "./var"
ENV CENTRAL_NODE_NAME "central"
ENV ROOT_CA_PATH ""
ENV NKEY_SEED_FILE ""
ENV EXPOSE_DATA_FOLDER "127.0.0.1:8090"
ENV ERROR_MESSAGE_RETRIES 3
ENV ERROR_MESSAGE_TIMEOUT 10
ENV COMPRESSION ""
ENV SERIALIZATION ""
ENV SET_BLOCK_PROFILE_RATE "0"
ENV ENABLE_SOCKET "1"
ENV ENABLE_TUI "0"
ENV ENABLE_SIGNATURE_CHECK "0"
ENV ENABLE_ACL_CHECK "0"
ENV IS_CENTRAL_AUTH "0"
ENV ENABLE_DEBUG "0"
ENV KEEP_PUBLISHERS_ALIVE_FOR "10"

ENV START_PUB_REQ_HELLO 60

ENV ENABLE_KEY_UPDATES "1"
ENV ENABLE_ACL_UPDATES "1"
ENV IS_CENTRAL_ERROR_LOGGER ""
ENV START_SUB_REQ_HELLO ""
ENV START_SUB_REQ_TO_FILE_APPEND ""
ENV START_SUB_REQ_TO_FILE ""
ENV START_SUB_REQ_TO_FILE_NACK ""
ENV START_SUB_REQ_COPY_SRC ""
ENV START_SUB_REQ_COPY_DST ""
ENV START_SUB_REQ_PING ""
ENV START_SUB_REQ_PONG ""
ENV START_SUB_REQ_CLI_COMMAND ""
ENV START_SUB_REQ_TO_CONSOLE ""
ENV START_SUB_REQ_HTTP_GET ""
ENV START_SUB_REQ_HTTP_GET_SCHEDULED ""
ENV START_SUB_REQ_TAIL_FILE ""
ENV START_SUB_REQ_CLI_COMMAND_CONT ""

CMD ["ash","-c","env CONFIGFOLDER=./etc/ /app/steward\
    -ringBufferPersistStore=${RING_BUFFER_PERSIST_STORE}\
    -ringBufferSize=${RING_BUFFER_SIZE}\
    -socketFolder=${SOCKET_FOLDER}\
    -tcpListener=${TCP_LISTENER}\
    -httpListener=${HTTP_LISTENER}\
    -databaseFolder=${DATABASE_FOLDER}\
    -nodeName=${NODE_NAME}\
    -brokerAddress=${BROKER_ADDRESS}\
    -natsConnOptTimeout=${NATS_CONN_OPT_TIMEOUT}\
    -natsConnectRetryInterval=${NATS_CONNECT_RETRY_INTERVAL}\
    -natsReconnectJitter=${NATS_RECONNECT_JITTER}\
    -natsReconnectJitterTLS=${NATS_RECONNECT_JITTER_TLS}\
    -REQKeysRequestUpdateInterval=${REQ_KEYS_REQUEST_UPDATE_INTERVAL}\
    -REQAclRequestUpdateInterval=${REQ_ACL_REQUEST_UPDATE_INTERVAL}\
    -profilingPort=${PROFILING_PORT}\
    -promHostAndPort=${PROM_HOST_AND_PORT}\
    -defaultMessageTimeout=${DEFAULT_MESSAGE_TIMEOUT}\
    -defaultMessageRetries=${DEFAULT_MESSAGE_RETRIES}\
    -defaultMethodTimeout=${DEFAULT_METHOD_TIMEOUT}\
    -subscribersDataFolder=${SUBSCRIBERS_DATA_FOLDER}\
    -centralNodeName=${CENTRAL_NODE_NAME}\
    -rootCAPath=${ROOT_CA_PATH}\
    -nkeySeedFile=${NKEY_SEED_FILE}\
    -exposeDataFolder=${EXPOSE_DATA_FOLDER}\
    -errorMessageRetries=${ERROR_MESSAGE_RETRIES}\
    -errorMessageTimeout=${ERROR_MESSAGE_TIMEOUT}\
    -compression=${COMPRESSION}\
    -serialization=${SERIALIZATION}\
    -setBlockProfileRate=${SET_BLOCK_PROFILE_RATE}\
    -enableSocket=${ENABLE_SOCKET}\
    -enableTUI=${ENABLE_TUI}\
    -enableSignatureCheck=${ENABLE_SIGNATURE_CHECK}\
    -enableAclCheck=${ENABLE_ACL_CHECK}\
    -isCentralAuth=${IS_CENTRAL_AUTH}\
    -enableDebug=${ENABLE_DEBUG}\
    -keepPublishersAliveFor=${KEEP_PUBLISHERS_ALIVE_FOR}\
    -startPubREQHello=${START_PUB_REQ_HELLO}\
    -EnableKeyUpdates=${ENABLE_KEY_UPDATES}\
    -EnableAclUpdates=${ENABLE_ACL_UPDATES}\
    -isCentralErrorLogger=${IS_CENTRAL_ERROR_LOGGER}\
    -startSubREQHello=${START_SUB_REQ_HELLO}\
    -startSubREQToFileAppend=${START_SUB_REQ_TO_FILE_APPEND}\
    -startSubREQToFile=${START_SUB_REQ_TO_FILE}\
    -startSubREQCopySrc=${START_SUB_REQ_COPY_SRC}\
    -startSubREQCopyDst=${START_SUB_REQ_COPY_DST}\
    -startSubREQToFileNACK=${START_SUB_REQ_TO_FILE_NACK}\
    -startSubREQPing=${START_SUB_REQ_PING}\
    -startSubREQPong=${START_SUB_REQ_PONG}\
    -startSubREQCliCommand=${START_SUB_REQ_CLI_COMMAND}\
    -startSubREQToConsole=${START_SUB_REQ_TO_CONSOLE}\
    -startSubREQHttpGet=${START_SUB_REQ_HTTP_GET}\
    -startSubREQHttpGetScheduled=${START_SUB_REQ_HTTP_GET_SCHEDULED}\
    -startSubREQTailFile=${START_SUB_REQ_TAIL_FILE}\
    -startSubREQCliCommandCont=${START_SUB_REQ_CLI_COMMAND_CONT}\
    "]