BitMaelum software suite

Overview

logo

Go Report Card BitMaelum CI Coverage Status License GitHub go.mod Go version CII Best Practices Discourse Maintainability Rating


Image if we could redesign email without thinking about backward compatibility. What would it look like? Could we solve the problems we face nowadays like spam, email forgery, phishing emails and, maybe the most important one: privacy?

BitMaelum (old Anglo-Saxon for "bit-by-bit") is an attempt. Instead of trying to figure out how to fix email, we are building a new email system from the ground up. This way, we can design the system to solve mail problems at its core instead of trying to patch up an insecure foundation.

New to BitMaelum? Take a 5-minute tour to read what it is about.

Quickstart

To start with BitMaelum right away, check out Quickstart guide.

To build and test BitMaelum, check out build document.

Join us on our discourse forum: https://discourse.bitmaelum.com

Features

BitMaelum tries to be a system that:

  • Will be designed with privacy first
  • Deal with less to no spam at all
  • Nullifies mail address harvesting (it becomes a useless effort)
  • Host your mail wherever you like
  • Move your messages to another provider without losing your mail address
  • Allows that only you can subscribe and unsubscribe from mailing lists
  • Slow connection / mobile friendly

For more features, please take a look at our wiki

Development

BitMaelum is highly experimental and under heavy development. Do not use it yet in any production environment. We invite early-adopters to try out the system and contribute by testing.


https://bitmaelum.com/logo_and_name.svg.

