mnm-hammer

mnm implements TMTP protocol. Let Internet sites message members directly, instead of unreliable, insecure email. Contributors welcome! (Client)

MPL-2.0 License

Stars
69
Committers
1

mnm is not mail

The mnm project is building a legitimate replacement for email: a client (see below), a server, and a simple protocol between them.

Learn more at mnmnotmail.org.

Download the mnm client app

Status

09 March 2021 - the online demo is released. It has been tested on Chrome & Firefox.

03 January 2021 - v0.9 is released. It fixes a panic and a few flaws, but is otherwise identical to v0.8.

15 November 2020 - v0.8 is released for Windows 7+ & MacOS & Linux. Its UI has been tested on Chrome & Firefox. New: Markdown reference panel, "Todo" tag on new threads, menu of filled-form tables, and dozens of other enhancements and fixes.

20 April 2020 - v0.7 is released for Windows 7+ & MacOS & Linux. It has been tested with Chrome & Firefox. New: slide deck layouts, replication to multiple PCs, simplified startup.

20 October 2019 - v0.6 is released for Windows 7+ & MacOS & Linux. It has been tested with Chrome & Firefox. New: search, message tags, file viewer, UI colors, logo, and more. Fixes many UI flaws.

29 May 2019 - v0.5 is released. It fixes a panic on Windows, but is otherwise identical to v0.4.

25 May 2019 - v0.4 is released. It has been tested on Windows 7 & MacOS & Linux, with Firefox. New: Windows support. Fixes a crash-recovery failure, and a TMTP handling error.

13 May 2019 - v0.3 is released. It has been tested on Linux & MacOS, with Firefox. New: tooltips on menu icons. Fixes a panic, and a handful of UI flaws.

07 May 2019 - v0.2 is released. It has been tested on Linux & MacOS, with Firefox. New: a tour with cartoons covering essential features.

19 April 2019 - v0.1 is released. It has been tested on Linux & MacOS, with Firefox.

Version Numbering

Production releases: 1+ . 0 . 0+

Preview releases: pp . 1+ . pp (first & last from prior production release)

The second number is only used for previews. Most (hopefully all) preview features & changes appear in the following production release.

Build & Package

Requires Go 1.13.3+

a) go get github.com/networkimprov/mnm-hammer b) cd $GOPATH/src/github.com/networkimprov/mnm-hammer # project directory can be moved out of $GOPATH c) ./webdeps.sh # download browser modules d) Edit kVersionDate in main.go e) ./pkg.sh # make release downloads for all platforms

Building for Windows requires patches to the Go source (which do not affect other programs): go-winfsd.patch fixes #32088 go-winstat.patch fixes #9611 Apply patches with: cp go*.patch /.../go && (cd /.../go && git apply go*.patch)

Testing

An automated test sequence is defined in test-in.json. It creates accounts Blue and Gold, which then exchange messages. It yields occasional false positives due to loose synchronization between the two accounts. After a test pass completes, the app provides http on port 8123 (unless --http is given): ./mnm-hammer --test server:port # server:port is a TMTP service To access a previous test pass: (cd test-run/TPD/ && ../../mnm-hammer --http :8123) # TPD is a directory name

If the TMTP site at server:port is not configured for optional third party authentication, the test sequence will produce an expect/got message from "local1 local" re "cs" (which can be ignored). The test sequence cannot run against a TMTP site that requires third party authentication.

Crash testing a) ./mnm-hammer --test server:port --crash init # make test directory b) ./mnm-hammer --test server:port --crash dir:service:order:op[:sender:order] # crash here in test sequence c) ./mnm-hammer --test server:port --verify dir:service:order:count # recover and verify result

./test-crash.sh server:port [ item_index ] # collection of crash/verify runs in single directory

Code Coverage

a) go test -c -covermode=count -coverpkg ./... b) go build c) ./mnm-hammer.test --test localhost:443 -test.coverprofile mnm-hammer.cov . . . # this test pass directory is TPD below d) go tool cover -html=test-run/TPD/mnm-hammer.cov -o web/coverage.html e) (cd test-run/TPD/ && ../../mnm-hammer --http :8123) f) Open a browser tab, go to localhost:8123/w/coverage.html

Ref: https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests

Demo Files

To generate the demo files: a) cp web/{gui.vue,service-demo.html} b) cp web/docs{,-demo}.html c) git apply web/*demo.patch

To recreate the web/...-demo.patch files after changing the demo files: a) git diff --no-index web/gui.vue web/service-demo.html > web/service-demo.patch b) git diff --no-index web/docs.html web/docs-demo.html > web/docs-demo.patch c) Edit the patches to use a/web/...-demo.html as the origin path.

To create a JSON object for use in web/data-demo.js from an mnm client instance: a) Edit web/gui.vue to insert <script src="/w/demodata.js"></script> after all other <head> scripts. b) Quit and restart the app, then Shift-Reload the page at http://localhost:8123. c) Invoke http://localhost:8123/#demodata and wait while it steps through each account. d) Open the web console and copy the JSON result.

License

Copyright 2018, 2020 Liam Breck Published at https://github.com/networkimprov/mnm-hammer

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/