Initial commit

This commit is contained in:
2020-04-17 17:53:01 +02:00
commit 423843c2d7
49 changed files with 9669 additions and 0 deletions

27
misc/docker/Dockerfile Normal file
View File

@ -0,0 +1,27 @@
FROM golang:1.13 AS build
ARG HTTP_PROXY=
ARG HTTPS_PROXY=
ARG http_proxy=
ARG https_proxy=
RUN apt-get update && apt-get install -y build-essential git bash curl
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs
COPY . /src
WORKDIR /src
RUN npm install \
&& make vendor \
&& make ARCH_TARGETS=amd64 release
FROM busybox
COPY --from=build /src/release/fake-smtp-linux-amd64 /app
WORKDIR /app
CMD ["bin/fake-smtp", "--config", "fake-smtp.yml"]

BIN
misc/preview/fake-smtp.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

123
misc/script/release.sh Executable file
View File

@ -0,0 +1,123 @@
#!/bin/bash
set -eo pipefail
OS_TARGETS=( linux )
ARCH_TARGETS=${ARCH_TARGETS:-amd64 arm 386}
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
PROJECT_DIR="$DIR/../.."
function build {
local name=$1
local srcdir=$2
local os=$3
local arch=$4
local dirname="$name-$os-$arch"
local destdir="$PROJECT_DIR/release/$dirname"
rm -rf "$destdir"
mkdir -p "$destdir"
echo "building $dirname..."
CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build \
-mod=vendor \
-ldflags="-s -w -X 'main.GitRef=$(current_commit_ref)' -X 'main.ProjectVersion=$(current_version)' -X 'main.BuildDate=$(current_date)'" \
-gcflags=-trimpath="${PWD}" \
-asmflags=-trimpath="${PWD}" \
-o "$destdir/bin/$name" \
"$srcdir"
if [ ! -z "$(which upx)" ]; then
upx --best "$destdir/bin/$name"
fi
}
function current_date {
date '+%Y-%m-%d %H:%M'
}
function current_commit_ref {
git log -n 1 --pretty="format:%h"
}
function current_version {
local latest_tag=$(git describe --abbrev=0 2>/dev/null)
echo ${latest_tag:-0.0.0}
}
function copy {
local name=$1
local os=$2
local arch=$3
local src=$4
local dest=$5
local dirname="$name-$os-$arch"
local destdir="$PROJECT_DIR/release/$dirname"
echo "copying '$src' to '$destdir/$dest'..."
mkdir -p "$(dirname $destdir/$dest)"
cp -rfL $src "$destdir/$dest"
}
function dump_default_conf {
# Generate and copy configuration file
local command=$1
local os=$2
local arch=$3
local tmp_conf=$(mktemp)
go run "$PROJECT_DIR/cmd/$command" -dump-config > "$tmp_conf"
copy "$command" $os $arch "$tmp_conf" "$command.yml"
rm -f "$tmp_conf"
}
function compress {
local name=$1
local os=$2
local arch=$3
local dirname="$name-$os-$arch"
local destdir="$PROJECT_DIR/release/$dirname"
echo "compressing $dirname..."
tar -czf "$destdir.tar.gz" -C "$destdir/../" "$dirname"
}
function release_fakesmtp {
local os=$1
local arch=$2
build 'fake-smtp' "$PROJECT_DIR/cmd/fake-smtp" $os $arch
dump_default_conf 'fake-smtp' $os $arch
copy 'fake-smtp' $os $arch "$PROJECT_DIR/README.md" "README.md"
copy 'fake-smtp' $os $arch "$PROJECT_DIR/cmd/fake-smtp/public/dist" "public"
copy 'fake-smtp' $os $arch "$PROJECT_DIR/cmd/fake-smtp/template" "template"
compress 'fake-smtp' $os $arch
}
function main {
for os in ${OS_TARGETS[@]}; do
for arch in ${ARCH_TARGETS[@]}; do
release_fakesmtp $os $arch
done
done
}
main