Issues
  • See if we can get rid of the scary opentelemetry package

    See if we can get rid of the scary opentelemetry package

    Some package we use, depends on opentelemetry.. this sounds scary (even though harmless, as we don't do any telemetry whatsoever).

    Just to make sure we don't get strange discussions, see if we can remove it somehow..

    opened by jaytaph 4
  • bm-client vault parameters are not clear

    bm-client vault parameters are not clear

    Describe the bug While trying to create a new vault on a specified file the parameters will induce to an error

    To Reproduce

    $ ./bm-client --vault test.vault vault init
    
    Vault already exists. Use --path to create a new vault on a specific path.
    
    $ ./bm-client --vault test.vault vault init --path .
    
    Please enter your new vault password:
    Please retype your new vault password:
    error: cannot create vault:  rename . ..backup: device or resource busy
    

    However this works

    $ ./bm-client  vault init --path test.vault
    
    Please enter your new vault password:
    Please retype your new vault password:
    successfully created a new vault at  test.vault
    

    Expected behavior Either --path or --vault should be used as parameter but not both

    opened by acalatrava 3
  • Resolver changes

    Resolver changes

    Fixes #200

    • Changed the configuration into a more robust resolver configuration system
    • allows to configure the resolvers
    • setting a default_resolver that always works (or gives an error during startup)
    • chaining is only done when asked, and will error when no entries are configured on the chain
    opened by jaytaph 2
  • Updated changelog

    Updated changelog

    Updated changelog to describe the latest changes

    - Service support: Now you can install both bm-bridge and bm-server as system services using bm-config
    - bm-bridge: It now uses a config file instead of parameters
    - bm-bridge: Support for mail relay (aka gateway mode) for organizations, this way an organization can "host" using the BitMaelum protocol.
    
    opened by acalatrava 2
  • Run bm-bridge and bm-server as a service

    Run bm-bridge and bm-server as a service

    This will allow to install a service to run bm-server or bm-bridge automatically.

    It will also use now a config file for bm-bridge and add support to run bm-bridge in your own organization, this way you can host your own mailgateway! account to translate BitMaelum messages to email addresses on your own organization.

    opened by acalatrava 2
  • bm-imap and bm-smtp

    bm-imap and bm-smtp

    opened by jaytaph 2
  • Multi-recipients

    Multi-recipients

    Implement the multi-recipient setup (see wiki https://github.com/bitmaelum/bitmaelum-suite/wiki/Multiple-recipients-(CC-and-BCC) and https://github.com/bitmaelum/bitmaelum-suite/wiki/Proposal-multi-recipients).

    • [ ] delivery pool configurable pool of workers that will deliver a block either remotely or locally.
    • [ ] proof-of-work pool this pool will either create a proof-of-work ticket, or returns quickly with a "in-progress" status. it should cache tickets so we can later fetch the ticket for uploading other blocks as well.
    • [ ] setup receiving side that will push blocks to the queue
    • [ ] update ticket system on client and server side to add extra info (header, blocks etc)
    func createPool() {
      for i:=0; i!=25; i++ {
        go poolWorker()
      }
    }
    func poolWorker() {
      for {
        data <- queueChannel
        ticket := ticketPool.getTicket(data.Header)
        if ticket == nil {
            // requeue data for later when the ticket is finished
            queueChannel <- data
            continue
        }
        deliver(data.Header, data.Block) // or catalog, or attachment)
    }
    
    opened by jaytaph 0
  • Validate all errors

    Validate all errors

    We should not discard errors with _, but handle them accordingly.

    All code should handle errors. If there is a solid reason not to do this then document on the line why this is not checked. Test code is allowed to disregard errors.

    good first issue code-cleanup 
    opened by jaytaph 0
  • Revoke your account/keys

    Revoke your account/keys

    Proposal: we do a soft-delete (deleted_at column to the db). Later we can see if we want to hard-delete old records (say > 6months)

    We also need some kind of tool: bm-client account revoke or something?

    ready for implementation 
    opened by jaytaph 1
  • Make sure we cannot register organisation accounts to whereever we like

    Make sure we cannot register organisation accounts to whereever we like

    There are two ways to register an account to a mail server:

    • server invitation token
    • organisation invitation token

    it's not possible to register on a server that you don't have permission from with a server token. However, it's possible to register on EACH server as long as you have an organisation token. This means we can register wherever we want with just a (random) organisation token.

    In order to mitigate this, we can actually authorize the request by somehow tying the organisation token with the server. THis would result in things like having the organisation token signed by the mail server, but this makes the number of steps to actually register a bit too many.

    Instead, we could for now have a sort of "whitelist" on the server. Inside the config, or in redis, we can add a list of organisations which we want to register for. If we register an account with an org-token, we not only check if the org-token is valid, but also check if the org is whitelisted on this server. If not, we cannot register.

    THis is for now a sort of fallback until we can come up with something better (maybe OOB between server and organisation?)

    needs discussion 
    opened by jaytaph 1
  • Rekey message headers with a new private key.

    Rekey message headers with a new private key.

    It should be possible to rekey files with a new key if you rotate the key.

    This would mean that we need to download ALL headers, rekey each header and upload the header again.

    low prio 
    opened by jaytaph 0
Releases(v0.0.0)
Owner
BitMaelum
A proof-of-concept mail system - Privacy is yours again
BitMaelum
A suite of microservices for software-defined networking (SDN) and bare-metal provisioning

M3L is a suite of microservices for software-defined networking (SDN) and bare-metal provisioning, which store their data as Custom Resources in Kubernetes.

Nicklas Frahm 0 Jan 19, 2022
Suite of libraries for IoT devices (written in Go), experimental for x/exp/io

Go libraries/drivers for IoT devices This repo contains a suite of libraries for IoT devices/sensors/actuators. The suite is meant to be as dependency

Go IoT 254 Jun 2, 2022
Cossack Labs 1k Jun 22, 2022
Windows helpers for GnuPG tools suite - OpenSSH, WSL 1, WSL2, Cygwin, MSYS2, Git4Windows, Putty...

win-gpg-agent Simple set of tools to make working with GPG and SSH keys easier on Windows 10. Windows 10 has ssh-agent service (with support for persi

rupor 193 Jun 26, 2022
A suite of gRPC debugging tools. Like Fiddler/Charles but for gRPC.

grpc-tools A suite of tools for gRPC debugging and development. Like Fiddler/Charles but for gRPC! The main tool is grpc-dump which transparently inte

Bradley Kemp 1.1k Jun 23, 2022
Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.

Process Monitor for Linux (Preview) Process Monitor (Procmon) is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools

Windows Sysinternals 3.3k Jun 25, 2022
Gerasimos (Makis) Maropoulos 22.5k Jun 26, 2022
Extremely flexible golang deep comparison, extends the go testing package, tests HTTP APIs and provides tests suite

go-testdeep Extremely flexible golang deep comparison, extends the go testing package. Latest news Synopsis Description Installation Functions Availab

Maxime Soulé 305 Jun 29, 2022
A tool suite for Redis profiling

Insecticide Insecticide is a tool suite for Redis profiling. It finds ambiguous values in your redis configuration.

Сити-Мобил 8 Dec 13, 2021
A suite of tools for NFT generative art.

nftool A suite of tools for NFT generative art. Features Traits/Attributes/Properties Generation Configure custom rarity Generate collection attribute

Aleph Retamal 132 Jun 18, 2022
A benchmark suite aims to compare the performance of HTTP request routers for Go

Go HTTP Router Benchmark This benchmark suite aims to compare the performance of HTTP request routers for Go by implementing the routing structure of

null 3 Oct 25, 2021
The test suite to demonstrate the chaos experiment behavior in different scenarios

Litmus-E2E The goal of litmus e2e is to provide the test suite to demonstrate the chaos experiment behavior in different scenarios. As the name sugges

Vedant Shrotria 0 Jan 4, 2022
Package zaperations provides a Google Cloud operations suite (formerly Stackdriver) compatible config for the uber-go/zap logger.

Package zaperations provides a Google Cloud Operations (formerly Stackdriver) compatible config for the excellent uber-go/zap logger. Example This exa

Wayne 0 Nov 6, 2021
An HTTP request routing benchmark suite for Go.

Go HTTP Request Routing Benchmark An HTTP request routing benchmark suite for Go. Results goos: linux goarch: amd64 pkg: github.com/aofei/go-http-requ

Aofei Sheng 5 Dec 14, 2021
Randomdata : a tiny help suite for generating random data

go-randomdata randomdata is a tiny help suite for generating random data such as first names (male or female) last names full names (male or female) c

Kalyan Janumpally 0 Dec 5, 2021
Bitcoin UTXO & xPub Management Suite

BUX Bitcoin UTXO & xPub Management Suite Table of Contents About Installation Documentation Examples & Tests Benchmarks Code Standards Usage Contribut

BUX 12 Jun 21, 2022
Fix Burp Suite's horrible TLS stack & spoof any browser fingerprint

Awesome TLS This extension hijacks Burp's HTTP and TLS stack to make it more powerful and less prone to fingerprinting by all kinds of WAFs. It does t

Sleeyax 57 Jun 26, 2022
Conception was an experimental project, looking for ways to make software development more efficient.

Conception Note: All future development is done in the Go version. Conception is an experimental research project, meant to become a modern IDE/Langua

null 528 Jun 1, 2022
Software Transactional Locks

Software Transactional Locks Package stl provides multiple atomic dynamic shared/exclusive locks, based on Software Transactional Memory (STM) concurr

Grigory Zubankov 24 Mar 13, 2022
Uniqush is a free and open source software system which provides a unified push service for server side notification to apps on mobile devices.

Homepage Download Blog/News @uniqush Introduction Uniqush (\ˈyü-nə-ku̇sh\ "uni" pronounced as in "unified", and "qush" pronounced as in "cushion") is

Uniqush 1.4k Jun 20, 2022
Secure software enclave for storage of sensitive information in memory.

MemGuard Software enclave for storage of sensitive information in memory. This package attempts to reduce the likelihood of sensitive data being expos

Awn 2.2k Jun 24, 2022
A codename generator meant for naming software releases.

codename-generator This library written in Golang generates a random code name meant for naming software releases if you run short of inspiration. Cur

Jonathan Gautheron 22 Jun 26, 2022
Golang (Go) bindings for GNU's gettext (http://www.gnu.org/software/gettext/)

gosexy/gettext Go bindings for GNU gettext, an internationalization and localization library for writing multilingual systems. Requeriments GNU gettex

Go toolbelt 61 Jun 6, 2022
A client software for acme-dns with emphasis on usability and guidance through setup and additional security safeguard mechanisms

acme-dns-client A client software for acme-dns with emphasis on usability and guidance through setup and additional security safeguard mechanisms. It

null 60 Jun 9, 2022
oDrop, a fast efficient cross-platform file transfer software for server and home environments

oDrop is a cross-platform LAN file transfer software to efficiently transfer files between computers, oDrop is useful in environments where GUI is not available.

Flew Software 16 Jun 4, 2022
F' - A flight software and embedded systems framework

F´ (F Prime) is a component-driven framework that enables rapid development and deployment of spaceflight and other embedded software applications.

NASA 8.9k Jun 28, 2022
Get cloud instances with your favourite software pre-loaded

This Golang package can be used to provision cloud hosts using a simple CRUD-style API along with a cloud-init user-data script. It could be used to automate anything from k3s clusters, to blogs, or CI runners. We use it to create the cheapest possible hosts in the cloud with a public IP address.

inlets 31 Jun 24, 2022
Continuous performance analysis reports for software projects 🤖

Performabot Welcome to Performabot! This little helper can be used to provide Continuous Performance Reports within your GitHub project. But please be

Sascha Grunert 40 Feb 24, 2021
A small utility that aims to automate and simplify some tasks related to software release cycles.

Stork is a small utility that aims to automate and simplify some tasks related to software release cycles such as reading the current version from a f

Simone Margaritelli 42 Apr 12, 2022