21
misc/script/test-smtp.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
for i in {1..10}; do
mailx -S v15-compat \
-S mta=smtp://fakesmtp:fakesmtp@127.0.0.1:2525 \
-s "Test ${i}" \
-a README.md \
-a package.json \
foo_${i}@bar_${i}.com \
<<EOF
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget metus ornare, placerat mi nec, ornare magna. Vivamus volutpat nisi et aliquet mollis. Phasellus eu malesuada erat, vel molestie ipsum. Etiam tincidunt ligula eget scelerisque blandit. Vivamus nec quam vitae felis rutrum cursus a eget elit. Integer vestibulum ultrices iaculis. Integer varius sapien ac ante accumsan euismod. Quisque fermentum dui nec porttitor pellentesque. Vivamus lobortis mauris eget metus sagittis tempor.
Donec eget urna mi. Suspendisse euismod viverra orci, a dictum nunc aliquet id. Nullam egestas metus nec quam convallis, ut faucibus massa placerat. Donec tincidunt ante scelerisque odio egestas, eget consectetur tortor cursus. Pellentesque id maximus elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada nibh congue, ultricies erat consequat, varius metus. Duis venenatis purus in magna condimentum rhoncus. Curabitur consectetur ut nunc at molestie. Cras convallis ante rhoncus turpis dictum placerat. Maecenas condimentum mollis nisl eu blandit. Duis facilisis felis mollis diam blandit eleifend.
Nam ultrices diam purus, sit amet blandit mi suscipit vel. Fusce lacus dui, ultricies et velit et, ornare vestibulum tellus. Proin varius leo ac nulla posuere, ut aliquam purus gravida. Nam quis sollicitudin nisi. Phasellus ut nunc odio. Vestibulum at nisl urna. Pellentesque sed fringilla lorem, aliquam laoreet quam. Pellentesque aliquam varius neque eu maximus. Proin dictum purus sed nisl tincidunt, in gravida tortor posuere. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed consequat urna sed turpis egestas, et malesuada elit porttitor. Ut ac quam mi. Nunc facilisis libero a sapien fringilla efficitur. Vestibulum placerat dictum faucibus. Curabitur at efficitur mauris.
Aliquam tortor felis, efficitur sed imperdiet imperdiet, fermentum mattis metus. Cras interdum, turpis ut tincidunt volutpat, massa purus aliquet turpis, non tempus purus arcu ac nunc. Vivamus venenatis turpis ut commodo ultrices. Proin elementum ultrices orci eu imperdiet. Nunc ac quam tortor. Nam et magna elit. Praesent commodo mollis quam, vel rutrum urna dapibus nec. Nulla ipsum nibh, rhoncus nec volutpat eu, sodales eu purus. Sed elit justo, rutrum ut quam at, commodo ultricies ex. Donec facilisis massa vitae lacus aliquet, eget rhoncus nisl congue.
In hac habitasse platea dictumst. Morbi sagittis, arcu eu interdum dignissim, lectus enim mattis purus, feugiat porta felis ipsum a purus. Nunc consectetur sed urna sit amet varius. In viverra ante nunc, in faucibus ante posuere sit amet. Duis rutrum pulvinar odio a sagittis. Ut in tincidunt massa. Proin elit augue, porta non lacus at, dignissim efficitur sem. Etiam placerat, orci vitae auctor vulputate, leo erat rhoncus leo, a ullamcorper quam sapien at lectus. Suspendisse potenti. Donec tincidunt sed arcu at ornare. Donec ac neque urna. Cras vel ante id leo posuere rhoncus et vitae risus. Vivamus enim augue, euismod non viverra quis, vulputate in massa. Morbi vestibulum ac neque eget aliquet. Sed ultrices ante ac lorem pharetra, pretium ornare leo imperdiet. Sed eleifend pulvinar erat vitae scelerisque.
EOF
done

View File

@ -0,0 +1,11 @@
[Unit]
Description=fake-smtp
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/fake-smtp -workdir /usr/local/share/fake-smtp -config /etc/fake-smtp/config.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target